本文最后更新于:2022年6月1日 下午
架构图
主机配置(测试为虚拟机)
主机名 |
IP |
软件 |
端口 |
lvs01 |
192.168.23.138 |
lvs keepalived |
81 |
lvs02 |
192.168.23.139 |
lvs keepalived |
81 |
nginx01 |
192.168.23.91 |
nginx |
81 |
nginx02 |
192.168.23.92 |
nginx |
81 |
①搭建准备
1.1 关闭防火墙和selinux
1 2 3 4 5 6 7 8 9 10
| 关闭4台服务器的防火墙
关闭4台服务器的selinux (修改/etc/selinux/config,将SELINUX由enforcing设置为disabled)
|
1.2 ipvs 安装
1 2 3 4 5 6
| 分别在lvs01和lvs02执行 # yum -y install ipvsadm
把ipvsadm模块加载进系统 # ipvsadm # lsmod | grep ip_vs
|
1.3 keepalived 安装
1 2
| 分别在lvs01和lvs02执行 # yum -y install keepalived
|
1.4 keepalived 配置
lvs01配置:
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| [root@lvs01 ~] ! Configuration File for keepalived global_defs { router_id lvs01 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 100 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.23.100 } } virtual_server 192.168.23.100 81 { delay_loop 6 lb_algo wrr lb_kind DR protocol TCP real_server 192.168.23.91 81 { weight 1 TCP_CHECK { connect_timeout 10 retry 3 delay_before_retry 3 connect_port 81 } } real_server 192.168.23.92 81 { weight 1 TCP_CHECK { connect_timeout 10 retry 3 delay_before_retry 3 connect_port 81 } } }
|
lvs02配置:
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| [root@lvs02 ~] ! Configuration File for keepalived global_defs { router_id lvs02 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 100 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.23.100 } } virtual_server 192.168.23.100 81 { delay_loop 6 lb_algo wrr lb_kind DR protocol TCP real_server 192.168.23.91 81 { weight 1 TCP_CHECK { connect_timeout 10 retry 3 delay_before_retry 3 connect_port 81 } } real_server 192.168.23.92 81 { weight 1 TCP_CHECK { connect_timeout 10 retry 3 delay_before_retry 3 connect_port 81 } } }
|
②nginx搭建
2.1 realserver.sh 配置
打开Nginx所在服务器的{路由}功能、关闭{ARP查询}功能并设置回环ip
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 29 30 31
| nginx01和nginx02配置:
[root@nginx01]
SNS_VIP=192.168.23.100 /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP /sbin/route add -host $SNS_VIP dev lo:0 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce sysctl -p >/dev/null 2>&1 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $SNS_VIP >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
|
2.2 realserver.sh 权限
1 2 3 4
| nginx01和nginx02都要配置: # cd /etc/rc.d/init.d # chmod 755 realserver.sh functions # yum -y install net-tools.x86_64
|
③负载均衡测试
3.1 启动 Keepalived
lvs01和lvs02分别启动
1
| # service keepalived start
|
查看IP,lvs01上有Vip,lvs02上没有:
3.2 启动 Nginx 和 脚本
nginx01和nginx02分别启动
1 2
| # nginx # /etc/rc.d/init.d/realserver.sh start
|
3.3 修改 nginx 的 html 页面
nginx01和nginx02上分别修改index.html
1 2 3 4 5 6 7 8
|
nginx01内容: <h2>hostname:nginx01</h2> <h2>IP:192.168.23.91</h2> nginx02内容: <h2>hostname:nginx02</h2> <h2>IP:192.168.23.92</h2>
|
如图所示:
3.5 ipvsadm 参数
参数 |
说明 |
-L/-l(–list) |
显示内核虚拟服务器表 |
-n(–numeric) |
输出IP地址和端口的数字形式 |
输出参数 |
说明 |
Forward |
转发方式,当前是路由转发 |
Weight |
权重 |
ActiveConn |
当前活跃的连接数 |
InActConn |
当前不活跃的连接数 |
3.6 Master上检查连接情况
总结:
当 MASTER 服务器无法提供服务时,VIP 会在 MASTER 上自动移除,BACKUP 服务器会提升为 MASTER 状态,绑定 VIP 、接管服务。
当 MASTER 修复加入网络后,会自动抢回 VIP ,成为 MASTER 身份。
当后端提供服务nginx服务挂起时,会自动切换至其它nginx服务器。