神仙chao's

一些工作上的笔记和胡乱的想法......

要在 Nginx 的 upstream 配置中使用基于客户端 IP 地址的会话保持(即 Sticky Session),可以结合 hash 方法来实现。通过 hash 指令,我们可以根据客户端的 IP 地址将请求路由到特定的后端服务器,以确保来自同一客户端的请求始终路由到同一个后端服务器。

配置步骤:

1、基于客户端 IP 的 upstream 配置:

  • 在 upstream 块中,使用 hash 指令指定基于 IP 地址的会话保持。通常会使用 $clientRealIp 变量(上面提到的客户端真实 IP)来进行 IP 哈希。

2、确保提取到正确的客户端 IP 地址:

  • 使用之前的 map 配置来提取客户端的真实 IP 地址并存储在 $clientRealIp 变量中。

3、配置 upstream 使用 hash:

  • 使用 hash 指令来基于 $clientRealIp 进行负载均衡,并确保同一客户端的请求始终路由到同一个后端服务器。

示例配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 使用 map 提取客户端的真实 IP 地址
map $http_x_forwarded_for $clientRealIp {
"" $remote_addr; # 如果 X-Forwarded-For 为空,使用 remote_addr(即客户端的 IP)
~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr; # 提取 X-Forwarded-For 头中的第一个 IP 地址
}


# upstream 配置,基于客户端 IP 进行会话保持
upstream backend {
hash $clientRealIp consistent; # 基于 $clientRealIp 进行哈希负载均衡
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}

server {
listen 80;

location / {
# 设置客户端的真实 IP 地址
set_real_ip_from 0.0.0.0/0; # 允许所有 IP 地址作为可信代理
real_ip_header X-Forwarded-For;
real_ip_recursive on; # 启用递归解析 X-Forwarded-For 中的所有代理

# 代理请求到 upstream
proxy_pass http://backend;
}
}

解析配置:

1、map 指令:

  • 这里的 map 配置确保我们从 X-Forwarded-For 头中提取到客户端的真实 IP 地址,并将其存储在 $clientRealIp 变量中。

2、hash 指令:

  • 在 upstream 块中,我们使用 hash $clientRealIp 来基于客户端的真实 IP 地址进行负载均衡。consistent 是一致性哈希策略,确保相同的客户端 IP 会被路由到同一个后端服务器。

  • 你可以选择其他哈希策略(例如 zone,key),但是一致性哈希通常能提供更好的会话保持效果。

3、set_real_ip_from 和 real_ip_header:

  • 这些指令告诉 Nginx 使用 X-Forwarded-For 头来获取客户端的真实 IP 地址,而不是直接使用连接的 IP 地址(即代理服务器的 IP)。

  • real_ip_recursive on 启用递归解析,确保你获取的是最初的客户端 IP,而不是中间代理的 IP。

4、proxy_pass:

  • 最后,所有请求都通过 proxy_pass 代理到名为 backend 的 upstream 块。基于客户端的真实 IP,Nginx 会决定将请求路由到哪个后端服务器。

会话保持原理:

  • 哈希机制:每次请求时,Nginx 会计算 $clientRealIp 的哈希值,并根据哈希值决定将请求分发到哪个后端服务器。如果相同的客户端(即具有相同的 IP 地址)再次发送请求,它会被路由到相同的后端服务器。

  • 一致性哈希:一致性哈希算法确保即使有服务器节点的变动(如新增、删除后端服务器),已经分配给客户端的服务器节点尽量不发生变化,从而避免大量的请求重新分配。

其他考虑:

  • IP 地址变化:如果客户端的 IP 地址发生变化(例如使用了动态 IP 或代理服务器改变了 X-Forwarded-For 的值),可能会影响会话保持。

  • X-Forwarded-For 头的篡改:要确保信任的代理服务器正确设置 X-Forwarded-For 头,以避免客户端伪造 IP 地址。

通过这种方式,你就能在 Nginx 中实现基于 IP 地址的会话保持,确保相同的客户端始终访问同一台后端服务器。

小朋友名字的由来

昨天小朋友回来说有个作业,要对写下自己名字的寓意

1
言人之善,泽于膏沐;言人之恶,痛于矛戟。为善不直,必终其曲;为丑不释,必终其恶。

archlinux中对wechat的字体修改

一直不是很满意默认wechat的默认中文字体,但又找不到修改的地方,于是尝试了修改字体。

修改字体

在.config/fontconfig目录下fonts.conf中添加如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

<!-- 全局默认 sans-serif 字体改为 TsangerJinKai01 -->
<alias>
<family>sans-serif</family>
<prefer>
<family>TsangerJinKai01</family>
</prefer>
</alias>

<!-- 中文字体替换优先级 -->
<match>
<test name="lang" compare="contains">
<string>zh</string>
</test>
<edit name="family" mode="prepend" binding="strong">
<string>TsangerJinKai01</string>
</edit>
</match>

</fontconfig>
完美!!!


qdrant适配鲲鹏920麒麟系统

项目中遇到的一个qdrant适配兼容的问题的解决办法,记录一下

遇到的问题

项目组反馈在信创环境中部署大模型产品时遇到: Unsupported system page size问题

系统环境为:

硬件:Kunpeng920

系统:Kylin-4.19.88

PAGE_SIZE为65535

79d86edfdf02370e4ccd075bf3b518ca

搜搜Issues,问题还是挺多的,但大多都是建议自己加JEMALLOC_SYS_WITH_LG_SIZE=16来解决。

阅读全文 »

ARM环境中编译安装mysql5.7.44数据库

编译环境准备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
yum install -y cmake bison flex libaio-devel numactl-devel openssl-devel gcc gcc-c++ libtirpc-devel ncurses-devel

wget https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4/rpcsvc-proto-1.4.tar.gz
tar xf rpcsvc-proto-1.4.tar.gz
cd rpcsvc-proto-1.4
./configure
make
make install

下载指定的boost,5.7需要用到1.59.0这个版本,下载地址
https://sourceforge.net/projects/boost/files/boost/1.59.0/

cp boost_1_59_0.tar.gz /tmp/

解压安装包

1
tar xvf mysql-5.7.44.tar.gz

创建并进入编译目录

1
2
3
cd mysql-5.7.44
mkdir build
cd build

阅读全文 »

TrafficServer常用配置记录

项目上经常会用到trafficserver来作为缓存服务,下面的一些配置是项目中经常使用到的一些配置,记录一下。

Traffic Server 是一个高性能的开源反向代理和缓存服务器,由 Apache 基金会开发和维护。它被设计用于提供高吞吐量、低延迟的 Web 服务,并且非常适合作为反向代理、缓存和负载均衡器使用。

Traffic Server 的主要特点和功能包括:

  1. 反向代理:Traffic Server 可以作为反向代理服务器,接收客户端请求,并将请求转发到后端服务器。它能够处理大量并发连接,并提供高性能的请求转发和响应处理。
  2. 缓存:Traffic Server 支持强大的缓存功能,可以缓存静态和动态内容,以减轻后端服务器的负载并提高响应速度。它能够根据缓存策略、响应头和其他规则来决定哪些内容可以缓存,以及如何处理缓存中的内容。
  3. 内容路由和负载均衡:Traffic Server 可以根据配置的规则将请求路由到不同的后端服务器,实现负载均衡和流量分发。它支持多种负载均衡算法和健康检查机制,以确保请求被平均分配到可用的服务器上。
  4. Web 加速:Traffic Server 提供了多种技术和功能,用于加速 Web 服务的响应速度。它支持 HTTP/2、HTTP/3、TLS 加速、压缩、请求合并和优化,以及其他性能优化技术,从而提供更快的网页加载和更好的用户体验。
  5. 高可用性和可扩展性:Traffic Server 具有高可用性和可扩展性的特性。它支持多台服务器的集群部署,可以通过添加更多的实例来扩展处理能力。此外,Traffic Server 还提供了故障转移和容错机制,以确保服务的连续性和可用性。

Traffic Server 是一个功能强大且灵活的反向代理和缓存服务器,适用于高负载的 Web 环境。它被广泛应用于大型网站、内容分发网络(CDN)、广告网络和其他需要高性能和可扩展性的应用场景。

阅读全文 »

背景

项目中由于会使用到minio对象存储,在需要满足项目多点灾备的情况下,记录下使用mirror和replicate来实现minio同步和镜像的相关功能,作为后续配置参考。

mirror和replicate的区别

mc mirror 用于在两个minio server中的桶之间进行数据同步。mc mirror 命令类似于 Unix rsync 命令,会对源和目标地址进行比较,并只将新增或修改的内容从源复制到目标,可以实现将源目录快速同步到目标目录。

mc replicate 用于配置 Minio 服务器上的桶(replication rules)用于在区域间自动复制对象。这通常用于地理冗余和跨区域数据复制。最大的优势是在源桶和目标桶之间实现自动、异步的对象复制。

阅读全文 »

背景

项目中很多时候需要使用nginx类服务作为反向代理来打通不同业务的互相访问使用,一般情况下项目中会直接使用到nginx的proxy模块来实现业务的反向代理,近年来国家高度重视网络安全,各类的安全渗透扫描测试层出不穷,项目上如果没有专门配置安全管理员或安全类工程师的情况下,nginx很容易会被识别为网络攻击发起者,为消除不必要的误会,以下就如何加强反向代理服务的安全性、维护反向代理自身API接口安全合理性进行。

阅读全文 »

微服务架构中的进程间通信

关键字:

  • 通信模式的具体应用:应用过程调用、断路器、客户端发现、自注册、服务端发现、第三方注册、异步消息、事务性发件箱、事务日志拖尾、轮询发布者
  • 进程间通信在微服务架构中的重要性
  • 定义和演化API
  • 如何在各种进程间通信技术之间进行权衡
  • 使用异步消息对服务的好处
  • 把消息作为数据库事务的一部分可靠发送

  1. 行动力量:任何事情的实现都需要付诸实际行动,没有行动就没有结果。无论目标多么宏大,都需要从小小的第一步开始,并持续努力。
  2. 勇于起步:在追求梦想或目标时,往往会面临不确定性和困难。然而,只有勇于迈出第一步,才有可能走向成功的旅程。
  3. 持之以恒:长远的目标需要坚持不懈地努力,不断迈进。无论遇到多少困难和挫折,只要始终坚持下去,就能逐渐迈向胜利。
  4. 真正的起点:尽管旅程可能很长,但真正的起点是当前的位置和现实条件。要从现状出发,不断积累经验和知识,为实现更大的目标做好准备。
0%