nginx双机安装+keepalived

被刻印的时光 ゝ 提交于 2019-12-15 01:18:47

nginx双机热备安装+keepalived

Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用。

1、环境准备

Server 1(master) : centos7.5 192.168.111.136

Server 2(backup) : centos7.5 192.168.111.128

2、安装nginx

在两台机器上安装并配置nginx,安装步骤请参考上章(nginx安装)

1) 安装完后在两台服务器分别编写配置文件

修改 /etc/nginx/nginx.conf 文件,建议先将原文件备份,然后再修改成如下内容

vim /nginx.conf (写入以下内容)

 user    nginx;
 worker_processes    1; 
 events { 
         worker_connections    1024; 
 } 
 http { 
         include             mime.types; 
         default_type    application/octet-stream; 
         sendfile                on; 
         tcp_nopush         on; 
         keepalive_timeout    65; 
         gzip    on; 
         server { 
                 listen             80; 
                 server_name    localhost; 
                 index     a.html a.htm; 
                 root        /var/www;    【此路径根据页面所在位置而更改】
                 error_page     500 502 503 504    /50x.html; 
                 location = /50x.html { 
                         root     html; 
                 } 
         } 
 } 

2)分别在两台机器的/var/路径下创建www目录,并在此目录内创建测试文件

Server 1 中添加如下内容
[root@localhost opt]# echo "<h1>welcome to 192.168.111.136</h1>" > /var/www/a.html
server 2 中添加如下内容
[root@localhost opt]# echo "<h1>welcome to 192.168.111.128</h1>" > /var/www/a.html

测试效果如下

在这里插入图片描述

在这里插入图片描述

3、安装keepalived
[root@localhost opt]# yum install keepalived -y

​ 安装完后 /etc/keepalived/keepalived.conf 默认会有此配置文件

1)在server1(master)服务器节点编写配置文件

vim /etc/keepalived/keepalived.conf

vrrp_script chk_http_port { 
                 script "/opt/nginx_pid.sh"         ###检测nginx状态的 监控脚本路径,
                 interval 2     ###监控时间间隔,每2s检测一次
                 weight -2      ###脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -2
                 fall 2         #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
                 rise 1         #检测1次成功就算成功。但不修改优先级
 } 
 
 ## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
 vrrp_instance VI_1 { 
         state MASTER    ### 设置为 主节点 
         interface ens33 ### 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的为 ens33
         virtual_router_id 51    ### 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
         priority 101     ### 节点优先级,MASTER的权重值一定要高于 BAUCKUP 
         nopreempt       ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
	     advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
      
         ## 设置验证信息,两个节点保持一致 
         authentication { 
                      auth_type PASS             ### 加密 
                      auth_pass 11111            ### 加密的密码,两台服务器一定要一样
         } 
         track_script { 
                 chk_http_port    ### 执行nginx监控的服务 ,注意这个设置不能紧挨着写在vrrp_script配置块的后面,否则nginx监控失效
         } 
          
          ##虚拟ip池,两个节点设置必须一致,可以定义多个
         virtual_ipaddress { 
                192.168.111.7        ###    定义VIP,也就是虚拟IP,这个IP是由keepalived给服务器配置的,服务器靠这个VIP对外提供服务
         } 
 } 

2)在server2(backup)服务器节点编写配置文件

vim /etc/keepalived/keepalived.conf

vrrp_script chk_http_port { 
                 script "/opt/nginx_pid.sh" 
                 interval 2 
                 weight 2 
 } 
 vrrp_instance VI_1 { 
         state BACKUP                       ### 设置为 辅机 
         interface ens33 
         virtual_router_id 51               ### 与 MASTRE 设置 值一样 
         priority 100                          ### 比 MASTER权重值 低 
         authentication { 
                      auth_type PASS 
                      auth_pass 11111             ### 密码 与 MASTER 一样 
         } 
         track_script { 
                 chk_http_port 
         } 
         virtual_ipaddress { 
                  192.168.111.7 
         } 
 }

3、编写监控nginx脚本

[root@ CentOS ~]# vim /opt/nginx_pid.sh 


#!/bin/bash
A=`ps -C nginx --no-header |wc -l`      ## 查看是否有 nginx进程 把值赋给变量A 
if [ $A -eq 0 ];then                        ## 如果没有进程值得为零
         /usr/sbin/nginx
         sleep 3
         if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
             killall keepalived                        ## 则结束 keepalived 进程
         fi
fi

保存后,给脚本赋执行权限 chmod 755 /opt/nginx_pid.sh

启动keepalived systemctl restart keepalived

查看keepalived日志 tail -f /var/log/messages

4、验证测试

同时启动192.168.111.136 和192.168.111.128上的Nginx和Keepalived,通过VIP(192.168.50.130)来访问Nginx,效果如下

在这里插入图片描述

因为我们写了脚本 nginx_check.sh,这个脚本会自动重启Nginx,所以现在停掉server1节点的keepalived

systemctl stop keepalived

此时,再通过VIP(192.168.111.7)来访问Nginx,效果如下

在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!