Nginx双主负载均衡架构搭建教程

发布时间:2020-11-02编辑:脚本学堂
本文介绍了Nginx双主负载均衡架构的搭建配置教程,用nginx实现双主负载均衡,需要的朋友参考下。

nginx+keepalived单主环境下,其中一台slave机器处于备份状态,有些浪费。
可以利用DNS轮询来实现双机负载均衡。
 
环境

操作系统:centos 6.4
WEB1服务器 IP:192.168.100.60
WEB2服务器 IP:192.168.100.61
VIP1:  192.168.100.62
VIP2:  192.168.100.63
 
安装keepalived(两台机器相同)
 

复制代码 代码示例:
wget http://www.keepalived.org/software/keepalived-1.2.12.tar.gz
tar xzvf keepalived-1.2.12.tar.gz
cd keepalived-1.2.12
./configure
make
make install
if [ 0 = $? ];then
 echo "keepalived installed"
else
   echo "keepalived not installed"
 fi
 
cp /usr/local/sbin/keepalived /usr/sbin
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
~                 

 安装nginx(两台机器相同)
 

复制代码 代码示例:
yum -y install openssl openssl-devel pcre pcre-devel gcc gcc-c++ make wget zlib-static zlib zlib-devel
groupadd nginx
useradd -g nginx nginx
wget http://nginx.org/download/nginx-1.6.0.tar.gz
tar xzvf nginx-1.6.0.tar.gz
cd nginx-1.6.0
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module  --with-http_stub_status_module --user=nginx --group=nginx
make && make install
if [ $? = 0 ];then
  echo "nginx installed"
fi
 

配置nginx(从略,相关配置看官方文档)
配置keepalived

WEB1服务器keepalived.conf配置
 

复制代码 代码示例:
[root@test60 root]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
 
global_defs {
   notification_email {
       test@test.com
   }
   notification_email_from test@test.com
   smtp_server 192.168.100.252
   smtp_connect_timeout 30
   router_id NGINX_1
}
 
 vrrp_script chk_nginx {
      script "/tmp/check_http.sh"
      interval 2
      weight 2
   }
 
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
 
   track_script {
         chk_nginx
   }
 
    virtual_ipaddress {
        192.168.100.62 dev eth0 label eth0:1
    }
}
 
vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
  
 
    virtual_ipaddress {
        192.168.100.63 dev eth0 label eth0:2
    }
}
 

WEB2服务器keepalived.conf配置
 

复制代码 代码示例:
[root@test61 root]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
 
global_defs {
   notification_email {
       test@test.com
   }
   notification_email_from test@test.com
   smtp_server 192.168.100.252
   smtp_connect_timeout 30
   router_id NGINX_2
}
 
 vrrp_script chk_nginx {
      script "/tmp/check_http.sh"
      interval 2
      weight 2
   }
 
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.100.62 dev eth0 label eth0:1
    }
}
 
vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
 
   track_script {
        chk_nginx
    }
 
    virtual_ipaddress {
        192.168.100.63 dev eth0 label eth0:2
    }
}
 

Nginx状态检查(两台机器相同)
 
vim /tmp/check_http.sh
 

复制代码 代码示例:
#!/bin/bash
url="http://192.168.100.60/"      # WEB2机器填192.168.100.61
status=$(/usr/bin/curl -s --head "$url" | linuxjishu/13830.html target=_blank class=infotextkey>awk '/HTTP/ {print $2}')
 
if [ "$status" != "200" ]; then
 /etc/init.d/keepalived stop
fi
 

WEB1服务器增加:
echo “192.168.100.62” >> /var/www/html/index.html
WEB2服务器增加如下:
echo “192.168.100.63” >> /var/www/html/index.html
 
测试

停止WEB1服务器的nginx,查看VIP1是否切换到WEB2服务器
[root@test60 root]# /etc/init.d/nginx stop
启动WEB1服务器的nginx与keepalived,查看VIP1是否能切换回来到WEB1服务器
 

复制代码 代码示例:
[root@test60 root]# /etc/init.d/nginx start
[root@test60 root]# /etc/init.d/keepalived start

停止WEB2服务器的nginx,查看VIP2是否切换到WEB1服务器
[root@test61 root]# /etc/init.d/nginx stop
启动WEB2服务器的nginx与keepalived,查看VIP2是否能切换回来到WEB2服务器
 

复制代码 代码示例:
[root@test61 root]# /etc/init.d/nginx start
[root@test61 root]# /etc/init.d/keepalived start

以上本人测试全部通过

负载均衡
关于如何实现负载均衡,相必大家都看到有两个VIP,实现很简单只需要配置DNS轮询就可以实现负载均衡功能。