相关资源下载地址:资源包+教程
1、keepalived是什么
我们知道当tomcat宕机后nginx会自动排除宕机服务器,采用正常的tomcat访问。nginx宕机呢?
方案:提供主备nginx两台服务器,用keepalived做路由提供访问。当主nginx服务器宕机后会自动切换到备用nginx服务器上。
2、环境准备
三台服务器
IP 192.168.17.104 Windows7 用来测试
IP 192.168.17.129 Linux 主机
IP 192.168.17.131 Linux 从机
虚拟IP 192.168.17.50
注:实施现场虚拟ip必须保证交换机开放该ip
3、安装keepalived
3.1 离线安装
- 解压缩
tar -zxvf keepalived-2.0.20.tar.gz
- 进入到解压完的目录
cd keepalived-2.0.20
./configure --prefix=/usr/local/keepalived
- 编译与安装
make && make install
- 完成后生成 bin etc sbin share 4个文件夹,keepalived.conf配置文在/usr/local/keepalived/etc/keepalived下
- 创建拷贝配置文件到/etc/keepalived/中,因为keepalived默认读取该位置的配置文件
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
注:不同版本离线文件有的缺少依赖包比较麻烦,能yum最好yum
3.2 yum 安装
yum install keepalived -y
默认安装位置为:/etc/keepalived
4、配置高可用
修改192.168.17.129 服务器的/etc/keepalived/keepalived.conf文件
global_defs {
#notification_email {
# root@networkquestions.org #定义报警邮件
#}
#notification_email_from warn@networkquestions.org #定义发件人
#smtp_server localhost #指定smtp服务器,这里直接改为localhost
#smtp_connect_timeout 30 #smtp连接超时时间
router_id 192.168.17.129 #标识id,通常为 hostname,或者当前部署机器的IP
#vrrp_skip_check_adv_addr
#vrrp_garp_interval 0
#vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 3 #(检测脚本执行的间隔/秒)
weight 20 #执行sh后,修改当前服务器权重
}
vrrp_instance VI_1 {
state MASTER #设置为主服务器,备用服务器应设置为BACKUP
interface eth0 #定义虚拟ip绑定接口 ifconfig命令查询
virtual_router_id 51 #VRRP组名,两个节点必须一样,指明各个节点属于同一VRRP组
#mcast_src_ip 192.168.17.129 #发送多播包的地址,如果不设置默认使用绑定的网卡
priority 100 #优先级,必须高于从服务器
advert_int 1 #组播信息发送间隔,检测nginx状态,两个节点设置必须一样
authentication { #认证,默认即可。主从需一致。
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.17.50 #绑定的虚拟ip,可以绑定多个,换行填写
}
}
192.168.17.131 安装步骤相同修改从服务器配置为
global_defs {
#notification_email {
# root@networkquestions.org #定义报警邮件
#}
#notification_email_from warn@networkquestions.org #定义发件人
#smtp_server localhost #指定smtp服务器,这里直接改为localhost
#smtp_connect_timeout 30 #smtp连接超时时间
router_id 192.168.17.131 #标识id,通常为 hostname,或者当前部署机器的IP
#vrrp_skip_check_adv_addr
#vrrp_garp_interval 0
#vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 3 #(检测脚本执行的间隔/秒)
weight 20 #执行sh后,修改当前服务器权重
}
vrrp_instance VI_1 {
state BACKUP #设置为主服务器,备用服务器应设置为BACKUP
interface eth0 #定义虚拟ip绑定接口 ifconfig命令查询
virtual_router_id 51 #VRRP组名,两个节点必须一样,指明各个节点属于同一VRRP组
#mcast_src_ip 192.168.17.131 #发送多播包的地址,如果不设置默认使用绑定的网卡
priority 90 #优先级,必须低于从服务器
advert_int 1 #组播信息发送间隔,检测nginx状态,两个节点设置必须一样
authentication { #认证,默认即可。主从需一致。
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.17.50 #绑定的虚拟ip,可以绑定多个,换行填写
}
}
5、创建nginx检测脚本nginx_check.sh
如果 nginx 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进程,keepalived将虚拟 ip 绑定到 BACKUP 机器上。内容如下:
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 5
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
6、启动nginx和keepalived
keeplived启动命令:
systemctl start keepalived.service
或者
service keepalived start
启动检查:
ps -ef | grep keepalived
或者
systemctl status keepalived.service
keepalived运行时,会启动3个进程,分别为:core(核心进程),check和vrrp
停止keepalived服务:
systemctl stop keepalived.service
或者
service keepalived stop
7、测试
主从服务器keepalived启动后通过ip a 可以查看浮动ip在哪台机器上
- 关闭含有浮动ip的服务器keepalived后重新查看ip a
- 当前服务器浮动ip消失,另一台服务器浮动ip加载
- 如果只关闭nginx,keepalived的nginx_check.sh脚本会自动探活nginx,重新启动该机器的nginx,如果nginx启动成功则浮动ip映射不变。
- windows测试服务器可直接访问浮动ip+nginx端口号测试页面效果