redis的主从配置与故障切换恢复操作

1)机器信息
Redis主从结构支持一主多从,这里我使用一主两从(一主一从也行,配置一样)
主节点 172.16.0.237 master-node
从节点 172.16.0.131 slave-node1

关闭两个节点机的iptables防火墙和selinux

2)安装redis
三台节点机的安装步骤一样
[[email protected] ~]# wget http://download.redis.io/redis-stable.tar.gz
[[email protected] ~]# tar -zvxf redis-stable.tar.gz
[[email protected] ~]# cd redis-stable
[[email protected] redis-stable]# make
[[email protected] redis-stable]# cd src/
[[email protected] src]# cp redis-server redis-cli redis-check-aof redis-check-rdb redis-sentinel redis-trib.rb /usr/local/bin/

然后新建目录,存放配置文件
[[email protected] src]# mkdir /etc/redis
[[email protected] src]# mkdir /var/redis
[[email protected] src]# mkdir /var/redis/log
[[email protected] src]# mkdir /var/redis/run
[[email protected] src]# mkdir /var/redis/redis

在redis解压根目录中找到配置文件模板
[[email protected] src]# cd ../
[[email protected] redis-stable]# cp redis.conf /etc/redis/redis.conf

设置启动脚本
[[email protected] redis-stable]# cp utils/redis_init_script /etc/init.d/redis
[[email protected] redis-stable]# chmod 755 /etc/init.d/redis

修改脚本pid及conf路径为实际路径
[[email protected] redis-stable]# vim /etc/init.d/redis
......
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

PIDFILE=/var/redis/run/redis_6379.pid
CONF="/etc/redis/redis.conf"
.......

3)主从复制配置
master-node
[[email protected] ~]# vim /etc/redis/redis.conf
.......
port 6379
.......
daemonize yes //这个修改为yes
.......
bind 0.0.0.0 //绑定的主机地址。说明只能通过这个ip地址连接本机的redis。最好绑定0.0.0.0;注意这个不能配置成127.0.0.1,否则复制会失败!用0.0.0.0或者本机ip地址都可以
.......
pidfile /var/redis/run/redis_6379.pid
.......
logfile /var/redis/log/redis_6379.log
.......
dir /var/redis/redis #redis数据目录
.......
appendonly yes #启用AOF持久化方式
appendfilename "appendonly.aof" #AOF文件的名称,默认为appendonly.aof
appendfsync everysec #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,是受推荐的方式。
.....
save 900 1 #启用RDB快照功能,默认就是启用的
save 300 10
save 60 10000 #即在多少秒的时间内,有多少key被改变的数据添加到.rdb文件里
.......
dbfilename dump.rdb #快照文件名称
......

slave-node1和slave-node2两个从节点相比于master-node主节点的redis.conf配置,只是多了下面一行配置,其它都一样:
slaveof 172.16.0.237 6379

启动三个节点的redis(启动命令一样)
[[email protected] ~]# /etc/init.d/redis start
Starting Redis server...
[[email protected] ~]# lsof -i:6379
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 10475 root 4u IPv4 88640 0t0 TCP localhost:6379 (LISTEN)

登陆主节点master-node的redis,查看状态
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379 //使用172.16.0.237也可以登录,或者直接使用redis-cli也可以登录
127.0.0.1:6379> info
......
......
#Replication
role:master //节点在集群中的状态
connected_slaves:1 //slave节点的个数
slave0:ip=172.16.0.131,port=6379,state=online,offset=1,lag=1
........

登录从节点slave-node1的redis,查看状态
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> info
.......
.......
#Replication
role:slave
master_host:172.16.0.237
master_port:6379
master_link_status:up
......

4)测试数据同步

主节点master-node上写入新数据
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set name lichao
OK
127.0.0.1:6379> get name
"lichao"

然后到两台从节点上查看是否同步了上面写入的数据
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> get name
"lichao"

redis主从复制默认是读写分离的,即:
主节点上可以读写操作;从节点上只能进行读操作,不能写数据
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set name chenzixiu
(error) READONLY You can‘t write against a read only slave.

5)主从切换

5.1)停止主节点master-node的redis
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379 shutdown
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused
Could not connect to Redis at 127.0.0.1:6379: Connection refused

将从节点slave-node1的redis设成主redis
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379 slaveof NO ONE //这条命了只是临时将该节点设置为主节点;当redis重启后,就会失效;可以登录redis,通过info信息查看!
OK
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379 //变为主redis后,slave-node1就可以进行写入操作了
127.0.0.1:6379> set name chenzixiu
OK
127.0.0.1:6379> info
......
#Replication
role:master //可知已经变成master主节点了
connected_slaves:0
master_repl_offset:0

这时候master-node节点已经故障了,此时slave-node1已经变成主redis了
配置修改为slave-node1

5.2)原来的主redis恢复正常了,要重新切换回去
比如原来的主redis节点master-node现在恢复了
[[email protected] ~]# /etc/init.d/redis start
Starting Redis server...
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> info
......
#Replication
role:master 从节点slave-node1在master-node故障期间临时变为主节点
connected_slaves:0
......

那么现在要重新将主节点切换回去。步骤如下:

a)登录临时切换的主节点slave-node1
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set name chenchen
OK
127.0.0.1:6379> get name
"chenchen"
127.0.0.1:6379> save //将数据保存
OK

b)将现在的主redis(即slave-node1节点,临时设置的主节点)根目录下app文件和dump.rdb文件拷贝覆盖到原来主redis的根目录(覆盖前将原来主redis下的持久化文件备份下)
[[email protected] ~]# rsync -e "ssh -p22" -avpgolr /var/redis/redis/dump.rdb 172.16.0.237:/var/redis/redis/
[[email protected] ~]# rsync -e "ssh -p22" -avpgolr /var/redis/redis/appendonly.aof 172.16.0.237:/var/redis/redis/

c)重启原来的主redis(即master-node节点)
[[email protected] ~]# /etc/init.d/redis stop
[[email protected] ~]# /etc/init.d/redis start

d)在现在的主redis(即slave-node1)中切换(或者直接重启该节点的redis,因为redis.conf文件中已经配置了;如果不想重启redis,就使用下面的命令)
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379 slaveof 172.16.0.237 6379
OK

e)登录原来的主redis(也就是master-node)查看
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> info
.......
#Replication
role:master
connected_slaves:1
slave0:ip=172.16.0.131,port=6379,state=online,offset=1,lag=0
master_repl_offset:1
......

注意事项
如果使用主从复制,那么要确保你的master激活了持久化,或者确保它不会在当掉后自动重启,原因:
a)slave是master的完整备份,因此如果master通过一个空数据集重启,slave也会被清掉。
b)在配置redis复制功能的时候,如果主数据库设置了密码,需要在从数据的配置文件中通过masterauth参数设置主数据库的密码,这样从数据库在连接
主数据库时就会自动使用auth命令认证了。相当于做了一个免密码登录。

原文地址:http://blog.51cto.com/13120271/2177311

时间: 2024-08-03 12:57:51

redis的主从配置与故障切换恢复操作的相关文章

redis哨兵主从配置

REDIS哨兵主从配置 环境描述操作系统:CentOS 5.10 x64硬件配置:阿里云8核8G100G硬盘.IP地址:10.253.2.32 [默认主]IP地址:10.253.5.158[默认从]版本号:redis-2.8 Redis安装部署 Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集.(difference)等,还支持多种排序功能.所以Redis

docker Redis的主从配置

redis是k-v型nosql数据库,支持字符串(string).列表(list).集合(set).散列(hash).有序集合(zset:形如member:score的散列集合,其中member为成员,score为成员得分,必须为float型数据). 综合使用redis的以上5种数据类型,可以将redis应用于各种场景,比如点赞.投票网站.消息队列.分布式锁(使用setnx指令,该指令只有在key不存在的时候,才会执行写入操作).文件分发(没研究过).日志记录等等. redis支持主从配置(拓展

redis学习主从配置

配置slave服务器只需要在配置文件中加入如下配置: slaveof 127.0.0.1 6379 即:slaveof  masterip  masterport redis学习主从配置

Redis的主从配置

一.主从配置过程 关于主从配置的过程,我们这里就不做具体详细解释了,看这个文章,还是不错的: https://www.cnblogs.com/ysocean/p/9143118.html 二.主从复制的原理 这才是我们的主要问题,我们来看一下 Redis的复制功能分为同步(sync)和命令传播(command propagate)两个操作. ①.旧版同步 当从节点发出 SLAVEOF 命令,要求从服务器复制主服务器时,从服务器通过向主服务器发送 SYNC 命令来完成.该命令执行步骤: 1.从服务

Docker下redis的主从配置

1.拉取redis镜像docker pull redis2.启动3个redis容器服务,分别使用到6379.6380.6381端口docker run --name redis-6379 -p 6379:6379 -d redisdocker run --name redis-6380 -p 6380:6379 -d redisdocker run --name redis-6381 -p 6381:6379 -dredis3.查看容器[[email protected] ~]$ docker

NoSQL -- redis 安装 主从 配置详解 常用命令

Redis 也是key-value存储系统,官方站点 http://redis.io,但相对于memcache,有如下优势: 1.支持更多地value类型(string.hash.lists.sets.sorted sets等): 2.支持数据持久化,预防服务重启后需要重新存储: redis 有两种文件格式:全量数据(RDB=redis database).增量请求(aof=append only file). 前者是将内存中的数据写进磁盘,便于下次读取文件时直接进行加载,快照形式: 后者是将r

linux下如何安装配置redis及主从配置

redis是一种非关系型数据存储工具,这区别于传统的关系型数据库(像MySQL等),类似于memcache,并且其内部集成了对list(链表).set(集合)的操作,可以很方便快速的处理数据(像插入.删除list取交集 并集 差集等),这极大的减轻了底层数据库的压力,并且给用户更快的响应速度. redis的优点:支持主从备份,操作指令丰富,支持异步的数据持久化 一丶使用 将 redis 安装到 /usr/local/webserver/redis 1.下载安装包 wget http://redi

Redis之-主从配置

集群的作用:1,主从备份 防止主库down机2,读写分离,分担master压力3,任务分离,如从服务器分担备份的工作 大概同步原理:1,slave启动发现需要连接master,那么sync自动同步一下2,master dump出一份rdb文件给slave3,master新产生的数据,通过缓冲aof文件4,然后通过replicationfeedsalves进程保持联系: master配置:1,关闭rdb快照--备份交给slave2,开启aof slave配置:1,声明slave-of2,配置密码-

Redis——学习之路四(初识主从配置)

首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务器配置如下: 1.先找到配置redis.windows-service.config文件修改port 6379 为port 6380 2.然后配置master服务器地址:slaveof 127.0.0.1 6379,然后主服务有密码还需要配置密码 masterauth CeshiPassword(本