Nginx负载均衡服务器的双机高可用
来源:互联网 发布:淘宝网雷丝高领打底衫 编辑:程序博客网 时间:2024/06/07 09:16
如果将Web服务器集群当作一个城池,那么负载均衡服务器则相当于城门,重要性不言而喻。如果“城门”关了,与外界的通道也就断了,如果只要一台均衡服务器,当该服务器发生故障时,则会导致整个网站无法访问。因此我们需要来两台以上的服务器,实现故障转移与高可用。
双机高可用一般是通过虚拟IP(飘移IP)方法来实现的,基于Linux/Unix的IP别名技术。双机高可用方法目前分为两种:
一台服务器加一台热被备务器,正常情况下,主服务器绑定一个公网虚拟IP,提供负载均衡服务,热备服务器处于空闲状态,当主服务器发生故障时,热备服务器接管主服务器的公网虚拟IP,提供负载均衡服务;
两台负载均衡服务器都处于活动状态,各自绑定一个公网虚拟IP,提供负载均衡服务,当其中一台发生故障时,另一台接管发生故障服务器的公网虚拟IP。
第一种方式
(1)www.linuxidc.com域名解析到虚拟IP 61.1.1.2
(2)正常情况下,主机61.1.1.4绑定虚拟IP 61.1.1.2
/sbin/ifconfig eth0:1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up
/sbin/route add -host 61.1.1.2 dev eth0:1
/sbin/arping -I eth0 -c 61.1.1.2 61.1.1.1(3)用户访问:www.linuxidc.com(虚拟IP: 61.1.1.2)实际访问的是主机61.1.1.4,而备用机 61.1.1.5 则处于空闲状态。
(4)如果主机61.1.1.4发生故障,背机61.1.1.5将在几秒钟内接管虚拟IP61.1.1.2,与自己绑定,并发送APping的公网网关刷新MAC地址。
/sbin/ifconfig etho:1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up
/sbin/ifconfig add -host 61.1.1.2 dev eth0:1
/sbin/arping -I etho -c 3 -s 61.1.1.2 61.1.1.1
(5)这时,用户访问www.linuxidc.com(虚拟IP)实际上访问的是备机 61.1.1.1,从而实现故障转移与高可用,避免了单点故障。
另外,第一种方式可以利用基于VRRP路由协议的Keeoalive软件实现的。
第二种方式
(1)www.linuxidc.com 域名通过DNS轮询解析到虚拟IP 61.1.1.2和61.1.1.3上。
(2)正常情况下,服务器个绑定一个虚拟IP。
在服务器161.1.1.4上执行以下命令
/sbin/ifconfig etho:1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up
/sbin/ifconfig add -host 61.1.1.2 dev eth0:1
/sbin/arping -I etho -c 3 -s 61.1.1.2 61.1.1.1
在服务器161.1.1.5上执行以下命令
/sbin/ifconfig etho:1 61.1.1.3 broadcast 61.1.1.255 netmask 255.255.255.0 up
/sbin/ifconfig add -host 61.1.1.2 dev eth0:1
/sbin/arping -I etho -c 3 -s 61.1.1.3 61.1.1.1(3)用户访问www,linuxidc.com (虚拟IP 61.1.1.2和61.1.1.3)实际上是根据DNS轮询访问两台负载均衡服务器,两台服务器均处于活跃状态。
(4)如果服务器1发生故障,服务器2将在几秒钟内接管服务器1的虚拟IP 61.1.1.2,与自己已绑定,并发送ARPing包给IDC的公关网关刷新新的MAC地址。
在服务器2上执行以下命令:
/sbin/ifconfig etho:1 61.1.1.2 broadcast 61.1.1.255 netmask 255.255.255.0 up
/sbin/ifconfig add -host 61.1.1.2 dev eth0:1
/sbin/arping -I etho -c 3 -s 61.1.1.2 61.1.1.1
我们可以写两个脚本,来实现第二种方式的自动故障转移。
以下是部署在Nginx负载均衡服务器1的脚本
#!/bin/shLANG=Cdate=$(date -d "today" +"%Y-%m-%d %H:%M:%S")function_bind_vip1(){ /sbin/ifconfig etho:ha1 61.1.1.2 broadcast 219.232.254.255 netmask 255.255.255.192 up /sbin/route add -host 61.1.1.2 dev eth0:hal}function_bind_vip2(){ /sbin/ifconfig etho:ha2 61.1.1.3 broadcast 219.232.254.255 netmask 255.255.255.192 up /sbin/route add -host 61.1.1.2 dev eth0:ha2}function_restart_nginx(){ kill -USR1 'cat /usr/local/webserver/nginx/nginx.pid'}function_remove_vip1(){ /sbin/ifconfig etho:ha1 61.1.1.2 broadcast 219.232.254.255 netamsk 255.255.255.192 down}function_remove_vip2(){ /sbin/ifconfig etho:ha2 61.1.1.3 broadcast 219.232.254.255 netamsk 255.255.255.192 down}function_vip_arping1(){ /sbin/ifconfig -I eth0 -c 3 -e 611..1.1.2 61.1.1.1 > /dev/null 2>&1}function_vip_arping2(){ /sbin/ifconfig -I eth0 -c 3 -e 611..1.1.3 61.1.1.1 > /dev/null 2>&1}bind_time_vip1="N";bind_time_vip2="N";while truedo httpcode_arp1='/usr/bin/cur1 -o /dev/null s -w %{http_code} http://61.1.1.4' httpcode_arp2='/usr/bin/cur1 -o /dev/null s -w %{http_code} http://61.1.1.5' if [x$httpcode_rip1 == "x200"]; then function_bind_vip1 function_vip_arping1 function_restart_nginx bind_time_vip1="Y" fi function_vip_arping1 else if [$bind_time_vip1 == "Y"]; then function_remote_vip1 bind_time_vip="N" fi fi if [x$httpcode_arp2 == "x200"]; then if[ $bind_time_vip2 == "Y"] then function_rempve_vip2 bind_time_vip2="N" fi else if[$bind_time_vip2 == "N"]; then function_bind_vip2 function_vip_arping2 function_restart_nginx bind_time_vip2="Y" fi function_vip_arping2fisleep 5done
在Nginx服务器1将脚本驻留后台运行:
nohup /bin/sh ./nginx_hal.sh 2>&1 > dev/null &
以下代码部署在服务器2
#!/bin/shLANG=Cdate=$(date -d "today" +"%Y-%m-%d %H:%M:%S")function_bind_vip1(){ /sbin/ifconfig etho:ha1 61.1.1.3 broadcast 219.232.254.255 netmask 255.255.255.192 up /sbin/route add -host 61.1.1.3 dev eth0:hal}function_bind_vip2(){ /sbin/ifconfig etho:ha2 61.1.1.2 broadcast 219.232.254.255 netmask 255.255.255.192 up /sbin/route add -host 61.1.1.2 dev eth0:ha2}function_restart_nginx(){ kill -USR1 'cat /usr/local/webserver/nginx/nginx.pid'}function_remove_vip1(){ /sbin/ifconfig etho:ha1 61.1.1.3 broadcast 219.232.254.255 netamsk 255.255.255.192 down}function_remove_vip2(){ /sbin/ifconfig etho:ha2 61.1.1.2 broadcast 219.232.254.255 netamsk 255.255.255.192 down}function_vip_arping1(){ /sbin/ifconfig -I eth0 -c 3 -e 61.1.1.3 61.1.1.1 > /dev/null 2>&1}function_vip_arping2(){ /sbin/ifconfig -I eth0 -c 3 -e 61.1.1.2 61.1.1.1 > /dev/null 2>&1}bind_time_vip1="N";bind_time_vip2="N";while truedo httpcode_arp1='/usr/bin/cur1 -o /dev/null s -w %{http_code} http://61.1.1.5' httpcode_arp2='/usr/bin/cur1 -o /dev/null s -w %{http_code} http://61.1.1.4' if [x$httpcode_rip1 == "x200"]; then function_bind_vip1 function_vip_arping1 function_restart_nginx bind_time_vip1="Y" fi function_vip_arping1 else if [$bind_time_vip1 == "Y"]; then function_remote_vip1 bind_time_vip="N" fi fi if [x$httpcode_arp2 == "x200"]; then if[ $bind_time_vip2 == "Y"] then function_rempve_vip2 bind_time_vip2="N" fi else if [$bind_time_vip2 == "N"]; then function_bind_vip2 function_vip_arping2 function_restart_nginx bind_time_vip2="Y" fi function_vip_arping2fisleep 5done
在Nginx服务器2将脚本驻留后台运行:
nohup /bin/sh ./nginx_ha2.sh 2>&1 > dev/null &
- Nginx负载均衡服务器的双机高可用
- Nginx+Keepalived负载均衡高可用(双机热备)
- keepalived + nginx实现高可用双机热备+负载均衡
- nginx负载均衡高可用
- Nginx+Keepalived高可用负载均衡服务器搭建
- 配置Nginx+keepalived高可用负载均衡服务器
- drbd+centos+nginx+php+mysql+memcache 低成本双机WEB高可用和负载均衡群集.
- keepalived+nginx实现高可用双机热备+负载均衡架构
- Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)
- 双机热备Nginx+Keepalived搭建HA高可用负载均衡环境
- 双机热备Nginx+Keepalived搭建HA高可用负载均衡环境
- docker+nginx负载均衡+mysql双机互为主从实现mysql数据库高可用
- nginx高负载均衡服务器
- 使用Nginx+KeepAlived构建高可用的负载均衡系统
- 用NginX+keepalived实现高可用的负载均衡
- 用NginX+keepalived实现高可用的负载均衡
- 用NginX+keepalived实现高可用的负载均衡
- 用NginX+keepalived实现高可用的负载均衡
- string类方法
- 键盘输入数组
- struts2中关于package的namespace和访问路径嵌套的处理关系
- 【Java基础】equals和==的区别以及Integer(-128~127)值的==和equals比较
- python中的input方法
- Nginx负载均衡服务器的双机高可用
- 函数(方法)
- 详解python中闭包和装饰器
- 实验6:树和二叉树的实验2
- 【十一】机器学习之路——Python基础数据运算
- 四周第三次课 2017.11.08 进入编辑模式、vim命令模式、vim实践
- python-元组的使用方法
- 对输入数据进行多个异常处理
- 文章标题