主从复制(master/slave)

主机(master)数据更新后根据配置和策略,自动同步到备机(slave)。通过主从复制,能够实现读写分离容灾恢复

实现主从复制非常简单,只需要在从(slave)执行slaveof <masterip> <masterport>命令即可,也可以在配置文件redis.conf中配置启动redis时自动实现主从复制。

特别注意:如果master设置了requirepass,则slave必须设置masterauth,否则会复制失败

################################# REPLICATION #################################

# Master-Slave replication. Use slaveof to make a Redis instance a copy of
# another Redis server. A few things to understand ASAP about Redis replication.
#
# 1) Redis replication is asynchronous, but you can configure a master to
# stop accepting writes if it appears to be not connected with at least
# a given number of slaves.
# 2) Redis slaves are able to perform a partial resynchronization with the
# master if the replication link is lost for a relatively small amount of
# time. You may want to configure the replication backlog size (see the next
# sections of this file) with a sensible value depending on your needs.
# 3) Replication is automatic and does not need user intervention. After a
# network partition slaves automatically try to reconnect to masters
# and resynchronize with them.
#
# slaveof <masterip> <masterport> # If the master is password protected (using the "requirepass" configuration
# directive below) it is possible to tell the slave to authenticate before
# starting the replication synchronization process, otherwise the master will
# refuse the slave request.
#
# masterauth <master-password>
1.单主机上启动3个Redis实例来演示1主2从

step1:从/etc/redis.conf拷贝3份配置文件,并修改配置,分别用于3个实例

[root@VM_0_171_centos ~]# ls -l
总用量 152
-rw-r--r-- 1 root root 46755 4月 4 15:35 redis-6379.conf
-rw-r--r-- 1 root root 46746 4月 4 15:35 redis-6380.conf
-rw-r--r-- 1 root root 46777 4月 4 15:37 redis-6381.conf
[root@VM_0_171_centos ~]#

配置项

port 6380
daemonize yes
pidfile "redis-6380.pid"
logfile "redis-6380.log"
dbfilename "dump-6380.rdb"
slaveof 127.0.0.1 6379

step2:分别启动3个Redis示例,查看进程发现3个进程都已经启动,连接master查看replication信息发现6379为master,6780、6381为slave

[root@VM_0_171_centos ~]# redis-server redis-6379.conf
[root@VM_0_171_centos ~]# redis-server redis-6380.conf
[root@VM_0_171_centos ~]# redis-server redis-6381.conf
[root@VM_0_171_centos ~]# ps -ef | grep redis
root 30870 1 0 22:37 ? 00:00:00 redis-server 127.0.0.1:6379
root 30881 1 0 22:37 ? 00:00:00 redis-server 127.0.0.1:6380
root 30885 1 0 22:37 ? 00:00:00 redis-server 127.0.0.1:6381
root 30890 28045 0 22:37 pts/0 00:00:00 grep --color=auto redis
[root@VM_0_171_centos ~]# redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=29,lag=0
slave1:ip=127.0.0.1,port=6381,state=online,offset=29,lag=1
master_repl_offset:29
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:28
127.0.0.1:6379>

step3:验证,连接6379,保存k0;退出,连接6380,查询k0,得到刚才保存的v0,主从复制成功。

127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "k5"
4) "k4"
5) "k3"
6) "k6"
127.0.0.1:6379> set k0 v0
OK
127.0.0.1:6379> exit
[root@VM_0_171_centos ~]# redis-cli -p 6380
127.0.0.1:6380> keys *
1) "k0"
2) "k6"
3) "k5"
4) "k2"
5) "k4"
6) "k3"
7) "k1"
127.0.0.1:6380> get k0
"v0"
127.0.0.1:6380>
2.sentinel哨兵模式

sentinel能够后台监控主机是否故障,如果故障了根据投票自动将slave转换为master,master恢复后会自动变成slave。

监控同一master的sentinel自动集群,协同工作。

示例

step1:复制/etc/redis-sentinel.conf,修改配置

#以守护进程启动
daemonize yes
#sentinel默认端口
port 26379
#工作目录
dir "/tmp"
#监控的master,最后的1表示1个sentinel认为master短线就干预,进行主从切换
sentinel monitor mymaster 127.0.0.1 6379 1
#master30000毫秒无响应,sentinel就认为它已经断线
sentinel down-after-milliseconds mymaster 30000
#在执行故障转移时, 最多可以有多少个slave同时对新的master进行同步, 这个数字越小, 完成故障转移所需的时间就越长,但越大就意味着越多的slave因为复制而不可用。可以通过将这个值设为 1 来保证每次只有一个slave处于不能处理命令请求的状态。
sentinel parallel-syncs mymaster 1
#故障转移的毫秒数
sentinel failover-timeout mymaster 180000
#日志文件
logfile /var/log/redis/sentinel.log

step2:后台启动sentinel(daemonize yes)

[root@VM_0_171_centos ~]# redis-sentinel redis-sentinel.conf
[root@VM_0_171_centos ~]# ps -ef | grep redis
root 2169 1 0 23:33 ? 00:00:00 redis-sentinel *:26379 [sentinel]
root 2180 28045 0 23:33 pts/0 00:00:00 grep --color=auto redis
root 31340 1 0 22:43 ? 00:00:01 redis-server 127.0.0.1:6379
root 31344 1 0 22:43 ? 00:00:01 redis-server 127.0.0.1:6380
root 31349 1 0 22:43 ? 00:00:01 redis-server 127.0.0.1:6381
[root@VM_0_171_centos ~]#

step3:停止mster,查看sentinel.log发现6380成了新的master,连接6380查看replication信息进行验证

[root@VM_0_171_centos ~]# redis-cli -p 6379
127.0.0.1:6379> shutdown
not connected> exit
                _._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.3 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 2169
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-' 2169:X 04 Apr 23:33:26.845 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
2169:X 04 Apr 23:33:26.845 # Sentinel ID is 5a7283b3989cece81dea1e770e1e83b3ee174004
2169:X 04 Apr 23:33:26.845 # +monitor master mymaster 127.0.0.1 6381 quorum 1
2169:X 04 Apr 23:34:16.908 # +sdown master mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:16.908 # +odown master mymaster 127.0.0.1 6381 #quorum 1/1
2169:X 04 Apr 23:34:16.908 # +new-epoch 4
2169:X 04 Apr 23:34:16.908 # +try-failover master mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:16.920 # +vote-for-leader 5a7283b3989cece81dea1e770e1e83b3ee174004 4
2169:X 04 Apr 23:34:16.920 # +elected-leader master mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:16.920 # +failover-state-select-slave master mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:17.020 # +selected-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:17.020 * +failover-state-send-slaveof-noone slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:17.091 * +failover-state-wait-promotion slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:18.048 # +promoted-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:18.048 # +failover-state-reconf-slaves master mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:18.117 * +slave-reconf-sent slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:19.093 * +slave-reconf-inprog slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:19.094 * +slave-reconf-done slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:19.176 # +failover-end master mymaster 127.0.0.1 6381
2169:X 04 Apr 23:34:19.176 # +switch-master mymaster 127.0.0.1 6381 127.0.0.1 6380
2169:X 04 Apr 23:34:19.176 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380
2169:X 04 Apr 23:34:19.176 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380
2169:X 04 Apr 23:35:30.920 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380
[root@VM_0_171_centos ~]#
[root@VM_0_171_centos ~]# redis-cli -p 6380
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6381,state=online,offset=37410,lag=0
master_repl_offset:37410
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:7475
repl_backlog_histlen:29936
127.0.0.1:6380>

step4:恢复6379端口的redis实例,发现它成了slave

[root@VM_0_171_centos ~]# redis-server redis-6379.conf
[root@VM_0_171_centos ~]# redis-cli -p 6379
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6380
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:45049
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379>
3.特别说明
1.如果master设置了requirepass,则slave需要设置masterauth

2.slave默认是read only模式,不能写入数据

3.master宕机后,slave正常工作,master恢复后会自动与salve连接

4.slave宕机后,master及其它slave(如果slave>1)继续工作,slave恢复后需要手动通过slaveof <masterip> <masterport>连接(或者在redis.conf中配置了slave of)

5.slaveof no one可以将slave变成master供其它slave连接

Redis-05.主从复制与Sentinel的更多相关文章

  1. Redis实现主从复制以及sentinel的配置

    redis 是一个高性能的 key-value 数据库. redis 的出现,很大程度补偿了 memcached 这类 keyvalue 存储的不足,在部分场合可以对关系数据库起到很 好的补充作用.它 ...

  2. Redis 主从、哨兵Sentinel、Jedis

    Redis 主从.哨兵Sentinel.Jedis 2017年02月15日 15:52:48 有且仅有 阅读数 6183 文章标签: redis主从sentineljedis 更多 分类专栏: 7/1 ...

  3. Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)

    Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3)哨兵模式来进行主从替换以及故障恢复. 一.sentinel哨兵模式介绍Sentinel ...

  4. [转]Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)

    Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3)哨兵模式来进行主从替换以及故障恢复. 一.sentinel哨兵模式介绍Sentinel ...

  5. Redis哨兵模式(sentinel)部署记录(主从复制、读写分离、主从切换)

    部署环境: CentOS7.5  192.168.94.11 (master) 192.168.94.22 (slave0) 192.168.94.33 (slave1) 192.168.94.44 ...

  6. redis的主从复制,以及使用sentinel自动处理主机宕机问题,集群

    以下部分想看懂得有一定的redis基础,且步骤是连贯的,错一步都不行.redis运行多个实例,不懂得自行百度. 1. redis主从同步 原理: 从服务器向主服务器发送 SYNC 命令. 接到 SYN ...

  7. contos7下安装redis&redis的主从复制的配置&redis 哨兵(sentinel)

    一.centos7下安装redis 1.解压 redis-5.0.5.tar.gz 压缩文件 解压命令为: .tar.gz -C redis 解压后进入 redis 工作目录,进入 redis-5.0 ...

  8. Redis的主从复制与Redis Sentinel哨兵机制

    1    Redis的主从复制 1.1   什么是主从复制 持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损 ...

  9. redis主从复制和sentinel配置高可用

    一:redis主从配置1.环境准备 master : 192.168.50.10 6179 slave1: 192.168.50.10 6279 slave2: 192.168.50.10 63792 ...

  10. 深入理解Redis高可用方案-Sentinel

    Redis Sentinel是Redis的高可用方案.是Redis 2.8中正式引入的. 在之前的主从复制方案中,如果主节点出现问题,需要手动将一个从节点升级为主节点,然后将其它从节点指向新的主节点, ...

随机推荐

  1. jsp请求java返回pdf、excel与word

    1,返回pdf关键代码 /** * @todo * @param * @date 2019年3月8日 * @author yanan */ @RequestMapping("/getPdf& ...

  2. 微信小程序登录流程

    小程序登录流程 参考 app.js需要做的 1,首先通过wx.login()拿到code,成功之后,发送数据,请求接口,把code发送给后端,换区openid,sessionKey,unionId,把 ...

  3. node 常用模块及方法fs,url,http,path

    http://www.cnblogs.com/mangoxin/p/5664615.html https://www.liaoxuefeng.com/wiki/001434446689867b2715 ...

  4. jmeter安装与使用

    1.下载安装Jmeter.JDK Jmeter官网下载地址: http://jmeter.apache.org/download_jmeter.cgi JDK官网下载地址: http://www.or ...

  5. Render Functions & JSX

    Render Functions & JSX Basics Vue recommends using templates to build your HTML in the vast majo ...

  6. Idea搭建SpringMVC框架(初次接触)

    公司转Java开发,做的第一个项目是SpringMVC框架,因为底层是同事封装,等完成整个项目,对SpringMVC框架的搭建还不是很了解,所以抽时间不忙的时候自己搭建了一个SpringMVC框架. ...

  7. 跟踪SQL

    在数据库中,找到以下页面,并选择事件中的Tsql下的bath...与stm...

  8. ThinkPhp5 出现访问出现 No input file specified. 问题

    今天复习一下ThinkPhp5,在官网下载了核心版,windows下配置了虚拟域名之后出现了神奇的现象 如下图 直接访问域名能访问到index模块下的index控制器下的index方法 但是我输入完整 ...

  9. Java:编码与乱码问题

    一.为什么要编码? 由于人类的语言太多,因而表示这些语言的符号太多,无法用计算机的一个基本的存储单元----byte来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解. byte一个字节即8 ...

  10. javafx安装

    可在官网http://efxclipse.bestsolution.at/ 下载 其中http://efxclipse.bestsolution.at/install.html#all-in-one ...