目录
[3.1 keepalived负载均衡](#3.1 keepalived负载均衡)
[3.2 lvs+keepalived高可用](#3.2 lvs+keepalived高可用)
[3.3 nginx高可用](#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 keepalived
mv /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 #检查间隔,默认为1s
authentication {
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 #检查间隔,默认为1s
authentication {
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: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
检测虚拟网卡接口lo:0,且IP为VIP
[root@nginx01 init.d]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 11.0.1.31 netmask 255.255.255.0 broadcast 11.0.1.255
inet6 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 0
TX packets 22319 bytes 1530060 (1.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::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 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 11.0.1.30 netmask 255.255.255.255
loop 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冲突解释: