nginx,大家都知道,可以反向代理像tomcat这样的web服务器集群,当多台tomcat集群中的一台服务器宕机了,nginx会为我们自动剔除,这里大家就会有疑问,如果nginx宕机了,谁来剔除它呢,今天我们就来搭建一个高可用的nginx集群,这里用到一个技术,就是keepalive。
什么是keepalive
根据百度百科的解释,keepalive,是在TCP中一个可以检测死连接的机制,这里大家多少就能理解一些,它可用做监听像nginx这样web服务器是否在运行,并且当web服务器宕机的时候,来剔除它们。
安装keepalive
# yum install keepalived
查看keepalive启动状态
# service keepalived status
出现下边信息说明启动成功
Active: active (running)
nginx主服务器的搭建
- 两台nginx服务器,一台主服务器和一台从服务器
- 并且两台机器都装有keepalive
- 添加主服务器的主机名
# vi /etc/hosts
添加下边主机名,保存并推出
127.0.0.1 LVS_DEVEL
- 查看网卡名
# ifconfig
这里我的网卡名是ens33
- 修改keepalive的配置文件
# cd /etc/keepalived/
# vi keepalived.conf
把下边的内容,替换到配置文件中,粗体部分按照自己机器的实际情况修改,LVS_DEVEL是上边我们修改的主机名
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.100.101
smtp_connect_timeout 30
router_id LVS_DEVEL
}vrrp_script chk_http_post{
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.101.166
}
}
- 重启keepalive
# service keepalived restart
- 查看keepalive启动状态
# service keepalived status
出现下边信息说明启动成功
Active: active (running)
- 查找到nginx的安装路径,找到sbin的nginx路径
# find / -name nginx
找到下边的路径,先记录下,下边检测脚本用到这个路径
/var/lib/docker/overlay2/c2d7c7af61de59b1de3f5021e487f850104bcf287496367ace20effa6a086a5d/diff/usr/sbin/nginx
- 切换到/usr/local/src/路径下
# cd /usr/local/src/
创建检测脚本文件
# vi nginx_check.sh
把下边的内容粘贴到nginx_check.sh文件中,粗体部分是上边我们查找到的nginx的安装路径
#!/bin/bash
A=`ps -C nginx -no-header |wc -l`
if [ $A -eq 0 ];then
/var/lib/docker/overlay2/c2d7c7af61de59b1de3f5021e487f850104bcf287496367ace20effa6a086a5d/diff/usr/sbin/nginx
sleep 2
if [`ps -C nginx -no-header |wc -l` -eq 0];then
killall keepalived
fi
fi
nginx从服务器的搭建
- 搭建从服务器,我们使用vm12的克隆机制,从主服务器拷贝一台从服务器出来,具体操作,百度一下应该能出来
- 拷贝从服务器完成后,修改从服务器ip,并重启network
# systemctl restart network
我这里主服务的ip是192.168.100.101,从服务器ip设置成192.168.100.102
- 添加从服务器的主机名
# vi /etc/hosts
添加下边主机名,保存并推出
127.0.0.1 LVS_DEVELBACK
- 修改从服务器的keepalive的配置文件,下边粗体部分
# cd /etc/keepalived/
# vi keepalived.conf
把下边的内容,替换到配置文件中,具体的配置,后边会提到
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.100.101
smtp_connect_timeout 30
router_id LVS_DEVELBACK
}vrrp_script chk_http_post{
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2}
vrrp_instance VI_1 {
state BAKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.101.166
}
}
- 重启keepalive
# service keepalived restart
- 查看keepalive启动状态
# service keepalived status
出现下边信息说明启动成功
Active: active (running)
测试
我们上边配置的keepalived 配置文件中,开放的虚拟ip(192.168.100.166)能访问两台nginx,两台虚拟机的nginx的ip是192.168.100.101,192.168.100.102,端口都是9001。首先我们停掉192.168.100.101的nginx和keepalived,访问192.168.100.166:9001照常能访问到nginx。一切OK。