群集负载均衡——LVS DR+Keepalived群集部署实战!超详细的理论+实验!!!

一、理解Keelalived实现原理

        keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能——判断LVS负载调度器,节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。

■专门为LVS和HA设计的一款健康检查工具

  • 支持故障自动切换(Failover)
  • 支持节点健康检查状态(Health Checking)
  • 官网网站:http://www.keepalived.org/(有兴趣的可以去看一下)

1.1、Keepalived案例分析

        在企业应用中,单台服务器承担应用存在单点故障的危险,在企业应用集群中,存在了至少两处单点故障危险,
单点故障一旦发生,企业服务将发生中断,造成极大的危害

1.2、LVS+Keepalived高可用群集概述

        Keepalived的设计目标是构建可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器,管理服务器池,而不仅仅用来做双机热备。使用keepalived构建LVS群集更加简便易用,主要优势体现在:对LVS负载调度器实现热备切换,提高可用性,对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入。
        在基于LVS-Keepalived实现的LVS群集结构中,至少包括两台热备的负载调度器,两台以上的节点服务器,本例将以DR模式的LVS群集为基础,增加一台从负载调度器,使用Keepalived来实现主、从调度器的热备,从而构建建有负载均衡、高可用两种能力的LVS网站群集平台。
        使用Keepalived构建LVS群集时,也需要用到ipvsadm管理工具,但大部分工作会由Keepalived自动完成,不需要手动执行ipvsadm。

1.3、Keepalived实现原理剖析

■Keepalived采用VRRP热备份协议,实现Linux服务器的多机热备功能。
■VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案。

  • 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
  • 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
  • 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

在这里插入图片描述

1.4、Keepalived案例讲解

■双机热备的故障切换是由虚拟IP地址的漂移实现,适用于各种应用服务器
■实现基于WEB服务的双机热备

                                                  【交  换  机】
                                                        ●
                                                        ●              漂移地址:192.168.100.100
                                                        ●      
               ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
               ● 		             ●                  ● 		              ●		               ●
               ●		             ●                  ● 		              ●		               ●
               ●		             ●                  ● 		              ●		               ●
           【调度器1】	         【调度器2】           【WEB1】               【WEB2】              【存储】
         192.168.100.21       192.168.100.22	  192.168.100.23       192.168.100.24        192.168.100.25 		       

1.4.1、配置keepalived master服务器

■ keepalived配置目录位于/etc/keepalived/
■ keepalived.conf是主配置文件

  • 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号,每个热备组保持一致
  • 热备组的ID号,代表是否在一个热备组中
  • priority 100: 优先级,数值越大优先级越高
  • advert_int 1: 通告间隔秒数(心跳频率)
  • auth_type PASS: 认证类型
  • auth_pass 123456: 密码字串
  • virtual_ipaddress {vip}: 指定漂移地址(VIP),可以有多个

1.4.2、配置keepalived slave服务器

■keppalived 备份服务器的配置与master的配置有三个选项不同

  • router_id: 设为自由名称
  • state: 设为BACKUP
  • priority: 优先值值低于主服务器

■其他选项与master相同

三、实验LVS+Keelalived高可用群集部署

3.1、案例部署配置

名称 操作系统 IP地址
LVS-Master Centos7.6-x86_64 192.168.100.21
LVS-Backup Centos7.6-x86_64 192.168.100.22
WebserverA Centos7.6-x86_64 192.168.100.23
WebserverB Centos7.6-x86_64 192.168.100.24
NFS共享 Centos7.6-x86_64 192.168.100.25

这边我们的漂移地址(VIP):192.168.100.10

首先我们在做实验时必须先关闭5台虚拟机的防火墙、核心防护,并配置好本地Yum源。

3.2、配置主调度器 192.168.100.21

  • 调整/proc响应参数
[root@localhost network-scripts]# vi /etc/sysctl.conf 
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

[root@localhost network-scripts]# sysctl -p     ###使其生效
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0  
  • 清除负载分配策略
[root@localhost /]# ipvsadm -C
  • 调整keepalived参数
global_defs {
    
    
   router_id HA_TEST_R1                  ####本路由器的服务器名称  HA_TEST_R1
}
vrrp_instance VI_1 {
    
                         ####定义VRRP热备实列
   state MASTER                          ####热备状态,master表示主服务器
   interface ens33                       ####表示承载VIP地址的物理接口
   virtual_router_id 1                   ####虚拟路由器的ID号,每个热备组保持一致
   priority 100                          ####优先级,优先级越大优先级越高
   advert_int 1                          ####通告间隔秒数(心跳频率)
   authentication {
    
                          ####认证信息,每个热备组保持一致
      auth_type PASS                     ####认证类型
      auth_pass 123456                   ####认证密码
   }
   virtual_ipaddress {
    
                       ####漂移地址(VIP),可以是多个
      192.168.100.100
   }
}

virtual_server 192.168.100.100 80 {
    
            ####虚拟服务器地址(VIP)、端口
    delay_loop 15                        ####健康检查的时间间隔(秒)
    lb_algo rr                           ####轮询调度算法
    lb_kind DR                           ####直接路由(DR)群集工作模式
    persistence 60                       ####连接保持时间(秒),若启用请去掉!号
    protocol TCP                         ####应用服务采用的是TCP协议

    real_server 192.168.100.23 80 {
    
           ####第一个WEB站点的地址,端口
        weight 1                         ####节点的权重
        TCP_CHECK {
    
                          ####健康检查方式
	    connect_port 80                    ####检查端口目标
	    connect_timeout 3                  ####连接超时(秒)
	    nb_get_retry 3                     ####重试次数
	    delay_before_retry 4               ####重试间隔(秒)
	}
    }
    real_server 192.168.100.24 80 {
    
    
        weight 1
        TCP_CHECK {
    
    
	    connect_port 80
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 4
	}
    }
}
[root@localhost keepalived]# systemctl start keepalived                  ####启动keepalived
[root@localhost keepalived]# systemctl enable keepalived                 ####开机启动keepalived
[root@localhost keepalived]# ip addr show dev ens33                      ####查看主控制IP地址和漂移地址
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:b5:da:33 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.21/24 brd 192.168.100.255 scope global noprefixroute ens33    ## IP地址
       valid_lft forever preferred_lft forever
    inet 192.168.100.100/32 scope global ens33     ## 漂移地址
       valid_lft forever preferred_lft forever
    inet6 fe80::c574:d230:3778:e9dd/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

3.3、配置从调度器 192.168.100.22

  • 调整/proc响应参数
[root@localhost network-scripts]# vi /etc/sysctl.conf 
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

[root@localhost network-scripts]# sysctl -p     ###生效
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0  
  • 清除负载分配策略
[root@localhost /]# ipvsadm -C
  • 调整keepalived参数
global_defs {
    
    
   router_id HA_TEST_R2                  ####本路由器的服务器名称 HA_TEST_R2
}
vrrp_instance VI_1 {
    
                         ####定义VRRP热备实列
   state BACKUP                          ####热备状态,backup表示辅服务器
   interface ens33                       ####表示承载VIP地址的物理接口
   virtual_router_id 1                   ####虚拟路由器的ID号,每个热备组保持一致
   priority 99                           ####优先级,优先级越大优先级越高,这里的优先级要比主机小!
   advert_int 1                          ####通告间隔秒数(心跳频率)
   authentication {
    
                          ####认证信息,每个热备组保持一致
      auth_type PASS                     ####认证类型
      auth_pass 123456                   ####认证密码
   }
   virtual_ipaddress {
    
                       ####漂移地址(VIP),可以是多个
      192.168.100.100
   }
}

virtual_server 192.168.100.100 80 {
    
           
    delay_loop 15
    lb_algo rr
    lb_kind DR
    persistence 60
    protocol TCP

    real_server 192.168.100.23 80 {
    
    
        weight 1
        TCP_CHECK {
    
    
	    connect_port 80
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 4
	}
    }
    real_server 192.168.100.24 80 {
    
    
        weight 1
        TCP_CHECK {
    
    
	    connect_port 80
	    connect_timeout 3
	    nb_get_retry 3
	    delay_before_retry 4
	}
    }
}      

3.4、配置存储服务器:192.168.100.25

[root@localhost ~]# rpm -q nfs-utils    ###如果没装,yum -y install nfs-utils
[root@localhost ~]# rpm -q rpcbind      ###如果没装,yum -y install rpcbind
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl start nfs

[root@localhost ~]# vi /etc/exports
/opt/Tom 192.168.100.0/24(rw,sync)
/opt/Jack 192.168.100.0/24(rw,sync)

[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl restart nfs
[root@localhost ~]# systemctl enable nfs
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# mkdir /opt/Tom /opt/Jack
[root@localhost ~]# echo "this is Tom" >/opt/Tom/index.html
[root@localhost ~]# echo "this is Jack" >/opt/Jack/index.html
[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/opt/Jack 192.168.100.0/24
/opt/Tom  192.168.100.0/24

3.5、配置WEB 1 服务器:192.168.100.23

  • 配置虚拟IP地址
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.255
ONBOOT=yes

[root@localhost network-scripts]# ifup lo:0
[root@localhost network-scripts]# sudo yum install net-tools   ## 最小化安装需要装这个,才可以用 ifconfig
[root@localhost network-scripts]# ifconfig
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.100.10  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

[root@localhost network-scripts]# vi /etc/rc.local 
/sbin/route add -host 192.168.100.10 dev lo:0
[root@localhost network-scripts]# route add -host 192.168.100.10 dev lo:0
  • 调整/proc响应参数
[root@localhost network-scripts]# vi /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

[root@localhost network-scripts]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
  • 安装httpd 挂载测试页
[root@localhost network-scripts]# yum -y install nfs-utils
[root@localhost ~]# showmount -e 192.168.100.25     ####如果还没发布,请到存储服务器发布下,exportfs -rv
Export list for 192.168.100.25:
/opt/Jack 192.168.100.0/24
/opt/Tom  192.168.100.0/24

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount 192.168.100.25:/opt/Tom /var/www/html/
[root@localhost ~]# vi /etc/fstab 
192.168.100.25:/opt/Tom /var/www/html nfs defaults,_netdev 0 0        ###开机自动挂载,注意格式对齐
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
[root@localhost ~]# init 6   ## 重启测试一下
[root@localhost ~]# curl 192.168.100.23
this is Tom

也可以在浏览器输入 192.168.100.23 测试

在这里插入图片描述

3.5、配置WEB 2 服务器:192.168.100.24

  • 配置虚拟IP地址
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.255
ONBOOT=yes

[root@localhost network-scripts]# ifup lo:0
[root@localhost network-scripts]# sudo yum install net-tools      ## 最小化安装需要装这个,才可以用 ifconfig
[root@localhost network-scripts]# ifconfig
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.100.10  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

[root@localhost network-scripts]# vi /etc/rc.local 
/sbin/route add -host 192.168.100.10 dev lo:0
[root@localhost network-scripts]# route add -host 192.168.100.10 dev lo:0
  • 调整/proc响应参数
[root@localhost network-scripts]# vi /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

[root@localhost network-scripts]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
  • 安装httpd 挂载测试页
[root@localhost network-scripts]# yum -y install nfs-utils
[root@localhost ~]# showmount -e 192.168.100.25     ####如果还没发布,请到存储服务器发布下,exportfs -rv
Export list for 192.168.100.25:
/opt/Jack 192.168.100.0/24
/opt/Tom  192.168.100.0/24

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount 192.168.100.25:/opt/Jack /var/www/html/
[root@localhost ~]# vi /etc/fstab 
192.168.100.25:/opt/Jack /var/www/html nfs defaults,_netdev 0 0        ###开机自动挂载,注意格式对齐

[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
[root@localhost ~]# init 6  ## 重启测试一下
[root@localhost ~]# curl 192.168.100.24
this is Jack

也可以在浏览器输入 192.168.100.24 测试

在这里插入图片描述

3.6、测试主、从调度器是否正常工作

1、主调度器ens33网卡MAC地址:00:0c:29:b5:da:33
2、在真机打开 cmd 测试 ping 192.168.100.100
3、arp -a 发现缓存表里面MAC是00:0c:29:b5:da:33
证明数据包往主调度器的MAC地址丢

在这里插入图片描述
进行抓包查看一下

在这里插入图片描述4、现在在主调度器关闭 keepalived

[root@localhost ~]# systemctl status keepalived

5、然后再从调度器输入 ip addr show,漂移地址已经到了从调度器了,这时候,从调度器抢占主调度器,进行工作。

在这里插入图片描述
6、从调度器ens33网卡MAC地址:00:0c:29:53:1f:1a

7、在真机打开 cmd 测试 ping 192.168.100.100

8、arp -a 发现缓存表里面MAC是 0:0c:29:53:1f:1a,这说明当主调度器宕掉的时候,从调度器已经代替主调度器进行工作了,证明数据包往从调度器的MAC地址丢。

在这里插入图片描述
进行抓包查看一下

在这里插入图片描述
9、再重新开启keepalived.service

### 开启keepaliced
[root@localhost keepalived]# systemctl start keepalived.service

在这里插入图片描述

3.7、现在验证负载均衡轮询

  • 在浏览器输入 192.168.100.100

现在是 “this is Jack”

在这里插入图片描述

  • 下次刷新网页的时候会轮循到另一个网页,在这期间会有一个等待时间

现在是 “This is Tom”,验证成功!

在这里插入图片描述
到这里我们今天LVS+Keepalived群集学习就结束了。
本章需要掌握的重点是:

  1. Keepalived的主要功能
  2. Keepalived主服务器与从服务器的区别
  3. 构建负载均衡+高可用群集

猜你喜欢

转载自blog.csdn.net/m0_46563938/article/details/108748949