部署高可用Keepalived集群

1. 介绍

        keepalived属于高可用性集群。

        其工作原理是通过VRRP协议实现主备节点之间的状态同步,当主节点出现故障时,备节点会接管主节点的VIP地址,从而实现服务的高可用性。

        VRRP是虚拟路由器冗余协议(Virtual Router Redundancy Protocol)的缩写,是一种实现路由器冗余的协议。VRRP协议可以将多台路由器组成一个虚拟路由器,这个虚拟路由器有一个虚拟IP地址,可以提供给客户端使用。在这个虚拟路由器中,只有一台路由器是活动的,其他路由器都是备份的。当活动路由器出现故障时,备份路由器会接管虚拟IP地址,从而实现路由器的高可用性。

keepalived实现的功能:

  • 实现高可用性:keepalived 可以监控集群中的各个节点,当某个节点出现故障时,keepalived 可以自动将该节点从集群中剔除,从而保证整个集群的高可用性。

  • 实现负载均衡:keepalived 可以根据一定的负载均衡算法,将客户端请求分发到集群中的各个节点上,从而实现负载均衡

  • 实现健康检查:keepalived 可以定期对集群中的各个节点进行健康检查,当某个节点出现故障时,keepalived 可以自动将该节点从集群中剔除,从而保证整个集群的高可用性。

  • 实现虚拟 IP:keepalived 可以为集群提供虚拟 IP,客户端请求都发送到虚拟 IP 上,然后由 keepalived 将请求分发到集群中的各个节点上,从而实现负载均衡和高可用性。

  • 实现故障转移:当集群中的某个节点出现故障时,keepalived 可以自动将该节点从集群中剔除,并将虚拟 IP 转移到其他正常节点上,从而实现故障转移。

  • 实现状态同步:当集群中的某个节点出现故障时,keepalived 可以将该节点的状态同步到其他正常节点上,从而保证整个集群的状态一致性。

2. 部署keepalived

准备两台安装web软件的机器

2.1 安装

Keepalived for Linux

下载网址在上面,请根据需求下载自己所需版本

2.2 修改配置文件

web1修改

[root@web1 ~]# vim /etc/keepalived/keepalived.conf 
   router_id web1          # 设置本机在集群中的唯一识别
   vrrp_iptables           # 自动配置iptables放行规则
... ...
vrrp_instance VI_1 {
    state MASTER           # 状态,主为MASTER,备为BACKUP
    interface eth0         # 网卡
    virtual_router_id 51   # 虚拟路由器地址
    priority 100           # 优先级
    advert_int 1           # 发送心跳消息的间隔
    authentication {
        auth_type PASS     # 认证类型为共享密码
        auth_pass 1111     # 集群中的机器密码相同,才能成为集群
    }   
    virtual_ipaddress {
        192.168.88.80/24    # VIP地址
    }   
}
 
# 删除下面所有行

[root@web1 ~]# systemctl start keepalived
# 等几秒服务完全启动后,可以查看到vip
[root@web1 ~]# ip a s eth0 | grep '88'
    inet 192.168.88.100/24 brd 192.168.88.255 scope global noprefixroute eth0
    inet 192.168.88.80/24 scope global secondary eth0

web2修改

# 配置web2
[root@web1 ~]# scp /etc/keepalived/keepalived.conf 192.168.88.200:/etc/keepalived/
[root@web2 ~]# vim /etc/keepalived/keepalived.conf 
    router_id web2          # 改id
    vrrp_iptables
... ... 
vrrp_instance VI_1 {
    state BACKUP           # 改状态
    interface eth0
    virtual_router_id 51
    priority 80            # 改优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress 
    192.168.88.80/24
    }
}

# 启动服务
[root@web2 ~]# systemctl start keepalived
# 查看地址,eth0不会出现vip
[root@web2 ~]# ip a s | grep '88'
    inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0

测试

# 测试,现在访问88.80,看到是web1上的内容
[root@client1 ~]# curl http://192.168.88.80
Welcome from web1

# 模拟web1出现故障
[root@web1 ~]# systemctl stop keepalived.service 

# 测试,现在访问88.80,看到是web2上的内容
[root@client1 ~]# curl http://192.168.88.80
Welcome from web2

# 在web2上查看vip,可以查看到vip 192.168.88.80
[root@web2 ~]# ip a s | grep '88'
    inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0
    inet 192.168.88.80/24 scope global secondary eth0

3. 高级应用(监控本机80端口,实现主备切换)

实现原理

  • 配置高可用的web集群时,Keepalived只为服务器提供了VIP
  • Keepalived不知道服务器上运行了哪些服务
  • MASTER服务器可以通过跟踪脚本监视本机的80端口,一旦本机80端口失效,则将VIP切换至BACKUP服务器
  • Keepalived对脚本的要求是,退出码为0表示访问成功;退出码为1表示失败。

 3.1 创建脚本

# 1. 在MASTER上创建监视脚本
[root@web1 ~]# vim /etc/keepalived/check_http.sh
#!/bin/bash

ss -tlnp | grep :80 &> /dev/null && exit 0 || exit 1

[root@web1 ~]# chmod +x /etc/keepalived/check_http.sh

3.2 修改MASTER配置文件,使用脚本

        在keepalived配置文件中,track_script用于检查一个脚本的返回值,如果返回值为0,则认为当前主机处于正常状态,如果返回值为1,则认为当前主机处于异常状态,需要将VIP地址切换到另一台备用机器上。

        track_script配置项可以放在vrrp_instance或vrrp_script块中,其中vrrp_instance是用于定义一个VRRP实例配置,vrrp_script是定义一个脚本名称和执行脚本的配置项。

        通过配置track_script来检测应用程序或服务是否正常,可以增加VIP地址更准确、可靠的自动切换功能,提高系统的可用性和可靠性。

[root@web1 ~]# vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
  
  global_defs {
...略...
}

vrrp_script chk_http_port {  # 定义监视脚本
    script "/etc/keepalived/check_http.sh"
     interval 2   # 脚本每隔2秒运行一次
 }

 vrrp_instance VI_1 {
     state MASTER
     interface eth0
     virtual_router_id 51
     priority 100
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
         192.168.88.80/24
     }
      track_script {    # 引用脚本
         chk_http_port
     }
 }
 
# 3. 重起服务
[root@web1 ~]# systemctl restart keepalived.service

3.3 测试

# 4. 测试,关闭web1的nginx后,VIP将会切换至web2
[root@web1 ~]# systemctl stop nginx.service 
[root@web1 ~]# ip a s | grep 88
    inet 192.168.88.100/24 brd 192.168.88.255 scope global noprefixroute eth0
[root@web2 ~]# ip a s | grep 88
    inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0
    inet 192.168.88.80/24 scope global secondary eth0
# 5. 当MASTER的nginx修复后,VIP将会切换回至web1
[root@web1 ~]# systemctl start nginx.service 
[root@web1 ~]# ip a s | grep 88
    inet 192.168.88.100/24 brd 192.168.88.255 scope global noprefixroute eth0
    inet 192.168.88.80/24 scope global secondary eth0
[root@web2 ~]# ip a s | grep 88
    inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0
  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值