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关闭时 ,备服务器是否能顶上

相关推荐
洛卡卡了1 小时前
从单层到 MVC,再到 DDD:架构演进的思考与实践
架构·mvc
乌恩大侠2 小时前
O-RAN Fronthual CU/Sync/Mgmt 平面和协议栈
5g·平面·fpga开发·架构
木宛哥9 小时前
代码背后的智慧:20条编程感悟
java·后端·架构
58沈剑16 小时前
80后聊架构:架构设计中两个重要指标,延时与吞吐量(Latency vs Throughput) | 架构师之路...
架构
想进大厂的小王19 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
阿伟*rui20 小时前
认识微服务,微服务的拆分,服务治理(nacos注册中心,远程调用)
微服务·架构·firefox
ZHOU西口20 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
deephub1 天前
Tokenformer:基于参数标记化的高效可扩展Transformer架构
人工智能·python·深度学习·架构·transformer
架构师那点事儿1 天前
golang 用unsafe 无所畏惧,但使用不得到会panic
架构·go·掘金技术征文
W Y1 天前
【架构-37】Spark和Flink
架构·flink·spark