OPS Nginx 主从模式

环境准备

实验内容

只有一台Nginx服务器时,如果该服务器宕机,则Nginx的所有功能将失效。

这意味着业务不得不暂停,直到排除掉Nginx服务器宕机的原因。

所以在实际生产中,我们应当至少具备2台Nginx服务器,当一台Nginx宕机后另一台进行接管。

除此之外,我们还需要keepalived来做一个虚拟IP供application进行链接:

image-20210407173347837

准备2台服务器,每台服务器上安装Nginx与tomcat。

准备keepalived软件,提供vip地址,2台服务器都需要。

keepalived

2台服务器都需要,所以统一进行下载:

$ yum install -y keepalived

安装完成之后,node2在/etc/keepalived/keepalived.conf中填入以下配置项:

$ vim /etc/keepalived/keepalived.conf

global_defs {
    notification_email {
        acassen@firewall.loc
        failover@firewall.loc
        sysadmin@firewall.loc
 }
    # 定义利用什么邮箱发送邮件
    notification_email_from Alexandre.Cassen@firewall.loc   
    # 定义邮件服务器信息
    smtp_server smtp.163.com
    # 定义邮件发送超时时间
    smtp_connect_timeout 30 
    # 添加Nginx机的IP,2个节点不一样
    router_id 192.168.0.110  
    # 添加运行健康检查脚本的用户
    script_user root 
    # 添加运行健康检查脚本的组
    enable_script_security       
}

vrrp_script chk_http_port {
    # 心跳检测脚本
    script "/usr/local/src/nginx_check.sh"  
    # 检测脚本执行的间隔
    interval 2    
    # 监测失败,则相应的vrrp_instance的优先级会减少20个点
    weight -20     
}

vrrp_instance VI_1 {
    # 主备身份、node1是MASTER,node2是BACKUP
    state MASTER           
    # 虚拟ip绑定的网卡,ifconfig查看
    interface ens33  
    # 主、备机的 virtual_router_id 必须相同
    virtual_router_id 51   
    # 主、备机取不同的优先级,主机值较大,备份机值较小
    priority 100   
    # 主服务器组播包发送间隔时间
    advert_int 1          

    # 主备主机之间的认证表示信息
    authentication { 
        # 采用明文认证机制
        auth_type PASS  
        # 编写明文密码
        auth_pass 1111      
    }
    virtual_ipaddress {
        # 设置虚拟ip地址信息,此参数备节点设置和主节点相同
        192.168.0.51      
    }
    track_script {
        # 调用执行脚本
        chk_http_port      
    }
}

同理,node2的keepalived配置文件:

$ vim /etc/keepalived/keepalived.conf

global_defs {
    notification_email {
        acassen@firewall.loc
        failover@firewall.loc
        sysadmin@firewall.loc
 }
    # 定义利用什么邮箱发送邮件
    notification_email_from Alexandre.Cassen@firewall.loc       
    # 定义邮件服务器信息
    smtp_server smtp.163.com    
    # 定义邮件发送超时时间
    smtp_connect_timeout 30    
    # 添加Nginx机的IP,2个节点不一样
    router_id 192.168.0.120    
    # 添加运行健康检查脚本的用户
    script_user root         
    # 添加运行健康检查脚本的组   
    enable_script_security     
}

vrrp_script chk_http_port {
    # 心跳检测脚本
    script "/usr/local/src/nginx_check.sh" 
    # 检测脚本执行的间隔
    interval 2   
    # 监测失败,则相应的vrrp_instance的优先级会减少20个点  
    weight -20 
}

vrrp_instance VI_1 {
    # 主备身份、node1是MASTER,node2是BACKUP
    state BACKUP   
    # 虚拟ip绑定的网卡,ifconfig查看       
    interface ens33   
    # 主、备机的 virtual_router_id 必须相同   
    virtual_router_id 51  
    # 主、备机取不同的优先级,主机值较大,备份机值较小
    priority 90    
    # 主服务器组播包发送间隔时间       
    advert_int 1         

    # 主备主机之间的认证表示信息
    authentication {       
        # 采用明文认证机制      
        auth_type PASS
        # 编写明文密码
        auth_pass 1111   
    }
    virtual_ipaddress {
        # 设置虚拟ip地址信息,此参数备节点设置和主节点相同
        192.168.0.51     
    }
    track_script {
        # 调用执行脚本
        chk_http_port     
    }
}

脚本准备

2个节点中都创建keepalived心跳检测脚本:

$ vim /usr/local/src/nginx_check.sh

#!/bin/bash
A=`ps -C nginx --no-header |wc -l` 
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then 
        systemctl stop keepalived.service
    fi
fi

# 注意,如果是centos6,则改为service stop keepalived

权限设置为775:

$ chmod 775 /usr/local/src/nginx_check.sh 

最后启动keepalived:

$ systemctl start keepalived.service

tomact

2个节点下载tomcat:

$ cd ~
$ mkdir -p /project/tomcat808{0,1}
$ wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.70/bin/apache-tomcat-7.0.70.tar.gz

2个节点解压tomcat,解压两份:

$ tar -zxvf apache-tomcat-7.0.70.tar.gz -C /project/tomcat8080

2个节点安装Java环境:

$ yum install -y java-1.8.0-openjdk.x86_64

node1上创建balanced文件夹:

$ mkdir -p /project/tomcat8080/apache-tomcat-7.0.70/webapps/balanced

在node1的balanced文件夹中书写内容:

$ cat > /project/tomcat8080/apache-tomcat-7.0.70/webapps/balanced/index.html<<EOF
<h1> node1 </h1>
EOF

node2上创建balanced文件夹:

$ mkdir -p /project/tomcat8080/apache-tomcat-7.0.70/webapps/balanced

在node2的balanced文件夹中书写内容:

$ cat > /project/tomcat8080/apache-tomcat-7.0.70/webapps/balanced/index.html<<EOF
<h1> node2 </h1>
EOF

启动两个节点上的tomact:

$ /project/tomcat8080/apache-tomcat-7.0.70/bin/startup.sh

尝试进行访问:

http://192.168.0.110:8080/balanced/index.html
http://192.168.0.120:8080/balanced/index.html

Nginx配置

配置过程

2台节点沿用负载均衡的配置:

$ vim /usr/local/nginx/conf/nginx.conf

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    upstream TestServer{
       server 192.168.0.110:8080;
       server 192.168.0.120:8080;
    }

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  192.168.0.110;

        location / {
            proxy_pass http://TestServer;
            proxy_connect_timeout 10;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

然后2个节点进行重载Nginx配置文件:

$ nginx -s reload

效果测试

查看虚拟VIP:

$ systemctl status keepalived

4月 07 06:17:58 node1 Keepalived_vrrp[3321]: Sending gratuitous ARP on ens33 for 192.168.0.50

在MAC上使用虚拟VIP访问以下路径,访问2次发现node1:tomact与nod2:tomact都能成功到达:

$ http://192.168.0.50/balanced/index.html

nginx高可用

此时的每次访问都会被node1的Nginx所处理,尝试停止node1的Nginx服务,再次进行访问。

$ nginx -s stop

如果配置成功,则依旧是可以访问的。

posted @ 2021-04-07 19:17  云崖君  阅读(107)  评论(0编辑  收藏  举报