Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1090999
  • 博文数量: 120
  • 博客积分: 887
  • 博客等级: 准尉
  • 技术积分: 1883
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-05 21:10
个人简介

RHCE,CCNA,熟悉shell脚本

文章分类

全部博文(120)

文章存档

2015年(16)

2014年(20)

2013年(48)

2012年(20)

2011年(16)

分类: 系统运维

2014-12-16 18:37:58

keepalived+lvs+nginx双机集群
Keepalived for Linux - Version 1.2.8 - September 05, 2013

简介:
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中。
主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。
故keepalived个人定义为HA,不是负载均衡。
keepalived运行在lvs之上

LVS 软件负载均衡
ipvsadm-1.26.tar.gz


DR工作模式     支持约100个左右的应用
NAT工作模式  支持约10~20
个左右的应用
TUN工作模式   支持约100个左右的应用

IP配置信息:
LVS-DR-Master          192.168.164.132
LVS-DR-BACKUP          192.168.164.133
LVS-DR-VIP             192.168.164.100     
WEB1-Realserver        192.168.164.134
WEB2-Realserver       192.168.164.135



centos6.5_X86_64-livecd安装的系统
yum install -y gcc gcc-c++ zlib-devel kernel-* libnl* popt* openssl openssl-devel net-snmp-*
#ipvs安装报错主要是缺少,libnl跟popt库文件

ningx源码安装
./configure --prefix=/usr/local/nginx --with-pcre=/root/pcre-8.36 && make && make install

cd /usr/local/nginx/html/
mv index.html index.html.bak
echo -e "MASTER" > index.html
echo -e "BACKUP" > index.html  # 另一台

/usr/local/nginx/sbin/nginx

ipvsadm安装

ln -vs /usr/src/kernels/2.6.32-504.1.3.el6.x86_64/ /usr/src/linux  (1.26不需要这个软连接,也能安装)
tar zxvf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26 && make && make install

验证是否安装成功
[root@localhost ipvsadm-1.26]# ipvsadm ## 必须先执行此命令才能加载ip_vs模块
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

[root@localhost ipvsadm-1.26]# lsmod | grep ip_vs
ip_vs                 125220  0
libcrc32c               1246  1 ip_vs
ipv6                  317340  145 ip_vs,cnic,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6


ipvsadm 启动脚本(用于真实服务器,real server)
[root@localhost ~]# cat lvs_keepd.sh
#! /bin/bash
SYN_VIP=192.168.164.100

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

case "$1" in
start)
    echo "start LVS of real server"
    ifconfig lo:0 $SYN_VIP netmask 255.255.255.255 broadcast $SYN_VIP
    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)
    echo "stop LVS of real server"
       ifconfig lo:0 down
       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 Stoped"
       ;;
*)
    echo "USAGE: $0 {start|stop}"
    exit 1
esac

bash lvs_keepd.sh start

keepalived的安装

tar xf keepalived-1.2.8.tar.gz
cd keepalived-1.2.8
./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

keepalived MASTER配置文件
[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
### keepalived有自己的报警机制,但一般不用,所以注释掉,只留下router_id
#   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_1     # 全网唯一标识,不能有重复出现
}

#组块,同步实例组
vrrp_sync_group LVS {     #设置vrrp组
group {
    VI_1   #实例名,可以配置多个实例,一个实例一行,一个实例一个虚拟块
    }
}
####虚拟块
vrrp_instance VI_1 {     #跟实例组中的实例名一样     
    state MASTER            ##设置lvs的状态,MASTER和BACKUP两种,必须大写
    interface eth1            #对外提供服务的网络接口
    lvs_sync_daemon_interface eth1         #设置lvs监听的接口,类似于心跳检测,(HA中绑定VIP的网口)在DR模式中,interface和lvs_sync_daemon_interface的网卡是一致的
    virtual_router_id 51                #虚拟路由标识,MASTER和BACKUP是一致的,但在整个VRRP中是唯一的
    priority 150                        #优先级,数值越大,优先级越高,MASTER要高于BACKUP,
    advert_int 1                        #同步检查间隔时间,MASTER和BACKUP之间同步检查的时间间隔,单位为秒
    authentication {                        #同步验证,验证密码为明文,MASTER和BACKUP之间的密码和验证类型必须一致,此处一般不改
        auth_type PASS                        #验证方式,就用PASS
        auth_pass 1111                        #VRRP密码
    }
    virtual_ipaddress {                    #虚拟地址,可写多个,一个IP一行
    192.168.164.100                        #这里设置的IP,一定要和real server的lvs脚本中的VIP一致
    }
}

virtual_server 192.168.164.100 80 {            #虚拟服务器配置,此处IP就是之前的VIP,端口就是需要提供负载的端口,比如80,3306等等
    delay_loop 6                            #延时等待时间,单位为秒
    lb_algo rr                                #HA调度算法,互联网一般就用wlc加权最小连接调度和rr轮询round robin
    ##lb_kind NAT
    lb_kind DR                                #HA的负载均衡转发规则,一般用DR方式
    persistence_timeout 50                        #会话保持时间,单一链接重连保持时间秒,可以理解为session共享
    protocol TCP                                #转发协议,一般都是采用TCP方式,也可以使用UDP

    real_server 192.168.164.134 80 {            #真实服务器的IP+端口,理解为需要高可用的应用服务,比如80,3306等等
        weight 1                                #权重值,值越大,权重越高,可以承担的负载雨大,服务器硬件比较好,可以使用高一点的权重
    TCP_CHECK {                                        #TCP协议检查
        #SSL_GET {                    
        #    url {
        #      path /
        #      digest ff20ad2481f97b1754ef3e12ecd3a9cc
        #    }
        #    url {
        #      path /mrtg/
        #      digest 9b3a0c85a887a256d6939da88aabd8cd
        #    }
            connect_timeout 3                #连接超时时间,单位秒
            nb_get_retry 3                    #检测失败后,重试次数,超出设定值,将后端服务器移除
            delay_before_retry 3            #失败重试时间
        connect_prot 80                        #需要检测的端口,比如80,3306等等
        }
    }

    real_server 192.168.164.135 80 {
        weight 1
        TCP_CHECK {
        connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_prot 80
        }
    }
}

keepalived BACKUP配置文件
[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL_2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    lvs_sync_daemon_interface eth1
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.164.100
    }
}

virtual_server 192.168.164.100 80 {
    delay_loop 6
    lb_algo rr
    ##lb_kind NAT
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.164.134 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_prot 80
        }
    }

    real_server 192.168.164.135 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_prot 80
       }
    }
}

keepalived-HA检测方法
/etc/init.d/keepalived stop #用此命令停止MASTER或者BACKUP的keepalived
ip add #再用此命令查看real server的vip是否已经被绑定到keepalived的MASTER或者BACKUP上

用ipvsadmin能更加准确的查看HA的服务,和real server
[root@localhost ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.164.100:http rr persistent 50
  -> 192.168.164.134:http         Route   1      0          0         
  -> 192.168.164.135:http         Route   1      0          0  
 
nginx失效检测
将其中一台nginx进程杀掉,keepalived会自动切换到另外一台nginx上
直接 #此ip为虚拟ip

注:
在没有做路由的情况下,[按照本试验中,eth0跟eth1不在一个网段,eth1用于keepalived-HA],将interface 从eth1改成eth0,访问vip(web)时,要比interface eth1慢很多(约10秒)

在keepalived中有一些模板可以参考
$INSTALL_KEEPALIVED_PATH/etc/keepalived/samples/

《Linux keepalived与lvs的深入分析》
http://blog.sina.com.cn/s/blog_7b6fc4c9010126rt.html

《Linux keepalived与lvs的深入分析》二之虚拟服务器配置分析
http://blog.sina.com.cn/s/blog_7b6fc4c9010126ry.html

《Linux keepalived与lvs的深入分析》三之负载调度算法
http://blog.sina.com.cn/s/blog_7b6fc4c9010126s0.html

《Linux keepalived与lvs的深入分析》四之IP负载均衡技术
http://blog.sina.com.cn/s/blog_7b6fc4c9010126s5.html

阅读(6173) | 评论(0) | 转发(0) |
0

上一篇:chmod -x /bin/chmod修复

下一篇:haproxy 安装

给主人留下些什么吧!~~