一台服务器出现故障无法提供服务时,备用服务器顶上去。
服务架构中的节点可能出现单点故障
nginx负载均衡节点、haproxy负载均衡节点、lvs 负载均衡节点,mysql主节点等
**高可用=冗余+故障自动转移。
冗余:部署多台相同功能的服务器。
故障自动转移(服务自动转移):虚拟ip自动漂移(保证客户端访问ip不变,服务器自动切换,所以引入虚拟ip,同一时刻只有一台正常服务器占有VIP)**
keepalived heatbeat
keepalived以vrrp协议为基础实现了高可用。基本过程如下:
master 节点通过“VIP”向backup组发心跳组播,报告master节点状态。backup若收不到vrrp包则认为master节点宕机。转至步骤一重新开始(涉及到原master又活过来的抢占和非抢占)。
WatchDog模块:检测keepalived服务。
vrrp子进程:通信,故障切换
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
# 全局配置部分
global_defs {
# 产生故障,邮件接收人
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
# 邮件服务器的设置
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
# 标识节点名字,在同一局域网中唯一即可,邮件通知使用。
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# 定义脚本,
vrrp_script chk_haproxy_server {
script "killall -0 haproxy"
interval 2
weight -2
fall 3
rise 1
}
# vrrp实例配置部分,用来定义VIP区域以及相关属性。实例名在一个配置文件中唯一,在同一组主备间一致
# 虚拟路由=master+backup
vrrp_instance VI_1 {
state MASTER # 节点类型
interface eth0 #发送组播包的接口
virtual_router_id 51 #vrrp实例id,同一组,主备保持一致
priority 100 # 优先级,主备差50
advert_int 1 # 发送心跳包的间隔
# 认证
authentication {
auth_type PASS
auth_pass 1111
}
# 设置VIP,主备必须一致
virtual_ipaddress {
192.168.1.198/24 dev ens33 label ens33:0
}
# keepalived只有在服务器宕机或者keepalived服务停止,才会进行主备切换,所以需要配置脚本
track_script {
chk_haproxy_server
}
}
# 定义虚拟服务(IPVS相关配置)
# 虚拟ip和端口
virtual_server 192.168.200.100 443 {
delay_loop 6 # 健康检查间隔
lb_algo rr # 定义负载均衡算法
lb_kind NAT # lvs 的模式
persistence_timeout 50 # 连接时间
protocol TCP # tcp转发
# 真实服务器的配置
real_server 192.168.201.100 443 {
weight 1 # 权重
SSL_GET { # 探活方式ssl get
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
url {
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout 3 # proxy和real-server建立连接的超时时间
nb_get_retry 3 # 重试次数
delay_before_retry 3 # 每一次的延时重试
}
}
}
keepalived服务进程被kill了。
若服务未启用则,停止keepalived服务
action "/usr/bin/pkill -SIGTERM keepalived"
原因:
查看本机是否有VIP
vip=192.168.136.199
master_ip=192.168.136.162
while true
do
vip_cont=ip a|grep -w $vip|wc -l
ping -c1 $master_ip 1 & >/dev/null #输出重定向
if [ $?-eq 1 -a $vip_cont -eq 1 ];then
echo "liekaile "
fi
sleep(5)
done
如何解决脑裂
周期性ping 虚拟路由,ping不通则关闭本机的keepalived
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论