返回介绍

4 高可用

发布于 2024-09-08 18:09:29 字数 3987 浏览 0 评论 0 收藏 0

keepalived

​ keepalive 起初专门为 lvs 负载均衡软件设计的,用来管理监控 lvs 集群系统中各个服务节点的状态,后来又加入了可以实现高可用的 vrrp 功能。

​ keepalive 软件通过 vrrp 协议实现高可用功能的。 VRRP (虚拟路由器冗余协议)目的就是为了解决静态路由单点故障问题,竞选机制来将路由的任务交给某台 VRRP 路由器的,保证节点宕机,整个网络可以不间断的运行。

Keepalived 可以实现任意两台主机之间,例如 Master 和 Backup 主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是 LVS 负载均衡、Nginx 反向代理这样的服务器。

​ Keepalived 工作方式:抢占式、非抢占式

Keepalived 高可用简单原理

master 端的 vrrp 路由器会一直发送 vrrp 广播包,buckup 会一直收到广播包,buckup 不会抢占 master 资源,在 backup 上会一直监听,一旦收不到 master 的包,在多台 backup 中优先级最高的就会抢占为 master。(master 若故障,则此机上 keepalived 会尝试重启;若重启失败,则关闭 keepalived,master 心跳包停发)。

keepalive 服务的三个重要功能

  1. 管理 LVS 负载均衡软件
  2. 实现对 LVS 集群节点健康检查功能
  3. 作为系统网络服务的高可用功能
  4. 双主热备. 自动切换(需要一个主备共用的 VIP,前端用 VIP 访问;如果 nginx 的 upstraem 负载均衡采用轮询,也能自动剔除故障机器)

案例:LVS. Nginx

集群前提条件

  1. 各节点时间必须同步,这个操作很关键。工具有 ntp 和 chrony(CentOS7 上开始启用)
  2. 确保 iptables 及 selinux 不会成为阻碍。要停止 firewalld 服务和 iptables
  3. 各节点之间可通过主机名互相通信(对 KA 并非必须),建议使用/etc/hosts 文件实现
  4. 各节点之间的 root 用户可以基于密钥认证的 ssh 服务完成互相通信(对 KA 并非必须,但是建议配置)
  5. 多播地址。建议更改默认的多播地址,防止冲突,可以在配置文件里的全局加入选项 vrrp_mcast_group4 224.100.50.100。将组播地址调整为 224.100.50.100。

keepalive+LVS 高可用

实现效果是当有请求过来时,根据轮询规则调度到后端 RS,同时实现了对 RS 的健康性检查,同时实现 VS 的高可用。

image-20200101103825441

keepalive+Nginx 高可用

A 机器:192.168.232.132

B 机器:192.168.232.131

A 级器作为 master,B 机器作为 backup

常用命令

  • service nginx start # 启动 nginx
  • service nginx stop # 关闭 nginx
ip add  #查看本机 ip 地址信息
systemctl stop keepalived  #关闭 keepalive
systemctl start keepalived #启动 keepalive

A 机

$ vim /etc/keepalived/keepalived.conf

global_defs {
  notification_email {
   aming@aminglinux.com
  }
  notification_email_from root@aminglinux.com
  smtp_server 127.0.0.1
  smtp_connect_timeout 30
  router_id LVS_DEVEL       #唯一标识,不同机器不能一样
}

vrrp_script chk_nginx {
  script "/usr/local/sbin/check_ng.sh"    # 检测 nginx 服务器活跃脚本
  interval 3
}

#vrrp 实例,名字可以自定义,与前面关键字空格隔开
vrrp_instance VI_1 {
  state MASTER    # 标识主还是备,必须大写。A/B 机不一样,A 为 MASTER, B 为 BACKUP
  interface eth0     # 默认的通信的接口,当 vip 不指定时,默认绑定 eth0。
  virtual_router_id 51     # 实例 ID,0~255,主备一样
  priority 100        # 权重,从机值稍小
  advert_int 1       # 心跳间隔
  authentication {
    auth_type PASS
    auth_pass aminglinux>com
  }
  virtual_ipaddress {      # vip 地址,主备一样,可以指定多个
    192.168.232.100
  }
  track_script {
    chk_nginx
  }
}
vrrp_instance VI_1 {
  state MASTER    # 标识主还是备,必须大写。A/B 机不一样,A 为 MASTER, B 为 BACKUP
  interface eth0     # 默认的通信的接口,当 vip 不指定时,默认绑定 eth0。
  virtual_router_id 51     # 实例 ID,0~255,主备一样
  priority 100        # 权重,从机值稍小
  advert_int 1       # 心跳间隔
  authentication {
    auth_type PASS
    auth_pass aminglinux>com
  }
  virtual_ipaddress {      # vip 地址,主备一样
    192.168.232.100
  }
  track_script {
    chk_nginx
  }
}

脚本路径: /usr/local/sbin/check_ng.sh

#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算 nginx 进程数量
n=`ps -C nginx --no-heading|wc -l`
# 如果进程为 0,则启动 nginx,并且再次检测 nginx 进程数量,
# 如果还为 0,说明 nginx 无法启动,此时需要关闭 keepalived
if [ $n -eq "0" ]; then
    /etc/init.d/nginx start
    n2=`ps -C nginx --no-heading|wc -l`
    if [ $n2 -eq "0" ]; then
        echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
        systemctl stop keepalived
    fi
fi

本章参考

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文