> 文档中心 > nginx与keepalived的那些事

nginx与keepalived的那些事

文章目录

    • 1.含义
    • 2.工作原理
    • 3.环境准备
    • 4.配置过程
    • 5.高可用切换试验
    • 6.配置WEB站点
    • 7测试集群情况

1.含义

keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived是自动完成,不需人工干涉。
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

2.工作原理

Layer3,4,5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:
Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。
Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
Layer5:Layer5对指定的URL执行HTTP GET。然后使用MD5算法对HTTP GET结果进行求和。如果这个总数与预期值不符,那么测试是错误的,服务器将从服务器池中移除。该模块对同一服务实施多URL获取检查。如果您使用承载多个应用程序服务器的服务器,则此功能很有用。此功能使您能够检查应用程序服务器是否正常工作。MD5摘要是使用genhash实用程序(包含在keepalived软件包中)生成的。
SSL_GET与HTTP_GET相同,但使用SSL连接到远程Web服务器。
MISC_CHECK:此检查允许用户定义的脚本作为运行状况检查程序运行。结果必须是0或1.该脚本在导演盒上运行,这是测试内部应用程序的理想方式。可以使用完整路径(即/path_to_script/script.sh)调用可以不带参数运行的脚本。那些需要参数的需要用双引号括起来(即“/path_to_script/script.sh arg 1 … arg n”)

3.环境准备

在这里插入图片描述

[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core)

服务器详情

IP 作用
192.168.180.131 keepalived+nginx(主)
192.168.180.132 keepalived+nginx(从)
192.168.180.133 web站点(tomcat)
192.168.180.134 web站点(tomcat)

4.配置过程

在LB01和LB02上安装keepalived(yum安装)

yum install keepalived -y

修改配置文件

vim /etc/keepalived/keepalived.conf

配置如下
LB01:

! Configuration File for keepalivedglobal_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 LB01   vrrp_skip_check_adv_addr   vrrp_strict   vrrp_garp_interval 0   vrrp_gna_interval 0}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.110.200/24 dev ens33 label ens33:1    }}

LB02

! Configuration File for keepalivedglobal_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 LB02   vrrp_skip_check_adv_addr   vrrp_strict   vrrp_garp_interval 0   vrrp_gna_interval 0}vrrp_instance VI_1 {    state BACKUP    interface ens33    virtual_router_id 51    priority 90    advert_int 1    authentication { auth_type PASS auth_pass 1111    }    virtual_ipaddress { 192.168.110.200/24 dev ens33 label ens33:1    }}

主要配置注释

  • router_id 是路由标识,在一个局域网里面应该是唯一的;
  • vrrp_instance VI_1{…}这是一个VRRP实例,里面定义了keepalived的主备状态、接口、优先级、 认证和IP信息;
  • state 定义了VRRP的角色;
  • interface定义使用的接口,这里我的服务器用的网卡都是eth1,根据实际来填写
  • virtual_router_id是虚拟路由ID标识,一组的keepalived配置中主备都是设置一致
  • priority是优先级,数字越大,优先级越大
  • auth_type是认证方式
  • auth_pass是认证的密码
  • virtual_ipaddress{…}定义虚拟IP地址,可以配置多个IP地址,这里我定义为192.168.101.200,绑定了ens33的网络接口,虚拟接口ens33:1
    启动keepalived
systemctl start keepalived.service

写入开机自启动

echo "systemctl start keepalived.service" >> /etc/rc.local

查看进程(3个进程)

ps -ef|grep keepalived

nginx与keepalived的那些事
过几分钟,可以看到LB01(MASTER)上生成了一个虚拟IP,我们称之为VIP

ifconfig ens33:1

nginx与keepalived的那些事

VIP即为虚拟IP
正常情况下只会在主节点上生产VIP,当主节点发生故障时,自动漂移到备节点,当两个节点同时出现VIP时,此时服务不可用,我们称之为"脑裂".

5.高可用切换试验

停掉LB01主节点服务,查看备节点状态

systemctl stop keepalived.service

在这里插入图片描述
可以看到VIP已经漂移到了备节点,现在我们将主节点起来,此时主节点会再将VIP夺回来
在这里插入图片描述
而备节点VIP消失
在这里插入图片描述
此时基本可以断定keepalived配置正确
nginx安装
LB01与LB02上,获取nginx源地址

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

执行yum安装

yum install -y nginx

启动Nginx

systemctl start nginx

在/root下新建nginx状态监测脚本

#vim /root/check_ng.shnginx_num=` ps -ef|grep nginx|grep -v grep|wc -l`if [ $nginx_num -eq 0 ]   then     systemctl stop  keepalivedfi

在keepalived配置监测脚本路径(此脚本需要先启动nginx在启动keepalived)

vim /etc/keepalived/keepalived.conf 

新加入以下一段

vrrp_script check_nginx {    script "/root/check_ng.sh"    interval 2    weight -20}#当检查心跳的时候,发现当前的nginx或keepalived停止了,权重值就减少20,这样的话就会比另一台服务器的权重小

在这里插入图片描述
重启keepalived

systemctl restart keepalived.service

在这里插入图片描述
此时正常
测试nginx页面,浏览器访问http://192.168.110.131/http://192.168.110.132,可以看到欢迎界面
nginx与keepalived的那些事

6.配置WEB站点

在WEB01与WEB02上安装jdk与tomcat
安装jdk1.7

#yum安装yum install java-1.7.0-openjdk -y#配置环境变量vim /etc/profile#在末位加上以下参数JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64 #该位置对应你的实际路径JRE_HOME=$JAVA_HOMECLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/libPATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/binexport JAVA_HOME JRE_HOME CLASS_PATH PATH #:wq保存后 source /etc/profile

验证是否成功

[root@192 ~]# java -versionjava version "1.7.0_261"OpenJDK Runtime Environment (rhel-2.6.22.2.el7_8-x86_64 u261-b02)OpenJDK 64-Bit Server VM (build 24.261-b02, mixed mode)[root@192 ~]# vim /etc/profile

tomcat站点安装就不一一描述了,我这里使用的apache-tomcat-7.0.103,官网下载后直接传上去即可
修改默认欢迎页面
apache-tomcat-7.0.103/webapps/ROOT下的index.jsp换成我们的测试文件,我的效果是这样的
在这里插入图片描述
在这里插入图片描述
接下来配置NGINX反向代理,转发到后端的两台tomcat上
LB01与LB02

vim /etc/nginx/conf.d/tomcat.confupstream tomcat {  server 192.168.110.133:8080;  server 192.168.110.134:8080;}server{  listen 80;  server_name localhost;  location / { proxy_pass http://tomcat; }}

配置完后校验一下语法

[root@192 conf.d]# nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful

重新加载nginx

nginx -s reload

完成

7测试集群情况

浏览器访问http://192.168.110.200/
在这里插入图片描述
浏览器无法加载,且ping不通VIP,出现此问题的原因是keepalived.conf配置中默认vrrp_strict打开了,需要把它注释掉。

vim /etc/keepalived/keepalived.confglobal_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 LB01   vrrp_skip_check_adv_addr   #vrrp_strict   vrrp_garp_interval 0   vrrp_gna_interval 0}#重启keepalivedsystemctl restart keepalived.service

此时在ping
在这里插入图片描述
再次访问
在这里插入图片描述
在这里插入图片描述
停掉主节点的keepalived试验,此时VIP在备机上
在这里插入图片描述
再次访问
在这里插入图片描述
*

码字不易,希望多多点赞,谢谢!`