####Keepalived+LVS配置高可用负载均衡均衡集群#####

###LVS中DR模式简介###
一.LVS中DR模式简介:
TUN模式下,由于需要在LVS调度器与真实服务器之间创建隧道连接,这同样会增加服务器的负担。与TUN类似,DR模式也叫直接路由模式,其体系结构如图4所示,该模式中LVS依然仅承担数据的入站请求以及根据算法选出合理的真实服务器,最终由后端真实服务器负责将响应数据包发送返回给客户端。与隧道模式不同的是,直接路由DR模式要求调度器与后端服务器必须在同一个局域网内,VIP地址需要在调度器与后端所有的服务器间共享,因为最终的真实服务器给客户端回应数据包时需要设置源IP为VIP地址,目标IP为客户端IP,这样客户端访问的是调度器的VIP地址,回应的源地址也依然是该VIP地址(真实服务器上的VIP),客户端是感觉不到后端服务器存在的。
###Keepalived###
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

负载平衡是一种跨真实服务器集群分布IP流量的方法,提供一个或多个高可用虚拟服务。在设计负载平衡拓扑时,必须考虑负载均衡器本身的可用性以及它背后的真实服务器。

Keepalived为负载平衡和高可用性提供了框架。负载平衡框架依赖于著名且广泛使用的Linux虚拟服务器(IPV)内核模块,该模块提供第4层负载平衡。Keepalived实现了一组健康检查程序,根据服务器池的健康状况动态、自适应地维护和管理负载平衡的服务器池。虚拟冗余路由协议(VRRP)实现了高可用性。VRRP是路由器故障转移的基础。此外,Keepalived还实现了一组到VRRP有限状态机的钩子,提供了低级别和高速的协议交互。每个保持连接的框架可以单独使用,也可以一起使用,以提供弹性的基础设施。

在这种情况下,负载均衡器也可以称为控制器或LVS路由器。简而言之,keepalived提供两个主要功能:

LVS系统的健康检查
实现VRRPv2堆栈以处理负载平衡器故障转移

配置高可用负载均衡集群

使用LVS—DR模式实现负载均衡
配置环境:

服务器 ip地址 vip
keepalived服务器1 172.25.46.1 172.25.46.100
keepalived服务器2 172.25.46.2 172.25.46.100
真实服务器1 172.25.46.3 172.25.46.100
真实服务器2 172.25.46.4 172.25.46.100

keepalived服务器(两个设置一致)设置:
1.安装包下载编译安装
1.)配置高级yum 源(sever1和server2)
2.)安装包解压编译安装
keepalived-2.0.6.tar.gz #源码包需要先进行编译然后进行安装。
tar -zxf keepalived-2.0.6.tar.gz # 解压压缩文件
cd keepalived-2.0.6 # 进入解压开的文件
yum install gcc openssl-devel -y # 安装对源码包进行编译的辅助软件
./configure --prefix=/usr/local/keepalived --with-init=systemd # 编译
make && make install # 安装

2 安装lvs管理工具ipvsadm
yum install ipvsadm -y # 安装管理工具
注意:只需要进行安装工具,不需要进行策略设置。

[root@server2 keepalived-2.0.6]# cd /etc/yum.repos.d/
[root@server2 yum.repos.d]# ls
redhat.repo  yum.repo
[root@server2 yum.repos.d]# cat yum.repo 
[rhel7.3]
name=rhel7.3
baseurl=http://172.25.46.250/westos
gpgcheck=0

[HighAvailability]
name=HighAvailability
baseurl=http://172.25.46.250/westos/addons/HighAvailability
gpgcheck=0

[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.46.250/westos/addons/ResilientStorage
gpgcheck=0

2.虚拟机服务器获得keepalived安装包解压并安装(sever1和server2)

[root@server2 ~]# ls
keepalived-2.0.6.tar.gz
[root@server2 ~]# tar zxf keepalived-2.0.6.tar.gz 
[root@server2 ~]# ls
keepalived-2.0.6  keepalived-2.0.6.tar.gz
[root@server2 ~]# cd keepalived-2.0.6
[root@server2 keepalived-2.0.6]# yum install -y gcc openssl-devel
[root@server2 keepalived-2.0.6]# ./configure --prefix=/usr/local/keepalived  --with-init=systemd
[root@server2 keepalived-2.0.6]# make && make install
[root@server2 keepalived-2.0.6]# yum install -y ipvsadm

设置软连接,方便访问keepalived

[root@server2 keepalived-2.0.6]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@server2 keepalived-2.0.6]# ln -s /usr/local/keepalived/etc/keepalived/ /etc/
[root@server2 keepalived-2.0.6]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/

服务机server1 编辑keepalived配置文件
[root@server1 keepalived-2.0.6]# cd /usr/local/
[root@server1 local]# ls
bin etc games include keepalived lib lib64 libexec sbin share src
[root@server1 local]# cd keepalived/
[root@server1 keepalived]# ls
bin etc sbin share
[root@server1 keepalived]# cd /etc/keepalived
[root@server1 keepalived]# ls
keepalived.conf samples
[root@server1 keepalived]# vim keepalived.conf

 Configuration File for keepalived

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 151
    priority 100#权重
    advert_int 1 #检查的间隔1s
    authentication {
        auth_type PASS #认证方式
        auth_pass 1111   #认证的密码
    }
    virtual_ipaddress {
        172.25.46.100
    }
}

virtual_server 172.25.46.100 80 {
    delay_loop 6 #连接失败六次之后,发送邮件
    lb_algo rr  #lvs调度算法
    lb_kind DR #lvs该工作方式
    #persistence_timeout 50 
    protocol TCP  #端口

    real_server 172.25.46.3 80 {
        TCP_CHEAK {
        connect_port 80
        weight 1
       connect_timeout 3
       }
    }


    real_server 172.25.46.4 80 {
        TCP_CHEAK {
        connect_port 80
        weight 1
       connect_timeout 3
       }    
    }
}

服务机server2

[root@server2 keepalived]# vim keepalived.conf 

! Configuration File for keepalived

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 Backup  ##副节点表示
    interface eth0
    virtual_router_id 151
    priority 50  #权重
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.46.100
    }
}

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

    real_server 172.25.46.3 80 {
        TCP_CHEAK {
        connect_port 80
        weight 1
       connect_timeout 3
       }
    }


    real_server 172.25.46.4 80 {
        TCP_CHEAK {
        connect_port 80
        weight 1
       connect_timeout 3
       }    
    }
}

server1和server2开启服务,设置开机自启
systemctl start keepalived
systemctl enable keepalived

真机服务器设置
.1 安装httpd 启动设置访问页面
注意:该处为了验证负载均衡的效果,后端真实服务器设置不同的访问内容,明显标示内容来自不同的后端服务器。

2 添加VIP到各自的物理网卡中
ip addr add 172.25.46.100/24 dev eth0 # 临时添加ip到eth0网卡

3 设置arptable策略,解决将用户所有针对VIP的请求发送到DS 而不是RS

yum install arptables -y # 安装管理工具

arptables -A INPUT -d 172.25.46.100 -j DROP # 设置不回应对自己VIP的请求

arptables -A OUTPUT -s 172.25.46.100 -j mangle --mangle-ip-s 172.25.46.3
#设置将发送出去的数据包的源ip修改成VIP

[root@server3 ~]# cd /var/www/html/
[root@server3 html]# ls
[root@server3 html]# vim index.html
[root@server3 html]# systemctl start httpd
[root@server3 html]# systemctl enable httpd
[root@server3 html]# ip addr add 172.25.46.100/24 dev eth0
[root@server3 html]#  yum install -y arptables
[root@server3 html]# arptables -A INPUT -d 172.26.46.100 -j DROP
[root@server3 html]# arptables -A OUTPUT -s 172.25.46.100 -j mangle --mangle-ip-s 172.25.46.3
[root@server3 html]# arptables -L
[root@server3 html]#  ip addr show

测试:

[root@server2 keepalived]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.46.100:http rr
  -> 172.25.46.3:http             Route   1      0          0         
  -> 172.25.46.4:http             Route   1      0          0  

客户机访问

[root@foundation46 ~]# curl 172.25.46.100
server3
[root@foundation46 ~]# curl 172.25.46.100
server4
[root@foundation46 ~]# curl 172.25.46.100
server3
[root@foundation46 ~]# curl 172.25.46.100
server4

关闭server3httpd模拟服务器故障
[root@server3 ~]# systemctl stop httpd
[root@server1 keepalived]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP server1:http rr
-> 172.25.46.4:http Route 1 0 0
客户访问

  [root@foundation46 ~]# curl 172.25.46.100
server4
[root@foundation46 ~]# curl 172.25.46.100
server4
[root@foundation46 ~]# curl 172.25.46.100
server4

猜你喜欢

转载自blog.csdn.net/weixin_44821839/article/details/93526913