LVS+keepalived部署高可用和负载均衡

一、LVS相关资料

          LVS的全称Linux vitual system, linux vitual server,是由目前阿里巴巴的著名工程师章文嵩博士开发的一款开源软件。LVS工作在一台server上提供Directory(负载均衡器)的功 能,本身并不提供服务,只是把特定的请求转发给对应的realserver(真正提供服务的主机),从而实现集群环境中的负载均衡。
         LVS的核心组件ipvs工作在kernel中,是真正的用于实现根据定义的集群转发规则把客户端的请求转发到特定的realserver。而另一个组 件ipvsadm是工作在用户空间的一个让用户定义ipvs规则的工具。故我们只要在server上装了ipvsadm软件包就可以定义ipvs规则,而 在linux kernel的2.6版本之后kernel是直接支持ipvs的。

         IPVS 是 lvs的第一部分负载调度器(load balancer)的实现 ,也就是最核心的部分,用来进行负载均衡,所以 ipvs主要实现。

         一般来说,LVS集群采用三层结构,其主要组成部分为: 
A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。 
B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。 
C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。 

  • 三种模式

DR工作模式,即Direct Routing模式。这种模式中,调度器直接重写进入包的mac地址,将其改为选定的目标服务器的mac地址,这样就可以到达服务器。但这样的话需要要求 IPVS服务器需要和真实服务器在同一局域网内,且真实服务器必须有真实网卡(这样重写了mac地址的报文才可以才可以到达该服务器) 

NAT工作模式,简单来说就是传统的 NAT,进出流量都需要经过调度器,调度器会选择一个目的服务器,将进入流量的目标IP改写为负载均衡到的目标服务器,同时源IP地址也会改为调度器IP 地址。机制简单,但限制大,IPVS需要维护每个映射关系,而且进出入流量都需要经过调度器,实际上这个会成为瓶颈。 
TUN工作模式,即IP Tunneling模式。这种模式中,调度器将进入的包重新包成一个IP包,然后发送给选定的目的服务器,目的服务器处理后,直接将应答发送给客户(当然该重新封装的报文的源IP地址还是要填成调度器的)。 
FULLNAT工作模式 

  • 多种算法

轮训算法 加权轮训算法 最小连接算法 加权最下连接算法 ..... 
LVS Scheduling Method LVS的调度方法:
1.Fixed Scheduling Method  静态调服方法
(1).RR     轮询 
(2).WRR    加权轮询 
(3).DH     目标地址hash
(4).SH     源地址hash
2.Dynamic Scheduling Method 动态调服方法
(1).LC     最少连接 
(2).WLC    加权最少连接 
(3).SED    最少期望延迟
(4).NQ     从不排队调度方法
(5).LBLC   基于本地的最少连接
(6).LBLCR  带复制的基于本地的最少连接

  • Heartbeat 

Heartbeat 项目是 Linux-HA 工程的一个组成部分,其与lvs在本质上无关。 
Heartbeat提供了2个核心的功能正是lvs所需要的,心跳监测部分和资源接管,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,安装了 Heartbeat 的两台机器会通过心跳检测互相检测对方的状态,当检测到对方失效的时候会调用资源接管来做接管服务器,保证高可靠性。 
在一个高可靠的lvs集群中,负载调度IPVS部分一般由2台服务器组成,一台负责调度,一台负责备用,当负责调度的服务器出现问题的时候迅速切换到备用 机器上,而heartbeat 就是负责检测,负载调度 IPVS 的可用性,并在出现问题的时候切换到备用 IPVS 上面。

  • ldirectord 

ldirectord是专门为LVS监控而编写的,用来监控lvs架构中服务器池(server pool) 的服务器状态。 
ldirectord 运行在 IPVS 节点上, ldirectord作为一个守护进程启动后会对服务器池中的每个真是服务器发送请求进行监控,如果 服务器没有响应 ldirectord 的请求,那么ldirectord 认为该服务器不可用, ldirectord 会运行 ipvsadm 对 IPVS表中该服务器进行删除,如果等下次再次检测有相应则通过ipvsadm 进行添加。

  • Keepalived 

Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现 。IPVS通常与keepalived配合使用,后者也是LVS项目的子项目之一,用于检测服务器的状态。 
在lvs体系中,Keepalived主要有如下3个功能: 
1 管理LVS负载均衡软件 
2 实现对LVS集群节点的健康检查功能 
3 作为系统网络服务的高可用功能 
即 Keepalived 实现了 heartbeat + ldirectord 的功能。

二,实操

实验环境需求:

物理机:172.25.3.250

server1:172.25.3.1  --VS

server2:172.25.3.2  --VS

server3:172.25.3.3  --RS

server4:172.25.3.4  --RS

1.实现负载均衡

  1. 在server1上面进行部署
  2. 为了避免后续安装软件出现问题,先将yum源配置具体化,如下所是
 
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.3.250/rhel6.5
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
 
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.3.250/rhel6.5/LoadBalancer
gpgcheck=0
 
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.3.250/rhel6.5/HighAvailability
gpgcheck=0
 
[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.3.250/rhel6.5/ResilientStorage
gpgcheck=0
 
[ScalableFileSystem]
name=ScalableFileSystem
baseurl=http://172.25.3.250/rhel6.5/ScalableFileSystem
gpgcheck=0
[root@server1 ~]# yum install ipvsadm -y                  ##安装管理集群服务ipvsadm
[root@server1 ~]# ip addr add 172.25.3.100/24 dev eth0    ##临时添加ip(vip)
[root@server1 ~]# ipvsadm -A -t 172.25.3.100:80 -s rr   ## rr轮询模式
[root@server1 ~]# ipvsadm -a -t 172.25.3.100:80 -r 172.25.3.3:80 -g
[root@server1 ~]# ipvsadm -a -t 172.25.3.100:80 -r 172.25.3.4:80 -g  
                                  #vip添加RS地址,并设置为D模式 -r:RS地址,-g:DR模式

[root@server1 ~]# /etc/init.d/ipvsadm save                ##保存ipvsadm操作

server3--RS

[root@server3 ~]#  vim /var/www/html/index.html            #编写默认发布文件
[root@server3 ~]# ip addr add 172.25.3.100/32 dev eth0     ##Realserver同样添加虚拟ip地址,与调度器虚拟ip地址一致
[root@server3 ~]# yum install arptables_jf -y              ##安装arp防火墙 arp防火墙用来屏蔽数据包,拦截ip冲突,因为虚拟机与real server的地址一致,所以进入real server时需要把虚拟ip DROP掉,即拦截real server的虚拟ip
[root@server3 ~]# arptables -A IN -d 172.25.3.100 -j DROP  ##拒绝客户端访问realserver的虚拟ip,只要输入进来直接DROP掉
[root@server3 ~]# arptables -A OUT -s 172.25.3.100 -j mangle --mangle-ip-s 172.25.3.3
                                                           ##由于tcp三次握手,出去时仍要以vip地址形式才会握手,而真正将数据传输给客户端的就是realserver,mangle参数就是这个功能
[root@server3 ~]# /etc/init.d/arptables_jf save

server4--RS

[root@server4 ~]#  vim /var/www/html/index.html            #编写默认发布文件
[root@server4 ~]# ip addr add 172.25.3.100/32 dev eth0     ##Realserver同样添加虚拟ip地址,与调度器虚拟ip地址一致
[root@server4 ~]# yum install arptables_jf -y              ##安装arp防火墙 arp防火墙用来屏蔽数据包,拦截ip冲突,因为虚拟机与real server的地址一致,所以进入real server时需要把虚拟ip DROP掉,即拦截real server的虚拟ip
[root@server4 ~]# arptables -A IN -d 172.25.3.100 -j DROP  ##拒绝客户端访问realserver的虚拟ip,只要输入进来直接DROP掉
[root@server4 ~]# arptables -A OUT -s 172.25.3.100 -j mangle --mangle-ip-s 172.25.3.4
                                                           ##由于tcp三次握手,出去时仍要以vip地址形式才会握手,而真正将数据传输给客户端的就是realserver,mangle参数就是这个功能
[root@server4 ~]# /etc/init.d/arptables_jf save

物理机测试:

可以看到在访问虚拟IP100的时候,两个real server依次轮询

当关掉一个real server时,可以看到,会出现访问失败的情况,所以需要有一个检测功能,能够及时勘察出来,避免不好的用户体验。

 2.ldirectord实现lvs健康检查

[root@server1 ~]# yum install ldirectord-3.9.5-3.1.x86_64.rpm    ##安装服务
[root@server1 ~]# rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm       ##查找配置文件
[root@server1 ~]# cd /etc/ha.d/
[root@server1 ha.d]# cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf .
[root@server1 ha.d]# vim ldirectord.cf                           ##修改配置文件
virtual=172.25.3.100:80
        real=172.25.3.3:80 gate 
        real=172.25.3.4:80 gate
        fallback=127.0.0.1:80 gate                               ##server2、3服务down后,访问本机80端口
        service=http
        scheduler=rr                                             ##调度模式:轮询
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=80                                             ##端口
        request="index.html"                                     ##文件
[root@server1 ha.d]# /etc/init.d/ldirectord start               开启服务

测试:

---server3-up    server4-up

---server3-down   server4-up

---server3-up   server4-down

---server3-down server4-down

这样就实现了LVS健康自检的功能。

3.keepalived部署实现heartbeat + ldirectord 的功能

[root@server1 ~]# /etc/init.d/ldirectord stop   
[root@server1 ~]# chkconfig ldirectord off               ##关闭ldirectord服务,否则会与keepalived冲突
lftp 172.25.3.250:/pub> get keepalived-1.4.3.tar.gz      #获取keepalived安装包
[root@server1 ~]# tar zxf keepalived-1.4.3.tar.gz 
[root@server1 ~]# cd keepalived-1.4.3
yum install gcc
[root@server1 keepalived-1.4.3]# ./configure --prefix=/usr/local/keepalived --with-init=SYSV
[root@server1 keepalived-1.4.3]# make     
[root@server1 keepalived-1.4.3]# make install             ##安装keepalived,可能需要安装依赖性服务
[root@server1 ~]# yum install openssl-devel.x86_64 -y     ##解决依赖性
[root@server1 ~]# cd /usr/local/keepalived/etc/rc.d/init.d/
[root@server1 init.d]# chmod +x keepalived 
[root@server1 local]# ln -s /usr/local/keepalived/etc/keepalived/ /etc
[root@server1 local]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/
[root@server1 local]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/
[root@server1 local]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/
[root@server1 init.d]# vim /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
#   vrrp_strict                   
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
 
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 56       
    priority 100                         ##数值要大于BACKUP的
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.129.100
    }
}
 
virtual_server 172.25.3.100 80 {
    delay_loop 3
    lb_algo rr
    lb_kind DR
   # persistence_timeout 50                
    protocol TCP
 
    real_server 172.25.3.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
 
    real_server 172.25.3.4 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }
}

开启服务并重新加载:keepalived

[root@server1 ~]# /etc/init.d/keepalived start
[root@server1 ~]# /etc/init.d/keepalived reload

将server1的配置文件复制给server2

[root@server1 ~]# scp -r /usr/local/keepalived/ root@172.25.3.2:/usr/local/
[root@server1 ~]# scp -r /etc/keepalived/keepalived.conf root@172.25.3.2:/etc/keepalived/

对server2的进行backup部署

vim /etc/yum.repos.d/rhel-source.repo       ##配置完整的yum源
yum install -y ipvsadm                 ##安装服务
yum install openssh -y
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
cd /usr/local/keepalived/etc/rc.d/init.d
chmod +x keepalived 
vim /etc/keepalived/keepalived.conf  
 
##需修改内容 
vrrp_instance VI_1 {
    state BACKUP                    
    interface eth0
    virtual_router_id 12
    priority 50                   #必须小于master                  
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.0.100
    }
}
 
[root@server4 ~]# /etc/init.d/keepalived start
[root@server4 ~]# /etc/init.d/keepalived reload
[root@server2 ~]# /etc/init.d/httpd start
[root@server3 ~]# /etc/init.d/httpd start

测试:

当server1的keepalived关闭时,server为backup自动替补上来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LVS(Linux Virtual Server)是一个开源的性能、可扩展的网络负载均衡软件,而keepalived是一个基于VRRP协议实现的可用性解决方案。它们结合使用可以实现可用负载均衡服务。 以下是LVS+keepalived部署过程: 1. 安装LVSLVS的主机上安装LVS软件,可以使用以下命令: ``` yum install ipvsadm -y ``` 2. 配置LVS 配置LVS的主要步骤如下: (1)配置LVS虚拟服务器 在LVS主机上创建一个虚拟服务器(Virtual Server),可以使用以下命令: ``` ipvsadm -A -t VIP:PORT -s sh ``` 其中,VIP是虚拟IP地址,PORT是虚拟端口号。 (2)向LVS虚拟服务器添加真实服务器 将真实服务器添加到LVS虚拟服务器中,可以使用以下命令: ``` ipvsadm -a -t VIP:PORT -r REAL_SERVER_IP:PORT -g ``` 其中,REAL_SERVER_IP是真实服务器的IP地址,PORT是真实服务器的端口号。 (3)配置LVS调度算法 LVS支持多种调度算法,如轮询(Round Robin)、加权轮询(Weighted Round Robin)、最少连接数(Least Connections)等。可以使用以下命令配置LVS调度算法: ``` ipvsadm -E -t VIP:PORT -s SCHEDULER_NAME ``` 其中,SCHEDULER_NAME是调度算法的名称。 (4)保存LVS配置 在LVS主机上保存LVS配置,可以使用以下命令: ``` ipvsadm-save > /etc/sysconfig/ipvsadm ``` 3. 配置keepalived 配置keepalived的主要步骤如下: (1)安装keepalivedLVS主机上安装keepalived软件,可以使用以下命令: ``` yum install keepalived -y ``` (2)配置keepalivedLVS主机上创建keepalived配置文件/etc/keepalived/keepalived.conf,配置文件的内容如下: ``` global_defs { router_id LVS_DEMO } 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 { VIP/24 dev eth0 } } ``` 其中,VIP是虚拟IP地址。 (3)启动keepalived 使用以下命令启动keepalived服务: ``` systemctl start keepalived ``` 4. 测试LVS+keepalived 在浏览器中输入VIP地址和端口号,如果能够正常访问真实服务器,则LVS+keepalived部署成功。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值