当前位置: 首页 > news >正文

LVS+Keepalived集群

keepalived

Keepalived及其工作原理

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

在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送

VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而

保证了高可用性,底层就是基于VRRP协议,通过优先级判断主备服务器,主服务器间隔时间发送VRRP报文发送到备服务器证明自己还存活,当主

挂掉,备在一定时间里未接收到VRRP报文,备服务器就会抢占主服务接管数据,继续进行主的工作。


Keepalived体系主要模块及其作用

keepalived三个模块,分别是core、check和vrrp

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


vrrp模块:实现VRRP协议的


check模块:负责健康检查,常见的方式有端口检查及URL检查

keepalived的配置相关解释


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

 keepalived脑裂

脑裂现象产生的原因

Master一直发送心跳消息给backup主机,如果中间的链路突然断掉,backup主机将无法收到master主机发送过来的心跳消息(也就是vrrp报文),

backup这时候会立即抢占master的工作,但其实这时候的master是正常工作的,此时就会出现脑裂的现象

怎么预防脑裂现象

1.使用shell脚本对这两个主机之间的连通性进行监测,如果发现有问题,就会立即关闭keepalived服务来防止脑裂的产生

2.增加一条链路作为备用链路,即使主链路挂掉了,备用链路也会顶上来,master主机可以继续给backup主机发送心跳消息

3.监控软件的方法,这边主要是采用的zabbix来监控的,主要就是创建监控项,创建触发器来测试关闭keepalived服务

部署LVS+Keepalived集群

主服务器:ens33(20.0.0.50) ipvsadm 、keepalived(热备) 虚拟IP:20.0.0.126  网卡 ens33:0

备服务器:ens33(20.0.0.80) ipvsadm 、keepalived           虚拟IP:20.0.0.126  网卡 ens33:0

Web 服务器1:ens33  20.0.0.60                lo:0(VIP)20.0.0.126
Web 服务器2:ens33  20.0.0.70                lo:0(VIP)20.0.0.126
 

部署主备服务器

1.配置负载调度器(主备都需要进行配置) 
systemctl stop firewalld.service
setenforce 0
yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs(1)配置keeplived(主、备DR 服务器上都要设置)
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
......
global_defs {						#定义全局参数
--10行--修改,邮件服务指向本地smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02router_id LVS_01
--14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接#vrrp_strict
}vrrp_instance VI_1 {				#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUPstate MASTER--21行--修改,指定承载vip地址的物理接口interface ens33--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	virtual_router_id 10#nopreempt		#如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90priority 100advert_int 1					#通告间隔秒数(心跳频率)authentication {				#定义认证信息,每个热备组保持一致auth_type PASS				#认证类型--27行--修改,指定验证密码,主备服务器保持一致auth_pass 1111}virtual_ipaddress {				#指定群集vip地址20.0.0.126}
}--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 20.0.0.126 80 {delay_loop 6					#健康检查的间隔时间(秒)lb_algo rr						#指定调度算法,轮询(rr)--39行--修改,指定群集工作模式,直接路由(DR)lb_kind DRpersistence_timeout 50			#连接保持时间(秒)protocol TCP					#应用服务采用的是 TCP协议--43行--修改,指定第一个Web节点的地址、端口real_server 20.0.0.60 80 {weight 1					#节点的权重
--45行--删除原本的,添加以下健康检查方式		TCP_CHECK {connect_port 80			#添加检查的目标端口connect_timeout 3		#添加连接超时(秒)nb_get_retry 3			#添加重试次数delay_before_retry 3	#添加重试间隔}}real_server 20.0.0.70 80 {		#添加第二个 Web节点的地址、端口weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
##删除后面多余的配置##
}
20.0.0.50和80都需要配置vip(虚拟IP)
(1)vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=20.0.0.126
NETMASK=255.255.255.255systemctl restart network
ifup  ens33:0 systemctl start keepalived
ip addr						#查看虚拟网卡vip(2)启动 ipvsadm 服务
--20.0.0.50---ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadmipvsadm -C  
ipvsadm -A -t 20.0.0.126:80 -s rr
ipvsadm -a -t 20.0.0.126:80 -r 20.0.0.60:80 -g
ipvsadm -a -t 20.0.0.126:80 -r 20.0.0.70:80 -gipvsadm -ln                #如没有VIP 的分发策略,则重启 systemctl restart keepalived--20.0.0.80---
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadmipvsadm -C  
ipvsadm -A -t 20.0.0.126:80 -s rr
ipvsadm -a -t 20.0.0.126:80 -r 20.0.0.60:80 -g
ipvsadm -a -t 20.0.0.126:80 -r 20.0.0.70:80 -gipvsadm -ln(3)主备调整 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 = 0sysctl -p

配置节点服务器

systemctl stop firewalld.service
setenforce 0  
yum -y install httpd
systemctl start httpd  --20.0.0.60---
echo 'this is kgc web!' > /var/www/html/index.html--20.0.0.70---
echo 'this is benet web!' > /var/www/html/index.html(1)配置虚拟 IP 地址(20.0.0.60 20.0.0.70)(VIP:20.0.0.126)
#此地址仅用作发送 Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口 lo∶0 来承载 VIP 地址,并为本机添加一条路由记录,将访问 VIP 的数据限制在本地,以避免通信紊乱。
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=20.0.0.126
NETMASK=255.255.255.255				#注意:子网掩码必须全为 1service network restart 或 systemctl restart networkifup lo:0
ifconfig lo:0
route add -host 20.0.0.126 dev lo:0#永久写入方法
vim /etc/rc.local:
/sbin/route add -host 20.0.0.126 dev lo:0 
chmod +x /etc/rc.d/rc.local(2)调整内核的 ARP 响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突
vim /etc/sysctl.conf
......
net.ipv4.conf.lo.arp_ignore = 1			#系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_announce = 2		#系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2sysctl -p

验证20.0.0.126页面

 

 

http://www.lryc.cn/news/130800.html

相关文章:

  • Java的网络编程
  • kafka配置远程连接
  • css实现渐变色border
  • 管理 IBM Spectrum LSF
  • 117页数字化转型与产业互联网发展趋势及机会分析报告PPT
  • 【JavaWeb】实训的长篇笔记(上)
  • 如何使用Docker安装AWVS?
  • vue命名规范
  • 第05天 SpringBoot自动配置原理
  • AlphaZero能否从围棋和国际象棋飞跃到量子计算?
  • 进程切换
  • ES踩坑记录之UNASSIGNED分片无法恢复
  • ubuntu更换国内apt源
  • OpenCV-Python中的图像处理-视频分析
  • STM32 CubeMX (第四步Freertos内存管理和CPU使用率)
  • 题解 | #1012.Equalize the Array# 2023杭电暑期多校10
  • UE4/5C++多线程插件制作(二十一、使用)
  • 【C#】关于?的用法
  • linux——mysql的高可用MHA
  • 【学习日记】【FreeRTOS】空闲任务与阻塞延时
  • 衣服材质等整理(时常更新)
  • 电子商务环境下旅游价值链
  • spring源码分析bean的生命周期(下)
  • 完美解决Github提交PR后报错:File is not gofumpt-ed (gofumpt)
  • pytorch3d成功安装
  • 【vue3】同个页面引入多个图表组件实现自适应的方法
  • 一文了解汽车芯片的分类及用途介绍
  • Linux0.11内核源码解析-truncate.c
  • LED驱动型IC芯片的原理介绍
  • VLAN实验