docker中的Nginx与Keepalived

高可用:两台业务系统启动着相同的服务,如果有一台故障,另一台自动接管,我们将将这个称之为高可用;

Keekpalived工作原理:通过vrrp协议实现的

安装:yum install keepalived -y
默认日志存放位置:/var/log/messages

下载完成之后,就先配置好keepalived

vi /etc/keepalived/keepalived.conf

首先你要了解keepalived.conf中配置项的含义是什么?我在这里就放我们需要配置的一些配置项稍作解释

MASTER配置

! Configuration File for keepalived

global_defs { ##全局定义
   router_id KEEPALIVED_MASTER ##你的路由id
   vrrp_skip_check_adv_addr
   vrrp_strict  #严格遵守vvrp协议的意思,建议注释掉,可能会访问不了vip 
   vrrp_garp_interval 0
   vrrp_gna_interval 0
 }
 vrrp_instance VI_1 { #实例1
    state MASTER #主服务器
    interface eth0 #网卡
    virtual_router_id 51  #虚拟路由id
    priority 100 #优先级 MASTE建议100 backup建议比MASTE低 80,70,90都可
    advert_int 1 #间隔时间
    
    authentication { #验证 主和副的配置这儿都一致
        auth_type PASS 
        auth_pass 1111
    }
    virtual_ipaddress { #这里配置的是你的虚拟IP,也就是VIP
       172.17.0.15
    }
}      


以下是BACKUP配置,和上面差不多

 ! Configuration File for keepalived
    global_defs {
    router_id KEEPALIVED_BACKUP #改这
   vrrp_skip_check_adv_addr
   vrrp_strict  
   vrrp_garp_interval 0
   vrrp_gna_interval 0
 } 
 vrrp_instance VI_1 { 
    state BACKUP  #这里也要改
    interface eth0 
    virtual_router_id 51 
    priority 80  #这里要比MASTE小
    advert_int 1 
    
  authentication { #保持一致
        auth_type PASS 
        auth_pass 1111
    }
    virtual_ipaddress { 
       172.17.0.16
    }
}        

以上配置完毕后退出,需要配置hosts文件

vi /etc/hosts
#做一个解析, 将 127.0.0.1 KEEPALIVED_MASTER 加入,backup一致操作

此时keepalived已经配置好了,重点来了。

#启动
systemctl start keepalived
#检查
systemctl status keepalived
#你会发现状态是 RUN,如果过几秒钟你再次检查,则是stop。如果你的没有这问题请略过

奉上我的解决方案与解决的思路

  • 首先去看看报错的log文件,去看看日志中报的是什么错。
  • 我发现默认存放日志文件的地址没有,/var/log/messages 并没有。
  • 那就自己手动设置,将keepalived的存放路径修改

修改keepalived日志路径

vim  /etc/sysconfig/keepalived  将文件的这一行 KEEPALIVED_OPTIONS="-D" 修改为      KEEPALIVED_OPTIONS="-D -d -S 0"
vim /etc/rsyslog.conf   ##如果容器中没有,请自己下载此服务
#在文件的最后添加一行
local0.*     /var/log/keepalived.log
重启rsyslog服务  systemctl restart  rsyslog  
重启keepalived服务,日志会打印到/var/log/keepalived.log

这样就比较明了了,这个错误说的是:IPVS:不能初始化IPVS:协议不可用,原因是ip_vs模块系统默认没有自动加载,可以通过lsmod | grep ip_vs 命令查看一下,如果没有任何输出则表示ip_vs模块并没有被内核加载,得手动加载modprobe ip_vsmodprobe ip_vs_wrr

解决办法

首先你必须得先安装ipvsadm

yum install ipvsadm
#执行
ipvsadm

#如果你执行后报错,如以下
IPVS: Can't initialize ipvs: Protocol not available
Can't initialize ipvs: Protocol not available
Are you sure that IP Virtual Server is built in the kernel or as module?

那还有最后一步,就是在宿主机中,也一样执行ipvsadm,然后再去容器中执行

执行ipvsadm,出现以下就成功了

然后就去restart keepalived。VIP就有了,也就是keepalived没有自杀了

如图所示,nginx1是master,nginx2是backup,当stop nginx1中的keepalived,vip就漂移到了nginx2中。

“docker中的Nginx与Keepalived”的2个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注