LVS+KeepAlived+Nginx高可用实现方案之DR模式
说明:仅以最快的速度记录部署成功,故会少很多步骤和介绍
准备
虚拟机(CentOS 7)
准备了4台虚拟机,用于测试
IP 作用
192.168.1.128 | keepalived master |
---|---|
192.168.1.129 | keepalived backup |
192.168.1.130 | nginx1 |
192.168.1.131 | nginx2 |
192.168.1.200 | 虚拟ip VIP |
架构示意图
软件安装
在192.168.1.128及192.168.1.129上安装keepalived
在192.168.1.130及192.168.1.131上安装nginx
防火墙配置
所有主机上关闭防火墙,仅部署测试用,具体配置请自行参考
systemctl stop firewalld
systemctl disable firewalld
基础软件安装
yum install gcc
yum -y install openssl-devel
yum -y install libnl libnl-devel
yum install -y libnfnetlink-devel
yum -y install net-tools
yum install vim -y
在两台keepalived服务器安装 KeepAlived 和LVS管理工具 ipvsadm安装
yum install keepalived ipvsadm -y
keepalived启动等命令
systemctl start|stop|restart|status|enable keepalived
设置自启
systemctl enable keepalived
配置MASTER
进入192.168.1.128服务器
cd /etc/keepalived
#备份默认的keepalived配置
mv keepalived.conf keepalived-back.conf
vim keepalived.conf
添加以下配置:
global_defs {
notification_email {
edisonchou@hotmail.com
}
notification_email_from sns-lvs@gmail.com
smtp_server 192.168.80.1
smtp_connection_timeout 30
router_id LVS_DEVEL # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {
state MASTER #指定Keepalived的角色,MASTER为主,BACKUP为备 记得大写
interface eno16777736 #网卡id 不同的电脑网卡id会有区别 可以使用:ip a查看
virtual_router_id 51 #虚拟路由编号,主备要一致
priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
advert_int 1 #检查间隔,默认为1s
authentication { #这里配置的密码最多为8位,主备要一致,否则无法正常通讯
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200 #定义虚拟IP(VIP)为192.168.1.200,可多设,每行一个
}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.1.200 80 {
delay_loop 6 # 设置健康检查时间,单位是秒
lb_algo rr # 设置负载调度的算法为wlc
lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.1.130 80 { # 指定real server1的IP地址
weight 3 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.131 80 { # 指定real server2的IP地址
weight 3 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
配置BACKUP
进入192.168.1.129服务器
cd /etc/keepalived
#备份默认的keepalived配置
mv keepalived.conf keepalived-back.conf
vim keepalived.conf
添加以下配置:
global_defs {
notification_email {
edisonchou@hotmail.com
}
notification_email_from sns-lvs@gmail.com
smtp_server 192.168.80.1
smtp_connection_timeout 30
router_id LVS_DEVEL # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {
state BACKUP #指定Keepalived的角色,MASTER为主,BACKUP为备 记得大写
interface eno16777736 #网卡id 不同的电脑网卡id会有区别 可以使用:ip a查看
virtual_router_id 51 #虚拟路由编号,主备要一致
priority 50 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
advert_int 1 #检查间隔,默认为1s
authentication { #这里配置的密码最多为8位,主备要一致,否则无法正常通讯
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200 #定义虚拟IP(VIP)为192.168.1.200,可多设,每行一个
}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.1.200 80 {
delay_loop 6 # 设置健康检查时间,单位是秒
lb_algo rr # 设置负载调度的算法为wlc
lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.1.130 80 { # 指定real server1的IP地址
weight 3 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.131 80 { # 指定real server2的IP地址
weight 3 # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
配置注意项
router_id
后面跟的自定义的ID在同一个网络下是一致的
state
state后跟的MASTER和BACKUP必须是大写;否则会造成配置无法生效的问题
interface
网卡ID;这个值不能完全拷贝我的配置,要根据自己的实际情况来看,可以使用以下方式查询
ip a
priority
主备优先级
MASTER中配置的priority必须比BACKUP大;差值最好>=50
authentication
主备之间的认证方式
一般使用PASS即可;主备的配置必须一致;否则无法通讯,会导致裂脑;密码不能大于8位
virtual_ipaddress
配置的VIP;允许配置多个
启动keepalived
在192.168.1.128和192.168.1.129下分别执行以下指令重启keepalived
systemctl start keepalived
检查主keepalived 启动后的配置情况
ip a
如果网卡下出现192.168.1.200(VIP)说明主已经启动成功
检查备keepalived 启动后的配置情况
ip a
备服务器的网卡下没有出现192.168.1.200(VIP)的ip,说明备服务正常
注:如果这里也出现了VIP,那么说明裂脑了,需要检查防火墙是否配置正确;是否允许了vrrp的多播通讯
nginx安装
只需要在192.168.1.130及192.168.1.131上安装nginx即可
安装nginx,目的是把nginx作为后端,如果有其他后端程序,这一步可以省略
yum install epel-release -y
yum install nginx -y
启动nginx服务
确保nginx已经正常运行了
ps -ef|grep nginx
编辑realserver脚本文件两台机器都要搞
进入init文件夹
cd /etc/init.d/
编辑脚本
vim realserver
添加以下脚本
#虚拟的vip 根据自己的实际情况定义
#!/bin/bash
#虚拟的vip 根据自己的实际情况定义
SNS_VIP=192.168.1.200
/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
保存并设置脚本的执行权限
chmod 755 /etc/init.d/realserver
因为realserver脚本中用到了/etc/rc.d/init.d/functions,所以一并设置权限
chmod 755 /etc/rc.d/init.d/functions
执行脚本
service realserver start
查看执行结果
ip a
如果看到以下效果,说明脚本已经执行成功了
LVS管理工具-ipvsadm
查看统计
查看当前配置的虚拟服务和各个RS的权重
ipvsadm -Ln
查看当前ipvs模块中记录的连接(可用于观察转发情况)
ipvsadm -lnc
查看ipvs模块的转发情况统计
ipvsadm -Ln --stats | --rate
lvs超时配置
查看lvs的超时时间
ipvsadm -L --timeout
优化连接超时时间
ipvsadm --set 1 10 300
这里的TCP的连接超时时间最好和keepalived中的persistence_timeout超时时间保持一致;persistence_timeout的超时时间表示指定时间内,同ip的请求会转发到同一个服务;
测试
正常代理转发
使用我linux虚拟机的windows宿主机进行测试
测试vip
ping 192.168.1.200
测试vip监听的端口
telnet 192.168.1.200 80
请求虚拟IP查看转发的服务
KeepAlived高可用测试
停掉主keepalived
systemctl stop keepalived
vip漂移至备服务器
此时网页访问:192.168.1.200依然能够正常访问;却分发依然正常
重启主keepalived
主服务恢复之后;vip又会自动漂移回主服务
LVS监控真实服务测试
查看最新的虚拟ip对应的RealServer的情况
ipvsadm -l
可以看出192.168.1.130和192.168.1.131两台正式服务都还在
测试停掉192.168.1.130
再次查看虚拟ip对应的RealServer的情况
可以看出192.168.1.130这台已经挂掉的服务器已经被移除了
测试访问虚拟ip
所有的访问都只会转发到131的真实服务器
恢复192.168.1.130
lvs又会自动监控并加入192.168.1.130
常见问题
裂脑
主备keepalived服务器同时出现了VIP;导致vip无法正常使用
常见原因为防火墙配置所致导致多播心跳失败
vip能ping通,但是vip监听的端口不通
第一个原因:nginx1和nginx2两台服务器的服务没有正常启动
第二个原因:请参考上面Nginx服务器那一大项中所说的配置,可能没有配置好
vip ping不通
核对是否出现裂脑
核对keepalived的配置是否正确
参考文章,感谢原作者
https://blog.csdn.net/lupengfei1009/article/details/86514445
版权声明:
作者:超级管理员
链接:
https://blog.apecloud.ltd/article/detail.html?id=73
来源:猿码云个人技术站
文章版权归作者所有,未经允许请勿转载。
共有0条评论