群集--LVS-DR 群集与Keepalived 双机热备(LVS-DR群集的工作原理 、双机热备系统基础知识 、构建部署LVS-DR负载均衡+Keepalived双机热备高可用群集)

一、 LVS-DR 集群

LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一 种工作模式。

1.1 LVS-DR 工作原理

LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用,节点 Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过 Director Server。为了响应对整个群集的访问,DirectorServer 与 RealServer 都需要配置 VIP 地址。

LVS-DR工作原理图如下:
在这里插入图片描述

1.2 数据包流向分析

  1. 客户端发送请求到 Director Server,请求的数据报文(源 IP 是 CIP,目标 IP 是 VIP) 到达内核空间(包含上图的1、2、3步)。
  2. Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输。
  3. 内核空间判断数据包的目标 IP 是本机 VIP,此时 IP_VS 比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源 MAC 地址为 Director Server 的 MAC 地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源 IP 地址与目标 IP 地址没有改变,然后将数据包发送给 Real Server(包含图中的第4、5步)。
  4. 到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数据包重新封装报文(源 IP 地址为 VIP,目标 IP 为 CIP),将响应报文通过 lo 接口传送给物理网卡然后向外发出。
  5. Real Server 直接将响应报文传送到客户端(包含图中的第6步)。

1.3 LVS-DR 模式特点

  • Director Server 和 Real Server 必须在同一个物理网络中。
  • Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过 互联网对 RIP 进行直接访问。
  • 所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。
  • Real Server 的网关不允许指向 Director Server IP,即不允许数据包经过 Director S erver。
  • Real Server 上的 lo 接口配置 VIP 的 IP 地址。

二、 Keepalived 双机热备基础知识

Keepalived 起初是专门针对 LVS 设计的一款强大的辅助工具,主要用来提供故障切换 (Failover)和健康检查(Health Checking)功能——判断 LVS 负载调度器、节点服务器的可用性,当 master 主机出现故障及时切换到 backup 节点保证业务正常,当 master 故障主 机恢复后将其重新加入群集并且业务重新切换回 master 节点。

2.1 Keepalived 概述及安装

Keepalived 的官方网站位于 http://www.keepalived.org/,在非 LVS 群集环境中使用时,Keepalived 也可以作为热备软件使用。

1.Keepalived 的热备方式

Keepalived 采用 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议) 热备份协议,以软件的方式实现 Linux 服务器的多机热备功能。

VRRP 是针对路由器的一种备份解决方案——由多台路由器组成一个热备组,通过共用的虚拟 IP 地址对外提供服务; 每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态。

若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟 IP 地址,以继续提供服务。 热备组内的每台路由器都可能成为主路由器,虚拟路由器的 IP 地址(VIP)可以在热备 组内的路由器之间进行转移,所以也称为漂移 IP 地址。使用 Keepalived 时,漂移地址的实现不需要手动建立虚接口配置文件(如 ens33∶0),而是由 Keepalived 根据配置文件自动管理。

2. Keepalievd安装与启动

  • 在LVS群集环境中应用时,也需用到 ipvsadm管理工具
  • YUM安装 Keepalived
  • 启用 Keepalived服务

三、 部署LVS-DR负载均衡+Keepalived双机热备高可用群集

实验目的

部署LVS-DR负载均衡+Keepalived双机热备高可用群集、实现Keepalived双机热备功能

实验环境

VMware虚拟机中四台centos7.6虚拟机
两台centos7.6虚拟机做双机热备
两台centos7.6虚拟机做节点服务器
一台win10虚拟机作为客户机,验证成果

实验参数

master服务器IP为192.168.100.129
backup服务器IP为192.168.100.128
节点1服务器的IP为192.168.100.201
节点2服务器的IP为192.168.100.202
虚拟IP(VIP)为192.168.100.10

实验过程

1. 联网环境下先装软件包

这里的群集调度器既是Keepalievd master服务器也是DR调度器

Keepalievd master服务器
[root@localhost ~]# yum install keepalived ipvsadm -y
Keepalievd backup服务器
[root@localhost ~]# yum install keepalived ipvsadm -y
节点1服务器
[root@localhost ~]# yum install httpd -y
节点2服务器
[root@localhost ~]# yum install httpd -y

然后将所有的服务器主机都设置为仅主机模式

2. 调度服务器配置

以下配置默认是主、备调度服务器都要进行配置,单独操作会单独说。

[root@lvs1 ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1       ##开启路由转发功能
以下为关闭重定向功能
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@lvs1 ~]# sysctl -p	##重载加载配置
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

在这里插入图片描述

3. 配置服务器网卡

两台调度服务器IP与VIP进行相同的设置,VIP全局都相同

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0
[root@localhost network-scripts]# vim ifcfg-ens33:0    ##vip配置
将原来的文件全部删除,写入下面四句
DEVEICE=ens33
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0

master调度服务器IP
在这里插入图片描述
backup调度服务器IP
在这里插入图片描述

4. 两台LVS服务器都创建脚本便于service管理

[root@localhost network-scripts]# cd /etc/init.d/
ot@localhost init.d]# vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10   ##虚拟ip
RIP1=192.168.100.201 ##真实web服务器ip
RIP2=192.168.100.202
case "$1" in
start)
                /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm  ##保存配置
                systemctl start ipvsadm  ##启动服务
                /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up  
##设置ens33:0地址,广播地址,子网掩码,并开启
                /sbin/route add -host $VIP dev ens33:0  ##添加路由网段信息
                /sbin/ipvsadm -A -t $VIP:80 -s rr ##指定虚拟服务访问入口,指定轮询算法
                /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g ##指定真实服务器,dr模式
                /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
                echo "ipvsadm starting --------------------[ok]"
                ;;
stop)
                /sbin/ipvsadm -C   ##清空缓存
                systemctl stop ipvsadm  ##关闭服务
                ifconfig ens33:0 down  ##关闭接口
                route del $VIP   ##删除路由信息
                echo "ipvsamd stoped----------------------[ok]"
                 ;;
status)
                if [ ! -e /var/lock/subsys/ipvsadm ];then  ##判断文件存在与否决定状态
                echo "ipvsadm stoped---------------"
                exit 1
                                else
                                echo "ipvsamd Runing ---------[ok]"
                fi
                ;;
*)
                echo "Usage: $0 {start|stop|status}"
                exit 1
esac
exit 0
[root@localhost init.d]# chmod +x dr.sh

这时候使用ifconfig命令还不能查看到IP与VIP
在这里插入图片描述
重启网卡服务

[root@localhost init.d]# service network restart 
Restarting network (via systemctl):                        [  确定  ]
[root@localhost init.d]# ifconfig

在这里插入图片描述
在这里插入图片描述

执行脚本

[root@localhost init.d]# service dr.sh start
ipvsadm starting --------------------[ok]
[root@localhost init.d]# systemctl stop firewalld.service 
[root@localhost init.d]# setenforce 0

5. 两台节点服务器IP与VIP配置

这里的VIP需要绑定在回环网卡上,使回环网卡可以屏蔽arp广播请求,避免和虚拟服务器上的VIP产生混乱。

两个服务器配置基本一致,以节点服务器1(192.168.100.201)为例。

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
DEVEICE=lo:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
[root@localhost network-scripts]# vim ifcfg-ens33 

在这里插入图片描述
在这里插入图片描述

arp过滤脚本
[root@localhost network-scripts]# cd /etc/init.d/
[root@localhost init.d]# vim web.sh
#!/bin/bash
VIP=192.168.100.10
                case "$1" in
                start)
                                ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
                                /sbin/route add -host $VIP dev lo:0
                                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)
                                ifconfig lo:0 down
                                route del $VIP /dev/null 2>&1
                                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 Stopd"
                                ;;
                *)
                                echo "Usage: $0 {start|stop}"
                                exit 1
                esac
                exit 0
[root@localhost init.d]# chmod +x web.sh 
[root@localhost init.d]# systemctl stop firewalld.service 
[root@localhost init.d]# setenforce 0
[root@localhost init.d]# service network restart 
Restarting network (via systemctl):                        [  确定  ]
[root@localhost init.d]# ifconfig

在这里插入图片描述
启动脚本

[root@localhost init.d]# service web.sh start
RealServer Start OK 
节点1服务器
[root@localhost init.d]# systemctl start httpd
[root@localhost init.d]# cd /var/www/html/
[root@localhost html]# vim index.html
<h1>this is Hello web</h1>
节点2服务器
[root@localhost init.d]# systemctl start httpd
[root@localhost init.d]# cd /var/www/html/
[root@localhost html]# vim index.html
<h1>this is world web</h1>

6. 在节点服务器自测网页是否成功被访问

在这里插入图片描述

在这里插入图片描述

7. keepalived部署(调度服务器上部署)

[root@localhost init.d]# cd /etc/keepalived/
[root@localhost keepalived]# ls
keepalived.conf
[root@localhost keepalived]# vim keepalived.conf 
! 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 127.0.0.1         ##邮件服务指向本地
   smtp_connect_timeout 30       ##超时连接
   router_id LVS_01              ##router_id不能相同
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER                ##keepalived主服务器设置MASTER,备服务器为BACKUP
    interface ens33             ##网络接口一定要与自己的接口名称相同,centos6的是eth0
    virtual_router_id 51        ##主备组号要相同
    priority 100                ##优先级
    advert_int 1
    authentication {            ##加密认证
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {       
        192.168.100.10          ##虚拟IP
    }
}

virtual_server 192.168.100.10 80 {
    delay_loop 6
    lb_algo rr                  ##轮询算法
    lb_kind DR                  ##LVS-DR模式
    persistence_timeout 50
    protocol TCP          ##tcp协议

    real_server 192.168.100.201 80 {        ##真实节点服务器IP与端口
        weight 1                ##权重为1           
            TCP_CHECK{
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.100.202 80 {
        weight 1
            TCP_CHECK{
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

  • global_defs{…}区段指定全局参数
  • vrrp_instance实例名称{…}区段指定VRRP热备参数
  • 注释文字以“!”符号开头
  • 目录samples/,提供了许多配置样例作为参考
    常用配置选项
  • router_id HA_TEST_R1: 本路由器(服务器)的名称
  • vrrp_instance VI_1:定义VRRP热备实例
  • state MASTER:热备状态,MASTER表示主服务器
  • interface ens33:承载VIP地址的物理接口
  • virtual_router_id 1:虚拟路由器的ID号,每个热备组保持一致
  • priority 100:优先级,数值越大优先级越高
  • advert_int 1:通告间隔秒数(心跳频率)
  • auth_type PASS:认证类型
  • auth_pass 123456:密码字串
  • virtual_ipaddress{vip}:指定漂移地址(VIP),可以有多个,多个漂移地址以逗号分隔

因为两个服务器的配置文件大致相同,直接使用scp服务将配置文件传输过去,进行部分修改

在master服务器上操作
[root@localhost keepalived]# scp keepalived.conf root@192.168.100.128:/etc/keepalived/
The authenticity of host '192.168.100.128 (192.168.100.128)' can't be established.
ECDSA key fingerprint is SHA256:sWKQiGLxIkZB0eRDa5cJpygOXtCmJKqdaa99GVj6viI.
ECDSA key fingerprint is MD5:36:ae:96:cf:f6:56:40:ee:42:37:12:73:73:6a:53:81.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.100.128' (ECDSA) to the list of known hosts.
root@192.168.100.128's password: 
keepalived.conf                                            100% 1151     1.4MB/s   00:00  

修改backup配置文件,以下只是写出与master不同的部分

[root@localhost init.d]# cd /etc/keepalived/
[root@localhost keepalived]# vim keepalived.conf 
    router_id LVS_02    ##router——id不能与master相同
    state BACKUP        ##设置为BACKUP
    priority 90         ##优先级比master低

最后在两台服务器上开启keepalived服务

[root@localhost keepalived]# systemctl start keepalived.service 

8. 验证服务

win10 虚拟机要设置为仅主机模式,IP在192.168.100.0网段
在这里插入图片描述
在win10虚拟机中ping虚拟IP
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

实验中需要注意的点

因为arp广播的原因,在实验测试阶段可能要多次的重启网卡服务,这是VMware软件的原因。

猜你喜欢

转载自blog.csdn.net/kimowinter/article/details/108346680