简介
假设主服务器挂掉之后,会自动切换到备份服务器,而备份服务器也可以将请求转发到不同的tomcat中去,这就是高可用的效果。
主备服务器中需要用到一个软件,名字叫做keepalived,它相当于是一个路由,它里面会通过一个脚本来检测Nginx是否还活着,如果还活着,则进行访问,否则将切换到另一台备份服务器,在这个过程中,它需要对外展示一个虚拟IP,这个IP实际上是不存在的,但是我们需要通过这个IP来进行访问,首先主服务器要绑定这个IP,假设主服务器挂掉之后,keepalived会将虚拟IP绑定到备份服务器,以此实现高可用的效果。
具体实现
-
准备工作
(1) 需要两台服务器
(2) 在两台服务器上安装Nginx
(3) 在两台服务器上安装Keepalived
# 因为我的电脑装了MySQL,所以需要下载MySQL依赖,这个看个人情况,可以直接尝试安装keepalived,安装不成功,会有提示 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm # 安装依赖 rpm -ivh mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm # 安装keepalived yum install keepalived -y # 验证是否安装成功 rpm -q -a keepalived
-
进行主从配置
修改两台服务器上的
/etc/keepalived/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.2.190 # 备机更改为自己的IP smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" interval 2 #(检测脚本执行的间隔) weight 2 } vrrp_instance VI_1 { state MASTER // 备份服务器上MASTER改为BACKUP interface ens33 //网卡 virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同 priority 100 # 主、备机取不同的优先级,主机值较大100,备份机值较小90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.2.30 // VRRP H 虚拟地址 } }
-
在
/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
-
启动两台服务器的Nginx和Keepalived
# 启动Nginx ./nginx # 启动Keepalived systemctl start keepalived.service
-
测试
(1)输入虚拟IP访问
(2)停止主服务器的Nginx和Keepalived,再次访问虚拟IP
# 停止Nginx ./nginx -s stop # 停止Keepalived systemctl stop keepalived.service