haxproxy+lvs+keepalived
三者区别
http://www.webzuan.cn/szk/5485.html
lvs认识
https://baijiahao.baidu.com/s?id=1698090190624697503&wfr=spider&for=pc
https://www.zsythink.net/archives/2134
lvs+keepalived高可用
https://blog.csdn.net/Ryougi_Shiki_uio/article/details/119112435,https://www.linuxprobe.com/linux-lvs-build.html
目前网站一般采用haproxy/nginx+keepalived,如果是web建议使用nginx,mysql、mycat等其他应用建议使用haproxy,负载均衡性能方面lvs>haproxy>nginx
ipvsadm是lvs的管理工具(lvs一般采用nat模式下的wrr算法),keepalived基于lvs实现,但是lvs只是做了负载均衡,keepalived做故障转移
配置
参考:https://www.cnblogs.com/blxt/p/13099424.html
1.因为lvs是基于内核的,因此先查看内核是否加载了ipvs模块
#查看结果lsmod |grep ip_vs
ip_vs 125220 0
libcrc32c 1246 1 ip_vs
ipv6 317340 78 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
#如果没有上述信息,使用modprobe ip_vs进行加载
2.lvs服务器下载ipvsadm模块:yum install ipvsadm
3.在lvs服务器配置vip(可使用ip addr add xxx命令,也可直接添加网卡文件)
4.lvs服务器配置命令如下:
ipvsadm -At 172.168.11.12:80 -s rr #添加虚拟服务(这个ip是3中得到的),rr为轮询算法
ipvsadm -at 172.168.11.12:80 -r 192.168.11.253:80 -m #增加一个realserver
ipvsadm -at 172.168.11.12:80 -r 192.168.11.252:80 -m #再增加一个realserver
5.客户机(任意)测试连通性
#1.测试连通性(ping不通需要添加路由,因为这个ip是虚拟的,ip route add 100.222.111.1 via 1.65.15.141 dev ens32)
ping -c 172.168.11.12:80
6.验证service
[root@cli ~]# curl -m 15 --retry 1 -sSL 172.168.11.12:80`
curl: (28) Connection timed out after 15001 milliseconds
[root@cli ~]#
此时会抓包会发现丢包现象(正常情况:客户机-vip-rip,rip-vip-客户机,且seq不为0)
7.iptables配置地址伪装(修改后如下图),伪装vip为源ip,因为抓包过程中vip无法正常到达rip节点
[root@lvs ~]# iptables -t nat -A POSTROUTING -m ipvs --vaddr 100.222.111.1 --vport 8000 -j MASQUERADE
[root@lvs ~]# iptables -t mangle -A POSTROUTING -m ipvs --vaddr 100.222.111.1 --vport 8000 -j LOG --log-prefix '[k8svip ipvs]'
[root@lvs ~]# sysctl net.ipv4.vs.conntrack=1
常用配置参数
ipvsadm 常用配置参数
-A 添加虚拟服务VIP
-D 删除虚拟服务VIP
-L 查看虚拟服务VIP
-C 清除所有虚拟服务VIP
-t 指定虚拟服务及端口 VIP:Port
-r 指定真实服务及端口 RS:Port
-s 指定算法,rr(轮询)、wrr(加权轮询)、lc(最少连接)、sh(源地址散列)、dh(目标地址散列) 等等
-w 指定权重
-m 指定转发模式为NAT
-g 指定转发模式为DR(此处的真实服务器要添加LVS中相同的vip)
-i 指定转发模式为IPIP隧道
如果lvs服务器上有80端口的http服务,lvs是会覆盖的,因为LVS的优先级>http
问题:
- 配置好之后只能在lvs所在服务上curl,浏览器包括其他linux服务器无法curl通(已解决:上述iptables地址伪装)
- 启动之后netstat -tunlp无法查到对应端口(基于内核,只做端口ip转发,不走流量)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律