单纯的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. XmlNodeList循环读取节点值

    foreach (XmlNode item in XmlNodeList) { string oid = item.SelectSingleNode("oid").InnerTex ...

  2. 认识Python

    web框架:Django.Tornado.Flask Twisted:复杂的异步网络框架 指定解释器 #!/usr/bin/env python #!/usr/bin/python print (&q ...

  3. 优先队列(stl)

    优先队列是堆排的一种优化,我学习的是使用stl库的堆排. 基本操作有: 1.push将一个元素入队. 2.pop将一个元素出队. 3.top返还值为队头元素. 4.empty判断队列是否为空,为空返回 ...

  4. mybatis中#和$符号的区别

    mybatis做为一个轻量级ORM框架在许多项目中使用,因其简单的入门受到了广大开发者的热爱.在近期项目中再做一个相关的开发,碰到了#.$符号这样的问题,之前没怎么注意过,通过学习之后,有了点感悟,分 ...

  5. windows下redis启动报Creating Server TCP listening socket *:6379: bind: No such file or directory

    解决方法: 按顺序输入如下命令就可以连接成功 # redis-cli.exe# > shutdown# > exit# redis-server.exe redis.windows.con ...

  6. LinQ实战学习笔记(三) 序列,查询操作符,查询表达式,表达式树

    序列 延迟查询执行 查询操作符 查询表达式 表达式树 (一) 序列 先上一段代码, 这段代码使用扩展方法实现下面的要求: 取进程列表,进行过滤(取大于10M的进程) 列表进行排序(按内存占用) 只保留 ...

  7. android Adapter剖析理解

    UI控件都是跟Adapter(适配器)打交道的 Adapter: 是用来帮助控件填充数据的中间桥梁 (在开发中大多数Textview控件的内容是依靠数据库传递并显示的如:新闻类) Adapter: 将 ...

  8. 利用Android多进程机制来分割组件

    android对于内存有一定的限制,很多手机上对内存的限制是完全不同的.我们的应用程序其实就是一个进程,这个进程是完全独立的,这个进程分配的内存是一定的,所以我们经常会遇到OOM的问题.但,你可能不知 ...

  9. 同步推是如何给未越狱的IOS设备安装任意IPA的?

    工作准备: 1. 准备一台MAC 2. 拥有一份299企业证书, 然后按照下面步骤操作: 1. 把xxxx.ipa改成xxx.zip, 解压缩得到Payload文件夹 2. 替换Payload里的em ...

  10. Android项目实战(十六):QQ空间实现(一)—— 展示说说中的评论内容并有相应点击事件

    大家都玩QQ空间客户端,对于每一个说说,我们都可以评论,那么,对于某一条评论: 白雪公主 回复 小矮人 : 你们好啊~ 我们来分析一下: .QQ空间允许我们 点击 回复人和被回复人的名字就可以进入对于 ...