安装keepalived,从源码构建,可以先到官网下载源码,安装所需依赖
安装gcc的c++编译环境:yum install gcc-c++
安装解析正则表达式的库:yum install -y pcre pcre-devel
安装数据压缩函式库:yum install -y zlib zlib-devel
安装用于安全通信的库:yum install -y openssl openssl-devel
安装Linux系统基于Netlink协议通信的API接口库,用于支持ipv6:yum install libnl libnl-devel -y
源码上传服务器,解压源码,进入keepalived解压目录,执行以下命令配置:
./configure --prefix=/usr/local/keepalived --sysconf=/etc
配置完成,没有问题执行以下命令进行安装:make && make install
具体可参照这里
配置keepalived日志路径
vi /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS=“-D -S 0 -d”
-S 0 代表local0,local0在rsyslog.conf中需要配置,所以编辑这个文件
vi /etc/rsyslog.conf
加上以下一行,将local0设备的所有日志都放到keepalived.log中
local0.* /var/log/keepalived.log
如果是已经启动过服务的需要重启服务,否则不需要,rsyslog必须要重启,keepalived由于我们现在是第一次配置,还没有重启过,所以keepalived可以不用重启。
systemctl restart rsyslog
systemctl restart keepalived #根据需要重启
安装nginx
可以使用源码,也可以使用yum安装,这里为了方便就使用yum安装了。
配置yum repo,创建文件/etc/yum.repos.d/nginx.repo,配置以下内容
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
安装 yum-utils
yum install yum-utils
这个可以装可以不装,因为以后可能会用到这个工具,索性先装了,和我们这次安装nginx没有关系。
执行以下命令安装nginx
yum install nginx
nginx配置就不详细说了。
keepalived配置
首先是配置master
! Configuration File for keepalived
global_defs {
#路由id,全局唯一,表示当前keepalived节点的唯一性
router_id rs_master
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh" ##监控脚本
interval 2 ##时间间隔,2秒
weight 2 ##权重
}
vrrp_instance VI_1 {
#设置当前实例状态为MASTER。MASTER代表是主实例,BACKUP代表是备用实例
state MASTER
#当前实例绑定的网卡
interface eth2
#当前实例的虚拟路由id,一组主备的实例的路由id是相同的
virtual_router_id 51
#当前实例的优先级
priority 100
#主备之间同步检查时间间隔
advert_int 1
#一组主备实例的认证密码,方式非法节点进入路由组
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_nginx #监控脚本
}
#设置当前实例的虚拟IP
virtual_ipaddress {
192.168.1.100/24
}
}
slave的配置就不贴了,差不多,但是有几个地方不同
state 要改为BACKUP
priority 改小一点,比MASTER的小就行了。
router_id 也换一下,唯一就行了。
接下来是nginx检查文件,就是用来检查nginx是否还活着,如果nginx挂了,那么就杀掉keepalived这样就是实现故障转移了。
#!/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
备机也是一样的配置,这时候就可以测试了,可以手动停掉任何一边的服务,无论是keepalived或者是nginx,如果还能继续访问,那么就成功实现了故障转移,如果不能访问那么就要考虑一下是否配置有问题了。