vpn网站模板,缔造自助建站,wordpress 首页 修改,h5网站制作网站开发一、Keepalived案例分析
企业应用中#xff0c;单台服务器承担应用存在单点故障的危险
单点故障一旦发生#xff0c;企业服务将发生中断#xff0c;造成极大的危害 二、Keepalived工具介绍 专为LVS和HA设计的一款健康检查工具 支持故障自动切换#xff08;Failover#…一、Keepalived案例分析
企业应用中单台服务器承担应用存在单点故障的危险
单点故障一旦发生企业服务将发生中断造成极大的危害 二、Keepalived工具介绍 专为LVS和HA设计的一款健康检查工具 支持故障自动切换Failover支持节点健康状态检查Health Checking 判断LVS负载调度器、节点服务器的可用性当master主机出现故障及时切换到backup节点保证业务正常当master故障主机恢复后将其从新加入群集并且业务重新切换回master节点
官方网站http://www.keepalived.org/补充1一个合格的群集应该具备的特点 负载均衡 用于提高群集的性能 LVS Nginx HAProxy SLB F5 健康检查探针 针对于调度器和节点服务器 Keepalived Heartbeat 故障转移 通过VIP漂移实现主备切换 VRRP 脚本
补充2健康检查探针常用的工作方式 发送心跳消息 vrrp报文 ping/pong TCP端口检查 向目标主机的 IPPORT 发起TCP连接请求如果TCP连接三次握手成功则认为健康检查正常否则认为健康检查异常 HTTP URL检查 向目标主机的URL路径比如http://IP:PORT/URI路径发起 HTTP GET请求方法如果响应消息的状态码为 2XX 或 3XX则认为健康检查正常如果响应消息的状态码为 4XX 或 5XX则认为健康检查异常
三、Keepalived实现原理剖析
在一个LVS服务集群中通常有主服务器MASTER和备份服务器BACKUP两种角色的服务器但是对外表现为一个虚拟IPVIP主服务器会发送VRRP通告信息给备份服务器当备份服务器收不到VRRP消息的时候即主服务器异常的时候备份服务器就会接管虚拟IP继续提供服务从而保证了高可用性
Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能VRRP虚拟路由冗余协议是针对路由器的一种备份解决方法 由多台路由器组成一个热备组通过共用的虚拟IP对外提供服务 每个热备组内同时只有一台主路由器提供服务其他路由器处于冗余状态 若当前在线的路由器失效则其他路由器会根据设置的优先级自动接替虚拟IP地址继续提供服务 四、Keepalived体系主要模块及其作用
core模块为keepalived的核心负责主进程的启动、维护及全局配置文件的加载和解析。vrrp模块是来实现VRRP协议的。调度器之间的健康检查和主备切换check模块负责健康检查常见的方式有端口检查及URL检查。节点服务器的健康检查
五、Keepalived案例讲解
Keepalived可实现多机热备每个热备组可有多台服务器双机热备的故障切换是由虚拟IP地址的漂移来实现适用于各种应用服务器实现基于Web服务的双机热备 漂移地址192.168.10.72 主、备服务器192.168.10.73、192.168.10.74 提供的应用服务Web 六、Keepalived安装与启动
在LVS群集环境中应用时也需用到ipvsadm管理工具YUM安装Keepalived启用Keepalived服务 源码编译安装 下载程序包
tar -zxf keepalived-2.2.8.tar.gz #解压缩yum -y install openssl-devel
yum install libnl-devel #安装模块./configure -prefix/opt/keepalived #编译
make make install #安装
七、部署Keepalived
实验前准备2台服务器
systemctl disable --now firewalld
setenforce 0vim /etc/selinux/configSELINUXdisable yum install -y keepalived vim /etc/keepalived/keepalived.conf 主服务器
cd /etc/keepalived
ls
cp keepalived.conf keepalived.bak #配置文件进行备份
ls修改配置文件 备服务器
操作相同配置文件修改稍作更改如下 systemctl start keepalived.service
systemctl enable keepalived.service主服务器 备服务器 小问题Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP Keepalived首先做初始化先检查state状态master为主服务器backup为备服务器。 然后再对比所有服务器的priority谁的优先级高谁是最终的主服务器。 优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址。 八、keepalived的抢占与非抢占模式 抢占模式即MASTER从故障中恢复后会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP 非抢占式俩节点state必须为bakcup且必须配置nopreempt。
注意 这样配置后我们要注意启动服务的顺序优先启动的获取master权限与优先级没有关系了。 九、LVSKeepalived高可用负载均衡
准备5台服务器
nfs服务器与节点服务器配置见案例:LVS DR模式-CSDN博客
负载调度器均已安装keepalived服务见上述部署操作
yum install -y ipvsadm modprobe ip_vs #加载模块
lsmod | grep ip_vstouch /etc/sysconfig/ipvsadm
systemctl start ipvsadm
systemctl enable ipvsadm
systemctl status ipvsadm vim /etc/keepalived/keepalived.conf
TCP端口检查方式 systemctl start keepalived.service
ip a
主服务器 备服务器 ipvsadm -ln #规则已自动生成 检验 刷新 将主服务器宕机后备服务器启用结果与以上情况相同
十、实现master/master双主架构
配置
#服务器1的配置keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id lb01 # 路由器标识一般不用改也可以写成每个主机自己的主机名
}vrrp_instance VI_1 {state MASTER # 在另一个主机上为BACKUPinterface ens33virtual_router_id 51 # 每个vrrp_instance唯一priority 100 # 在另一个主机上为50保证能选出主advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.10 dev ens33 label ens33:0 # 指定vrrp_instance的VIP和label}
}vrrp_instance VI_2 { # 再定义一个虚拟路由器VI_2实例state BACKUP # 在另一个主机上为MASTERinterface ens33virtual_router_id 61 # 每个vrrp_instance唯一priority 50 # 在另一个主机上为100保证能选出主advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.50 dev ens33 label ens33:1 # 指定vrrp_instance的VIP和label}
}
#服务器2的配置 keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id lb02 # 路由器标识一般不用改也可以写成每个主机自己的主机名
}vrrp_instance VI_1 {state BACKUP # 此行修改为BACKUPinterface ens33virtual_router_id 51priority 50 # 此行修改为50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.10 dev ens33 label ens33:0}
}vrrp_instance VI_2 {state MASTER # 此行修改为MASTERinterface ens33virtual_router_id 61priority 100 # 此行修改为100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.50 dev ens33 label ens33:1}
}
验证
# 重启keepalived服务在两台设备上都执行
systemctl restart keepalived# 查看两个节点各自的VIP
[rootlb01 keepalived]# ip a | egrep 10.0.0.10|0.50inet 10.0.0.10/32 scope global ens33:0
[rootlb02 keepalived]# ip a | egrep 10.0.0.10|0.50inet 10.0.0.50/32 scope global ens33:1
十一、Nginx实现高可用
yum方式安装的配置文件/etc/keepalived
#主服务器配置
vi keepalived.conf
keepalived.conf:
#检测脚本
vrrp_script chk_http_port {script /usr/local/src/check_nginx_pid.sh #心跳执行的脚本检测nginx是否启动interval 2 #检测脚本执行的间隔单位是秒weight 2 #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {state MASTER # 指定keepalived的角色MASTER为主BACKUP为备interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡virtual_router_id 66 # 虚拟路由编号主从要一直priority 100 # 优先级数值越大获取处理请求的优先级越高advert_int 1 # 检查间隔默认为1s(vrrp组播周期秒数)#授权访问authentication {auth_type PASS #设置验证类型和密码MASTER和BACKUP必须使用相同的密码才能正常通信auth_pass 1111}track_script {chk_http_port #调用检测脚本}virtual_ipaddress {192.168.16.130 # 定义虚拟ip(VIP)可多设每行一个}
}
#备服务器配置
#检测脚本
vrrp_script chk_http_port {script /usr/local/src/check_nginx_pid.sh #心跳执行的脚本检测nginx是否启动interval 2 #检测脚本执行的间隔weight 2 #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {state BACKUP # 指定keepalived的角色MASTER为主BACKUP为备interface ens33 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡virtual_router_id 66 # 虚拟路由编号主从要一直priority 99 # 优先级数值越大获取处理请求的优先级越高advert_int 1 # 检查间隔默认为1s(vrrp组播周期秒数)#授权访问authentication {auth_type PASS #设置验证类型和密码MASTER和BACKUP必须使用相同的密码才能正常通信auth_pass 1111}track_script {chk_http_port #调用检测脚本}virtual_ipaddress {192.168.16.130 # 定义虚拟ip(VIP)可多设每行一个}
}
检测脚本
#!/bin/bash
#检测nginx是否启动了
Aps -C nginx --no-header |wc -l
if [ $A -eq 0 ];then #如果nginx没有启动就启动nginx systemctl start nginx #重启nginxif [ ps -C nginx --no-header |wc -l -eq 0 ];then #nginx重启失败则停掉keepalived服务进行VIP转移killall keepalived fi
fi 实验
实验环境同LVSKeepalived高可用负载均衡负载调度器配置不同 负载调度器配置均已使用yum安装完nginx
nginx -V cd /etc/nginx
vim nginx.conf nginx -t
systemctl enable --now nginx 测试 刷新 另一台配置同上测试结果相同 高可用操作
yum install -y keepalived cd /etc/keepalived
touch check_nginx.sh
vim check_nginx.sh#!/bin/bashif !killall -0 nginx /dev/nullthensystemctl stop keepalived
fichmod x check_nginx.sh vim keepalived.conf
systemctl start keepalived
systemctl enable keepalived
ip a
主服务器 备服务器 测试 刷新 尝试故障转移测试关闭主服务器nginx后keepalived也停止运行 VIP转移到备服务器且测试结果同上
若需要还原则因为脚本的缘故应先启动主服务器nginx服务再启动keepalived 十二、Keepalived脑裂故障 现象 主服务器和备服务器都同时拥有相同的VIP 原因 因为主服务器和备服务器的通信中断导致备服务器无法收到主服务器发送的VRRP报文备服务器误认为主服务器已经故障了并通过ip命令生成VIP 解决 关闭主服务器或备服务器其中一个的keepalived服务 预防 如果是系统防火墙导致则关闭防火墙或添加防火墙规则放通VRRP组播地址(224.0.0.18)的传输 如果是主备服务器之间的通信链路中断导致则可以在主备服务器之间添加双链路通信 在主服务器使用脚本定时判断与备服务器通信链路是否中断如果判断是主备服务器之间的链接中断则自行关闭主服务器上的keepalived服务
#主服务器脚本#!/bin/bash
while true
do
ping -c4 -i 0.5 -W 2 备服务器IPif 「 $? -ne 0 ]then ssh 另一台主机IP ping -c 4 -i 0.5 -W2 -I 另一台主机IP 备服务器IPif [ $? -eg 0 ]then systemctl stop keepalivedfifi
sleep 20
done 利用第三方应用或监控系统检测是否发生了脑裂故障现象如果确认发生了脑裂故障则通过第三方应用或监控系统来关闭主服务器或备服务器其中一个的keepalived服务