Centos7 编译安装keepalived 2.1.5 +nginx1.18高可用 及踩坑

零:准备工作

      0.1:下载keepalived源码包点击这里

      0.2:安装工具软件

yum install curl gcc openssl-devel libnl3-devel net-snmp-devel libnfnetlink-devel -y

      0.3:服务器环境

ip服务器名称作用备注
192.168.122.29proxy1nginx1.18、keepalived2.1.5keepalived 主
192.168.122.30proxy2nginx1.18、keepalived2.1.5keepalived 备

      虚IP:192.168.122.230

一:开始安装

1.0:流程介绍

      与nginx的编译并修改配置文件就可以轻松启动不同。

      编译安装keepalived的过程较复杂,这里先把流程梳理如下。

      解压、编译、修改conf文件、将conf文件和可执行文件置于正确的位置上、修改服务启动文件、配置防火墙。

      下面就按照这个顺序来逐个介绍。

 

1.1:解压:、配置、编译。

      将下载的 keepalived-2.1.5.tar.gz 置于 /usr/local/下,操作如下

#解压
[root@proxy1 local]# tar -vxf keepalived-2.1.5.tar.gz 

#进入
[root@proxy1 local]# cd keepalived-2.1.5/

#执行配置。其中prefix对应安装后路径, with-run-dir对应进程id路径
[root@proxy1 keepalived-2.1.5]# ./configure --prefix=/usr/local/keepalived --with-run-dir=/usr/local/keepalived/run

#编译安装
[root@proxy1 keepalived-2.1.5]# make & make install

 

1.2:配置文件

      首先演示抢占式策略

      以主服务器的配置为例,展示配置文件,如下所示

###########主###########

! Configuration File for keepalived

global_defs {
   #这里是主机名称
   router_id proxy1
}

vrrp_script chk_nginx {
    #执行脚本位置
    script "/etc/keepalived/chk_nginx.sh"
    #检测时间间隔。除非使用了NTP,否则服务器间时间可能不同步,为避免这个问题,增大检测时间间隔
    interval 10
    # 如果条件成立则权重减20(-20)
    weight -20
}

vrrp_instance VI_1 {
    #主
    state MASTER
    #当前服务器的网卡
    interface ens33
    # 虚拟路由编号,主从要一致
    virtual_router_id 51
    # 优先级,数值越大,获取处理请求的优先级越高
    priority 100
    #本机IP
    mcast_src_ip 192.168.122.29
    # 检查间隔,默认为1s(vrrp组播周期秒数)
    advert_int 1
    #授权访问 
    authentication {
        #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_type PASS
        auth_pass 6666
    }
    
    #执行脚本
    track_script {
        chk_nginx
    }

    # 定义虚拟ip(VIP),可多设,每行一个
    virtual_ipaddress {
        192.168.122.230
    }
}

      从的配置略

      主与从的区别在于四个地方:  

      state(角色) router_id(主机名称) mcast_src_ip(当前主机ip) priority(优先级。确保主的数值高于从的即可) 

 

      除了抢占式策略,还有一种是非抢占式策略

      这种策略下,主从的配置文件的“state”属性不再区分“MASTER和BACKUP”。都使用“BACKUP”。不同的keepalived服务器之间通过priority属性值的大小区分主从,最后一个不同就是在 state BACKUP下一行添加 nopreempt即可,表示“非抢占”。

      抢占与非抢占模式的区别在于

      抢占模式在主服务器挂了之后,由从服务器接手“主服务器”角色;当主服务器恢复则主服务器会抢回其“主服务器”的角色。

      非抢占式则是当主服务器恢复后,担当从的角色。二者的区别主要在于此。

 

1.3:启动nginx的脚本

      因为我这里与keepalived搭档的是nginx。因此这里抄了一个当nginx停掉的时候,重启nginx的脚本,如下所示。 

#chk_nginx.sh脚本的配置
[root@proxy1 keepalived]# vim /etc/keepalived/chk_nginx.sh 

#!/bin/bash
A=`ps -C nginx --no-header | grep -v grep | wc -l`
if [ $A -eq 0 ];then
    #尝试重新启动nginx
    /usr/local/nginx/sbin/nginx
    #睡眠2秒
    sleep 2
    if [ `ps -C nginx --no-header | grep -v grep | wc -l` -eq 0 ];then
        #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
        killall keepalived
    fi
fi

 

1.4:配置后操作

#创建存放keepalived.id的路径
[root@proxy1 keepalived-2.1.5]# mkdir /usr/local/keepalived/run

#拷贝配置文件到正确位置。
[root@proxy1 keepalived-2.1.5]# cp -rf /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

#将可执行文件拷贝到目标目录
[root@proxy1 keepalived-2.1.5]# cp -rf /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived

#为另一个必要的配置文件设置软连接。
[root@proxy1 keepalived-2.1.5]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived

#########################这里请注意######################
#下面这步,dark亲身经历就是:不做应该也能成功,做了反而可能不成功。大家自行决定是否执行
[root@proxy1 keepalived-2.1.5]# cp /usr/local/java/keepalived/keepalived-2.1.5/keepalived/etc/init.d/keepalived /etc/init.d/

 

1.5:服务启动文件

#修改启动文件
[root@proxy1 keepalived]# vim /usr/lib/systemd/system/keepalived.service

[Unit]
Description=LVS and VRRP High Availability Monitor
After=network-online.target syslog.target 
Wants=network-online.target 

[Service]
Type=forking
#pid位置
PIDFile=/usr/local/keepalived/run/keepalived.pid
KillMode=process
#环境变量文件(此文件中其实没啥东西)
EnvironmentFile=-/usr/local/keepalived/etc/sysconfig/keepalived
#可执行文件位置
ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

 

1.6:启动配置

#刷新1.3步骤的配置,使之生效
[root@proxy1 keepalived]# systemctl daemon-reload

#配置开机启动
[root@proxy1 keepalived]# systemctl enable keepalived.service

#常用的一些服务,启停、查看状态
systemctl start keepalived.service
systemctl stop keepalived.service
systemctl restart keepalived.service
systemctl status keepalived.service

 

1.7:防火墙

      因为keepalived是基于vrrp在服务器间互相探测,用以确保与之关联的服务器处于开启状态。故需要对防火墙做一些设置。

      如果只是测试环境进行验证,可以将防火墙关闭。

[root@proxy1 keepalived]# systemctl stop firewalld

      如果是较正式环境,可以在firewall上打通相应协议,如下所示

[root@proxy1 keepalived]# firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent
[root@proxy1 keepalived]# firewall-cmd --reload

 

1.8:启动

      执行 systemctl start keepalived.service 启动keepalived。然后执行 systemctl status keepalived.service 查看状态

      主:

      从:

      通过对比可知,虚ip出现在主服务器的网卡上面。

      然后关闭主服务器上的keepalived。会发现虚ip转移到了从服务器上。目的达成。

 

二:yum安装

      yum安装比编译安装要简单很多。相比编译安装,可以省略掉拷贝那些可执行文件的步骤。只需要将配置文件拷贝到对应目录即可。

      一个命令搞定  yum install -y keepalived。

      

三:踩坑

2.1:脑裂问题

      最初我没有对firewalld做任何操作,然后结果就是在主从服务器上都看到了192.168.122.230这个虚ip。原因就在于主从两个服务器都不能发现对方。打通网络后重启keepalived,问题解决。

 

2.2:配置文件

      如下图所示

      告诉我,/etc/keepalived/keepalived.comf 不是一个常规的可执行文件。查了一下,发现我已经给它和它所属的路径755权限。而事实上这个配置文件只能给644。修改后即可。

 

2.3:启动失败

      开始以为,编译安装并修改conf文件即可。然后发现完全不能正常启动。

      后来参考了好多不同版本keepalived的编译安装的文章,大家说的各有不同,感觉更加迷惑。

      有的文章中说,需要如下操作

cp /usr/local/java/keepalived/keepalived-2.1.5/keepalived/etc/init.d/keepalived /etc/init.d/

      按照人家说的去做,发现依然不能正常启动。。。

      然后我以yum方式安装,在conf文件不变的情况下启动keepalived,发现可以正常使用。

      对比了两种安装方式的不同,发现还是因为配置文件的位置和keepalived.service文件中的位置不一致导致的启动失败。

      最后,才有了本文。

      所以,遇到问题的时候,可以通过比较,找到不同,再定位自己问题的真正原因。解决了原因,问题自然被解决了。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值