keepalived(1.4.2版本)+nginx实现高可用
-
需要两台或者两台以上的服务器
ip:192.168.198.51(主nginx)
ip:192.168.198.52(从nginx) -
两台服务器都需要安装nginx和keepalived
安装nginx:
https://blog.csdn.net/achi010/article/details/106392040? utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase
安装keepalived:
下载地址:http://www.keepalived.org/download.html
tar xvf keepalived-1.4.2.tar.gz
cd keepalived-1.4.2
./configure --prefix=/usr/local/keepalived
make && make install -
配置keepalived
3.1:拷贝相关目录
mkdir -p /usr/local/keepalived/var/run/
vi /usr/local/keepalived/var/run/keepalived.pid
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/src/keepalived-1.4.2/keepalived/etc/init.d/keepalived /etc/init.d/keepalived
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
3.2:修改/etc/init.d/keepalived启动脚本
vi /etc/init.d/keepalived
#!/bin/sh
#Startup script for the Keepalived daemon
#processname: keepalived
#pidfile: /usr/local/keepalived/run/keepalived.pid
#config: /usr/local/keepalived/etc/keepalived/keepalived.conf
#chkconfig: - 21 79
#description: Start and stop Keepalived#Source function library
./etc/rc.d/init.d/functions#Source configuration file (we set KEEPALIVED_OPTIONS there)
./usr/local/keepalived/etc/sysconfig/keepalived
keepalived=/usr/local/keepalived/sbin/keepalived
keepalived_config=/usr/local/keepalived/etc/keepalived/keepalived.conf
keepalived_pid=/usr/local/keepalived/var/run/keepalived.pid****这是主要添加的
RETVAL=0
prog=“keepalived”
start() {
echo -n $"Starting $prog: "
daemon $keepalived -f ${keepalived_config}
K
E
E
P
A
L
I
V
E
D
O
P
T
I
O
N
S
R
E
T
V
A
L
=
{KEEPALIVED_OPTIONS} RETVAL=
KEEPALIVEDOPTIONSRETVAL=?
echo
[ KaTeX parse error: Expected 'EOF', got '&' at position 16: RETVAL -eq 0 ] &̲& touch /var/lo…prog
}
-
nginx重启脚本
vi /etc/keepalived/nginx_check.sh
#!/bin/bash
A=ps -C nginx –no-header |wc -l
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ps -C nginx --no-header |wc -l
-eq 0 ];then
killall keepalived
fi
fi -
修改主keepalived.conf
vi /etc/keepalived/keepalived.conf
vrrp_script chk_nginx {
script “/etc/keepalived/nginx_check.sh” #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
interval 2 #检测时间间隔
weight -20 #如果条件成立的话,则权重 -20
}定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state MASTER #来决定主从
interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
virtual_router_id 51 # 虚拟路由的 ID 号, 两个节点设置必须一样
mcast_src_ip 192.168.168.51 #填写本机ip
priority 100 # 节点优先级,主要比从节点优先级高
nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
authentication {
auth_type PASS
auth_pass 1111
}将 track_script 块加入 instance 配置块
track_script {
chk_nginx #执行 Nginx 监控的服务
}virtual_ipaddress {
192.168.198.100 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
}
} -
修改从keepalived.conf
vi /etc/keepalived/keepalived.conf
vrrp_script chk_nginx {
script “/etc/keepalived/nginx_check.sh” #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
interval 2 #检测时间间隔
weight -20 #如果条件成立的话,则权重 -20
}定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state BACKUP #来决定主从
interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
virtual_router_id 51 # 虚拟路由的 ID 号, 两个节点设置必须一样
mcast_src_ip 192.168.168.52 #填写本机ip
priority 90 # 节点优先级,主要比从节点优先级高
nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
authentication {
auth_type PASS
auth_pass 1111
}将 track_script 块加入 instance 配置块
track_script {
chk_nginx #执行 Nginx 监控的服务
}virtual_ipaddress {
192.168.198.100 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
}
}
备注:keepalived.conf需要注释掉#vrrp_strict,不然无法ping通 -
keepalived服务控制
systemctl enable keepalived.service #设置开机自动启动 (centos7.0)
systemctl disable keepalived.service #取消开机自动启动
systemctl start keepalived.service #启动服务
systemctl restart keepalived.service #重启服务
systemctl stop keepalived.service #停止服务
systemctl status keepalived.service #查看服务状态