当前位置: 首页>编程语言>正文

nginx 高可用 keepalived nginx和keepalived如何搭建高可用集群

    nginx,大家都知道,可以反向代理像tomcat这样的web服务器集群,当多台tomcat集群中的一台服务器宕机了,nginx会为我们自动剔除,这里大家就会有疑问,如果nginx宕机了,谁来剔除它呢,今天我们就来搭建一个高可用的nginx集群,这里用到一个技术,就是keepalive。

 

什么是keepalive

    根据百度百科的解释,keepalive,是在TCP中一个可以检测死连接的机制,这里大家多少就能理解一些,它可用做监听像nginx这样web服务器是否在运行,并且当web服务器宕机的时候,来剔除它们。

 

安装keepalive

# yum install keepalived

 

查看keepalive启动状态

# service keepalived status

出现下边信息说明启动成功

Active: active (running)

 

nginx主服务器的搭建

  • 两台nginx服务器,一台主服务器和一台从服务器
  • 并且两台机器都装有keepalive
  • 添加主服务器的主机名

# vi /etc/hosts

    添加下边主机名,保存并推出

127.0.0.1 LVS_DEVEL

  • 查看网卡名

# ifconfig

这里我的网卡名是ens33

  • 修改keepalive的配置文件

# cd /etc/keepalived/

# vi keepalived.conf

    把下边的内容,替换到配置文件中,粗体部分按照自己机器的实际情况修改,LVS_DEVEL是上边我们修改的主机名

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.100.101
   smtp_connect_timeout 30
   router_id LVS_DEVEL 
}

vrrp_script chk_http_post{
    script "/usr/local/src/nginx_check.sh"
    
    interval 2
    
    weight 2

}

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.101.166
    }
}

  • 重启keepalive

# service keepalived restart

  • 查看keepalive启动状态

# service keepalived status

出现下边信息说明启动成功

Active: active (running)

  • 查找到nginx的安装路径,找到sbin的nginx路径

# find / -name nginx

找到下边的路径,先记录下,下边检测脚本用到这个路径

/var/lib/docker/overlay2/c2d7c7af61de59b1de3f5021e487f850104bcf287496367ace20effa6a086a5d/diff/usr/sbin/nginx

  • 切换到/usr/local/src/路径下

# cd /usr/local/src/

    创建检测脚本文件

# vi nginx_check.sh

    把下边的内容粘贴到nginx_check.sh文件中,粗体部分是上边我们查找到的nginx的安装路径

#!/bin/bash
A=`ps -C nginx -no-header |wc -l`
if [ $A -eq 0 ];then
    /var/lib/docker/overlay2/c2d7c7af61de59b1de3f5021e487f850104bcf287496367ace20effa6a086a5d/diff/usr/sbin/nginx
    sleep 2
    if [`ps -C nginx -no-header |wc -l` -eq 0];then
        killall keepalived
    fi
fi

nginx从服务器的搭建

  • 搭建从服务器,我们使用vm12的克隆机制,从主服务器拷贝一台从服务器出来,具体操作,百度一下应该能出来
  • 拷贝从服务器完成后,修改从服务器ip,并重启network

# systemctl restart network

    我这里主服务的ip是192.168.100.101,从服务器ip设置成192.168.100.102

  • 添加从服务器的主机名

# vi /etc/hosts

    添加下边主机名,保存并推出

127.0.0.1 LVS_DEVELBACK

  • 修改从服务器的keepalive的配置文件,下边粗体部分

# cd /etc/keepalived/

# vi 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.100.101
   smtp_connect_timeout 30
   router_id LVS_DEVELBACK
}

vrrp_script chk_http_post{
    script "/usr/local/src/nginx_check.sh"
    
    interval 2
    
    weight 2

}

vrrp_instance VI_1 {
    state BAKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.101.166
    }
}

  • 重启keepalive

# service keepalived restart

  • 查看keepalive启动状态

# service keepalived status

出现下边信息说明启动成功

Active: active (running)

 

测试

    我们上边配置的keepalived 配置文件中,开放的虚拟ip(192.168.100.166)能访问两台nginx,两台虚拟机的nginx的ip是192.168.100.101,192.168.100.102,端口都是9001。首先我们停掉192.168.100.101的nginx和keepalived,访问192.168.100.166:9001照常能访问到nginx。一切OK。


https://www.xamrdz.com/lan/5gq1939496.html

相关文章: