- 环境准备(单LB模式)
hostname | ip | 用途说明 |
---|---|---|
LB1 | 192.168.137.128 | 负载均衡器节点 |
web1 | 192.168.137.129 | 后端web服务器节点 |
web2 | 192.168.137.130 | 后端web服务器节点 |
VIP | 192.168.137.150 | 接收客户端请求的ip |
- LB节点安装ipvsadm
# 安装ipvs的管理客户端ipvsadm
yum install ipvsadm -y
# 检查内核中是否有ip_vs模块,如没有需手动执行ipvsadm或modprobe ip_vs
[root@test01 ~]# lsmod | grep ip_vs
ip_vs_rr 12600 1
ip_vs 145497 3 ip_vs_rr
nf_conntrack 139264 7 ip_vs,nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ipv4
# 手动创建VIP
[root@test01 ~]# ip addr add 192.168.137.150/24 dev ens33 label ens33:0
# ipvsadm常用参数配置
ipvsadm --help
--clear -C 清空所有配置表
--add-service -A 添加一个虚拟Server,即VIP
--add-server -a 添加一个真实Server,即RS
--gatewaying -g 配置DR的工作模式,默认为DR。(direct routing) (default)
--ipip -i 配置Tunnel模式。ipip encapsulation (tunneling)
--masquerading -m 配置NAT模式。masquerading (NAT)
--weight -w weight RS的权重capacity of real server
--tcp-service -t service-address 设置服务地址及端口
--scheduler -s scheduler 指定一个调度算法[rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq],
--set tcp tcpfin udp 设置这三个值的连接超时时间
--list -L|-l 列出配置表
--numeric -n 数字化输出地址和端口信息
--delete-server -d 删除RS节点
# 清空所有配置
[root@test01 ~]# ipvsadm -C
# 添加一个虚拟Server即VIP
[root@test01 ~]# ipvsadm -A -t 192.168.137.150:80 -s wrr
# 添加后端web节点
[root@test01 ~]# ipvsadm -a -t 192.168.137.150:80 -r 192.168.137.129:80 -g -w 1
[root@test01 ~]# ipvsadm -a -t 192.168.137.150:80 -r 192.168.137.130:80 -g -w 1
# 设置这三个值tcp tcpfin udp的超时连接时间
[root@test01 ~]# ipvsadm --set 30 5 60
# 列出配置表
[root@test01 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.137.150:80 wrr
-> 192.168.137.129:80 Route 1 0 0
-> 192.168.137.130:80 Route 1 0 0
- web01和web02节点配置VIP
ip addr add 192.168.137.150/32 dev lo label lo:0
# 添加路由,可不操作
[root@test02 ~]# route add -host 192.168.137.150 dev lo
# 抑制ARP
[root@test02 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@test02 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[root@test02 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@test02 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
# 查看ipvs的状态
[root@test01 ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.137.150:80 0 0 0 0 0
-> 192.168.137.129:80 0 0 0 0 0
-> 192.168.137.130:80 0 0 0 0 0
# ipvs删除节点
[root@test01 ~]# ipvsadm -d -t 192.168.137.150:80 -r 192.168.137.129:80
- 测试
浏览器访问虚拟ip

- 抑制ARP参数
arp_ignore - INTEGER
定义对目标地址为本地IP的ARP询问不同的应答模式
0 - (默认值):回应任何网络接口,上对任何本地IP地址的arp查询请求。
1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求。
2 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内。
3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应。
4 - 7 保留未使用。
8 - 不回应所有(本地地址)的arp查询。
arp_announce - INTEGER
对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制:确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口
0 - (默认)在任意网络接口(eth0,eth1, lo). 上的任何本地地址
1 - 尽量避免不在该网络接口子网段的本地地址做出arp回应.当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一。如果该来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
2 -对查询目标使用最适当的本地地址,在此模式下将忽略这个IP数据包的源地址并尝试选择能与该地址通信的本地地址,首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有合适的地址被发现将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送限制了使用本地的vip地址作为优先的网络接口
网友评论