目录
一、高可用集群简介
到这里,我们目前的实验都是让Nginx扮演一个核心角色,同时我们不得不思考一个现实的问题,Nginx作为一个软件,不可能一直处于启动状态,万一Nginx出现故障或者Nginx服务器出现宕机,那么对于其承载的服务是毁灭性的,客户端的请求自然就无法处理。所以我们在使用Nginx时,一般最少需要配置两个,防止一个Nginx宕机无法响应。这就是Nginx的高可用集群。
现在我们可以了解到,Nginx服务器一般都需要两台,如图所示一台我们称为master,一台我们称为backup,正常情况下,master负责主要的实现主要的功能,如果master出现故障,就要迅速切换到backup中去,这就实现了高可用性。这里面的keepalived就相当于一个路由,用来检测master是否还能不能正常运行;由于master和backup是两台服务器,牵扯到两个IP地址,所以要对外使用一个虚拟的IP地址,对外使用虚拟IP地址进行访问。
二、配置实例(主从)
2.1 准备工作
- 需要两台服务器 192.168.73.128 和 192.168.73.129
- 在两台服务器安装 nginx
- 在两台服务器安装 keepalived
(1)安装Nginx就不做过多解释,这里有具体介绍。
https://blog.csdn.net/weixin_43997530/article/details/115376031
(2)使用yum命令安装keepalived。这里需要虚拟机联网,将虚拟机的网络模式设置为NAT模式
[root@localhost ~]# yum install keepalived -y
[root@localhost etc]# ls | grep keep
keepalived
[root@localhost etc]# cd keepalived/
[root@localhost keepalived]# ls //安装完成后我们可以在/etc找到keepalived目录
keepalived.conf
2.2 配置
(1)修改/etc/keepalived/keepalivec.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.73.128
smtp_connect_timeout 30
router_id LVS_DEVEL //配置router_id
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_nginx {
script "/usr/local/src/nginx_check.sh"
interval 2 //检测脚本执行的间隔
weight 2 //如果失败,本地priority优先级会降低2
}
vrrp_instance VI_1 {
state MASTER //备份服务器上将 MASTER 改为 BACKUP
interface ens160 //绑定的网卡
virtual_router_id 51 //主、备机的 virtual_router_id 必须相同
priority 100 //主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication { //Keepalived高可用对之间需要做认证,认证参数必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.73.10 //虚拟地址
}
}
track_script {
check_nginx //调用上面的监控脚本
}
(2)接下来我们需要编写脚本文件,将keepalived与Nginx做一个联系;在/usr/local/src 添加检测脚本。
[root@localhost sbin]# vim /usr/local/src/nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header | wc -l`
if [ $A -eq 0 ];then
systemctl stop keepalived
fi
注:查看是否有 nginx进程 把值赋给变量A,如果没有进程,值得为零,则结束 keepalived 进程。
(3) 启动两台服务器上的Nginx和keepalived
启动 nginx:./nginx
启动 keepalived:systemctl start keepalived.service
(4)测试 :在浏览器上输入虚拟ip地址,当我们查看网卡时,可以看到网卡上绑定有虚拟IP地址,结果如下图所示:
注:这里如果浏览器上不能访问到Nginx主页面的话,可以尝试将防火墙关闭和selinux关闭。
[root@localhost sbin]# setenforce 0
[root@localhost sbin]# systemctl stop firewalld.service
把主服务器上的Nginx和keepalived停止掉,在输入虚拟IP地址,可以看到虚拟IP已经绑定到了129的网卡上了。
[root@localhost sbin]# ./nginx -s stop //在这里如果停掉Nginx,就会执行脚本文件,keepalived也会被停掉,就不需要我们手动关闭。
[root@localhost sbin]# systemctl stop keepalived.service
[root@localhost sbin]# ps -ef | grep keepalived
root 42131 3228 0 09:07 pts/1 00:00:00 grep --color=auto keepalived
[root@localhost sbin]# ps -ef | grep nginx
root 42135 3228 0 09:07 pts/1 00:00:00 grep --color=auto nginx