单纯的master-slave不能称之为集群,只能叫做读写分离。此案例只针对master为单点服务,且程序端写死master为可写,slave为只读。若master宕机则不可用,若主从未开启持久化,不要立刻重启master否则会flush掉slave的数据。此方案适用于master需要停机而不让内存的数据丢失。

若集群为高可用方案如sentinel,则无需手动切换,sentinel自动触发故障转移,无需客户端触发操作。

环境描述:

主redis:119.29.36.237 6379

主redis:119.29.36.237 6380

一、主从配置

1、将主从redis配置文件redis.conf中的aemonize no 改为 yes

daemonize yes
pidfile /var/run/redis_6379.pid
port 6379

dir /var/redis/6379

2、修改从redis配置文件redis.conf中的port 6379 改为 6380,添加slaveof 119.29.36.237  6379

daemonize yes
slaveof 119.29.36.237 6379
pidfile /var/run/redis_6380.pid
port 6380

创建文件   mkdir  -p  /var/redis/6379  /var/redis-slave/6380

3、启动主从服务

主redis:

redis-server  /etc/redis/6379.conf

从redis:

redis-server  /etc/redis/slave.conf

4、测试数据同步

主redis:

redis-cli  -p 6379
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> set name  bat
OK
127.0.0.1:6379> get name
"bat"

从redis:

redis-cli -h 127.0.0.1 -p 6380
127.0.0.1:6380> get name
"bat"

5、默认是读写分离的

在从redis:

127.0.0.1:6380> set car bmw
(error) READONLY You can't write against a read only slave.

二、主从切换

1、停止主redis

#ps aux |grep  redis
root      2931  0.0  0.1  35088  1816 ?        Ssl  11:05   0:00 redis-server *:6379              
root      2937  0.0  0.1  35088  1808 ?        Ssl  11:05   0:00 redis-server *:6380               
root      2947  0.0  0.0  10800   968 pts/2    S+   11:07   0:00 redis-cli -p 6379
root      2951  0.0  0.0  10800   972 pts/0    S+   11:08   0:00 redis-cli -h 127.0.0.1 -p 6380
root      2956  0.0  0.0   5504   724 pts/3    S+   11:09   0:00 grep redis
#kill  2931

#redis-cli -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused

2、将在从上将从redis设成主redis

# redis-cli -p 6380 slaveof NO ONE
OK

3、测试从redis是否切换从主redis

#redis-cli -p 6380

127.0.0.1:6380> KEYS *
1) "name"
127.0.0.1:6380> get name
"bat"
127.0.0.1:6380> set car bmw

OK

127.0.0.1:6380> set  person  man
OK
127.0.0.1:6380> kEYS *
1) "name"
2) "person"
3) "car"

4、原来的主redis恢复正常了,要重新切换回去

1)将现在的主redis的数据进行保存

#redis-cli -p 6380

127.0.0.1:6380> KEYS *
1) "name"
2) "person"
3) "car"
127.0.0.1:6380> save
OK

2)将现在的主redis根目录下dump.rdb文件拷贝覆盖到原来主redis的根目录

cp  /var/redis-slave/6380/dump.rdb   /var/redis/6379/
cp: overwrite `/var/redis/6379/dump.rdb'? y

3)启动原来的主redis

redis-server  /etc/redis/6379.conf

4)在现在的主redis中切换

# redis-cli -p 6380 slaveof 119.29.36.237 6379
OK

测试是否切换成功

redis-cli  -p 6379
127.0.0.1:6379> KEYS *
1) "person"
2) "car"
3) "name"
127.0.0.1:6379> set test  master
OK
127.0.0.1:6379> KEYS *
1) "person"
2) "car"
3) "name"
4) "test"


127.0.0.1:6380> kEYS *
1) "test"
2) "name"
3) "car"
4) "person"
127.0.0.1:6380> set test slave
(error) READONLY You can't write against a read only slave.

redis 非集群的主从配置及切换的更多相关文章

  1. redis集群(主从配置)

    市面上太多kv的缓存,最常用的就属memcache了,但是memcache存在单点问题,不过小日本有复制版本,但是使用的人比较少,redis的出现让kv内存存储的想法成为现实.今天主要内容便是redi ...

  2. Redis Cluster集群搭建与配置

    Redis Cluster是一种服务器sharding分片技术,关于Redis的集群方案应该怎么做,请参考我的另一篇博客http://www.cnblogs.com/xckk/p/6134655.ht ...

  3. redis搭建集群和主从

    说明 Redis集群至少需要3个节点,来支持投票容错机制,每个节点都有从节点,所有最少是6个服务(3个主3个从) 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384 ...

  4. Redis 集群_主从配置_哨兵模式

    首先:slaveof 可以在[从]服务器启动一个service服务,直接将[从]服务器定义为[从Redis] redis-server --slaveof <master-ip> < ...

  5. Redis集群_主从配置

    链接地址http://www.2cto.com/database/201502/377069.html 收藏备用. Redis主从配置(Master-Slave) 一. Redis Replicati ...

  6. Redis cluster 集群部署和配置

    目录 一.集群简介 cluster介绍 cluster原理 cluster特点 应用场景 二.集群部署 环境介绍 节点部署 启动集群 三.集群测试 一.集群简介 cluster介绍 redis clu ...

  7. MySql集群FAQ----mysql主从配置与集群区别、集群中需要多少台计算机呢?为什么? 等

    抽取一部分显示在这里,如下, What's the difference in using Clustervs using replication? 在复制系统中,一个MySQL主服务器会更新一个或多 ...

  8. 【Spring系列】Spring mvc整合redis(非集群)

    一.在pom.xml中增加redis需要的jar包 <!--spring redis相关jar包--> <dependency> <groupId>redis.cl ...

  9. MongoDB ReplacaSet & Sharding集群安装 配置 和 非集群情况的安装 配置 -摘自网络

    单台机器做sharding --单机配置集群服务(Sharding) --shard1_1 mongod --install --serviceName MongoDBServerShard1 --s ...

随机推荐

  1. 2016C#模拟谷歌Google登陆Gmail&Youtube小案例

    之所以写这个,是因为本来想写一个Youtube刷评论的工具,把登录做出来了,后面就没继续做下去. 涉及到基本的HttpWatch的应用以及Fiddler的应用(Fd主要用来排查问题,通过对比 浏览器和 ...

  2. 关于迭代器中IEnumerable与IEnumerator的区别

    首先是IEnumerable与IEnumerator的定义: 1.IEnumerable接口允许使用foreach循环,包含GetEnumerator()方法,可以迭代集合中的项. 2.IEnumer ...

  3. 自己通过Cygwin编译的windows下的redis3.2.6

    采用方法:https://my.oschina.net/maxid/blog/186506 方法中在3.2.6未找到src/redis.h文件 未修改 方法中 /deps/hiredis/net.c ...

  4. 重新想象 Windows 8.1 Store Apps (80) - 控件增强: WebView 之基本应用, POST 数据, 与 JavaScript 交互

    [源码下载] 重新想象 Windows 8.1 Store Apps (80) - 控件增强: WebView 之基本应用, POST 数据, 与 JavaScript 交互 作者:webabcd 介 ...

  5. Hibernate+maven+mysql

    最近在研究hibernate,想建立一个简单的Hibernate+maven+mysql工程,网上找了一大堆的示例,要么看不懂结构,要么就是缺少必要文件.总之都没有成功,结果无意在一个外文网上找了一个 ...

  6. 基于 ANSIBLE 自动化运维实践

    摘要:运维这个话题很痛苦,你做任何的产品都离不开运维.不管你用什么语言.什么平台.什么技术,真正能够决定你产品成熟度的很有可能就是你运维的能力.取自 云巴 CEO 张虎在 ECUG 大会上的分享. 云 ...

  7. [TypeScript] 建置输出单一JavaScript档案(.js)与Declaration档案(.d.ts)

    [TypeScript] 建置输出单一JavaScript档案(.js)与Declaration档案(.d.ts) 问题情景 开发人员使用Visual Studio来开发TypeScript,可以很方 ...

  8. GitHub上我收藏Java及Android的项目Demo

    接触编程不久但浏览频率最高的还是GitHub毕竟它真的是程序员必不可少的新世界. (2016/9/23更新) 静态更新,很强势你值得拥有 更新资源不需要重新安装APK (2016.9.10更新) ht ...

  9. ABAP - 3D Graphs with SAP

    在ABAP设计中,程序员经常需要用图形显示报表的统计结果,我们可以使用函数:GRAPH_MATRIX_3D来达到图形显示.GRAPH_MATRIX_3D函数参数很多,但只有三个参数必须需要输入:Tab ...

  10. 解决ArcGIS10.3属性表中文乱码问题

    问题描述:在10.3刚出为不久,就发现有时属性表会出现中文乱码的问题. 解决方法:在Cmd命令行中输入以下命令: reg add HKEY_CURRENT_USER\Software\ESRI\Des ...