LVS+Keepalived 群集及搭建

一.keepalived 概述

1.keepalived服务重要功能

1.1 管理LvS负载均衡器软件

keepalived可以通过读取自身的配置文件,实现通过更底层的接口直接管理LVS配置以及服务的启动停止功能 这会使 LVS应用更加的简便。

1.2 支持故障自动切换 (failover)

(1)两台主机同时安装好keepalived并且启动服务,当启动的时候master主机获得所有资源并且对用户提供请求服务,当角色backup的主机做为master热备,当master主机挂了出现故障时,backup主机将自动接管master主机所有工作,包括接管VIP资源及相应资源服务。

(2)当master主机故障修复后,又会自动接管回它的原来处理的工作,backup主机则同时释放masgter主机失效时接管的工作,此时此刻,两台主机将恢复到最初的启动时各自的原始角色及工作状态。

(3)抢占模式: master 从故障恢复后,会将VIP从backup节点中抢占过来。

(4)非抢占: master从故障恢复后不抢占backup,backup升级为 master后的VIP。

1.3 实现LVS集中节点的健康检查 (health checking)

在keepalived.conf配置LVS节点(IP)和相关参数来实现对LVS的直接管理,如果几个节点服务器同时发生故障,无法提供服务,keepalived服务会自动将那个失效节点服务器从LVS正常转发列中清除出去,并将请求调度到别的正常节点服务器上,从而保证最终用户的访问不受影响,当故障的节点服务器修复以后,keepalived服务又会自动把他们加入到正常转发列中,对外面客户提供服务。

1.4 实现LVS负载调度器 节点服务器的高可用性 (HA)

企业集群需要满足四个特点:负载均衡、健康检查、故障切换 、LVS+ keepalived,完全可以买需求

2. keepalived 高可用故障切换转移原理及VRRP通信原理

keepalived 高可用服务集群之间的故障切换转移,是通过VRRP (虚拟路由器元余协议)来实现的。

在keepalived服务正常工作时主 (master) 节点会不断地向备 (Backup) 节点发送(多播的方式) 心跳消息,用意告诉备节点自已还活着,当主节点发生故障事,就无法发送心跳消息,备节点也就因此无法检测到来自主节点的心跳,于是调用自身的接管程序,接管主节点的IP资源及服务。而当主节点恢复时,备主机又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

3.keepalived体系主要模块及作用

三个模块分别是core、check、vrrp

(1)core模块:为keepalived的核心 ,负责主进程启动,维护全局配置文件,加载和解析

(2)VRRP 模块:来实现VRRP协议

(3)check 模块:负责健康检查 常见的检查方式, 比如:端口 URL

4.keepalived 服务的工作原理

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。

在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

二.部署LVS+keepalived高可用集群

1.部署图示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jf8ORNBW-1688650765122)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230706142031207.png)]

2.部署LVS+keepalived步骤

主DR 服务器:ens33(192.168.198.11) ipvsadm 、keepalived(热备)

​ 虚拟IP:192.168.198.180 网卡 ens33:0
备DR 服务器:ens33(192.168.198.12) ipvsadm 、keepalived
​ 虚拟IP:192.168.198.180 网卡 ens33:0
Web 服务器1:ens33 192.168.13
​ lo:0(VIP)192.168.198.180
Web 服务器2:ens33 192.168.198.14
​ lo:0(VIP)192.168.198.180
NFS共享服务器:192.168.198.15

2.1配置NFS共享(192.168.198.15)

systemctl stop firewalld.service
setenforce 0

yum -y install nfs-utils rpcbind
mkdir /opt/blue /opt/summer
chmod 777 /opt/blue /opt/summer

vim /etc/exports
/usr/share *(ro,sync)
/opt/blue 192.168.198.0/24(rw,sync)
/opt/summer 192.168.198.0/24(rw,sync)
systemctl start nfs.service
systemctl start rpcbind.service                                                                             

2.2 配置主DR服务器(192.168.198.11)

systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm

2.2.1配置虚拟 IP 地址(VIP:192.168.198.180)

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
#若隧道模式,复制为ifcfg-tunl0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.198.180
NETMASK=255.255.255.255
ifup ens33:0
ifconfig ens33:0

注:此处如未配置成功,ifup ens33:0失败,可以直接重启网卡systemctl restart network,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bnN2dfLh-1688650765123)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230706144814676.png)]

2.2.2安装keepalived

#安装keepalived
yum -y install ipvsadm keepalived
#加载 Linux 内核的 IPVS 模块
modprobe ip_vs
#查看当前 IPVS 的状态和信息
cat /proc/net/ip_vs

2.2.3配置keeplived

cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
#定义全局参数
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
#10行修改,邮件服务指向本地
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
#12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01
   router_id LVS_01
   vrrp_skip_check_adv_addr
#14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
  #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
#定义VRRP热备实例参数
vrrp_instance VI_1 {
#20行--修改,指定热备状态,主为MASTER,备为BACKUP
    state MASTER
#21行--修改,指定承载vip地址的物理接口
    interface ens33
#22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
#nopreempt		#如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
    virtual_router_id 51
#23行--修改,指定优先级,数值越大优先级越高,这里设置主为100    
    priority 100
#通告间隔秒数(心跳频率)    
    advert_int 1
#定义认证信息,每个热备组保持一致    
    authentication {
#认证类型
  auth_type PASS
#27行--修改,指定验证密码,主备服务器保持一致
        auth_pass 000000
    }
    virtual_ipaddress {
##指定群集vip地址
        192.168.198.180
    }
}
#修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.198.180 80 {
#健康检查的间隔时间(秒)
    delay_loop 6
#指定调度算法,轮询(rr)
    lb_algo rr
#修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
##连接保持时间(秒)
    persistence_timeout 50
#应用服务采用的是 TCP协议
    protocol TCP
#修改,指定第一个Web节点的地址、端口
    real_server 192.168.198.13 80 {
#节点的权重
             weight 1
#删除,添加以下健康检查方式
     TCP_CHECK {
#添加检查的目标端口
                        connect_port 80
#添加连接超时(秒)
                        connect_timeout 3
#添加重试次数
                        nb_get_retry 3
#添加重试间隔
                        delay_before_retry 3
                }
        }
#添加第二个 Web节点的地址、端口
real_server 192.168.198.14 80 {
        weight 1
      TCP_CHECK {
                        connect_port 80
                        connect_timeout 3
                        nb_get_retry 3
                        delay_before_retry 3
                }
        }
##删除后面多余的配置##
}

systemctl start keepalived
ip addr

2.2.4启动 ipvsadm 服务

ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
#清空规则
ipvsadm -C
ipvsadm -A -t 192.168.198.180:80 -s rr
ipvsadm -a -t 192.168.198.180:80 -r 192.168.198.13:80 -g
ipvsadm -a -t 192.168.198.180:80 -r 192.168.198.14:80 -g
ipvsadm -ln
#如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived

2.2.5调整 proc 响应参数,关闭Linux 内核的重定向参数响应

vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p

在这里插入图片描述

2.3配置备DR服务器(192.168.198.12)

systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm

2.3.1配置虚拟 IP 地址(VIP:192.168.198.180)

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
#若隧道模式,复制为ifcfg-tunl0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.198.180
NETMASK=255.255.255.255
重启网卡 systemctl restart network
ifup  ens33:0 
ifconfig

在这里插入图片描述

2.3.2安装keepalived

#安装keepalived
yum -y install ipvsadm keepalived
#加载 Linux 内核的 IPVS 模块
modprobe ip_vs
#查看当前 IPVS 的状态和信息
cat /proc/net/ip_vs

2.3.3配置keeplived

cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_02
   vrrp_skip_check_adv_addr
  #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
   auth_type PASS
        auth_pass 000000
    }
    virtual_ipaddress {
        192.168.198.180
    }
}

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

    real_server 192.168.198.13 80 {
             weight 1
     TCP_CHECK {
                        connect_port 80
                        connect_timeout 3
                        nb_get_retry 3
                        delay_before_retry 3
                }
        }
  real_server 192.168.198.14 80 {
        weight 1
      TCP_CHECK {
                        connect_port 80
                        connect_timeout 3
                        nb_get_retry 3
                        delay_before_retry 3
                }
        }
}

systemctl start keepalived
ip addr

2.3.4启动 ipvsadm 服务

ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -C
ipvsadm -A -t 192.168.198.180:80 -s rr
ipvsadm -a -t 192.168.198.180:80 -r 192.168.198.13:80 -g
ipvsadm -a -t 192.168.198.180:80 -r 192.168.198.14:80 -g

2.3.5调整 proc 响应参数,关闭Linux 内核的重定向参数响应

vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p

3.配置节点服务器

Web 服务器1:ens33 192.168.13
lo:0(VIP)192.168.198.180
Web 服务器2:ens33 192.168.198.14
lo:0(VIP)192.168.198.180

systemctl stop firewalld
setenforce 0

yum -y install httpd
systemctl start httpd

--192.168.198.13---
echo 'this is blue web!' > /var/www/html/index.html

--192.168.198.14---
echo 'this is summer web!' > /var/www/html/index.html

vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.198.180
NETMASK=255.255.255.255

service network restart 或 systemctl restart network
ifup lo:0
ifconfig lo:0
route add -host 192.168.198.180 dev lo:0

vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

sysctl -p

4.测试验证

在客户端访问 http://192.168.198.180/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tG4446eB-1688650765125)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230706194710785.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4xCkVLSd-1688650765126)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230706194721466.png)]

再在主服务器关闭 keepalived 服务后再测试, systemctl stop keepalived
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BbRHxuNH-1688650765126)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230706194749281.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vi4t0TIv-1688650765127)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230706194815889.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hlNGmY7F-1688650765127)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230706194855162.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uPPdhwQd-1688650765128)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230706194910123.png)]

keepalived的作用是解决单点故障、在调度器上配置keepalived即可相当于ARRP的主备份,主挂了,数据流就会转到备主机,keepalived可以用在组件中:mysql、nginx、Tomcat),高可用,实现故障转移。

主要的模块有三个:

(1)core模块:为keepalived的核心 ,负责主进程启动,维护全局配置文件,加载和解析

(2)VRRP 模块:来实现VRRP协议

(3)check 模块:负责健康检查 常见的检查方式, 比如:端口 URL

猜你喜欢

转载自blog.csdn.net/Katie_ff/article/details/131585861