Redis - Keepalived + redis 主备热备切换

1. 热备方案

硬件:server两台,分别用于master-redis及slave-redis

软件:redis、keepalived

实现目标:

  • 由keepalived对外提供虚拟IP(VIP)进行redis访问
  • 主从redis正常工作,主负责处理业务,从进行数据备份
  • 当主出现故障时,从切换为主,接替主的业务进行工作
  • 当主恢复后,拷贝从的数据,恢复主身份,从恢复从身份

数据采用aof方式进行持久化存储,秒级备份,当出现故障后,损失数据不超过1s

Keepalived提供以下服务:

  • 对用户提供VIP访问,屏蔽redis实际IP,当主机出现故障,仍可用VIP访问到从。
  • 对redis状态进行监控,将监控频率设置在1s。当主出现故障后能及时处理,切换从机提供业务。

2. 环境准备

利用虚拟机进行测试,安装ubuntu,安装完成后克隆ubuntu,利用两个虚拟机来构造服务器环境。

在两台虚拟机分别执行sudo apt-get redis-server和sudo apt-get keepalived安装redis和keepalived软件。

配置两个虚拟机的redis主从关系:

1. 保证两个虚拟机ip不一致且能互相ping通

2. 打开slave下/etc/redis/redis.conf文件

3. 找到slaveof配置项配置指定的master ip port,有密码则还需配置masterauth

4. Save “”取消注释,关闭RDB方式,配置appendonly项,配置为yes,持久化采用AOF方式

5. 主从执行service redis restart重启下redis服务。

6. redis-cli info查看主从redis信息。

Maste:

Slave:

测试主从环境:

Master:

Slave:

查看默认db目录/var/lib/redis/

3. keepalived配置

keepalived配置包含两部分,一部分是keepalived配置文件,另一部分是脚本。

主从/etc/keepalived/目录下新建keepalived.conf文件。

Keepalived配置文件

Master

 1 vrrp_script chk_redis {
 2
 3 script "/etc/keepalived/scripts/redis_check.py" ###监控脚本
 4
 5 interval 1 ###监控时间设置为1s
 6
 7 }
 8
 9 vrrp_instance VI_1 {
10
11 state MASTER ###设置为MASTER
12
13 interface ens33 ###监控网卡
14
15 virtual_router_id 51
16
17 priority 101 ###权重值
18
19 authentication {
20
21 auth_type PASS ###加密
22
23 auth_pass redis ###密码
24
25 }
26
27 track_script {
28
29 chk_redis ###调用上面定义的chk_redis
30
31 }
32
33 virtual_ipaddress {
34
35 192.168.133.188 ###对外的虚拟IP
36
37 }
38
39 notify_master /etc/keepalived/scripts/redis_master.py
40
41 notify_backup /etc/keepalived/scripts/redis_backup.py
42
43 notify_fault /etc/keepalived/scripts/redis_fault.py
44
45 notify_stop /etc/keepalived/scripts/redis_stop.py
46
47 }

Slave

与master基本一致,修改以下两项即可

1 state MASTER ###设置为MASTER
2
3 state BACKUP ###设置为BACKUP
4
5 priority 101 ###权重值
6
7 priority 100 ###slave权重值比master小

监控脚本包含5个,主要关注redis_check.py 、redis_master.py和redis_backup.py。

  • redis_check.py用于监控redis运行状态,反馈redis是否运行正常信息。
  • redis_master.py将当前redis切换为master
  • redis_backup.py将当前redis切换为slave

keepalived根据配置的监控时间,执行redis_check.py查看redis运行状态,出现异常则主从依次调用脚本完成主从倒换。将这些脚本放在/etc/keepalived/scripts/目录下,并且给所有脚本加上执行权限chmod +x *

redis_check.py主从内容一致:

 1 #!/usr/bin/python
 2
 3 import os
 4
 5 import sys
 6
 7 import time
 8
 9 PING = ‘redis-cli ping‘ #redis ping command, observe network state
10
11 os.chdir("/etc/redis/") #set log file path
12
13 fp = open("redis_dump.log",‘a‘) #open log file with append mode
14
15 result = os.system(PING) #exec command
16
17 if 0 == result: #network state ok
18
19 logtime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
20
21 fp.write("[check]" + logtime + ":" + ‘redis running!\n‘)
22
23 sys.exit(0)
24
25 else:
26
27 logtime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
28
29 fp.write("[check]" + logtime + ":" + ‘redis stop service!\n‘)
30
31 sys.exit(1)
32
33 fp.close()

网络状态良好时表示redis运行正常,日志记录可以注释,防止日志打印过多。在redis配置鉴权需修改所有的命令执行脚本内容,带上鉴权信息。

当网络不通,即redis服务挂掉后,可以增加os.system(“service redis start”)或者os.system(“service redis restart”)尝试重启redis服务。

redis_master.py主机配置:

 1 #!/usr/bin/python
 2
 3 import os
 4
 5 import time
 6
 7 SLAVEOF = ‘redis-cli slaveof 192.168.133.131 6379‘ #backup data form slave
 8
 9 SLAVENO = ‘redis-cli slaveof no one‘ #being master
10
11 os.chdir("/etc/redis/") #set log file path
12
13 fp = open("redis_dump.log",‘a‘) #open log file with append mode
14
15 result = os.system(SLAVEOF) #exec command
16
17 logtime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) #get time info
18
19 if 0 == result: #backup data from slave
20
21 fp.write("[master]" + logtime + ":" + ‘start copy data from slave!\n‘)
22
23 else:
24
25 fp.write("[master]" + logtime + ":" + ‘copy data from slave falue!\n‘)
26
27 time.sleep(10) #set backup time
28
29 result = os.system(SLAVENO) #being master
30
31 logtime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
32
33 if 0 == result:
34
35 fp.write("[master]" + logtime + ":" + ‘stop copy data, being master!\n‘)
36
37 else:
38
39 fp.write("[master]" + logtime + ":" + ‘being master falue!\n‘)
40
41 fp.close()

从机redis_master.py内容与主机基本一致,修改备份数据对端地址为master ip即可。

1 SLAVEOF = ‘redis-cli slaveof 192.168.133.131 6379‘ #backup data form slave
2
3 SLAVEOF = ‘redis-cli slaveof 192.168.133.130 6379‘ #backup data form master

执行这个脚本,redis状态将从主机变为从机,先从指定的ip对端进行数据备份,备份完成后切换自身状态为主机。

redis_backup.py主机配置

#!/usr/bin/python

import os

import time

time.sleep(15) #set data backup time

SLAVEOF = ‘redis-cli slaveof 192.168.133.131 6379‘

os.chdir("/etc/redis/") #set log file path

fp = open("redis_dump.log",‘a‘) #open log file with append mode

result = os.system(SLAVEOF) #exec command

logtime = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())

if 0 == result:

fp.write("[backup]" + logtime + ":" + ‘being slave!\n‘)

else:

fp.write("[backup]" + logtime + ":" + ‘being slave falue!\n‘)

fp.close()

从机redis_master.py内容与主机基本一致,修改备份数据对端地址为master ip即可。

1 SLAVEOF = ‘redis-cli slaveof 192.168.133.131 6379‘ #backup data form slave
2
3 SLAVEOF = ‘redis-cli slaveof 192.168.133.130 6379‘ #backup data form master

执行这个脚本,redis将从主机状态变为从机,先从指定的对端ip进行数据备份,备份完成后切换状态为该对端从机。

上述用到的所有keepalived配置文件及脚本:

https://github.com/binchen-china/keepalived-redis

4. 热备测试

1. 主从启动所有服务

Service redis start

Service keepalived start

2. 在master执行ip a查看虚拟IP是否绑定成功

3. 查看日志,keepalived运行是否正常

4. 停止master的redis服务

Service redis stop,查看从机ip a,虚拟IP已经在1秒内切换到从机绑定了。

5. 查看从机信息

从机已经切换为主机

6. 重启主机redis服务

虚拟IP重新与主机绑定,主从恢复状态

7. 查看数据是否丢失

时间: 2024-11-05 23:22:12

Redis - Keepalived + redis 主备热备切换的相关文章

keepalived的详细介绍,主辅热备,主主负载均衡

Keepalived介绍 Keepalived是一个基于VRRP协议来实现的WEB 服务高可用方案,可以利用其来避免单点故障.一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性. 1      +-------------VIP(192.168

Keepalived现实Web双机热备(高可用)

Keepalived现实Web双机热备(高可用) 通过在两台主.备调度器上实现Keepalived高可用解决调度器单点失败问题 主.备调度器上配置LVS,正常情况下主调度器工作 主调度器异常时,Keepalived启用备用调度器,保证了调度器的高可用 调度器保证了后台服务的高可用 Keepalived机制把同一个IP一直分配在同一个Web服务器 如下实现web服务器的高可用: web1 :  192.168.10.20     主 web2:   192.168.10.22     备 虚拟IP

LVS-DR+Keepalived网站服务器双机热备配置

keepalived是一个类似于layer3, 4 & 7交换机制的软件,也就是我们平时说的第3层.第4层和第7层交换.Keepalived是自动完成,不需人工干涉.调度服务器:需要在LVS的基础上面做.参考上两节:负载均衡群集之一LVS-DR:http://blog.51cto.com/13572519/2084197负载均衡群集之-LVS-NAT:http://blog.51cto.com/13572519/2084181 一块网卡:Vmnet1:192.168.80.100主与从调度器上都

haproxy/nginx+keepalived负载均衡 双机热备 邮件报警 实战及常见问题

Haproxy 做http和tcp反向代理和负载均衡keepalived 为两台 Haproxy 服务器做高可用/主备切换.nginx   为内网服务器做正向代理,如果业务需求有变化,也可以部分替代 haproxy 做 http 反向代理.如果发生主备切换,向指定邮箱发送报警邮件. 本文比较裹脚布,没耐心的就别看了. 一.两台服务器,系统 CentOS6主机名        外网IP        内网IPlbserver_01  202.1.1.101   10.1.1.11/24lbserv

keepalived+LVS 实现双机热备、负载均衡、失效转移 高性能 高可用 高伸缩性 服务器集群

本章笔者亲自动手,使用LVS技术实现实现一个可以支持庞大访问量.高可用性.高伸缩性的服务器集群 在读本章之前,可能有不少读者尚未使用该技术,或者部分读者使用Nginx实现应用层的负载均衡.这里大家都可以阅读本章,即使部分读者使用Nginx负载均衡,但是在大流量下性能相对于工作在链路层的LVS真是不能同日而语,并且LVS不仅可以实现WEB方面的负载均衡,其他诸如数据库.FTP.Mail等都可以实现. 通常对于小型网站,很多都使用单台服务器,顶多在弄个缓存服务器.数据库服务器.但是一旦流量上来,单台

keepalived+nginx实现双机热备

keepalived是一个类似于layer3, 4, 5 交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器. 官网地址:http://www.keepalived.o

使用Keepalived构建高可用热备

简介 Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器. 工作原理 keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议. 在VRRP中有两组重要的概念

lvs+keepalived 做负载和热备

准备工作 1.下载keepalived和lvs # wget http://www.keepalived.org/software/keepalived-1.2.13.tar.gz # wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz 2.安装依赖 # yum -y install libnl* openssl* popt* kernel-devel 3.解压安装 # tar -zxvf

moosefs+keepalived双机高可用热备解决方案-01 by李靖

  [前言]公司数据迁移后期会使用到MFS,看过很多有关的文章,但大部分都是moosefs安装配置和单点手动备份.经过很长一段时间思考,想将其与keepalived相结合以提高可用性,也就有了我这篇文章. 本文以官网最新稳定版moosefs 2.0.66-1,和centos6.6,具体思路如下: 原理 部署思路 IP.主机名.防火墙等基本配置 Moosefs(mfs)各角色安装配置 Keepalived安装配置 故障切换测试 参考资料 原理: MFS文件系统结构: 管理服务器managing s