目录
一、lvs配置
二、nginx配置
三、测试
3.1 keepalived负载均衡
3.2 lvs+keepalived高可用
3.3 nginx高可用
主机 | IP |
lvs01-33 | 11.0.1.33 |
lvs02-34 | 11.0.1.34 |
nginx01 | 11.0.1.31 |
nginx02 | 11.0.1.32 |
VIP | 11.0.1.30 |
4台主机主机添加host
[root@nginx01 sbin]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
11.0.1.31 nginx01
11.0.1.32 nginx02
11.0.1.33 lvs01-33
11.0.1.34 lvs02-34
一、lvs配置
以下两台lvs都要配置,除了配置文件不一样以外
lvs一定要搭配keepalived使用,配置上更简单,并且能实现主备高可用
yum install -y ipvsadm keepalivedmv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vi /etc/keepalived/keepalived.conf
主机master
lb_algo字段表示负载调度算法,采用权重算法,nginx01权重为5,nginx02权重为3
需要更改的字段router_id、ens33、priority 100、VIP+端口、真实IP+端口
global_defs { router_id lvs01-33 # 设置lvs的id,在一个网络内应该是唯一的,一般用主机名
}
vrrp_instance VI_1 { state MASTER #指定Keepalived的角色,MASTER为主,BACKUP为备 interface ens33 #指定Keepalived的角色,MASTER为主,BACKUP为备virtual_router_id 51 #虚拟路由编号,主备要一致priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR advert_int 1 #检查间隔,默认为1sauthentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 11.0.1.30 #定义虚拟IP(VIP)为11.0.1.30,可多设,每行一个}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 11.0.1.30 80 { delay_loop 6 # 设置健康检查时间,单位是秒 lb_algo wlc # 设置负载调度的算法为wlc 基于权重的调度算法 lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式 nat_mask 255.255.255.0 #persistence_timeout 0 会话保持时间 protocol TCP real_server 11.0.1.31 80 { # 指定real server1的IP地址weight 5 # 配置节点权值,数字越大权重越高 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 11.0.1.32 80 { # 指定real server2的IP地址weight 3 # 配置节点权值,数字越大权重越高 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } }
}
备机backup
global_defs { router_id lvs01-34 # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 { state BACKUP #指定Keepalived的角色,MASTER为主,BACKUP为备 interface ens33 #指定Keepalived的角色,MASTER为主,BACKUP为备virtual_router_id 51 #虚拟路由编号,主备要一致priority 90 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR advert_int 1 #检查间隔,默认为1sauthentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 11.0.1.30 #定义虚拟IP(VIP)为11.0.1.30,可多设,每行一个}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 11.0.1.30 80 { delay_loop 6 # 设置健康检查时间,单位是秒 lb_algo wlc # 设置负载调度的算法为wlc 基于权重的调度算法 lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式 nat_mask 255.255.255.0 #persistence_timeout 0 会话保持时间 protocol TCP real_server 11.0.1.31 80 { # 指定real server1的IP地址weight 5 # 配置节点权值,数字越大权重越高 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 11.0.1.32 80 { # 指定real server2的IP地址weight 3 # 配置节点权值,数字越大权重越高 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } }
}
二、nginx配置
安装nginx,并更改html页面内容为当前IP
nginx安装:Nginx、keepalived安装详细步骤_keepalive 安装-CSDN博客
两台nginx都要配置
以下命令是临时的,重启后失效,命令内容:在lo网卡上虚拟出一个lo:0接口,添加路由,抑制两台nginx主机的ARP响应。注意掩码是32,目前没找到永久配置的方法,只能以自定义服务设置为开机自启动。
ifconfig lo:0 11.0.1.30 netmask 255.255.255.255 broadcast 11.0.1.30 route add -host 11.0.1.30 dev lo:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announce
检测虚拟网卡接口lo:0,且IP为VIP
[root@nginx01 init.d]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 11.0.1.31 netmask 255.255.255.0 broadcast 11.0.1.255inet6 fe80::4ae3:fc87:6344:7062 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:60:05:0e txqueuelen 1000 (Ethernet)RX packets 35532 bytes 2276489 (2.1 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 22319 bytes 1530060 (1.4 MiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::1 prefixlen 128 scopeid 0x10<host>loop txqueuelen 1000 (Local Loopback)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 11.0.1.30 netmask 255.255.255.255loop txqueuelen 1000 (Local Loopback)
三、测试
nginx01、nginx02访问正常
3.1 keepalived负载均衡
两台lvs开启keepalived,访问VIP,访问正常,由于我设定nginx01的权重高于nginx02,所以是nginx01返回页面,系统工具优先级选出最佳节点
[root@lvs01-33 ~]# systemctl start keepalived
[root@lvs01-34 ~]# systemctl start keepalived
如果你想知道当前是哪个lvs在工作,只需要通过查看VIP当前在哪台lvs即可
3.2 lvs+keepalived高可用
将lvs01的keepalived进程关闭
[root@lvs01-33 ~]# systemctl stop keepalived
VIP访问仍然正常,说明lvs工作正常
3.3 nginx高可用
将nginx01的nginx进程杀死
[root@nginx01 sbin]# ./nginx -s stop
再次访问
将nginx01的nginx进程重启,那么nginx01重新接管
参考文档:
https://www.cnblogs.com/tangyanbo/p/4305589.html
https://www.cnblogs.com/xiaocheche/p/7689432.html
lvs详细文档:(原理、模式(NAT、TUN、DR)、调度算法)
LVS负载均衡(LVS简介、三种工作模式、十种调度算法)-CSDN博客
https://www.cnblogs.com/anay/p/9260306.html#_label7
DR模式详细:
LVS | LVS 的三种工作方式(DR原理)(二)_lvs dr 为什么局域网-CSDN博客
ipvsadm常用命令:
ipvsadm命令 – 管理Linux虚拟服务器 – Linux命令大全(手册)
arp冲突解释:
【arp冲突】linux抑制arp通告-CSDN博客