目录
搭建Keepalived+Lvs+Nginx高可用集群负载
一、搭建LVS-DR模式-配置ipvsadm
1.1、前期准备
-
所有计算机节点关闭网络配置管理器,因为有可能会和网络接口冲突
systemctl stop NetworkManager systemctl disable NetworkManager
1.2、创建子接口
# 进入指定目录
cd /etc/sysconfig/network-script/
# 拷贝并创建子接口
cp ifcfg-ens33 ifcfg-ens33:1
ifcfg-ens33:1 数字1为别名,可以任意取名都行
1.3、修改子接口配置,配置如下:
vim ifcfg-ens33:1
DEVICE="ens33:1"
ONBOOT="yes"
IPADDR=192.168.64.120
NETMASK=255.255.255.0
BOOTPROTO="static"
192.168.64.120 就是虚拟ip,是提供给外网用户访问的ip地址,道理和
nginx-keepalived
的虚拟ip一样
1.4、重启网络服务,或者重启linux
service network restart
ip addr 就可以看到自己创建的虚拟ip了
1.5、安装ipvsadm
yum install ipvsadm
# 查看列表
ipvsadm -Ln
二、搭建LVS-DR模式-为两台RS配置虚拟ip
2.1、配置虚拟网络子接口
# 进入指定目录
cd /etc/sysconfig/network-scripts/
# 拷贝网络配置文件
cp ifcfg-lo ifcfg-lo:1
# 进行修改
vim ifcfg-lo:1
# 修改内容如下
DEVICE=lo:1
IPADDR=192.168.64.150
NETMASK=255.255.255.255
... (其他内容默认)
2.2、刷新network,然后查看虚拟ip
service network restart
ip addr
另一台服务器一样配置
三、搭建LVS-DR模式-为两台RS配置arp
ARP响应级别与通告行为的概念
1.arp-ignore:arp相应级别(处理请求)
- 0:只要本机配置了ip,就能响应请求
- 1:请求的目标地址达到对应的网络接口,才会响应请求
2.arp-announce:arp通告行为(返回响应)
- 0:本机上任何网络接口都向外通告,所有的网卡都能接受到通告
- 1:尽可能避免本网卡与不匹配的目标进行通告
- 2:只在本网卡通告
3.1、配置ARP
3.1.1、打开sysctl.conf
vim /etc/sysctl.conf
3.1.2、配置所有网卡,默认网卡以及虚拟网卡的arp响应级别和通告行为,分别对应:all、default、lo
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
3.1.3、刷新配置文件
sysctl -p
3.1.4、增加一个网关,用于接收数据报文,请求到本机后,会交个lo去处理
route add -host 192.168.64.120 dev lo:1
# 查看网关
route -n
3.1.5、防止服务器重启之后失效,做如下处理
echo "route add -host 192.168.64.120 dev lo:1" >> /etc/rc.local
# 直接打开/etc/rc.local文件直接修改添加也可以
四、搭建LVS-DR模式-ipvsadm配置集群规则
4.1、创建LVS节点,用户访问的集群调度者
ipvsadm -A -t 192.168.64.120:80 -s rr
提示
- -A:增加集群
- -t:tcp协议 ip地址:设定集群的访问ip,也就是LVS的虚拟ip
- -s:设置负载均衡的算法,rr表示轮询
- -p:设置连接持久化的时间
4.2、创建2台RS真实服务器
ipvsadm -a -t 192.168.64.120:80 -r 192.168.64.131:80 -g
ipvsadm -a -t 192.168.64.120:80 -r 192.168.64.131:80 -g
提示
- -a:添加真实服务器
- -t:tcp协议
- -r:真实服务器的ip地址
- -g:设定DR模式
4.3、保存到规则库,否则重启失效
ipvsadm -S
4.4、检查集群
-
查看集群列表
ipvsadm -Ln
-
查看集群状态
ipvsadm -Ln --stats
4.5、其他命令
-
重启ipvsadm,重启后需要重新配置
service ipvsadm restart
-
查看持久化连接
ipvsadm -Ln --persistent --conn
-
查看连接请求过期时间以及请求源ip和目标ip
ipvsadm -Lnc
-
设置tcp tcpfin udp 的过期时间(一般保持默认)
ipvsadm --set 1 1 1
-
查看过期时间
ipvsadm -Ln --timeout
4.6、更多详细的帮助文档
ipvsadm -h
man ipvsadm
五、搭建Keepalived+Lvs+Nginx高可用集群负载均衡
准备工作
- 1.准备两台nginx服务器:一台Mater,另一台Backup
- 2.准备两台Lvs服务器:一台Master,另一台Backup
5.1、配置第一台主Lvs服务器
- Keepalived配置
global_defs {
# 路由id:当前安装keepalived节点主机的标识符,全局唯一标识符
router_id LVS_192.168.64.133
}
# 计算机节点
vrrp_instance VI_1 {
# 表示的状态,当前的192.168.64.133的nginx的主节点
# 主节点:MASTER,备用机:BACKUP
state MASTER
# 当前实例绑定的网卡
interface ens33
# 保证主备节点一致
virtual_router_id 55
# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
priority 100
# 主备之间同步检查的时间间隔,默认1s
advert_int 1
# 认证授权的密码,防止非法节点的进入
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.64.120
}
}
# 配置集群地址访问的IP+端口,端口和nginx保持一致,都是80
virtual_server 192.168.64.120 80 {
# 健康检查的时间,单位:秒
delay_loop 6
# 配置负载均衡的算法,默认是轮询
lb_algo rr
# 设置LVS的模式 NAT|TUN|DR
lb_kind DR
# 设置会话持久化的事件
persistence_timeout 10
# 协议 -t
protocol TCP
# 负载均衡的真实服务器,也就是nginx节点的具体的真实ip地址
real_server 192.168.64.131 80 {
# 轮询的默认权重配比设置为1
weight 1
# 设置健康检查
TCP_CHECK {
# 检查的80端口
connect_port 80
# 超时时间 2s
connect_timeout 2
# 重试次数 2次
nb_get_retry 2
# 时间间隔 3s
delay_before_retry 3
}
}
real_server 192.168.64.132 80 {
# 轮询的默认权重配比设置为1
weight 1
# 设置健康检查
TCP_CHECK {
# 检查的80端口
connect_port 80
# 超时时间 2s
connect_timeout 2
# 重试次数 2次
nb_get_retry 2
# 时间间隔 3s
delay_before_retry 3
}
}
}
5.2、配置第二台从Lvs服务器
- Keepalived配置
global_defs {
# 路由id:当前安装keepalived节点主机的标识符,全局唯一标识符
router_id LVS_192.168.64.134
}
# 计算机节点
vrrp_instance VI_1 {
# 表示的状态,当前的192.168.64.134的nginx的主节点
# 主节点:MASTER,备用机:BACKUP
state BACKUP
# 当前实例绑定的网卡
interface ens33
# 保证主备节点一致
virtual_router_id 55
# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
priority 50
# 主备之间同步检查的时间间隔,默认1s
advert_int 1
# 认证授权的密码,防止非法节点的进入
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.64.120
}
}
# 配置集群地址访问的IP+端口,端口和nginx保持一致,都是80
virtual_server 192.168.64.120 80 {
# 健康检查的时间,单位:秒
delay_loop 6
# 配置负载均衡的算法,默认是轮询
lb_algo rr
# 设置LVS的模式 NAT|TUN|DR
lb_kind DR
# 设置会话持久化的事件
persistence_timeout 10
# 协议 -t
protocol TCP
# 负载均衡的真实服务器,也就是nginx节点的具体的真实ip地址
real_server 192.168.64.131 80 {
# 轮询的默认权重配比设置为1
weight 1
# 设置健康检查
TCP_CHECK {
# 检查的80端口
connect_port 80
# 超时时间 2s
connect_timeout 2
# 重试次数 2次
nb_get_retry 2
# 时间间隔 3s
delay_before_retry 3
}
}
real_server 192.168.64.132 80 {
# 轮询的默认权重配比设置为1
weight 1
# 设置健康检查
TCP_CHECK {
# 检查的80端口
connect_port 80
# 超时时间 2s
connect_timeout 2
# 重试次数 2次
nb_get_retry 2
# 时间间隔 3s
delay_before_retry 3
}
}
}
5.3、启动主从的Keepalived
# 进去启动目录里
cd /usr/local/keepalived/sbin
# 启动keepalived
./keepalived
5.4、查看Lvs情况
# 清除配置的规则(一般不用清除)
ipvsadm -C
# 查看连接情况
ipvsadm -Ln
# 查看轮询情况
ipvsadm -Lnc
# 查看状态
ipvsadm -Ln --stats