主从复制:主机更新数据后,根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slaver以读为主。redis支持主从复制。

下面通过实例来讲解主从复制的四个模式:

一、一主多从:一个主机。多个从机

1、首先复制三个redis.conf的文件修改为redis6379.conf、redis6380.conf、redis6381.conf

2、然后修改配置文件

1)daemonize no 修改为daemonize yes 将redis设置为守护进程

2)pidfile /var/run/redis.pid,修改pid文件名称

3)port 6379分别修改为port 6379、port 6380、port 6381

4)dbfilename dump.rdb 修改rdb文件名称

3、分别启动这三个redis实例

D:\Program myself\redis2.>redis-cli.exe -h 127.0.0.1 -p
redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
D:\Program myself\redis2.>redis-cli.exe -h 127.0.0.1 -p
redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
D:\Program myself\redis2.>redis-cli.exe -h 127.0.0.1 -p
redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:

4、配置从机

配置6380为从机

D:\Program myself\redis2.>redis-cli.exe -h 127.0.0.1 -p
redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
redis 127.0.0.1:> SLAVEOF 127.0.0.1
OK
redis 127.0.0.1:> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:
master_link_status:up
master_last_io_seconds_ago:
master_sync_in_progress:
slave_priority:
slave_read_only:
connected_slaves:
redis 127.0.0.1:>

配置6381为从机

D:\Program myself\redis2.>redis-cli.exe -h 127.0.0.1 -p
redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
redis 127.0.0.1:> SLAVEOF 127.0.0.1
OK
redis 127.0.0.1:> get k1
"v1"
redis 127.0.0.1:> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:
master_link_status:up
master_last_io_seconds_ago:
master_sync_in_progress:
slave_priority:
slave_read_only:
connected_slaves:
redis 127.0.0.1:>

5、主机写入数据,从机就可以读取数据了

redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
slave0:127.0.0.1,,online
slave1:127.0.0.1,,online
redis 127.0.0.1:> set k1 v1
OK
redis 127.0.0.1:> mset k2 v2 k3 v3
OK
redis 127.0.0.1:> get k1
"v1"
redis 127.0.0.1:>

从机读取数据:

redis 127.0.0.1:> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:
master_link_status:up
master_last_io_seconds_ago:
master_sync_in_progress:
slave_priority:
slave_read_only:
connected_slaves:
redis 127.0.0.1:> get k1
"v1"
redis 127.0.0.1:>

可以看到从机读到k1数据。

注意:1、如果配置从机后,主机数据会自动复制到从机。

2、如果主机shutdown,从机保持不变,等待主机,此时如果主机恢复,从机恢复连接

3、如果从机shutdown,主机保持不变,如果此时从机恢复,需要从机重新配置slaveof

4、从机不支持写操作

二、多主多从:多个主机多个从机

根据上面介绍,如果一个主机后跟着多个从机,这时候一个主机负担太重,这时候可以设置多个主机,多个从机。上一个slave可以是下一个slave的master,slave同样可以接受其他slave的连接和同步请求,那么slave作为下一个master,可以减轻master的写压力,

如下:可将6381修改为6380的从机:SLAVEOF 127.0.0.1 6380

redis 127.0.0.1:> SLAVEOF 127.0.0.1
OK
redis 127.0.0.1:> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:
master_link_status:up
master_last_io_seconds_ago:
master_sync_in_progress:
slave_priority:
slave_read_only:
connected_slaves:
redis 127.0.0.1:>

查看6380的配置:角色还是slave,但是还是跟着一个slave6381

redis 127.0.0.1:> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:
master_link_status:up
master_last_io_seconds_ago:
master_sync_in_progress:
slave_priority:
slave_read_only:
connected_slaves:
slave0:127.0.0.1,,online
redis 127.0.0.1:>

三、从机转为主机

在主从模式下,如果主机挂了,这时候从机会保持不变,等待主机恢复。这时候我们可以用slaveof no one制定一个主机,然后使用slaveof 将其他从机转到新指定的主机下,在这之后,即使之前挂了的主机恢复,也不会改变重新获得这些从机。

主机6379、从机6380,从机6381

1、主机挂了

redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
slave0:127.0.0.1,,online
slave1:127.0.0.1,,online
redis 127.0.0.1:> SHUTDOWN
redis 127.0.0.1:> exit D:\Program myself\redis2.>

2、从机6380转换为主机

redis 127.0.0.1:> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:
master_link_status:down
master_last_io_seconds_ago:-
master_sync_in_progress:
master_link_down_since_seconds:
slave_priority:
slave_read_only:
connected_slaves:
redis 127.0.0.1:> SLAVEOF no one
OK
redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
redis 127.0.0.1:>

3、从机6381的主机修改为6380

redis 127.0.0.1:> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:
master_link_status:down
master_last_io_seconds_ago:-
master_sync_in_progress:
master_link_down_since_seconds:
slave_priority:
slave_read_only:
connected_slaves:
redis 127.0.0.1:> SLAVEOF 127.0.0.1
OK
redis 127.0.0.1:>

4、6379恢复,此时没有从机了

D:\Program myself\redis2.>redis-cli.exe -h 127.0.0.1 -p
redis 127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
redis 127.0.0.1:>

四、哨兵模式

如果主机挂了,这时候需要人为设置主机,哨兵模式下,可以自动的从从机中通过投票的方式选出一个新的主机,其他从机自动的挂到该主机下。

1、新建sentinel.conf文件

1表示通过投票的方式选出主机

sentinel monitor 被监控的主机的名字 127.0.0.1  

2、启动哨兵模式

redis-sentinel sentinel.conf

3、主机6379shutdown

4、哨兵模式自动选出一个主机,将其他从机挂到该主机下

5、挂掉的主机恢复,哨兵发现后将该主机转化为从机,挂到新建立的主机下

最新文章

  1. 如何写出高质量的技术博客 这边文章出自http://www.jianshu.com/p/ae9ab21a5730 觉得不错直接拿过来了 好东西要大家分享嘛
  2. J2EE web项目中解决所有路径问题
  3. QuickRun-快速运行助手
  4. java中的几种取整函数
  5. 2013级软件工程GitHub账号信息
  6. canvas小知识
  7. CXF框架入门实例
  8. C语言Printf格式
  9. [Swift]LeetCode669. 修剪二叉搜索树 | Trim a Binary Search Tree
  10. 【Vagrant】-NO.130.Vagrant.1 -【Vagrant】
  11. 内存管理cpuset,mempolicy[原理]
  12. mydate97时间控件的使用
  13. sublime text plugins
  14. bind的封装
  15. Opencv3_Learning
  16. 转:大数据时代快速SQL引擎-Impala
  17. pycharm、idea 2018软件安装教程
  18. [virtualbox] virtualbox 安裝 ubuntu,但 virtualbox 卻無法執行 ubuntu 的快速鍵,解法方式
  19. Python-day-9- RabbitMQ队列
  20. android开发里跳过的坑——android studio打包的APK签名无效

热门文章

  1. dojo中类的继承
  2. XGBoost算法原理小结
  3. Bootstrap 历练实例-轮播(carousel)插件方法
  4. 处理侧滑返回与 ScrollView 手势冲突
  5. nodejs mysql模块简单封装
  6. PAT 乙级 1015
  7. python网络-多任务实现之协程(27)
  8. Codeforces Round #472 A-D
  9. BFS:HDU-1242-Rescue(带守卫的迷宫问题)(优先队列)
  10. 矩阵乘法在hadoop的实现