尚硅谷nginx教程-7nginx配置示例-配置高可用的集群
1.什么是nginx的高可用?
1.1普通模式的问题
发送一个请求,先到nginx,再由nginx转发到不同的服务器中去。
问题:
- 1.tomcat宕机,会自动从列表中剔除。
- 2.nginx宕机,请求就无法实现
1.2高可用
高可用就是nginx宕机了,依然可以正常请求。
2台Nginx服务器,1台主服务器,1台从服务器。主nginx挂掉,就自动切换到从nginx上,让它作为主nginx进行网络访问。
主从服务器需要用keepalived,其类似一个路由,通过一组脚本来检测当前的nginx服务器是否还活着。如果还活着,就进行访问;如果宕机了,就切换到另一台备用的nginx。
虚拟IP:这个IP不存在,但我们是通过这个IP访问。假如虚拟IP是192.168.17.50,现在对外是用192.168.17.50进行访问,而把这个IP绑定到服务器中,类似绑定一个网卡。当keepalived检测到主nginx挂掉之后,把虚拟Ip绑定到备份服务器中。
按照这个过程,就可以实现nginx的高可用效果,这是主-从模式。
2.准备工作
在操作中,需要一个nginx主服务器和nginx备份服务器。另外在主和备里面,都需要keepalived,同时需要一个虚拟IP进行绑定。虚拟IP不是实际存在的,但用它可以进行nginx的访问。
2.1 准备2台nginx服务器
2.2 安装配置keepalived
# 安装keepalived
yum install -y keepalived
# 确认安装成功
rpm -q -a keepalived
keepalived配置文件:/etc/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 LVS_DEVEL #通过这个名字能访问到主机,其余用处不大
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# 相关脚本配置
vrrp_script chk_http_port{
script "/usr/local/src/nginx_check.sh"
interval 2 #检测脚本执行的间隔
weight 2 #权重。当脚本的条件成立,把当前的权重加2;如果值为负数(-20),就减少20。通过修改weight来改变主从服务器
}
# 虚拟IP的配置
vrrp_instance VI_1 {
state MASTER #主MATER 从BACKUP
interface enp0s3 #网卡 通过ifconfig查看
virtual_router_id 51 #主从机的virtual_router_id必须相同
priority 100 #主从机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #心跳时间间隔,用于检测主机或服务器是否还活着,默认1秒。表示每隔多长时间发生一个心跳
authentication { #权限校验方式
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #通过它就可以完成keepalived的配置
172.16.1.50
}
}
从服务器只需要修改虚拟IP的state和priority即可。
需要的脚本/usr/local/src/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
3. 验证
3.1 启动nginx和keepalived
在两台服务器中分别启动nginx和keepalived
./nginx -s stop
./nginx
systemctl start keepalived.service
3.2 查看虚拟IP
启动成功后,进入服务器,可以查看到虚拟IP已经绑定到网卡
ip a
3.3 浏览器验证
1.浏览器输入地址 http://172.16.1.50/ ,能访问到nginx,证明主服务器可用。
2.主服务器停止nginx和keepalived,再次访问 http://172.16.1.50/ ,依然能访问到nginx,证明从服务器可用
# 先停止keepalived
systemctl stop keepalived.service
# 再停止nginx
./nginx -s stop
3.从服务器停止nginx和keepalived,再次访问 http://172.16.1.50/ ,应该访问失败。