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

相关推荐
_.Switch3 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
韩楚风4 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
_.Switch9 小时前
Python机器学习:自然语言处理、计算机视觉与强化学习
python·机器学习·计算机视觉·自然语言处理·架构·tensorflow·scikit-learn
feng_xiaoshi13 小时前
【云原生】云原生架构的反模式
云原生·架构
架构师吕师傅15 小时前
性能优化实战(三):缓存为王-面向缓存的设计
后端·微服务·架构
团儿.17 小时前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构
艾伦~耶格尔1 天前
Spring Boot 三层架构开发模式入门
java·spring boot·后端·架构·三层架构
_.Switch1 天前
Python机器学习框架介绍和入门案例:Scikit-learn、TensorFlow与Keras、PyTorch
python·机器学习·架构·tensorflow·keras·scikit-learn
神一样的老师1 天前
构建5G-TSN测试平台:架构与挑战
5g·架构
huaqianzkh1 天前
付费计量系统通用功能(13)
网络·安全·架构