keepalived+lvs

来源:互联网 发布:一钻淘宝店铺转让 编辑:程序博客网 时间:2024/05/22 03:24

Keepalived+LVS

 

Linux下的高可用负载均衡服务器集群之keepalived+lvs

 

LVS,是Linux Virtual Server的缩写,也就是Linux虚拟服务器。它是一个虚拟的服务器集群系统。1998年5月章文嵩博士成立该项目,是中国国内最早出现的自由软件项目之一。

Keepalived是一种类似于网络中3、4、5层交换机制的软件。Keepalived能够检测web服务器的工作状态,假如集群中的两台web服务器有一台出现宕机或故障情况时,Keepalived能够检测到并将其从集群节点中剔除。当故障服务器正常工作后自动加入到服务器集群节点中,不需要人为干预,所有工作能够自动完成。

 

主机环境:RHEL6.5系列 selinux and iptables disabled

实验主机:

LVS ‐ MASTER: server1-172.25.4.1

LVS ‐ BACKUP: server4-172.25.4.4 

LVS ‐ VIP: 172.25.4.100

Realsever: server2-172.25.4.2 server3-172.25.4.3

 

 

Keepalived服务器搭建

server1server4调度器上源码安装keepalived软件

tar zxf keepalived-1.2.10.tar.gz   ##解压keepalived安装包

cd keepalived-1.2.10

yum install ipvsadm kernel-devel openssl-devel popt-devel libnl-devel gcc make -y

./configure  --prefix=/usr/local/keepalived --with-init=SYSV

 

Keepalived configuration

------------------------

Keepalived version       : 1.2.10

Compiler                 : gcc

Compiler flags           : -g -O2 -DFALLBACK_LIBNL1

Extra Lib                 : -lssl -lcrypto -lcrypt  -lnl

Use IPVS Framework      : Yes

IPVS sync daemon support : Yes

IPVS use libnl             : Yes

Use VRRP Framework      : Yes

Use VRRP VMAC           : Yes

SNMP support             : No

SHA1 support              : No

Use Debug flags           : No

 

make && make install    ##编译

 

#设置软链接便于访问目录

ln -s /usr/local/keepalived/sbin/keepalived /sbin/

ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

ln -s /usr/local/keepalived/etc/keepalived /etc/

ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

Chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived

 

#编辑主配置文件

Vim /etc/keepalived/keepalived.conf

 

! Configuration File for keepalived

global_defs {

   notification_email {   #接收警报的email地址,可以添加多个

     root@localhost

   }

   notification_email_from keepalive@server1   #设置邮件的发送地址

   smtp_server 127.0.0.1     #设置 smtp server 地址    

   smtp_connect_timeout 30  #设置连接 smtp 服务器超时时间

   router_id LVS_DEVEL        #load balancer的标识ID,用于email警报

}

vrrp_instance VI_1 {

    state MASTER               #备机改为BACKUP,此状态是由 priority 的值来决定的,当前priority 的值小于备机的值,那么将会失去MASTER状态

    interface eth0              #HA 监测网络接口

    virtual_router_id 55         #主、备机的 virtual_router_id 必须相同,取值 0-255

    priority 100               #主机的优先级,备份机改为 50,主机优先级一定要大于备机

    advert_int 1               #主备之间的通告间隔秒数

    authentication {           #主备切换时的验证

    auth_type PASS        #设置验证类型,主要有PASSAH两种

    auth_pass 1111       #设置验证密码,在一个vrrp_instance,MASTERBACKUP必须使用相同的密码才能正常通信

    }

    virtual_ipaddress {        #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个

     172.25.4.100

    }

}

virtual_server 172.25.4.100 80 {   #定义虚拟服务器

    delay_loop 6              #每隔 秒查询realserver状态

    lb_algo rr                  #lvs调度算法,这里使用轮叫

    lb_kind DR                 #LVS 是用DR模式

   # persistence_timeout 50   #会话保持时间,单位是秒,这个选项对于动态网页是非常有用的,为集群系统中 session 共享提供了一个很好的解决方案。有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话保持时间。需要注意的是,这个会话保持时间,是最大无响应超时时间,也就是说用户在操作动态页面时,如果在 50 秒内没有执行任何操作,那么接下来的操作会被分发到另外节点,但是如果一直在操作动态页面,则不受 50 秒的时间限制。

    protocol TCP           #指定转发协议类型,tcpudp两种

    real_server 172.25.4.2 80 {       #配置服务节点

        weight 1           #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统资源

        TCP_CHECK {      #realserve 的状态检测设置部分,单位是秒

            connect_timeout 3    #3秒无响应超时

            nb_get_retry 3        #重试次数

            delay_before_retry 3   #重试间隔

        }

   }

     real_server 172.25.4.3 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

   }

}

 

:备机的 keepalived 配置文件只改动红色字体部分!

 

/etc/init.d/keepalived start   ##启动服务

 

LVS服务器搭建

LVS的负载均衡模式主要分为直接路由(Direct Forwarding)、网络地址转换(NAT)和隧道技术(Tunneling)三种。

直接路由(Direct Forwarding)是指集群中的所有计算机在相同网段时使用的方法。如图6.2所示,控制管理主机(Director)将来自用户的访问请求包动态分配给集群中的节点。然后真实服务器节点把客户的请求内容返还用户,流量不再经过管理控制主机,减小了瓶颈的出现,提高了响应速度。

 

图1 直接路由模式图

网络地址转换(NAT)是通过地址转换实现IP地址的合法化。如图6.3所示,当用户的访问请求送到转换器(Director)时,它能够准确无误的把用户的访问请求分配到内部的真实节点上。通过地址转换节省IP地址数目,实现内部网络的伪装,提到安全性。真实节点返回给用户请求的流量要经过转换器,效率降低了很多。

 

图2网络地址转换模式图

隧道技术(Tunneling)模式是指linux集群中的节点在不同网段时采用一种的转发机制。如图6.4所示,用户的访问请求到达Director时,IP包被封装在其它的网络流量中传递给集群中的节点。真实服务器节点将用户的请求内容不经过Director,直接返回给用户。

   

                        图3 隧道模式图



LVS负载均衡是通过负载均衡调度算法进行调度的,而LVS的调度算法多达10[8]。调度算法有轮询、加权轮询、最少连接、加权最少连接、基于局部性的最少链接、带复制的基于局部性最少链接、目标地址散列、源地址散列、最短的期望的延迟和最少队列调度10中,目前支持这10种。根据不同的网络环境选择合适的负载均衡模式和负载均衡算法。

 

我们这里采用了DR的模式和轮询的调度算法。

 

server1上安装提供调度服务的软件(ipvsadm),该软件的缺点是没有安全健康检查

yum install -y ipvsadm

ipvsadm -L                #查看策略

ipvsadm -C                #刷掉策略

ipvsadm -A -t 172.25.4.100:80 -s rr   ##添加负载均衡的轮询算法到策略

ip addr add 172.25.4.100/24 dev eth0   ##添加VIP,以及设备和网卡

ipvsadm -a -t 172.25.4.100:80 -r 172.25.4.2:80 -g #RIP绑定到VIP

ipvsadm -a -t 172.25.4.100:80 -r 172.25.4.3:80 -g

 

 

server2,server3上安装ARP防火墙以保证在系统内核层拦截虚假ARP数据包以及主动通告网关本机正确的MAC地址,可以保障数据流向正确,不经过第三者。从而保证通讯数据安全、保证网络畅通、保证通讯数据不受第三者控制

 

ip addr add 172.25.4.100/32 dev eth0

yum install -y arptables_jf

arptables -A IN -d 172.25.4.100 -j DROP 

arptables -A OUT -s 172.25.4.100 -j mangle --mangle-ip-s 172.25.4.2   ##server3这里应该是172.25.4.3

/etc/init.d/arptables_jf save      ##保存策略,使之生效

/etc/sysconfig/arptables         ##arp策略的配置文件

 

 

 

 

测试:

1. 高可用测试:停止 master 上的 keepalived 服务,看 backup 是否接管。

2. 负载均衡测试:访问 http://172.25.4.100,看到页面在两个 realserver 上切换表示成功!

你也可以通过 ipvsadm -Lnc 查看详细连接情况!

3. 故障切换测试:任意关闭 realserver 上的 httpd 服务,Keepalived 监控模块是否能及时发现,

然后屏蔽故障节点,同时将服务转移到正常节点来执行。


原创粉丝点击