keepalived部署

Keepalived  是一个高可用的集群软件,它的主要功能是实现真实机的故障隔离及备机切换,提高系统的可用性。

keepalived 通过选举(看服务器设置的权重)挑选出一台服务器做 MASTER 机器, MASTER 机器会被分配到一个指定的虚拟 ip ,外部程序可通过该 ip 访问这台服务器,如果这台服务器出现故障(断网,重启,或者本机器上的 keepalived crash 等), keepalived 会从其他的备份机器上重选(还是看服务器设置的权重)一台机器做 MASTER 并分配同样的虚拟 IP ,充当前一台 MASTER 的角色。 选举策略是根据 VRRP协议, 完全按照权重大小,权重最大( 0 ~ 255 )的是 MASTER 机器, 下面几种情况会触发选举:

  1. keepalived 启动的时候。
  2. master 服务器出现故障(断网,重启,或者本机上的 keepalived故障等。
  3. 有新的备份服务器加入且权重最大。

环境准备:

keepalived主服务器IP地址:10.88.5.31 (centos7)

keepalived备服务器IP地址:10.88.5.144(rhel6)

keepalived虚拟IP地址:10.88.5.199

主备机器都安装web服务器httpd,做网页测试。

安装步骤:

脚本安装可参考地址:keepalived脚本安装

首先在主服务器上安装keepalived,前提需要安装依赖包,执行命令如下:

yum install -y gcc* openssl-devel libnl* net-snmp-devel libnfnetlink-devel

将keepalived安装包上传到服务器上,执行命令解压:

tar xf keepalived-2.0.0.tar.gz

进入解压后目录,执行命令编译keepalived,如图:

如果编辑过程中报错configure: error: libnfnetlink headers missing,此时可以执行yum -y install libnfnetlink-devel,或者直接通过rpm -ivh+libnfnetlink-devel-1.0.1-4.el7.x86_64.rpm,注意centos7和6对应的包不同,要区分开

如果编辑完成并无报错,此时可以执行make && make install 进行安装,如图:

安装完成后配置启动文件,设置启动服务。

1.首先复制keepalived启动文件到/sbin目录下,执行命令:

cp -a /usr/local/keepalived/sbin/keepalived /sbin/

2. 将keepalived文件复制到/etc/sysconfig/中,keepalived文件路径在如下位置:

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

3. 复制配置文件keepalived.conf到/etc/keepalived/目录中,如下:

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived

4. 编辑服务文件keepalived.service,位置在/lib/systemd/system目录下,如图:

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

[Service]
Type=forking
PIDFile=/var/run/keepalived.pid
KillMode=process
EnvironmentFile=/etc/sysconfig/keepalived
ExecStart=/sbin/keepalived $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

我们重新定义keepalived日志文件位置,方便查看,原日志文件为/var/log/message,编辑配置文件/etc/rsyslog.conf, 在文件末尾添加内容如图所示:

上述local0表示日志级别,如果local0不行可以设置local1

添加完成后指定命令systemctl restart rsyslog 重启日志记录服务

最后执行命令systemctl restart keepalived, 重启keepalived

添加开机自启动:systemctl enable keepalived

此时在/var/log/目录下可以看到keepalived.log日志文件,如图:

编辑配置文件,vim /etc/keepalived/keepalived.conf

注意:上述配置文件中virtual_router_id同一局域网中不可重复,只能主备一组

编辑完配置文件后执行命令systemctl restart keepalived重启keepalived

安装web服务器httpd,直接执行命令yum -y install httpd即可,执行命令启动,注意防火墙要提前通过端口

systemctl start httpd

systemctl enable httpd

测试通过本地IP访问web服务器以及通过虚拟IP访问都可成功,如图:

下面在备用服务器上安装keepalived(备机为rhel6.9)

安装方法和上面一样,再次不在赘述,如果碰到和上面同样的报错信息,可按照上面教程处理,但是centos7和centos6的安装包libnfnetlink是区分开的,不能通用

如果安装过程中报错出现make: *** [all-recursive] Error 1,可考虑更换一个版本的keepalived,rhel6可能需要较低版本的keepalived才可以

安装完成后设置keepalived启动服务

1. 首先将keepalived的启动脚本复制到/etc/init.d/目录下,启动脚本在源码目录下,路径为keepalived-2.0.0/keepalived/etc/init.d/keepalived,执行命令如下

cp keepalived-2.0.0/keepalived/etc/init.d/keepalived /etc/init.d/

2. 将keepalived文件复制到/etc/sysconfig/目录下,文件位置在/usr/local/keepalived/etc/sysconfig/keepalived,执行命令如下:

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

3. 将keepalived.conf配置文件复制到/etc/keepalived目录下,执行命令如下:

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

4. 再将keepalived可执行文件添加到环境变量中,执行命令如下:

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

5. 执行命令service keepalived start 启动keepalived,查看进程信息,如图:

编辑配置文件,内容如下:

编辑完配置文件后执行命令service keepalived restart 重启keepalived

注意:正常情况下主和备之间同时只有一个机器存在vip,如果有两个同时存在那么就会出现脑裂现象(两个内网ip不可能同时存在),脑裂现象容易导致数据请求不准确,出现脑裂的原因很大程度是防火墙阻止了主和备之间的心跳通讯,可以通过添加防火墙规则来避免脑裂现象出现,规则如下:

# 指定keepalived配置的网卡:ens33,固定的VRRP广播地址:224.0.0.18
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface ens33 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload

查看配置的规则:

firewall-cmd --direct --get-rules ipv4 filter INPUT
firewall-cmd --direct --get-rules ipv4 filter OUTPUT

然后安装web服务器httpd,直接执行命令yum -y install httpd安装即可。

执行命令service httpd start 启动httpd服务器

执行命令chkconfig httpd on 将httpd加入开机自启动

此时通过本机IP以及虚拟IP5.199访问web服务器,都是可以正常打开,如图:

测试主机宕机后,是否可以自动使用备机服务:

1.本例子为方便测试观看,已经将默认的httpd也页面修改,主服务器页面如下:

备用服务器打开界面如下:

2. 此时将两台机器的keepalived全部开启,通过虚拟ip地址进行访问,如图:

通过上图可以看到,通过虚拟ip进行访问后,默认是跳转到主服务器的,因为主服务器的优先级更高。

3. 接下来,模拟主服务器故障,或者keepalived故障(可将其停止),然后访问虚拟IP地址,如图:

从上图中可以看到,停掉主服务器的keepalived后,已经成功切换到备用服务器

4. 此时我们在重新启动主服务器的keepalived,观察结果如下:

从上图中可以看到,重启主服务器的keepalived后,页面已经重新切换回主服务器。

备注:

如果部署完成后发现vip 无法正常使用,也不能ping 通,此时可以看下配置文件中是否存在vrrp_strict字段,注释掉重启keepalived即可,如图:

原因:vrrp_strict表示严格遵守VRRP协议。下列情况将会阻止启动Keepalived:1. 没有VIP地址。2. 单播邻居。3. 在VRRP版本2中有IPv6地址。

标签