keepalived高可用

一、keepalived高可用环境搭建

1、安装keepalived软件

参考资料

在/usr目录下新建software目录

cd /usr

mkdir software

cd software

下载keepalived软件到sortware目录下

解压该软件,出现目录keepalived-2.0.6

cd keepalived-2.0.6

安装软件包

yum install -y openssl openssl-devel

然后在该目录下编译

./configure –prefix=/usr/wt/keepalived #解压到指定的目录下/usr/wt/keepalived

然后继续make && make install

如果出现* WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.

安装yum -y install libnl libnl-devel

如果出现configure: error: libnfnetlink headers missing

安装yum install -y libnfnetlink-devel

没有错误和警告后,在该目录继续执行make && make install,安装完毕。

2、制作keepalived的服务命令

将/usr/software/keepalived-2.0.6/keepalived/etc/init.d/目录下的keepalived文件,拷贝到/etc/init.d/

cp /usr/software/keepalived-2.0.6/keepalived/etc/init.d/keepalived /etc/init.d/

cp /usr/software/keepalived-2.0.6/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived

/etx目录下新建keepalived目录,将/usr/wt/keepalived/etc/keepalived/目录下的keepalived.conf文件拷贝到/etc/keepalived/

cp /usr/wt/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/wt/keepalived/sbin/keepalived /usr/sbin/

完成之后,可以直接使用service命令:

service keepalived start #开启keepalived软件

service keepalived stop #关闭keepalived软件

相关的日志信息,可以从/var/log/messages文件中查看启动的相关信息

3、修改配置文件keepalived.conf

修改配置文件/etc/keepalived/keepalived.conf,记得使用vim进行编辑,在windows操作下,可能出错

主节点配置文件

! Configuration File for keepalived

global_defs {
router_id rocketmq-nameserver1
}

vrrp_script chk_nginx {
script “/etc/keepalived/nginx_check.sh”
interval 2
weight -20
}

vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 50
mcast_src_ip 192.168.2.50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass wtroot
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.2.10
}
}

备用节点配置文件

! Configuration File for keepalived

global_defs {
router_id rocketmq-nameserver2
}

vrrp_script chk_nginx {
script “/etc/keepalived/nginx_check.sh”
interval 2
weight -20
}

vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
mcast_src_ip 192.168.2.51
priority 90
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass wtroot
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.2.10
}
}

解释

! Configuration File for keepalived

global_defs {
router_id rocketmq-nameserver1 #填入电脑的主机名称,可以通过输入指令hostname,查看主机名
}

vrrp_script chk_nginx {
script “/etc/keepalived/nginx_check.sh” #检查nginx的脚本路径
interval 2 #每隔2s执行脚本一次
weight -20 #权重,每次执行成功,权重减去20
}

vrrp_instance VI_1 {
state MASTER # 主节点,备用节点为BACKUP
interface eth0 # 物理机使用的网卡;可以通过ifconfig查看网卡名称
virtual_router_id 50 #同一个主从节点的标志,比如该主节点填入50,那么BACKUP节点也要是50
mcast_src_ip 192.168.2.50 #真实的物理机ip地址
priority 100 #优先级,要设置的比备用节点的优先级高
advert_int 1 #MASTER节点与BACKUP节点同步检查的时间间隔为1s
nopreempt # nopreempt #设置为不抢占 注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高
authentication {
auth_type PASS #密码认证,主从节点需要设置的一样
auth_pass wtroot
}
track_script {
chk_nginx #调用上面的脚本,名称与上面对应
}
virtual_ipaddress {
192.168.2.10 #虚拟的ip地址,主从一致
}
}

首先nopreempt必须在state为BACKUP的节点上才生效(因为是BACKUP节点决定是否来成为MASTER的),其次要实现类似于关闭auto failback的功能需要将所有节点的state都设置为BACKUP,或者将master节点的priority设置的比BACKUP低。我个人推荐使用将所有节点的state都设置成BACKUP并且都加上nopreempt选项,这样就完成了关于autofailback功能,当想手动将某节点切换为MASTER时只需去掉该节点的nopreempt选项并且将priority改的比其他节点大,然后重新加载配置文件即可(等MASTER切过来之后再将配置文件改回去再reload一下)。

配置文件参考资料

4、与nginx配和使用的脚本

nginx_check.sh

!/bin/bash

A=ps -C nginx --no-header |wc -l
if [ $A -eq 0 ];then
/usr/wt/nginx/sbin/nginx
sleep 2
B=ps -C nginx --no-header |wc -l
if [ $B -eq 0 ];then
killall keepalived
fi
fi

解释

!/bin/bash

A=ps -C nginx --no-header |wc -l #查看nginx的进程数
if [ $A -eq 0 ];then #如果等于0,启动nginx,nginx的启动目录/usr/wt/nginx/sbin/nginx
/usr/wt/nginx/sbin/nginx
sleep 2 #睡眠2s
B=ps -C nginx --no-header |wc -l
if [ $B -eq 0 ];then #nginx如果还是没有启动成功,将keepalived程序关闭
killall keepalived
fi
fi

注意:脚本需要用vi进行创建:vi nginx_check.sh;脚本写完之后,使用 sh nginx_check.sh命令,实现脚本执行是否成功;

如果出现解决执行脚本报syntax error: unexpected end of file或syntax error near unexpected token `fi’错误的问题

我们可以查看该脚本文件的格式,方法是使用命令:vim nginx_check.sh进入编辑文件界

直接输入”:”,然后在”:”之后输入”set ff”,回车即可看到脚本格式,如下图所示,可以看到当前脚本格式是dos。

我们需要把格式改为unix,方法是输入”:set ff=unix”,也可以输入”:set fileformat=unix”

错误详细参考资料

5、常见错误

1) WARNING - script ‘/etc/keepalived/nginx_check.sh’ is not executable for uid:gid 0:0 - disabling.

/etc/keepalived/nginx_check.sh 文件需要授权,不然不能执行:

chmod 777 nginx_check.sh

2)SECURITY VIOLATION - scripts are being executed but script_security not enabled.
Unsafe permissions found for script ‘/etc/keepalived/nginx_check.sh’.

出现这种错误,没有问题,可以不用管

3)Error exec-ing command ‘/etc/keepalived/nginx_check.sh’, error 2: No such file or directory

出现这种问题,就是脚本文件的格式有问题,采用上面的解决办法

4)可以将2个节点都设置为BACKUP,然后都加上nopreempt(不抢占),只依靠谁的优先级高,就使用谁的

5)如果发现,nginx服务挂掉,节点不能切换,可以排除下ps -ef |grep keepalived 是否真的已经杀死了,如果没有杀死,可以将sleep的时间设置的小一点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值