使用keepalived实现主备docker数据转发服务器

Keepalived一个基于VRRP 协议来实现的 LVS 服务高可用方案,可以利用其来解决单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

基于keepalived的原理我们知道虚拟IP会替代服务器实体IP对外通讯,首先我们要保证主备服务器的工作IP要在同一个网段,主备的切换主要由BACKUP监听MASTER的广播来确定MASTER是否存活,由此我们知道主备实现的原理。

1.配置keepalived配置文件/etc/keepalived/keepalived.config  

主机配置

! Configuration File for keepalived

global_defs {             #全局定义
   router_id LVS_Master
   script_user root       #定义后面需要执行脚本使用root执行
   script_group root      #定义后面需要执行脚本使用root组执行
}

vrrp_instance VI_1 {      #VRRP实例配置
    state MASTER          #定义初始默认设置身份,最终身份由优先级决定
    interface ens192      #绑定实例网卡
    virtual_router_id 51  #VRID,非常重要相同的VRID为一组,备机与此相同
    priority 100          #优先级值,算法确定身份
    advert_int 1          #广播间隔时间
    authentication {
        auth_type PASS    #认证方式,可以是PASS或者AH两种
        auth_pass 1111    #认证密码
    }
    virtual_ipaddress {   #虚拟IP地址设置
        192.168.211.18
    }
    notify_master /opt/keepalived/Master.sh   #切换为master时,需要执行的脚本
}

备机配置

! Configuration File for keepalived

global_defs {
   router_id LVS_Backup
   script_user root
   script_group root
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens192
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.211.18
    }
    notify_master "/opt/keepalived/Master.sh"
    notify_backup "/opt/keepalived/Backup.sh"   #切换为备机时,需要执行的脚本
}

这里已经完成了keepalived的配置,主备机执行 systemctl enable keepalived --now

2.现在客服端可以访问到虚拟IP来访问我们服务器,但我们服务器对外访问还是以实际IP对外访问并未用虚拟IP对外访问,所以我们需要在服务器上做IP的NAT映射来实现转换为虚拟IP对外访问。

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf    #使内核允许地址转发
sysctl -p                                      #执行配置修改

然后使用iptables的POSTROUTING 表做源地址转换

#写入将源地址为192.168.211.20的流量包源地址转换为192.168.211.18发出去
iptables -t nat -p tcp -A POSTROUTING -s 192.168.211.20 -j SNAT --to-source 192.168.211.18
#保持iptables配置
service iptables save

完成配置后对外通讯正常

3.保证docker服务在主备切换后无修改差异用脚本实现备机对主机docker映射文件的间隔同步,使用rsync做同步。

主机切换为MASTER时执行脚本

#!/bin/bash
docker stop $(docker ps | grep 'app' |awk '{print $NF}')   #停止运行所有app容器
docker rm $(docker ps -a| grep 'app' |awk '{print $NF}')   #删除所有app容器
rsync -avzu -e ssh root@edge01B:/data/soft/gateway/enos  /data/soft/gateway/ --delete  #同步enos文件夹(docker配置文件夹)
for i in $(ls /data/soft/gateway/enos | grep 'app')  #重新启动各容器
do
  docker run --name aiot-gateway-ENOS-NXLH-$i -itd --restart=always --privileged=true --network=host -v /usr/sbin/dmidecode:/usr/sbin/dmidecode -v /data/soft/gateway:/data  -v /data/soft/gateway/enos/$i:/conf aiot-gateway-enos:1.0
done

备机切换为MASTER时执行脚本

#!/bin/bash
#killall /bin/bash /opt/keepalived/Backup.sh > /dev/null 2>&1
kill -9 $(ps -ef | grep '/opt/keepalived/Backup.sh'|awk '{print $2}') > /dev/null 2>&1 #杀死后台执行的Backup.sh映射文件夹同步脚本
docker stop $(docker ps | grep 'app' |awk '{print $NF}')   #停止运行所有app容器
docker rm $(docker ps -a| grep 'app' |awk '{print $NF}')   #删除所有app容器
for i in $(ls /data/soft/gateway/enos | grep 'app')  #重新启动各容器
do
  docker run --name aiot-gateway-ENOS-NXLH-$i -itd --restart=always --privileged=true --network=host -v /usr/sbin/dmidecode:/usr/sbin/dmidecode -v /data/soft/gateway:/data  -v /data/soft/gateway/enos/$i:/conf aiot-gateway-enos:1.0
done

备机切换为BACKUP时执行的映射文件夹同步脚本

#!/bin/bash
sudo docker stop $(docker ps | grep 'app' |awk '{print $NF}')   #停止运行所有app容器
sudo docker rm $(docker ps -a| grep 'app' |awk '{print $NF}')   #删除所有app容器
sudo sleep 45
sudo while true;do
       rsync -avzu -e ssh root@edge01A:/data/soft/gateway/enos  /data/soft/gateway/ --delete  #同步enos文件夹(docker配置文件夹)
       sleep 1
     done

同步文件需要单位网卡做传输IP主机设置1.1.1.1,备机设置1.1.1.2(不能使用工作网卡),同步文件脚本需要免密操作,需要执行ssh-keygen#密钥生成及ssh-copy-id [对端IP]复制密钥至对端,保证脚本不会卡死在交互界面,正常运行。

到此整个需求完成设置。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用 Keepalived 搭建主备服务器的步骤如下: 1. 安装 Keepalived主备服务器上安装 Keepalived。如果是 CentOS 系统,可以使用以下命令进行安装: ``` yum install keepalived ``` 2. 配置 Keepalived主备服务器上编辑 Keepalived 的配置文件,配置文件一般位于 /etc/keepalived/keepalived.conf。以下是一个简单的示例配置文件: ``` global_defs { router_id LVS_DEVEL } vrrp_script check_haproxy { script "/etc/keepalived/check_haproxy.sh" interval 2 weight -5 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100/24 dev eth0 } track_script { check_haproxy } } ``` 配置文件中,global_defs 部分配置了 router_id,vrrp_script 部分配置了检测脚本的路径和执行间隔,vrrp_instance 部分则配置了主备切换的参数,包括状态(MASTER 或 BACKUP)、虚拟路由器 ID、优先级、虚拟 IP 等。 3. 配置检测脚本 在配置文件中,我们用到了一个名为 check_haproxy 的脚本。这个脚本用于检测 HAProxy 的运行状态。以下是一个简单的示例脚本: ``` #!/bin/bash if [[ $(ps aux | grep haproxy | grep -v grep | wc -l) -eq 0 ]]; then exit 1 else exit 0 fi ``` 在这个脚本中,我们检查 HAProxy 进程是否存在。如果存在,则返回 0,表示正常运行;否则返回 1,表示异常。 4. 启动 Keepalived 在两台主备服务器上,启动 Keepalived 服务,并确保它们都正常运行: ``` systemctl start keepalived systemctl enable keepalived ``` 5. 测试 现在,你可以测试主备切换是否正常工作。你可以手动停止 HAProxy 服务,然后观察虚拟 IP 是否会自动切换到备用服务器上。 以上就是使用 Keepalived 搭建主备服务器的大致步骤。需要注意的是,具体的配置和实现方式可能因为不同的需求而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值