Redis的复制(Master/Slave)
是什么 :
也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主
能干嘛:
读写分离,容灾恢复
怎么玩:
1.配从(库)不配主(库)
2.从库配置:slaveof 主库IP 主库端口
每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件
Info replication
3.修改配置文件细节操作
拷贝多个redis.conf文件
开启daemonize yes
Pid文件名字
指定端口
Log文件名字
Dump.rdb名字
4.常用3招:
一主二仆
薪火相传
反客为主
在同一台机器的不同端口演示,类似于多台机器
拷贝多份配置文件
- [root@node1 myredis]# cp redis.conf redis6379.conf
- [root@node1 myredis]# cp redis.conf redis6380.conf
- [root@node1 myredis]# cp redis.conf redis6381.conf
- [root@node1 myredis]#
分别修改对应的配置文件
- [root@node1 myredis]# vim redis6379.conf
- [root@node1 myredis]# vim redis6380.conf
- [root@node1 myredis]# vim redis6381.conf
- [root@node1 myredis]#
info replication
- 127.0.0.1:6379> info replication
- # Replication
- role:master
- 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>
- 127.0.0.1:6380> info replication
- # Replication
- role:master
- 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:6380>
- 127.0.0.1:6381> info replication
- # Replication
- role:master
- 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:6381>
一仆二主:
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6380> SLAVEOF 127.0.0.1 6379
OK
127.0.0.1:6380> get k4
"v4"
127.0.0.1:6380>
127.0.0.1:6381> slaveof 127.0.0.1 6379
OK
127.0.0.1:6381> get k1
"v1"
127.0.0.1:6381>
再次输入info replication
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=291,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=291,lag=0
master_repl_offset:291
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:290
127.0.0.1:6379>
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:9
master_sync_in_progress:0
slave_repl_offset:333
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:6380>
读写分离:
slave节点不能写入
- 127.0.0.1:6380> set k6 v6
- (error) READONLY You can't write against a read only slave.
- 127.0.0.1:6380>
主机挂掉时:
127.0.0.1:6379> SHUTDOWN
not connected> exit
You have new mail in /var/spool/mail/root
[root@node1 ~]#
slave节点状态:
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:753
master_link_down_since_seconds:17
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:6380>
主机修复后:
[root@node1 ~]# redis-server /myredis/redis6379.conf
[root@node1 ~]# redis-cli -p 6379
127.0.0.1:6379> set k7 v7
OK
127.0.0.1:6379>
slave节点:
127.0.0.1:6380> get k7
"v7"
127.0.0.1:6380>
在当前这种状体下,主机挂掉后从机不会改变状态,会原地待命
从机down掉之后会需要与主机从新连接,除非写进conf配置文件
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
127.0.0.1:6380> get k7
"v7"
127.0.0.1:6380>
薪火相传:
配置6381的主节点为6380
127.0.0.1:6381> SLAVEOF 127.0.0.1 6380
OK
127.0.0.1:6381>
则此时节点状态为
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=1957,lag=1
master_repl_offset:1957
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:1956
127.0.0.1:6379>
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_repl_offset:2027
slave_priority:100
slave_read_only:1
connected_slaves:1
slave0:ip=127.0.0.1,port=6381,state=online,offset=71,lag=1
master_repl_offset:71
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:70
127.0.0.1:6380>
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6380
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_repl_offset:99
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:6381>
反客为主:
SLAVEOF no one:使当前数据库停止与其他数据库的同步,转成主数据库
127.0.0.1:6380> SLAVEOF no one
OK
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6381,state=online,offset=267,lag=0
master_repl_offset:267
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:266
127.0.0.1:6380>
复制原理:
Slave启动成功连接到master后会发送一个sync命令
Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕后,master将传送整个数据文件到slave,以完成一次完全同步
全量复制:slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步,但是只要是重新连接master,一次完全同步(全量复制)将被自动执行
哨兵模式(sentinel):
是什么:
反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。
怎么玩:
调整结构,6379带着80,81
- 127.0.0.1:6380> SLAVEOF 127.0.0.1 6379
- OK
- 127.0.0.1:6380> info repication
- 127.0.0.1:6380> info replication
- # Replication
- role:slave
- master_host:127.0.0.1
- master_port:6379
- master_link_status:up
- master_last_io_seconds_ago:7
- master_sync_in_progress:0
- slave_repl_offset:3833
- slave_priority:100
- slave_read_only:1
- connected_slaves:0
- master_repl_offset:225
- repl_backlog_active:1
- repl_backlog_size:1048576
- repl_backlog_first_byte_offset:2
- repl_backlog_histlen:224
- 127.0.0.1:6380>
- 127.0.0.1:6381> slaveof 127.0.0.1 6379
- OK
- 127.0.0.1:6381> info replication
- # Replication
- role:slave
- master_host:127.0.0.1
- master_port:6379
- master_link_status:up
- master_last_io_seconds_ago:5
- master_sync_in_progress:0
- slave_repl_offset:3861
- 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:6381>
自定义的/myredis目录下新建sentinel.conf文件,名字觉不能错
[root@node1 myredis]# touch sentinel.conf
sentinel.conf 文件的内容:(末尾的1表示谁的票数多余1票,谁就是新的领导)
sentinel monitor host6379 127.0.0.1 6379 1
启动哨兵:
使用 redis-sentinel /myredis/sentinel.conf 启动
- [root@node1 myredis]# redis-sentinel /myredis/sentinel.conf
- 9871:X 30 Nov 09:22:52.073 * Increased maximum number of open files to 10032 (it was originally set to 1024).
- _._
- _.-``__ ''-._
- _.-`` `. `_. ''-._ Redis 3.0.4 (00000000/0) 64 bit
- .-`` .-```. ```\/ _.,_ ''-._
- ( ' , .-` | `, ) Running in sentinel mode
- |`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
- | `-._ `._ / _.-' | PID: 9871
- `-._ `-._ `-./ _.-' _.-'
- |`-._`-._ `-.__.-' _.-'_.-'|
- | `-._`-._ _.-'_.-' | http://redis.io
- `-._ `-._`-.__.-'_.-' _.-'
- |`-._`-._ `-.__.-' _.-'_.-'|
- | `-._`-._ _.-'_.-' |
- `-._ `-._`-.__.-'_.-' _.-'
- `-._ `-.__.-' _.-'
- `-._ _.-'
- `-.__.-'
- 9871:X 30 Nov 09:22:52.077 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
- 9871:X 30 Nov 09:22:52.077 # Sentinel runid is 07858ebd94d326270f4a56e0501afefe82e444b1
- 9871:X 30 Nov 09:22:52.079 # +monitor master host6379 127.0.0.1 6379 quorum 1
- 9871:X 30 Nov 09:22:53.077 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6379
- 9871:X 30 Nov 09:22:53.091 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6379
原有的master挂了:
哨兵的监视窗口增加新的内容:
- 9895:X 30 Nov 09:42:54.522 # +sdown master host6379 127.0.0.1 6379
- 9895:X 30 Nov 09:42:54.522 # +odown master host6379 127.0.0.1 6379 #quorum 1/1
- 9895:X 30 Nov 09:42:54.522 # +new-epoch 1
- 9895:X 30 Nov 09:42:54.522 # +try-failover master host6379 127.0.0.1 6379
- 9895:X 30 Nov 09:42:54.648 # +vote-for-leader ccc2dc958a8ae1e16294b81567126ec4031bf192 1
- 9895:X 30 Nov 09:42:54.648 # +elected-leader master host6379 127.0.0.1 6379
- 9895:X 30 Nov 09:42:54.648 # +failover-state-select-slave master host6379 127.0.0.1 6379
- 9895:X 30 Nov 09:42:54.725 # +selected-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6379
- 9895:X 30 Nov 09:42:54.725 * +failover-state-send-slaveof-noone slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6379
- 9895:X 30 Nov 09:42:54.778 * +failover-state-wait-promotion slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6379
- 9895:X 30 Nov 09:42:55.704 # +promoted-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ host6379 127.0.0.1 6379
- 9895:X 30 Nov 09:42:55.704 # +failover-state-reconf-slaves master host6379 127.0.0.1 6379
- 9895:X 30 Nov 09:42:55.752 * +slave-reconf-sent slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6379
- 9895:X 30 Nov 09:42:56.778 * +slave-reconf-inprog slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6379
- 9895:X 30 Nov 09:42:56.778 * +slave-reconf-done slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6379
- 9895:X 30 Nov 09:42:56.877 # +failover-end master host6379 127.0.0.1 6379
- 9895:X 30 Nov 09:42:56.877 # +switch-master host6379 127.0.0.1 6379 127.0.0.1 6380
- 9895:X 30 Nov 09:42:56.878 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ host6379 127.0.0.1 6380
- 9895:X 30 Nov 09:42:56.878 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ host6379 127.0.0.1 6380
6380变为了新的master
- 127.0.0.1:6380> info replication
- # Replication
- role:master
- connected_slaves:1
- slave0:ip=127.0.0.1,port=6381,state=online,offset=123955,lag=0
- master_repl_offset:123955
- repl_backlog_active:1
- repl_backlog_size:1048576
- repl_backlog_first_byte_offset:2
- repl_backlog_histlen:123954
- 127.0.0.1:6380>
此时6381的状态
- 127.0.0.1:6381> info replication
- # Replication
- role:slave
- master_host:127.0.0.1
- master_port:6380
- master_link_status:up
- master_last_io_seconds_ago:1
- master_sync_in_progress:0
- slave_repl_offset:125992
- 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:6381>
问题:如果之前的master重启回来,会不会双master冲突
启动挂掉的6379后
哨兵监控打印:
- 9895:X 30 Nov 09:43:26.931 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ host6379 127.0.0.1 6380
- 9895:X 30 Nov 09:45:51.015 # -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ host6379 127.0.0.1 6380
- 9895:X 30 Nov 09:46:00.994 * +convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ host6379 127.0.0.1 6380
启动后,6379的状态:
成为了当前master的salve节点
- 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:1
- master_sync_in_progress:0
- slave_repl_offset:132805
- 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> keys *
- 1) "k7"
- 127.0.0.1:6379>
复制的缺点:
复制延时:由于所有的写操作都是闲在Master上操作,然后同步更新到salve上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
Redis的复制(Master/Slave)的更多相关文章
- Redis学习十:Redis的复制(Master/Slave)【重要】
一.是什么 官网 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 二.能干嘛 读写分离 容灾恢 ...
- redis高可用 - Master&Slave
Master&Slave也就是我们所说的主从复制,即主机数据更新后根据配置和策略,自动同步到备机的机制.其中Master以写为主,Slave以读为主. Master&Slave的作用主 ...
- Redis 的主从复制(Master/Slave)
目录 1. 是什么 2. 能干嘛 3. Redis主从复制讲解 (1). info replication:查看 目标redis 主从情况 (2) . 配从库不配主库 (3). 常用策略 (4). 复 ...
- Redis的自从复制(Master/Slave)
一.是什么? 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 二.能干嘛? 1.读写分离 2.容 ...
- Redis master/slave,sentinel,Cluster简单总结
现在互联网项目中大量使用了redis,本文著主要分析下redis 单点,master/slave,sentinel模式.cluster的一些特点. 一.单节点模式 单节点实例还是比较简单的,平时做个测 ...
- Redis的master/slave复制
摘自:Redis的master/slave复制 Redis的master/slave数据复制方式可以是一主一从或者是一主多从的方式,Redis在master是非阻塞模式,也就是说在slave执行数据同 ...
- Redis(八):Redis的复制(Master/Slave)
Redis的复制(Master/Slave)目录导航: 是什么 能干嘛 怎么玩 复制原理 哨兵模式(sentinel) 复制的缺点 是什么 官网 行话:也就是我们所说的主从复制,主机数据更新后根据配置 ...
- Redis的复制(Master/Slave)、主从复制、读写分离
1.什么是Redis的复制 行话:也就是我们所说的主从复制,主数据更新后根据配置和策略自动同步到备用机的master/slave机制,Mater以写为主,slave以读为主. 2.能干什么 2.1.读 ...
- 8.Redis的复制(Master/Slave)
Redis的复制(Master/Slave) a)是什么 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave ...
随机推荐
- 阿里云日志api创建logStore
, shardCount = }); string date = FormatRfc822Date(time); string con ...
- X200s,Debian 8(Jessie) 安装流水帐
1. U盘启动安装 a. 因为无线网卡驱动是non-free,需要另外下载,对应X200s,文件是iwlwifi-5000-5.ucode,下完放到安装U盘的根目录下,安装时就不会再提示而是直接安装 ...
- 树莓派Odroid等卡片式电脑上搭建NAS教程系列5-Samba服务器安装
本文章首发于浩瀚先森博客,地址: http://www.guohao1206.com/2016/08/23/967.html samba时一款为了实现linux系统中的文件能在windows系统中正常 ...
- Python2.2-原理之类型和运算
此节来自于<Python学习手册第四版>第二部分 一.Python对象类型(第4章) 1. Python可以分解成模块.语句.表达式以及对象:1.程序由模块构成:2.模块包含语句:3.语句 ...
- Java 的世界,我不懂:奇葩的 json 序列化
先上张图,代表我心中的十万头草泥马: 写这么长的代码,头回见数组和单个实体共用同一个 json 节点的! 恐怕只有 java 社区的大牛B 才能做出这等事.. 由 Apache 发布: http:// ...
- 如何禁止IE自动生成链接
今天一位园友反馈,他用的是IE浏览器,在博客后台编辑器中输入下面的URL: http://www.windowsphone.com/zh-cn/store/app/博客园-uap/500f08f0-5 ...
- .net程序员转行做手游开发经历(三)
这次就主要讲讲我们开发的过程. 策划是我们团队的一个人成员专门负责,我们几个算是出谋划策.我这边的理解是,策划首先需要对所做的事情一定要有一定的把握,意思是尽可能的想到这件事情的影响范围,类似项目管理 ...
- Visual Studio 2015初体验——前端开发工作的问题
前言 因为后台项目开发适用的VS2015,为了跟后台开发配合,前端部门也统一从VS2013升级到了VS2015. 因为C盘空间不足要先卸载,这里就不说卸载2013时花了多长时间,只说安装2015时用了 ...
- swagger editor使用
swagger editor使用 swagger是一套开源的API设计工具,包括Swagger UI,Swagger Editor等. Swagger Editor 其中Swagger Editor是 ...
- AlertDialog之常见对话框(单选对话框、多选对话框、进度条对话框)
单选对话框,顾名思义就是只能选一项(setSingleChoiceItems(Items,)) public void click(View v){ //创建对话框类 AlertDialog.Buil ...