Linux keepalived高可用集群+keepaliced+nginx

Linux keepalived高可用集群

高可用集群简介

最主要得功能是服务得可用性

脑裂
Keepalived的BACKUP主机在收到不MASTER主机报文后就会切换成为master,如果是它们之间的通信线路出现问题,无法接收到彼此的组播通知,但是两个节点实际都处于正常工作状态,这时两个节点均为master强行绑定虚拟IP,导致不可预料的后果,这就是脑裂。
解决脑裂的方案:
1、添加更多的检测手段,比如冗余的心跳线(两块网卡做健康监测),ping对方等等。尽量减少"裂脑"发生机会。(指标不治本,只是提高了检测到的概率);
2、设置仲裁机制。两方都不可靠,那就依赖第三方。比如启用共享磁盘锁,ping网关等。(针对不同的手段还需具体分析);
3、算法保证,比如采用投票机制(keepalived没有实现);

其他高可用方案:
heartbeat、pacemaker、 piranha(web页面)

keepalived

keepalived简介:
keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

keepalived工作原理:
1、keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
2、将N台提供相同功能的服务器组成一个服务器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该服务器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master

VRRP协议:
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由/网关为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

keepalived主要有三个模块:
分别是core、check和vrrp。
core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
check负责健康检查,包括常见的各种检查方式。
vrrp模块是来实现VRRP协议的。

例子keepalived实现nginx得高可用

环境准备:
Server1:192.168.0.118
Server2:192.168.0.119
VIP:192.168.0.10

server1:
1、创建etc下的keepalived目录,编辑配置文件
2、yum -y install keepalived
3、vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
 router_id 1                            #设备在组中的标识,可以一样也可以不一样
 }

#vrrp_script chk_nginx {                        #健康检查
# script "/etc/keepalived/ck_ng.sh"     #检查脚本
# interval 2                            #检查频率.秒
# weight -5                             #priority减5
# fall 3                                        #失败三次
# }

vrrp_instance VI_1 {               #VI_1。实例名两台路由器相同。同学们要注意区分。
    state MASTER                        #主或者从状态
    interface ens32                     #监控网卡
    mcast_src_ip 192.168.0.118          #心跳源IP
    virtual_router_id 55                #虚拟路由编号,主备要一致。同学们注意区分
    priority 100                        #优先级
    advert_int 1                        #心跳间隔

    authentication {                    #秘钥认证(1-8位)
        auth_type PASS
        auth_pass 123456
    }

    virtual_ipaddress {                 #VIP
    192.168.0.10/24
        }

#  track_script {                       #引用脚本
#       chk_nginx
#    }

}

# scp -r /etc/keepalived/keepalived.conf  192.168.0.119:/etc/keepalived/

systemctl enable keepalived.service 开机启动keepalived

4、安装Nginx

yum -y install nginx
systemctl enable nginx.service
systemctl start nginx.service
systemctl start keepalived.service	#启动keepalived

server2:
1、BACKUP服务器的配置需要几处修改
yum -y install keepalived
2、vi /etc/keepalived/keepalived.conf

state MASTER改为  state BACKUP
mcast_src_ip 192.168.0.118改为backup服务器实际的IP mcast_src_ip 192.168.0.119
priority 100改为priority 99
systemctl enable keepalived.service

3、安装Nginx

yum -y install nginx
systemctl enable nginx.service
systemctl start nginx.service
systemctl start keepalived.service

实验完成,客户端开始测试
访问VIP http://192.168.0.10 成功访问
拔掉master的网线。
再次访问会发现还是成功访问得。实际上已经切换到备机。

关于keepalived对nginx状态未知的问题

1、恢复之前的实验。启动两台主机的keepalived和nginx。确保页面访问正常。
关闭master的nginx服务 。systemctl stop nginx
继续访问VIP,请问页面是否会切换到slave呢?
这样是不会得,因为keepalived没有监控到nginx得状态信息,所以keepalived不会进行备机得切换
2、服务的状态和keepalived的关系。
原因是keepalived监控的是接口IP状态。无法监控服务状态。使用脚本进行nginx得监控

编辑监控脚本。
server1:
添加Nginx监控脚本

vi /etc/keepalived/ck_ng.sh
#!/bin/bash
#检查nginx进程是否存在
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
#尝试启动一次nginx,停止5秒后再次检测
    service nginx start
    sleep 5
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
#如果启动没成功,就杀掉keepalive触发主备切换
        service keepalived stop
    fi
fi
chmod +x /etc/keepalived/ck_ng.sh

server2:
添加Nginx监控脚本

vi /etc/keepalived/ck_ng.sh
#!/bin/bash
#检查nginx进程是否存在
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
#尝试启动一次nginx,停止5秒后再次检测
    service nginx start
    sleep 5
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
#如果启动没成功,就杀掉keepalive触发主备切换
        service keepalived stop
    fi
fi
chmod +x /etc/keepalived/ck_ng.sh

启动监控脚本
将上述实验中注释得部分将注释取消掉
重启keepalived即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值