实例部署:nginx+Keepalived实现高可用

nginx+Keepalived实现高可用

实验环境

主机名/ip

nginx01/172.16.10.10

nginx02/172.16.10.11

关闭防火墙和selinux

systemctl stop firewalld

systemctl disable firewalld

sed -i "s/.*SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config reboot

vip172.16.10.100
添加hosts解析

cat >> /etc/hosts << EOF

172.16.10.10 nginx01

172.16.10.11 nginx02

EOF

1.1 部署nginx

  • 2个nginx节点都要安装,nginx02 根据nginx01 进行部署

 [root@nginx01 ~]# yum -y install pcre-devel zlib-devel gcc gcc-*
 [root@nginx01 ~]# tar zxf nginx-1.12.0.tar.gz -C /usr/src
 [root@nginx01 ~]# cd nginx-1.12.0/
 [root@nginx01 nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
 [root@nginx01 nginx-1.12.0]# make && make install
 [root@nginx01 nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
 [root@nginx01 nginx-1.12.0]# useradd -M -s /sbin/nologin nginx
 [root@nginx01 nginx-1.12.0]# nginx
 [root@nginx01 nginx-1.12.0]# echo "nginx 01" > /usr/local/nginx/html/index.html

1.2 部署Keepalived

  • 2个nginx节点都要部署

1.2.1 安装Keepalived

 # 安装Keepalived
 [root@nginx01 ~]# yum -y install keepalived

1.2.2 修改Keepalived配置文件

 [root@nginx01 ~]# vim /etc/keepalived/keepalived.conf
 ! Configuration File for keepalived
 global_defs {
    router_id LVS_DEVEL
 }
 ## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
 ##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
 ##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中
 vrrp_script check_nginx {      ## Keepalived定时执行check_nginx
         script "/etc/keepalived/nginx_check.sh"   ##脚本路径
         interval 1       ##每1秒检查一次
         weight -2       ##每失败一次优先级减少2
 }
 ​
 vrrp_instance VI_1 {
     state MASTER            # 两个 DS,一个为 MASTER 一个为 BACKUP
     interface ens33         # 当前 IP 对应的网络接口,通过 ifconfig 查询
     virtual_router_id 62    # 虚拟路由 ID(0-255),在一个 VRRP 实例中主备服务器 ID 必须一样
     priority 200            # 优先级值设定:MASTER 要比 BACKUP 的值大
     advert_int 1            # 通告时间间隔:单位秒,主备要一致
     authentication {        # 认证机制,主从节点保持一致即可
         auth_type PASS
         auth_pass 1111
     }
     track_script {      # vrrp_instance需要执行的脚本
         check_nginx     # 脚本为全局定义的脚本
     }
     virtual_ipaddress {
         172.16.10.100/24       # VIP,可配置多个
     }
 }
 ​
 # web 配置
 virtual_server 172.16.10.100 80  {
     delay_loop 3                    # 设置健康状态检查时间
     lb_algo rr                      # 调度算法,这里用了 rr 轮询算法
     lb_kind DR                      # 这里测试用了 Direct Route 模式
     protocol TCP
         real_server 172.16.10.10 80 {
         weight 1
         TCP_CHECK {
             connect_timeout 10   
             retry 3           
             delay_before_retry 3   
             connect_port 80
         }
     }
 }

1.2.3 创建Keepalived需要执行的定时脚本

 # 获取nginx进程的数量
 [root@nginx01 ~]# vim /etc/keepalived/nginx_check.sh 
 #!/bin/bash
 num=$(ps -ef | grep nginx | grep process | grep -v grep |wc -l)
 if [ $num -eq 0 ]
 then
         systemctl stop keepalived
 fi
 ​
 # 或者 通过查看nginx的状态
 [root@nginx01 ~]# vim /etc/keepalived/nginx_check.sh 
 #!/bin/bash
 nestat -napt | grep nginx &> /dev/null
 if [ $? -ne 0 ]
 then
     systemctl stop keepalived
 fi

1.2.4 启动Keepalived

 [root@nginx01 ~]# systemctl start keepalived
 [root@nginx01 ~]# systemctl enable keepalived

1.3 验证

 # 通过客户机循环访问172.16.10.100,停止nginx01节点,看是否进行转移
 # 客户机
 [root@yan ~]# for i in $(seq 1 100);do curl 172.16.10.100;sleep 1;done
 #nginx01 节点
 [root@nginx01 ~]# nginx -s stop
 # 观察客户机变化
 nginx 01 
 nginx 01 
 nginx 01 
 nginx 01 
 nginx 01 
 nginx 01 
 nginx 01 
 nginx 01 
 nginx 01 
 nginx 01 
 nginx 02 
 nginx 02 
 nginx 02 
 nginx 02 
 nginx 02 
 nginx 02 
 nginx 02 
 nginx 02 
 ​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值