searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Redis主从+哨兵集群(三)

2023-06-28 08:29:30
9
0

Keepalived部署

当redis的master节点发生故障时,哨兵选举出新的master节点,而对外就需要去观察到这一变化并更改redis配置。为了避免繁琐的步骤,通过keepalived将VIP始终挂载在Redis的master节点,对外只需要访问VIP即可访问Redis,不必跟踪Redis集群的变化。

在A、B、C三台主机上,执行以下步骤:

  • keepalived安装:sudo yum -y install keepalived
  • 创建并填写配置文件:sudo mkdir -p /etc/keepalived && sudo vi /etc/keepalived/keepalived.conf
  • 配置文件如下,其中router_id每台机器不同,可填写IP地址;interface为网卡,可能是eth0、ens33等,通过ip addr查看;virtual_router_id在同一keepalived配置下相同;priority每台机器不同,建议相差1;auth_pass必须相同,unicast指定发送和接收的IP地址;virtual_ipaddress指定VIP地址,需要是未被使用的IP地址,通常在200以上选择:
global_defs {
    route_id 11.45.31.70
    script_user root
    enable_script_security
}
vrrp_script check_master {
    script "/etc/keepalived/check_master.sh"
    interval 1
    weight -5
}

vrrp_instance  VI_1 {
    state  BACKUP
    interface  eth0
    virtual_router_id  77
    priority  98
    advert_int  1
    authentication {
        auth_type  PASS
        auth_pass  Wangdf135246!
    }
    unicast_src_ip 11.45.31.70
    unicast_peer {
        11.45.31.68
        11.45.31.69
    }
    virtual_ipaddress {
        11.45.31.200 dev eth0
    }
    track_script {
        check_master
    }
    notify_backup "/bin/bash /etc/keepalived/start_redis.sh"
}
  • 创建定时检查脚本: sudo vi /etc/keepalived/check_master.sh,需要填入pass和redis服务的端口,定期检查是否是master节点。
#!/bin/sh
redis-cli -p 16379 -a {{redis_pass}} info replication | grep 'role:master'
  • 创建master成为slave的执行脚本: sudo vi /etc/keepalived/start_redis.sh,需要填入redis和哨兵服务的端口,如果发现关闭,则尝试重启。
#!/bin/sh

START_REDIS()
{
    ss -tnl|grep ':16379 '
    if [[ $? -ne 0 ]]
    then
      redis-server /etc/redis/redis.conf
    fi  

}

START_SENTINEL()
{

    ss -tnl |grep ':26380 '
    
    if [[ $? -ne 0 ]]
    then
      redis-sentinel  /etc/redis/redis-sentinel.conf
    fi
}

START_REDIS
START_SENTINEL

 

  • 为脚本添加执行权限:sudo chmod +x /etc/keepalived/*.sh。
  • 启动keepalived服务:sudo systemctl start keepalived,通过sudo systemctl status keepalived查看keepalived状态。

  • 在redis主节点所在的主机上通过hostname -I可以看到挂载的VIP:11.45.31.200,或者ip addr show eth0也可以看到。

 

redis哨兵+keepalived测试:

为了测试故障转移,暂时注释start_redis.sh的最后两行,避免redis重启:

1. 停掉redis主节点:redis-cli -p {{redis_port}} -a {{redis_pass}} shutdown

2. 通过hostname -I查看VIP是否已经漂移走

3. 连接redis查看集群信息:redis-cli -p {{redis_port}} -a {{redis_pass}} info replication

4. 去到新的redis主节点,通过hostname -I查看VIP是否自动漂移到主节点

 

keepalived和redis保活:

  1. sudo systemctl enable keepalived && sudo systemctl enable redis开启自动启动
  2. 定时任务:crontab -e; 加入*/1 * * * * sudo systemctl start keepalived和*/1 * * * * sudo sh /etc/keepalived/start_redis.sh,每分钟尝试重启
  3. sudo systemctl restart crond
  4. crontab -l查看是否添加成功
  5. 测试:停止keepalived:sudo systemctl stop keepalived
  6. 等待1至2分钟,查看keepalived状态:sudo systemctl statuskeepalived
0条评论
0 / 1000
l****n
14文章数
0粉丝数
l****n
14 文章 | 0 粉丝
原创

Redis主从+哨兵集群(三)

2023-06-28 08:29:30
9
0

Keepalived部署

当redis的master节点发生故障时,哨兵选举出新的master节点,而对外就需要去观察到这一变化并更改redis配置。为了避免繁琐的步骤,通过keepalived将VIP始终挂载在Redis的master节点,对外只需要访问VIP即可访问Redis,不必跟踪Redis集群的变化。

在A、B、C三台主机上,执行以下步骤:

  • keepalived安装:sudo yum -y install keepalived
  • 创建并填写配置文件:sudo mkdir -p /etc/keepalived && sudo vi /etc/keepalived/keepalived.conf
  • 配置文件如下,其中router_id每台机器不同,可填写IP地址;interface为网卡,可能是eth0、ens33等,通过ip addr查看;virtual_router_id在同一keepalived配置下相同;priority每台机器不同,建议相差1;auth_pass必须相同,unicast指定发送和接收的IP地址;virtual_ipaddress指定VIP地址,需要是未被使用的IP地址,通常在200以上选择:
global_defs {
    route_id 11.45.31.70
    script_user root
    enable_script_security
}
vrrp_script check_master {
    script "/etc/keepalived/check_master.sh"
    interval 1
    weight -5
}

vrrp_instance  VI_1 {
    state  BACKUP
    interface  eth0
    virtual_router_id  77
    priority  98
    advert_int  1
    authentication {
        auth_type  PASS
        auth_pass  Wangdf135246!
    }
    unicast_src_ip 11.45.31.70
    unicast_peer {
        11.45.31.68
        11.45.31.69
    }
    virtual_ipaddress {
        11.45.31.200 dev eth0
    }
    track_script {
        check_master
    }
    notify_backup "/bin/bash /etc/keepalived/start_redis.sh"
}
  • 创建定时检查脚本: sudo vi /etc/keepalived/check_master.sh,需要填入pass和redis服务的端口,定期检查是否是master节点。
#!/bin/sh
redis-cli -p 16379 -a {{redis_pass}} info replication | grep 'role:master'
  • 创建master成为slave的执行脚本: sudo vi /etc/keepalived/start_redis.sh,需要填入redis和哨兵服务的端口,如果发现关闭,则尝试重启。
#!/bin/sh

START_REDIS()
{
    ss -tnl|grep ':16379 '
    if [[ $? -ne 0 ]]
    then
      redis-server /etc/redis/redis.conf
    fi  

}

START_SENTINEL()
{

    ss -tnl |grep ':26380 '
    
    if [[ $? -ne 0 ]]
    then
      redis-sentinel  /etc/redis/redis-sentinel.conf
    fi
}

START_REDIS
START_SENTINEL

 

  • 为脚本添加执行权限:sudo chmod +x /etc/keepalived/*.sh。
  • 启动keepalived服务:sudo systemctl start keepalived,通过sudo systemctl status keepalived查看keepalived状态。

  • 在redis主节点所在的主机上通过hostname -I可以看到挂载的VIP:11.45.31.200,或者ip addr show eth0也可以看到。

 

redis哨兵+keepalived测试:

为了测试故障转移,暂时注释start_redis.sh的最后两行,避免redis重启:

1. 停掉redis主节点:redis-cli -p {{redis_port}} -a {{redis_pass}} shutdown

2. 通过hostname -I查看VIP是否已经漂移走

3. 连接redis查看集群信息:redis-cli -p {{redis_port}} -a {{redis_pass}} info replication

4. 去到新的redis主节点,通过hostname -I查看VIP是否自动漂移到主节点

 

keepalived和redis保活:

  1. sudo systemctl enable keepalived && sudo systemctl enable redis开启自动启动
  2. 定时任务:crontab -e; 加入*/1 * * * * sudo systemctl start keepalived和*/1 * * * * sudo sh /etc/keepalived/start_redis.sh,每分钟尝试重启
  3. sudo systemctl restart crond
  4. crontab -l查看是否添加成功
  5. 测试:停止keepalived:sudo systemctl stop keepalived
  6. 等待1至2分钟,查看keepalived状态:sudo systemctl statuskeepalived
文章来自个人专栏
高可用集群部署
11 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0