Chinaunix首页 | 论坛 | 博客
  • 博客访问: 191273
  • 博文数量: 17
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 767
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-02 12:04
文章分类

全部博文(17)

文章存档

2015年(1)

2014年(7)

2013年(9)

我的朋友

分类: 架构设计与优化

2014-05-17 22:49:52

Nginx双主负载均衡架构

简介

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

具体架构图如下

 

 

 

环境

操作系统:CentOS 6.4

WEB1服务器 IP192.168.100.60

WEB2服务器 IP192.168.100.61

VIP1:  192.168.100.62

VIP2:  192.168.100.63

 

安装keepalived(两台机器相同)

wget

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

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 {

      

   }

   notification_email_from

   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=""      # WEB2机器填192.168.100.61

status=$(/usr/bin/curl -s --head "$url" | 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轮询就可以实现负载均衡功能。

 

阅读(4636) | 评论(1) | 转发(3) |
给主人留下些什么吧!~~

niao59292014-05-20 13:59:59

这才是真正的分布式集群系统。呵呵