LVS+Keepalived 实现 负载平衡,高可用性模拟实验

 

LVShtml

Linux vritual server是针对linux内核开发的一个负载均衡项目,lvs其实是一个基于IP 的一个虚拟化应用。LVS想已成为Linux系统的一部分。默认编译为IP_VS模块,必要时能够调用。linux

KeepAlived web

Keepalived 是针对LVS的一款强大的辅助工具,主要用来提供故障切换和健检查功能,如判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其从新加入群集。在非LVS群集环境中使用时Keepalived也能够做为热备软件使用。算法

Keepalived采用VRRP(virtual  router  redundancy  protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现linux服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案-----由多台路由器组成一个热备组。经过共用的虚拟IP地址对外提供服务;每一个热备组内同一时刻只有一台主服务器提供服务,其余服务器处于冗余状态,若当前在线的服务器失败,其余服务器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。服务器

热备组内的每台服务器均可以成为主服务器,虚拟IP地址(VIP)能够在热备组内的服务器之间进行转移,因此也称为漂移IP地址,使用Keepalived时,漂移地址的实现不须要手动创建虚拟接口配置文件(如eth0:0),而是由Keepalived根据配置文件自动管理。负载均衡

下面是我实验的两个案例: (LVS-NAT+HA)和 (LVS-DR+HA)ide

LVS-NAT+HA工具

实验拓扑以下:(全是RHEL6 X32模拟)oop

wps_clip_image-30284

地址安排:测试

主调度器: 外网ip 12.12.12.1 /24

内网ip 192.168.1.1/24

辅助调度器: 外网 ip 12.12.12.2/24

内网ip 192.168.1.2/24

VIP虚拟ip 12.12.12.10/24 (web服务) 192.168.1.254 (内网的网关)

Web节点 1 : 192.168.1.3/24 gw 192.168.1.254

Web节点2 :19.168.1.4/24 gw 192.168.1.254

分析:

① 要实现LVS和keepalived实现的HA(高可用性)结合,须要安软ipvsadm 这个工具包来实现负载平衡以及安装keepalived实现高可用性,故障切换。

② 由于是LVS是NAT的工做模式,要解决防火墙以及路由转发的问题。

③ keepalived 是基于VRRP协议来工做的,因此要容许他们的通讯。

④ keepalived 主配置文件的问题,文件中肯定谁是主,谁是辅,以及VIP ,RIP。

⑤ LVS和Keepalived都是虚拟服务的一部分,要加载IP_VS模块。

⑥ web节点需连接vip网关,并提供web服务。

步骤:

先来解决第一步

rpm 安装 ipvsadm-1.25-9.el6.i686.rpm

wps_clip_image-22259

源码安装keepalived 安装以前 必须先安装内核开发包kernel-devel以及openssl-devel、popt-devel等支持库 没有要安装

wps_clip_image-29518

进入解压目录

./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-71.el6.i686/ 配置 建议安装到/ 目录下 否则不会自动添加到系统服务。

wps_clip_image-13053

make && make  安装

安装后会生成如下的目录和文件

Keepalived.conf 是主要配置文件

wps_clip_image-1697

而且配置 服务开机自动启动 chkconfig keepalived on

wps_clip_image-8399

配置防火墙 容许 80端口 和 目标地址是224.0.0.18的包 (224.0.0.18)是VRRP的通讯地址  配置SNAT策略和容许源地址是80的转发包

wps_clip_image-27491

修改/etc/sysctl.conf 配置文件 实现转发功能

把“net.ipv4.ip_forward = 0 ”的值给成1  启用转发

wps_clip_image-30461

sysctl -p 生效

wps_clip_image-11804

配置keepalived的主配置文件

主配置文件由三部分组成, 注释文字以”!”符号开头。

使用global_defs {……}区段指定全局参数。

使用vrrp_instance  实例名称{……}区段指定VRRP热备参数。

使用vritual_server  ip地址 {……}指定虚拟服务。

主配置调度器的配置

! 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_1 #本服务器的ID号为 LVS_1 必须是惟一的

}

!###############定义内部网关实例################################

vrrp_instance VI_1 { #开始定义VRRP实例 名称为VI_1 一组服务器的名称要一致

state MASTER #热备状态,MASTER表示主服务器;SLAVE表示备用服务器;当 有多台备用的服务器,热备状态改成 BACKUP,此状态是由 priority  的值来决定的,当前priority 的值小于备机的值,那么将会失MASTER  状态   

interface eth0 #检测承载VIP流量的网卡

    virtual_router_id 51   #虚拟路由器的ID号。主、辅机的 virtual_router_id 必须相同

    priority 100 #主机的优先级,数值越大优先能越高

    advert_int 1 #主备之间的通告间隔秒数(心跳频率)

    authentication { #认证信息,每一个热备组保持一致

        auth_type PASS #认证类型,主备切换时的验证

        auth_pass 1111  #密码

    }

    virtual_ipaddress { #指定虚拟地址(VIP),能够有多个

        192.168.1.254 #HA 虚拟 ip,可加多个

    }

}

!#######################定义外网web服务实例#############################

vrrp_instance VI_11 {

    state MASTER

    interface eth1

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        12.12.12.10

    }

}

!###############################定义网关虚拟地址######################

virtual_server 192.168.1.254 { #虚拟服务器地址(VIP)

    delay_loop 6 #健康检查的间隔时间(秒),每隔 6 秒查询 realserver状态

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

    lb_kind NAT #lvs 负载均衡机制,这里使用NAT

    nat_mask 255.255.255.0 #虚拟ip的子网掩码

!    persistence_timeout 50 #同一 IP 的链接 50 秒内被分配到同一台 realserver

    protocol TCP ##用 TCP 协议检查 realserver 状态

    real_server 192.168.1.1 { #第一个网关节点的地址

        weight 1 #节点的权重

        TCP_CHECK {  #健康检查方式

            connect_timeout 3 #故障重试秒数(即链接超时)

            nb_get_retry 3 #重试延迟(即重试次数)

            delay_before_retry 3 #重试间隔(秒)

                }

    }

    real_server 192.168.1.2 { #第二个网关节点的地址

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

}

    }

}

!########################定义虚拟web地址 ##############################

virtual_server 12.12.12.10 80 { #虚拟服务器地址(VIP)、端口

    delay_loop 6

    lb_algo rr

    lb_kind NAT

     nat_mask 255.255.255.0

!persistence_timeout 50

    protocol TCP

    real_server 192.168.1.3 80 { #第一个web服务器

        weight 1

        TCP_CHECK {

connect_port 80 #指定检测的端口

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

                                }

real_server 192.168.1.4 80 { #第二个服务器

        weight 1

        TCP_CHECK {

connect_port 80 

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

                                }

辅助负载调度器的配置和主的大体相同  担心三点配置不能同样

全局配置中的ID标识

状态

优先级  !注意这里一个VRRP 实例中有两个不同 同理 两个VRRP实例中…… 本身算

wps_clip_image-26408

而后负加载 ip_vs模块   modprobe ip_vs

注意从服务器重启后会失效

wps_clip_image-7229

启动keepalived服务

wps_clip_image-10758

好了 进度到一半了

辅助调度器同样的配置 处理keepalived的主配置文件不一样

主调度器命令 ip address show dev 网卡名称 来查看端口监测的ip,主调度其中每一个网卡应承载两个ip (VIP) 应为他是主 MASTER 优先级是100

wps_clip_image-20608

辅助调度器 是一个正常ip  没有负载 VIP

wps_clip_image-10434

为了测试keepalived可以正常实行故障切换  用ping + -t 命令检测 在ping的过程当中断开主调度器的连接 然他不能和辅助调度器连接 VRRP 辅助调度器就认为主调度器down掉,边自动的成为主调度器 承载VIP的流量。Ping的过程当中是 以下的效果

wps_clip_image-19288

RIP(web节点)的配置

开启httpd服务

防火墙容许

网关指向VIP网关 也就是 192.168.1.254

这里两台web服务器我用了 不一样的内容html文档

若是web节点down掉或出现问题

主从调度器上将把他排除  用ipvsadm命令查不到他

wps_clip_image-30254

说明192.168.1.4这个web节点有问题 用TCP 协议检测他的80 端口

配置正常后

wps_clip_image-16341

最后 测试页面以下

请求被发送到web节点1

wps_clip_image-16022

请求被发送到web节点2

wps_clip_image-16546

主负载调度器查看

ipvsadm  -lcn

wps_clip_image-19265

还算比较平衡

LVS-DR +HA

实验拓扑以下:

主调度器:12.12.12.1/24

辅助调度器: 12.12.12.2/24

VIP:12.12.12.10/24

Web01: 12.12.12.3/24

Web02:12.12.12.4/24

wps_clip_image-5646

分析:

思路基本一致

① 在主辅调度器上安装ipvsadm和keepalived软件

② 解决主辅调度器的连通性问题

③ ip_vs模块的应用

④ 配置文件配置

⑤ web节点的配置

步骤:

思路 ① ② ③ 就省去详细步骤了,参考LVS-NAT+HA或 连接 http://zhangyongli.blog.51cto.com/6691702/1288731

来直接看看配置文件的不一样。

主负载调配器

! 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_1

}

!##########################VRRP实例#################################

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 {

        12.12.12.10

    }

}

!################################定义虚拟服务器####################

virtual_server 12.12.12.10 80 {

    delay_loop 6

    lb_algo rr

lb_kind DR #注意是DR

    !persistence_timeout 50

    protocol TCP

    real_server 12.12.12.3 80 { #第一个真实web

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

    real_server 12.12.12.4 80 { #第二个真实web

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

辅助调度服务器

全局配置中  router_id 不一样  vrrp实例中  状态不同  优先级不同

Web节点的配置

由于是LVS-DR模式

因此 web客户端是独立向客户端回应响应包的 添加ifcf-etho:0文件

内容以下

wps_clip_image-24286

DEVICE=lo:0 #设备名称

IPADDR=12.12.12.10 #监听vip地址

NETMASK=255.255.255.255 #主机路由

注意sysctl.conf配置添加

wps_clip_image-3386

详细含义参考 http://zhangyongli.blog.51cto.com/6691702/1288731 文档尾部

添加路由

route  add  12.12.12.10 dev lo:0

Web节点相同的配置 

而后测试;

wps_clip_image-6766

wps_clip_image-20968

主负载调度器

wps_clip_image-22124

ip   addr   show   dev  echt0

wps_clip_image-12152

好了  大功告成!!!

相关文章
相关标签/搜索