nginx lvs keepalived搭建集群


拓扑图如下:

一、为什么要使用负载均衡技术?

1、系统高可用性

2、  系统可扩展性

3、  负载均衡能力

LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查,故障转移,提高系统的可用性!采用这样的架构以后很容易对现有系统进行扩展,只要在后端添加或者减少realserver,只要更改lvs的配置文件,并能实现无缝配置变更!

二、LVS+Keepalived介绍

1、  LVS

LVS是一个开源的软件,可以实现LINUX平台下的简单负载均衡。LVSLinux Virtual Server的缩写,意思是Linux虚拟服务器。目前有三种IP负载均衡技术(VS/NATVS/TUNVS/DR);八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。

2、  keepalived

Keepalived 是运行在lvs 之上,它的主要功能是实现真实机的故障隔离及负载均衡器间的失败切换,提高系统的可用性Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中。

IP配置信息:
LVS-DR-Master          172.10.2.174
LVS-DR-BACKUP          172
LVS-DR-VIP             172.10.2.201   #这个不是一台机子,是在nginx上用脚本建的,下面会有脚本代码。  
WEB1-ngxserver        172.10.2.170   #这个nginx,后端我用的是apache,nginx代理apache
WEB2-ngxserver        172.10.2.206   #这个也是nginx


三、ipvsadm安装:
先安装所需要的库:yum install zlib-devel kernel-* libnl* popt* openssl openssl-devel net-snmp-*
#ipvs安装报错主要是缺少,libnl跟popt库文件
下载地址: http://www.linuxvirtualserver.org/software/index.html
解压后:make && make install
安装好后测试下:ipvsadm ## 必须先执行此命令才能加载ip_vs模块
没报错有输出说明安装ok了。
再输入: lsmod | grep ip_vs

四、安装keepalived(lvs和keepalived装在一台机子上,我全用的虚拟机子)
解压后:./configure --prefix=/usr/local/keepalived --enable-snmp && make && make install

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/
mkdir /etc/keepalived/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ #没有这个keepalived启动后,不会检测到real server的vip
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ #没有这个keepalived无法启动,报错说找不到命令

启动:/etc/init.d/keepalived start

  4.1   /etc/keepalived/keepalived.conf配置如下
! 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_sync_group LVS {
    group {
        VI_1
    }  
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    lvs_sync_daemon_interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }  
    virtual_ipaddress {              #这个是vip
        172.10.2.89
    }  
}

virtual_server 172.10.2.89 80 {
    delay_loop 6
    lb_algo rr
    #lb_kind NAT
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP

    real_server 172.10.2.170 80 {             #这个nginx
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_prot 80
        }
    }

    real_server 172.10.2.206 80 {           #这个也是nginx
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_prot 80
        }
    }
}


五、在两台nginx上放入脚本,(/etc/init.d/lvs_start.sh)内容如下:
 #! /bin/bash
SYN_VIP=172.10.2.201

/etc/rc.d/init.d/functions

case "$1" in
start)
    ifconfig lo:0 $SYN_VIP netmask 255.255.255.255 broadcast $SYN_VIP
    /sbin/route add -host $SYN_VIP dev lo:0
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    sysctl -p >/dev/null 2>&1
    echo "RealServer Start ok"

    ;; 
stop)
    ifconfig lo:0 down
    route del $SYN_VIP >/dev/null 2>&1
    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
    echo "RealServer Stop"

    ;; 
*)

    echo "USAGE: $0 {start|stop}"
    exit 1
esac


配置权限:chmod +x /etc/init.d/lvs_start.sh
开启:/etc/init.d/lvs_start.sh start    会提示functions权限不够
加权限chmod +x /etc/rc.d/init.d/functions
/etc/init.d/lvs_start.sh start
再ifconfig看看

说明vip配置ok了。两个nginx机子都使用相同的这个脚本


六、访问测试:
在lvs keepd机子上输入命令
    ip add    #命令查看real server的vip是否已经被绑定到keepalived的MASTER或者BACKUP上
  inet 172.10.2.201/32 scope global eth0    #说明成功绑定

ipvsadm命令检测nginx是否正常工作,

都已经检测到两台nginx在正常工作,

把170和206两台nginx开启,

接下来要清一下,由于我测试时访问ip没搞对,老访问不了,
在nginx上有配置的vip(172.10.2.201),这个ip是对外的,直接对应用户,我们在lvs_keepd机子上有绑定这个vip,那么当用户访问这个ip时,lvs_keepd会接收这个请求然后转发给170和206其中某一台机子,这里lvs也会实现一个小小的负载,

那本地windows的host配置是
 172.10.2.201 www.b.com    #这样访问这个域名时,直接到了lvs,再转发给了nginx,nginx再去后端apache获取数据

测试:当访问www.b.com/test235.html, lvs收到后转发给了ngx206来接收了请求,
      当我把ngx206的nginx服务给关了,再次请求,lvs收到后转发给了ngx170,
      当把ngx206开启时,在lvs_keepd上ipvsadm一下,会看到206重新加入进来。
      这里具体怎么看,看访问日志。


#这里有一些是参照网上的一例子,但小兵新测过,可行。



阅读更多
个人分类: nginx杂谈
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭