Nginx + Keepalived 实现高可用配置
服务器环境:Centos7.4
目的:为了实现Nginx高可用
Tomcat为了演示明显,我这边安装了Tomcat服务
环境
虚拟IP:192.168.43.15
虚拟机一:192.168.43.12(作主服务器) 安装tomcat、Nginx和Keepalived服务
虚拟机二:192.168.43.13(作从服务器) 安装tomcat、Nginx和Keepalived服务
关闭防火墙
顺序:启动Tomcat--->修改并启动Nginx--->修改并启动Keepalived
步骤一:安装Tomcat并启动(两台服务器上都操作,放个测试页面,这边不做介绍)。效果如下
步骤二:安装Nginx服务,配置反向代理,效果如下(不做详细描述,见另一篇文档) 两台服务器都要
步骤三:安装Keepalived服务
1、安装Keepalived(两台服务器安装)
[root@localhost ~]# yum -y install keepalived [root@localhost ~]# rpm -qa keepalived keepalived-1.3.5-1.el7.x86_64 [root@localhost ~]# rpm -ql keepalived /etc/keepalived /etc/keepalived/keepalived.conf #主配置文件 /etc/sysconfig/keepalived /usr/bin/genhash /usr/lib/systemd/system/keepalived.service ....
2、配置主机名称(两台服务器都修改)
[root@localhost ~]# vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 127.0.0.1 wangzy12 #手动添加,自定义
3、修改主服务器配置
[root@localhost ~]# cd /etc/keepalived/ [root@localhost keepalived]# vi keepalived.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.43.12 #邮箱地址 smtp_connect_timeout 30 router_id wangzy12 #服务器主机名 } #手动添加,执行检测脚本。脚本目录自己定义, vrrp_script chk_http_port { script "/opt/nginx_check.sh" #添加Nginx检测脚本 interval 2 #检测间隔 weight -20 #条件成立,权重-20 } vrrp_instance VI_1 { state MASTER #服务器标注,从服务器改成BACKUP即可 interface ens33 #网卡名称,ifconfig查看即可 virtual_router_id 51 #虚拟路由ID,与从服务器保持一致 priority 100 #优先级,主服务器要比从服务器高 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.43.15 #虚拟访问IP } }
4、修改主服务器配置
[root@localhost ~]# cd /etc/keepalived/ [root@localhost keepalived]# vi keepalived.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.43.12 #邮箱地址 smtp_connect_timeout 30 router_id wangzy13 #服务器主机名 } #手动添加,执行检测脚本。脚本目录自己定义, vrrp_script chk_http_port { script "/opt/nginx_check.sh" #添加Nginx检测脚本 interval 2 #检测间隔 weight -20 #条件成立,权重-20 } vrrp_instance VI_1 { state MASTER #服务器标注,从服务器改成BACKUP即可 interface ens33 #网卡名称,ifconfig查看即可 virtual_router_id 51 #虚拟路由ID,与从服务器保持一致 priority 90 #优先级,主服务器要比从服务器高 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.43.15 #虚拟访问IP } }
5、添加检测脚本(两台服务都添加)
[root@localhost ~]# vi /opt/nginx_check.sh #!/bin/bash A=`ps -C nginx -no-header |wc -l` if [ $A -eq 0 ];then /opt/tengine-2.3.2/sbin/nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
[root@localhost ~]# chmod 755 /opt/nginx_check.sh
6、启动Keepalived主服务器
[root@localhost ~]# systemctl start keepalived
[root@localhost ~]# systemctl status keepalived
7、启动Keepalived从服务器
[root@localhost ~]# systemctl start keepalived
[root@localhost ~]# systemctl status keepalived
8、查看虚拟IP情况
主服务器(43.12):
[root@localhost ~]# ip a
从服务器(43.13):
[root@localhost sbin]# ip a
9、访问效果
访问虚拟地址:http://192.168.43.15/ ,展现的页面为主服务页面
10、关闭主服务故障的Keepalived和Nginx,模拟主服务故障,看页面是否正常
1、主服务操作
[root@localhost sbin]# systemctl stop keepalived [root@localhost sbin]# ./nginx -s stop [root@localhost sbin]# ps -ef|grep nginx root 2497 1042 0 16:03 pts/0 00:00:00 grep --color=auto nginx [root@localhost sbin]# ip a
2、从服务器查看虚拟IP是否跳转过来
[root@localhost sbin]# ip a
3、再次访问虚拟地址:http://192.168.43.15/ 页面,可以看到服务器已经自动跳转到了从服务上,但是访问地址还是不变的。由此实现了Keepalived高可用
结尾:当我们将主服务服务重新启动后,访问地址不会自动跳转到主服务上去,但是从服务服务挂掉后就又自动跳转到主服务器。从而让我们有足够的时间优化配置服务器