keepalived集群的部署

1.keepalived工作原理

  • Keepalived 是一个基于VRRP协议来实现的IVS服务高可用方案,可以解决静态路由出现的单点故障问题。

  • 判断 LVS 负载调度器、节点服务器的可用性,当 master 主机出现故障及时切换到backup 节点保证业务正常,当 master故障主机恢复后将其重新加入群集并且业务重新切换回 master 节点。

1.1一个合格的集群应该具备几种特征

  • 负载均衡 使用lvs、nginx、haproxy、f5来实现
  • 健康检查 使用调度器和节点服务器 keepalived、heartbeat实现
  • 故障转移 实现高可用的主备切换

1.2keepalived的原理解析

  1. 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
  2. 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
  3. 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

1.3 keepalived体系中的主要模块

keepalived体系架构中主要有三个模块,分别是core、check和vrrp。

  • core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
  • vrrp模块:是来实现VRRP协议的。(调度器之间的健康检查和主备切换)
  • check模块:负责健康检查,常见的方式有端口检查及URL检查。(节点服务器的健康检查)

1.4 keepalived的抢占与非抢占模式

抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP 非抢占式俩节点state必须为bakcup,且必须配置nopreempt。 注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了。

2.脑裂现象

2.1产生的现象

主服务器和备服务器同时拥有vip地址

2.2脑裂的原因

因为主服务器和备服务器之间的通信链路中断,导致备服务器无法正常收到主服务器发送的vrrp心跳报文。

2.3 脑裂的解决

关闭主服务器或者备服务器其中一个的keepalived服务

2.4 脑裂的预防

1)主服务器与备服务器之间添加双通信链路

2)在主服务器上定义运行脚本判断与备服务器通信链路是否中断,如果中断则自行关闭keepalived服务

3)利用第三方监控软件检测是否发生脑裂故障,如果发生则通过监控软件关闭主或者备服务器上的keepalived服务

3.lvs与keepalived部署的具体操作

1.先设置两个节点nginx服务器的文件共享

2.配置/etc/sysctl 文件,设置arp协议的配置

ini 复制代码
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

3.配置虚拟网卡设置vip路径,两台节点服务器都要设置

ini 复制代码
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.223.200
#vip的ip地址
NETMASK=255.255.255.255

4.添加路由信息,并检查是否有路由信息

5.去我们的两台调度器上安装ipvsadm与keepalived软件,并启动他们

6.加载lvs模块

7.修改keepalived的配置文件之前先备份

8.之后去修改keepalived配置文件

9.重启keepalived 再用ipvsadm -ln去检查lvs是否设置完成

10.将主的keepalived的配置文件发送给自己的备配置文件

11.去修改备服务器上面的配置,这边默认抢占模式

12.启动ipvsadm和keepalived并查看lvs是否配置完毕

13.设置关闭两台调度器的重定向内核参数

ini 复制代码
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

14.去浏览器测试是否可以运行

15.测试当主调度器时,备调度器是否可以正常运行,先将主服务器的关机,查看备服务器是否成功获取vip地址

16.再去浏览器中查看是否可以正常查看

4.nginx与keepalived的联动部署

4.1 操作内容

使用7-3为nginx高可用主服务器7-4为nginx备服务器与keepalived联动实现高可用服务,7-1与7-2为nginx节点服务器

4.2具体操作

1.先在7-3与7-4上面安装nginx并开启

2.之后直接去修改nginx的配置文件,布置四层代理

ini 复制代码
stream {
    upstream backend {
      server 192.168.223.101:80;
      server 192.168.223.102:80;
}
    server {
      listen 8080;
      proxy_pass backend;
}
}

3.去浏览器上检测一下自己的四层代理是否没有问题,再去做下面的操作

4.将我配置好的nginx配置文件传输给我的备服务器

5.使用7-4的ip地址加端口号测试是否也能打开页面

6.将这两台服务器安装keepalived软件做高可用,首先我们要写一个脚本来判断nginx是否正常启动,如果没有正常启动则立刻关闭keepalived服务,防止主备之间发生脑裂状况,并给脚本加上执行权限

bash 复制代码
#!/bin/bash

if ! killall -0 nginx
#表示如果nginx没有在启动则启用下面的命令
then
  systemctl stop keepalived
关闭keepalived
fi

7.测试一下脚本是否有用,可以先将keepalived和nginx都打开,然后关闭nginx,再启动脚本,查看keepalived是否关闭

8.修改keepalived的配置文件

perl 复制代码
  1 ! Configuration File for keepalived
  2 
  3 global_defs {
  4    notification_email {
  5      acassen@firewall.loc
  6      failover@firewall.loc
  7      sysadmin@firewall.loc
  8    }
  9    notification_email_from Alexandre.Cassen@firewall.loc
 10    smtp_server 127.0.0.1
       #这边改成回环网卡地址
 11    smtp_connect_timeout 30
 12    router_id NGINX_01
       #这里修改成nginx_01
 13 }
 14  vrrp_script check_nginx {
     #添加一个脚本
    script "/etc/keepalived/check_nginx.sh"
     #脚本路径
    interval 2
    #监视次数
    weight 2 
    #设置权重
 }
 15 vrrp_instance VI_1 {
 16     state MASTER
 17     interface ens33
       #修改成自己的网卡名
 18     virtual_router_id 51
 19     priority 100
 20     advert_int 1
 21     authentication {
 22         auth_type PASS
 23         auth_pass 1111
 24     }
 25     virtual_ipaddress {
 26         192.168.223.200
        #改成自己设置的vip地址
 27     }   
        track_script {
        #设置执行脚本
    check_nginx
     }
 28 }   
        #删除下面其他没用的东西

9.将配置文件和脚本文件一起传送给备服务器

10.配置备服务器的keepalived配置

11.使用ip a命令去查看自己设置的vip地址是否成功

12.使用浏览器去测试是否成功,ip与端口号使用我们刚才设置的192.168.223.200:8080

13.测试当主服务器的nginx关闭时 ,备服务器是否能顶上

相关推荐
javaDocker3 小时前
业务架构、数据架构、应用架构和技术架构
架构
JosieBook5 小时前
【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍
架构
.生产的驴6 小时前
SpringCloud OpenFeign用户转发在请求头中添加用户信息 微服务内部调用
spring boot·后端·spring·spring cloud·微服务·架构
丁总学Java6 小时前
ARM 架构(Advanced RISC Machine)精简指令集计算机(Reduced Instruction Set Computer)
arm开发·架构
ZOMI酱8 小时前
【AI系统】GPU 架构与 CUDA 关系
人工智能·架构
天天扭码15 小时前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
余生H16 小时前
transformer.js(三):底层架构及性能优化指南
javascript·深度学习·架构·transformer