Keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived是自动完成,不需人工干涉。
本文详细介绍使用keepalived实现最简单的双机热备,并使用Nginx进行验证。
环境:CentOS 7 64位、Keepalived-1.2.18、Nginx-1.6.2。
一、虚拟机安装
1、网络设置
本文使用的是VMware Workstation 15 Player
,创建两个虚拟机,分别命名为CentOS 7 64位 M
和CentOS 7 64位 B
,M表示"master"主服务器,B表示"backup"备用服务器。
网络连接选择NAT模式
,启动后使用ip add
发现没有自动分配ip地址,是因为CentOS 7默认是不启动网卡的,解决方法如下:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
打开配置文件,把ONBOOT=no
这一项改为ONBOOT=yes
,然后:wq
保存退出,然后重启网络服务:
sudo service network restart
这时候再输入ip add
会发现ip地址有了。
本文Master ip为192.168.56.131
,Bcakup ip为192.168.56.132
。
虚拟ip(vip)定义为192.168.56.188
。
二、Nginx部署
1、安装wget
yum -y install wget
2、下载并解压Nginx
wget http://nginx.org/download/nginx-1.6.2.tar.gz
tar -zxvf nginx-1.6.2.tar.gz
3、下载所需要的依赖库文件
yum -y install pcre
yum -y install pcre-devel
yum -y install zlib
yum -y install zlib-devel
4、配置
安装gcc
yum -y install gcc
进入nginx-1.6.2并执行configure文件
cd nginx-1.6.2
./configure
5、编译并安装Nginx
make && make install
成功后会在/usr/local/nginx目录下看到conf、html、logs、sbin
四个目录。
6、启动Nginx
启动命令:
/usr/local/nginx/sbin/nginx
停止命令:
/usr/local/nginx/sbin/nginx -s stop
重启命令:
/usr/local/nginx/sbin/nginx -s reload
使用如下命令查看相关端口是否已启动Nginx
netstat -ano | grep 80
或
lsof -i:80
浏览器输入Master的ip地址:http://192.168.56.131
,出现Nginx的欢迎页面即成功启用Nginx。
同理,Backup浏览器输入:http://192.168.56.132
,同样出现Nginx的欢迎页面。
注意这个地方,html中最后一行"Thank you for using nginx."
本文针对Master和Backup分别进行了修改便于热备时更好的区分服务是否切换成功,修改的文件在
/usr/local/nginx/html/index.html
如果启动成功,但进入不了欢迎页面,则可能需要关闭firewalld防火墙:
systemctl stop firewalld.service
systemctl disable firewalld.service
三、Keepalived安装
1、下载并解压Keepalived
wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz
tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
2、安装依赖软件包openssl
yum install -y openssl openssl-devel
3、配置
进入keepalived-1.2.18并执行configure文件
cd keepalived-1.2.18
./configure --prefix=/usr/local/keepalived
4、编译并安装keepalived
make && make install
5、将keepalived安装成Linux系统服务
在/etc/
目录下创建keepalived文件夹
mkdir /etc/keepalived
将keepalived配置文件复制到/etc/keepalived下
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
将keepalived脚本文件复制到/etc/相关目录下
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
创建keepalived软链接
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
设置开机启动
chkconfig keepalived on
安装完毕。
四、修改keepalived配置文件
进入/etc/keepalived/目录下打开keepalived.conf文件进行修改
vi /etc/keepalived/keepalived.conf
1、Master
! Configuration File for keepalived
global_defs {
router_id localhost.localdomain ##标识节点的字符串,通常为hostname
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ##执行脚本位置
interval 2 ##检测时间间隔
weight -20 ## 如果条件成立则权重减20,这样恢复时优先级低于另一台就会自动变为BACKUP
}
## 定义虚拟路由 VI_1为自定义标识。
vrrp_instance VI_1 {
state MASTER ## 主节点为MASTER,备份节点为BACKUP
## 接口设置 与本虚拟机ifconfig或ip address的接口相同
interface ens33
virtual_router_id 131 ## 虚拟路由ID号,两台虚拟机保证这个数字相同一致
mcast_src_ip 192.168.56.131 ## 本机ip地址
priority 100 ##优先级配置(0-254的值),数字越大等级越高
nopreempt ## 不抢占
advert_int 1 ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
authentication {
auth_type PASS ## vrrp协议 保证两虚拟机一致
auth_pass zxn ## 真实生产环境下对密码进行匹配
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.56.188 ## 虚拟地址(vip),可以指定多个
}
}
2、Backup
! Configuration File for keepalived
global_defs {
router_id zxn132 ##标识节点的字符串,通常为hostname
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ##执行脚本位置
interval 2 ##检测时间间隔
weight -20 ## 如果条件成立则权重减20,这样恢复时优先级低于另一台就会自动变为BACKUP
}
## 定义虚拟路由 VI_1为自定义标识。
vrrp_instance VI_1 {
state BACKUP ## 主节点为MASTER,备份节点为BACKUP
## 接口设置 与本虚拟机ifconfig或ip address的接口相同
interface ens33
virtual_router_id 131 ## 虚拟路由ID号,两台虚拟机保证这个数字相同一致
mcast_src_ip 192.168.56.132 ## 本机ip地址
priority 90 ##优先级配置(0-254的值),比MASTER少就行
nopreempt ## 不抢占
advert_int 1 ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
authentication {
auth_type PASS ## vrrp协议 保证两虚拟机一致
auth_pass zxn ## 真实生产环境下对密码进行匹配
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.56.188 ## 虚拟地址(vip),可以指定多个
}
}
3、nginx_check.sh脚本
在/etc/keepalived/目录下创建sh脚本文件
1、安装nano
yum -y install nano
2、使用nano创建nginx_check.sh脚本
sudo nano nginx_check.sh
3、打开nginx_check.sh并编辑如下内容
#!/bin/bash
# 如果进程中没有nginx则将keepalived进程kill掉
A=`ps -C nginx --no-header |wc -l` ## 查看是否有 nginx进程 把值赋给变量A
if [ $A -eq 0 ];then ## 如果没有进程值得为零
service keepalived stop ## 则结束 keepalived 进程
fi
(注意`符号,非'符号)
4、脚本授权
chmod +x /etc/keepalived/nginx_check.sh
五、启动Nginx和Keepalived
安装并配置完毕后,可以分别启动两台虚拟机上的Nginx和Keepalived进行热备的验证了。
启动Nginx:
/usr/local/nginx/sbin/nginx
启动Keepalived:
service keepalived start
关闭Keepalived:
service keepalived stop
查看nginx进程:
ps -ef | grep nginx
查看keepalived进程:
ps -ef | grep keepalived
分别启动Nginx和Keepalived后,Master输入ip add
查看ip多了一个192.168.56.188
打开浏览器输入ip地址:http://192.168.56.188
看到Nginx的欢迎页面
此时nginx131说明为主节点。
然后我们将Keepalived关闭
service keepalived stop
或kill掉Nginx进程,因为有nginx_check.sh脚本会检测如果没有Nginx进程运行也会自动将Keepalived关闭
ps -ef |grep nginx
kill xxxxx
会发现,节点由Master切换到了Backup:
热备成功。