当前位置:网站首页>lvs的keepalived

lvs的keepalived

2022-08-11 05:20:00 一颗橙子lio

lvs+keepalived群集

一、Keepalived工具介绍

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

支持故障自动切换(Failover)

支持节点健康状态检查(Health Checking)

官方网站: http://www.keepalived.orgl

二、Keepalived实现原理剖析

Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能

VRRP (虚拟路由冗余协议)
是针对路由器的一种备份解决方案

由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务

每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态

若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

Keepalived采用VRRP热备份协议
实现Linux服务器的多机热备功能

对于节点服务器,健康检查如果发现故障的节点就会将其隔离或者剔除集群待其恢复后再重新加入到集群当中

对于负载均衡器健康检查会定时检查主的状态(包括主机和服务的状态),如果故障就自动切换到备机上;待主机恢复后再重新让主机去承载业务

VRRP会把多台路由器组成一个虚拟路由器的组vrid,vrrp会生成一个虚拟路由器(包含了虚拟IP和虚拟MAC,局域网内的用户不关心哪个是主哪个是备,他们只用虚拟路由器的虚拟iP做为他们的网关

实际上虚拟IP是承载在master路由器,也就是实际的数据包是通过master进行转发master

backup是通过优先级来决定哪个是master,优先级最大的那台就是master

backup只用来监听master定时发来的vrrp报文,如果超时未收到naster.发来的vrrp报文backup就会抢占master地位虚拟IP也会一起漂移到backup上

keepalived源生态支持lvs

  • 配置Keepalived master服务器

    • keepalived.conf是主配置文件

    • global_defs {…}区段指定全局参数

      vrrp_instance 实例名称{…}区段指定VRRP热备参数
      注释文字以"∵"符号开头
      目录samples,提供了许多配置样例作为参考

  • 常用配置选项

    router_id HA_TEST_R1:本路由器(服务器)的名称、主备名称要不一样
    vrrp_instance Vl_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),可以有多个

  • 配置Keepalived slave服务器

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

      router_id:设为自有名称
      state:设为BACKUP
      priority:值低于主服务器
      其他选项与master相同

  • 测试双机热备的效果

    router_id:设为自有名称
    state:设为BACKUP
    priority:值低于主服务器

三、Keepalived案例讲解

image-20220802111900081

环境
主DR 服务器:20.0.0.10
备DR 服务器:20.0.0.11
Web 服务器1:20.0.0.18
Web 服务器2:20.0.0.20
VIP:20.0.0.100

配置负载调度器(主:20.0.0.10)

 
1. #关闭防火墙
systemctl stop firewalld.service
setenforce 0
 
2. #安装服务
yum -y install ipvsadm keepalived
 
3. #修改配置文件keeplived.conf
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
}
 
vrrp_instance VI_1 {				#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
    state MASTER
--21行--修改,指定承载vip地址的物理接口
    interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	
    virtual_router_id 10
--23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
    priority 100
    advert_int 1					#通告间隔秒数(心跳频率)
    authentication {				#定义认证信息,每个热备组保持一致
		auth_type PASS				#认证类型
--27行--修改,指定验证密码,主备服务器保持一致
        auth_pass 123123
    }
    virtual_ipaddress {				#指定群集vip地址
       20.0.0.100
    }
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 20.0.0.100 80 {
    delay_loop 6					#健康检查的间隔时间(秒)
    lb_algo rr						#指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
    persistence_timeout 50			#连接保持时间(秒)
    protocol TCP					#应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
    real_server 10.0.0.18 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.20 80 {		#添加第二个 Web节点的地址、端口
        weight 1
        TCP_CHECK {
			connect_port 80
			connect_timeout 3
			nb_get_retry 3
			delay_before_retry 3
		}
	}
}
##删除后面多余的配置##
 
4. #启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33	
 添加网卡
5. #调整proce响应参数,关闭Linux内核的重定向参数响应
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
 
6. #刷新一下
sysctl -p
 
############################# 配置ipvsadm #################################
 
7. #配置负载分配策略,并启动服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
 
8. 
#清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 20.0.0.100:80 -s rr
ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.18:80 -g
ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.20:80 -g
 
9. #保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm

关闭防火墙、安装服务

image-20220802112315123

备份配置文件修改配置

image-20220802112503909

image-20220802112612468

image-20220802120526270

image-20220802114418355

查看网卡信息

image-20220802114935876

配置内核参数

image-20220802115239843

配置负载分配策略,并启动服务

image-20220802115628778

配置负载调度器(备:20.0.0.11)

1. #关闭防火墙
systemctl stop firewalld.service
setenforce 0
 
2. #安装服务
yum -y install ipvsadm keepalived
 
3. #修改配置文件keeplived.conf
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_02
}
 
vrrp_instance VI_1 {				#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
    state BACKUP
--21行--修改,指定承载vip地址的物理接口
    interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	
    virtual_router_id 10
--23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
    priority 99
    advert_int 1					#通告间隔秒数(心跳频率)
    authentication {				#定义认证信息,每个热备组保持一致
		auth_type PASS				#认证类型
--27行--修改,指定验证密码,主备服务器保持一致
        auth_pass 123123
    }
    virtual_ipaddress {				#指定群集vip地址
        20.0.0.100
    }
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 20.0.0.100 80 {
    delay_loop 6					#健康检查的间隔时间(秒)
    lb_algo rr						#指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
    persistence_timeout 50			#连接保持时间(秒)
    protocol TCP					#应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
    real_server 20.0.0.18 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.20 80 {		#添加第二个 Web节点的地址、端口
        weight 1
        TCP_CHECK {
			connect_port 80
			connect_timeout 3
			nb_get_retry 3
			delay_before_retry 3
		}
	}
}
##删除后面多余的配置##
 
4. #启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33	
 
5. #调整proce响应参数,关闭Linux内核的重定向参数响应
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
 
6. #刷新一下
sysctl -p
 
############################# 配置ipvsadm #################################
 
7. #配置负载分配策略,并启动服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
 
8. 
#清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 20.0.0.100:80 -s rr
ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.18:80
ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.20:80
 
9. #保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm

关闭防火墙,安装服务

image-20220802115713287

修改配置文件

image-20220802120330244

image-20220802120403965

启动服务、查看虚拟网卡vip

image-20220802121138168

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

image-20220802121231989

配置负载分配策略,并启动服务

image-20220802121430073

配置节点服务器web1(20.0.0.18)

1. #关闭防火墙
systemctl stop firewalld
setenforce 0
 
2. #安装并开启httpd服务
yum -y install httpd
systemctl start httpd
 
3. #配置站点文件
vim /var/www/html/index.html
<h1>瞅我干啥</h1>
 
4. #配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=20.0.0.100
NETMASK=255.255.255.255
 
5. #重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0
 
6. #设置路由
route add -host 20.0.0.100 dev lo:0
route -n
 
7. #调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /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
 
8. #刷新proc参数
sysctl -p

关闭防火墙安装服务

image-20220802121613888

安装并开启httpd服务

image-20220802121723149

配置虚拟vip

image-20220802121801053

重启网络服务,开启虚拟网卡

image-20220802121824401

设置路由

image-20220802121855124

调整 proc 响应参数

image-20220802121946349

查看一下

image-20220802122328438

配置节点服务器web2(20.0.0.20)

1. #关闭防火墙
systemctl stop firewalld
setenforce 0
 
2. #安装并开启httpd服务
yum -y install httpd
systemctl start httpd
 
3. #配置站点文件
vim /var/www/html/index.html
<h1>瞅你咋地!</h1>
 
4. #配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=20.0.0.100
NETMASK=255.255.255.255
 
5. #重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0
 
6. #设置路由
route add -host 20.0.0.100 dev lo:0
route -n
 
7. #调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /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
 
8. #刷新proc参数
sysctl -p

关闭防火墙,安装服务

image-20220802122401249

开启服务,写入页面

image-20220802122654651

添加虚拟vip

image-20220802122722318

重启网卡,开启虚拟网卡

image-20220802122743724

设置路由

image-20220802122821115

调整 proc 响应参数

image-20220802122849523

刷新proc参数

image-20220802122907377

测试

当前使用的为主DR服务器

image-20220802133832488

备DR服务器

image-20220802133909839

断开主DR

systemctl stop keepalived.service

image-20220802134113761

备DR

image-20220802134153434

win测试

image-20220802134612943

image-20220802140806963

原网站

版权声明
本文为[一颗橙子lio]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43554927/article/details/126125009