试验环境 proxy1 192.168.25.90 master
Proxy2 192.168.25.91 slave
Keepalived 虚拟ip 192.168.25.100
关闭防火墙 systemctl disable firewalld --now
关闭selinux setenforce 0
Sed -i ‘7s/enforking/disabled’ /etc/selinux/config
配置yum源
Curl-o/etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum安装基础包 gcc make pcre-devel openssl-devel bash-completion
Net-tools keepalived
源码编译安装nginx
解压nginx-1.8.tar.gz cd 到解压目录
./configure --with-http_ssl_module --wiht-http_stub_status --with-stream
Make && make install
因为nginx是源码编译的所以没有service文件,当然也可以自己手写service文件,
具体方法百度
Upstream web {
Server 192.168.25.90:8888;
Server 192.168.25.91:8888;
}
Location / {
Proxy_pass http://web;
}
/usr/local/sbin/nginx 开启nginx
/usr/local/sbin/nginx -s reload 重启
/usr/loacl/sbin/nginx -s stop 关闭
Vim /etc/keepalived/keepalived.conf 具体配置如下
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc #发邮件的账户
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1 #邮件服务器
smtp_connect_timeout 30
router_id nginx_backup
}
vrrp_script check_nginx {
script "/etc/keepalived/nginx_check.sh" #nginx状态检查脚本
interval 2 #间隔
weight -30
}
vrrp_instance VI_1 {
state MASTER #主服务器 也就是虚拟ip所在的服务器
interface ens192 #网卡名,必须跟需要使用的网卡名称一致
virtual_router_id 51 #序列号
priority 100 #优先级默认是100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script { #启动脚本
check_nginx #脚本的名称
}
virtual_ipaddress {
192.168.25.95/24 #vip 也就是虚拟ip
}
}
配置完毕 配置slave服务器 别的配置都大体一致就是keepalived的配置文件需要修改
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id nginx_backup
}
vrrp_script check_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -30 #脚本执行失败则减30优先值
}
vrrp_instance VI_1 {
state BACKUP #slave服务器这里是BACKUP
interface ens192
virtual_router_id 51
priority 80 #优先值不同
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_nginx
}
virtual_ipaddress {
192.168.25.95/24
}
}
配置完毕重启keepalived
脚本: /etc/keepalived/nginx_check.sh
#!/bin/bash
num=`ps -C nginx --no-header |wc -l `
if [ $num -eq 0 ]; then
/usr/local/nginx/sbin/nginx
sleep 2
if [ ` ps -C nginx --no-header |wc -l ` -eq 0 ];then
Exit 1
fi
fi
Nginx状态检查 脚本的大体意思是 检查nginx进程 当进程号的数量等于0时 开启nginx服务,等待俩秒再次检查nignx的进程数量,当进程的数量还是等于0,则认定这台服务器上的nginx出现故障,然后退出返回错误码非0,keepalived就会自动降级,从而实现跳转ip
都配置完毕后可以ip a s 查看ip 这里可以看到ens192上增加了虚拟ip 25.95,如果没有master上没有ip则重启所有的keepalived服务,等待俩秒再次查看,如果还是没有虚拟ip
可能是配置文件写错了 或者俩台主机不能正常通信,所以无法获取虚拟ip,具体原因可以查看keepalived的日记文件 默认在/var/log/message下