nginx学习(5)Nginx 配置高可用集群(主从配置)

Nginx 配置高可用集群

Nginx的高可用集群是指由两台或多台Nginx服务器组成的集群系统,通过负载均衡和故障转移等技术,实现高可用性和可伸缩性的目标。

在这种集群系统中,每个Nginx服务器都配置为主节点(master)或从节点(slave)。主节点负责处理业务逻辑,而从节点则通过心跳检查等方式与主节点保持通信,并随时准备接管业务逻辑。

当主节点出现故障时,从节点会通过心跳检查机制检测到,并立即接管主节点的业务逻辑,从而保证服务的连续性和可用性。这种集群系统可以有效解决单点故障的问题,提高系统的可用性和稳定性。

在配置Nginx的高可用集群时,需要考虑到负载均衡、故障转移、状态监控等多个方面,以保证系统的正常运行和可靠性。同时,也需要对每个服务器的硬件配置、网络环境、负载情况等进行合理的规划和调整,以保证整个集群的性能和效率。

1、准备

需要两台服务器

    server 172.31.0.99;
    server 172.31.0.100;

1.1在两台服务器安装 nginx

安装详情见 nginx学习(1): 链接: link
1.2第一台用默认的配置80端口,第二台用81端口


    server {
        listen       80;        
        #server_name  localhost;
       server_name  172.31.0.99 ;
        
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
           #proxy_pass http://myserver;
            index  index.html index.htm;
        }

在这里插入图片描述


    server {
        listen       81;        
        #server_name  localhost;
       server_name  172.31.0.100 ;
        
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
           #proxy_pass http://myserver;
            index  index.html index.htm;
        }

在这里插入图片描述

测试:

http://172.31.0.99/
在这里插入图片描述

http://172.31.0.100:81/

在这里插入图片描述

2、安装keepalived

在两台服务器安装keepalived

yum install keepalived -y
# 查看版本:
rpm -q -a keepalived

在这里插入图片描述
在这里插入图片描述
主服务器配置:

! Configuration File for keepalived

global_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 LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_http_port {
	 script "/usr/local/src/nginx_check.sh"
	 interval 2 #(检测脚本执行的间隔)
	 weight 2
}


vrrp_instance VI_1 {
	 state MASTER # 备份服务器上将 MASTER 改为 BACKUP 
	 interface ens33 //网卡
	 virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
	 priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
	 advert_int 1
	 authentication {
		 auth_type PASS
		 auth_pass 1111
	 }
	 virtual_ipaddress {
		192.168.19.50 # VRRP H 虚拟地址(非真实物理地址)
	 } 

#vrrp_instance VI_1 {
#    state MASTER
#    interface eth0
#    virtual_router_id 51
#    priority 100
#    advert_int 1
#    authentication {
#        auth_type PASS
#        auth_pass 1111
#    }
#    virtual_ipaddress {
#        192.168.200.16
#        192.168.200.17
#        192.168.200.18
#    }
#}

virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.2 1358 {
    delay_loop 6
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    sorry_server 192.168.200.200 1358

    real_server 192.168.200.2 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.3 1358 {
    delay_loop 3
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.200.4 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.5 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

从服务器配置:

! Configuration File for keepalived

global_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 LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}


vrrp_script chk_http_port {
	 script "/usr/local/src/nginx_check.sh"
	 interval 2 #(检测脚本执行的间隔)
	 weight 2

}

vrrp_instance VI_1 {
	 state BACKUP # 备份服务器上将 MASTER 改为 BACKUP 
	 interface ens33 //网卡
	 virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
	 priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
	 advert_int 1
	 authentication {
		 auth_type PASS
		 auth_pass 1111
	 }
	 virtual_ipaddress {
		192.168.19.50 # VRRP H 虚拟地址(非真实物理地址)
	 } 
}

#vrrp_instance VI_1 {
#    state MASTER
#    interface eth0
#    virtual_router_id 51
#    priority 100
#    advert_int 1
#    authentication {
#        auth_type PASS
#        auth_pass 1111
#    }
#    virtual_ipaddress {
#        192.168.200.16
#        192.168.200.17
#        192.168.200.18
#    }
#}

virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.2 1358 {
    delay_loop 6
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    sorry_server 192.168.200.200 1358

    real_server 192.168.200.2 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 10.10.10.3 1358 {
    delay_loop 3
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.200.4 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.200.5 1358 {
        weight 1
        HTTP_GET {
            url { 
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url { 
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

接着重启nginx,启动keepalived
(主服务器:)
在这里插入图片描述
接着重启nginx,启动keepalived
(从服务器:)

在这里插入图片描述

3、访问测试:

1、使用 ip a 查看主服务器的虚拟IP,进行访问
在这里插入图片描述
http://172.31.0.152/,成功访问!
在这里插入图片描述
成功访问!

1、使用 ip a 查看从服务器的虚拟IP,进行访问
在这里插入图片描述
http://172.31.0.151:81/

在这里插入图片描述
成功访问!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
nginx主从配置中,通常使用keepalived来实现可用性。主节点和从节点服务器都启动了nginx和keepalived服务。当浏览器访问配置的虚拟IP地址时,根据情况会有不同的响应。 1. 如果主节点上的nginx服务发生故障,keepalived会检测到并将虚拟IP漂移到从节点服务器上。这时浏览器访问虚拟IP,会收到从节点服务器上的nginx的响应。 2. 当主节点上的nginx服务正常运行时,浏览器访问虚拟IP会收到主节点服务器上的nginx的响应。 3. 如果在主节点服务器上停止nginx服务,浏览器访问虚拟IP会一直处于loading状态。过几秒钟后,浏览器会重新请求,此时发现主节点服务器上的nginx又能给出响应了,这是因为主节点的keepalived执行了nginx检测脚本,重启了nginx服务。 总之,通过nginx主从配置和keepalived的配合,可以实现在主节点服务器发生故障时自动切换到从节点服务器,确保服务的可用性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Linux环境下实现nginx主从备份+集群搭建](https://blog.csdn.net/weixin_43611106/article/details/126538655)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值