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 -ykeepalived启动等命令
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 | --ratelvs超时配置
查看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://apecloud.ltd/article/detail.html?id=73
                                      
                                    
                                    
来源:猿码云个人技术站                                    
文章版权归作者所有,未经允许请勿转载。

                          
共有0条评论