redis主从复制,读写分离
主从复制,读写分离 Master/Slave
是什么
master写入
slave读取
能干嘛
读写分离,更加安全,性能提升
怎么玩
一主二仆、薪火相传、反客为主
周明老师,能够把长篇大论总结的很精辟。
- 配从不配主
- slaveof 主库ip 主库端口
准备三台机器
一主,二从



66是主机,61、62作为从机。
通过info replication 进行查看身份。
192.168.1.66:6379> info replication
# Replication
role:master
connected_slaves:0
master_replid:ba9a0c9d5cbeb6f7ce375b4c3559f5e848fc7025
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
设置61、62跟随66
192.168.1.61:6379> slaveof 192.168.1.66 6379
OK
192.168.1.61:6379> info replication
# Replication
role:slave
master_host:192.168.1.66
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1
master_link_down_since_seconds:1513056594
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:ba9a0c9d5cbeb6f7ce375b4c3559f5e848fc7025
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
192.168.1.62:6379> slaveof 192.168.1.66 6379
OK
192.168.1.62:6379> info replication
# Replication
role:slave
master_host:192.168.1.66
master_port:6379
master_link_status:down
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1
master_link_down_since_seconds:1513056636
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:ff1f0f120165c6673a797e65aa0d82e3ccbe9a6c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
tips:MASTER aborted replication with an error: NOAUTH Authentication required. 出现了这个错误。需要从服务器中添加配置。masterauth 123456 (123456是主redis的密码,此参数是当与主连接时的密码验证)
设置了主从复制之后,此时在主机中,
192.168.1.66:6379> set k4 v4
OK
在从机中查看,
192.168.1.61:6379> get k4
"v4"
192.168.1.62:6379> get k4
"v4"
只要变为从机,主机中数据都会被弄过来!
周阳老师语录:学的不是指令,而是探寻知识的过程!指令分分钟讲完!但是思考知识更重要!
不停的破坏,不停的做实验,不停的尝试!折腾!才能更好的理解知识!
周明老师语录:读书或者看视频,产生争议和思考了,比不思考要有收获。带着思考学习,带着问题读书。
在主从复制中,如果主机宕机了,从机还是从机!原地待命中!
主机恢复之后,主从体系不会被破坏!
薪火相传 66 传61,61传62
192.168.1.66:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.1.61,port=6379,state=online,offset=3288,lag=1
master_replid:dddb7b383d4153816d28377f65c6ed7d688ac8bf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3288
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:3288
192.168.1.61:6379> info replication
# Replication
role:slave
master_host:192.168.1.66
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:6197
slave_priority:100
slave_read_only:1
connected_slaves:1
slave0:ip=192.168.1.62,port=6379,state=online,offset=6197,lag=0
master_replid:dddb7b383d4153816d28377f65c6ed7d688ac8bf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:6197
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:573
repl_backlog_histlen:5625
192.168.1.62:6379> info replication
# Replication
role:slave
master_host:192.168.1.61
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:5931
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:dddb7b383d4153816d28377f65c6ed7d688ac8bf
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:5931
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:5819
repl_backlog_histlen:113
注意了,master_link_status:up表示成功,master_link_status:down表示失败。原因可能是主机的端口号没有打开!
iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
反客为主命令
192.168.1.61:6379> SLAVEOF no one
OK
192.168.1.61:6379> set k11 v11
OK
192.168.1.62:6379> get k11
"v11"
192.168.1.62:6379> set k12 v12
(error) READONLY You can't write against a read only slave.
前提是,你下面要有小弟,你才能反客为主!
主从复制,第一次会全量复制,之后是增量复制。只要重新连接master,都会执行一次全量复制。
哨兵模式,反客为主的自动版本!主机挂了,会自动从从机中选择一个牛人,作为新的主机。在哨兵模式中,主机回归之后,变成从机了。
怎么玩
在从机中新建一个哨兵配置sentinel.conf
sentinel monitor mymaster 192.168.1.61 6379 1
sentinel auth-pass mymaster 123456
开启哨兵监控!
redis-sentinel /myredis/sentinel.conf
[root@localhost bin]# redis-sentinel /myredis/sentinel.conf
4880:X 12 Dec 16:15:34.969 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
4880:X 12 Dec 16:15:34.969 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=4880, just started
4880:X 12 Dec 16:15:34.969 # Configuration loaded
4880:X 12 Dec 16:15:34.970 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 4.0.1 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379
| `-._ `._ / _.-' | PID: 4880
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
4880:X 12 Dec 16:15:34.973 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
4880:X 12 Dec 16:15:34.992 # Sentinel ID is 5bdc4c724103019a7d987848ce6a8af91341ee1d
4880:X 12 Dec 16:15:34.992 # +monitor master mymaster 192.168.1.66 6379 quorum 1
4880:X 12 Dec 16:15:46.522 * +slave slave 192.168.1.61:6379 192.168.1.61 6379 @ mymaster 192.168.1.66 6379
4880:X 12 Dec 16:15:46.593 * +slave slave 192.168.1.62:6379 192.168.1.62 6379 @ mymaster 192.168.1.66 6379
4880:X 12 Dec 16:16:16.655 # +sdown slave 192.168.1.62:6379 192.168.1.62 6379 @ mymaster 192.168.1.66 6379
4880:X 12 Dec 16:17:02.014 # +sdown master mymaster 192.168.1.66 6379
4880:X 12 Dec 16:17:02.014 # +odown master mymaster 192.168.1.66 6379 #quorum 1/1
4880:X 12 Dec 16:17:02.014 # +new-epoch 1
4880:X 12 Dec 16:17:02.014 # +try-failover master mymaster 192.168.1.66 6379
4880:X 12 Dec 16:17:02.024 # +vote-for-leader 5bdc4c724103019a7d987848ce6a8af91341ee1d 1
4880:X 12 Dec 16:17:02.024 # +elected-leader master mymaster 192.168.1.66 6379
4880:X 12 Dec 16:17:02.024 # +failover-state-select-slave master mymaster 192.168.1.66 6379
4880:X 12 Dec 16:17:02.125 # +selected-slave slave 192.168.1.61:6379 192.168.1.61 6379 @ mymaster 192.168.1.66 6379
4880:X 12 Dec 16:17:02.125 * +failover-state-send-slaveof-noone slave 192.168.1.61:6379 192.168.1.61 6379 @ mymaster 192.168.1.66 6379
4880:X 12 Dec 16:17:02.184 * +failover-state-wait-promotion slave 192.168.1.61:6379 192.168.1.61 6379 @ mymaster 192.168.1.66 6379
4880:X 12 Dec 16:17:03.085 # +promoted-slave slave 192.168.1.61:6379 192.168.1.61 6379 @ mymaster 192.168.1.66 6379
4880:X 12 Dec 16:17:03.085 # +failover-state-reconf-slaves master mymaster 192.168.1.66 6379
4880:X 12 Dec 16:17:03.184 * +slave-reconf-sent slave 192.168.1.62:6379 192.168.1.62 6379 @ mymaster 192.168.1.66 6379
4880:X 12 Dec 16:17:03.184 # +failover-end master mymaster 192.168.1.66 6379
4880:X 12 Dec 16:17:03.184 # +switch-master mymaster 192.168.1.66 6379 192.168.1.61 6379
4880:X 12 Dec 16:17:03.185 * +slave slave 192.168.1.62:6379 192.168.1.62 6379 @ mymaster 192.168.1.61 6379
4880:X 12 Dec 16:17:03.185 * +slave slave 192.168.1.66:6379 192.168.1.66 6379 @ mymaster 192.168.1.61 6379
4880:X 12 Dec 16:17:33.238 # +sdown slave 192.168.1.66:6379 192.168.1.66 6379 @ mymaster 192.168.1.61 6379
4880:X 12 Dec 16:17:33.238 # +sdown slave 192.168.1.62:6379 192.168.1.62 6379 @ mymaster 192.168.1.61 6379
4880:X 12 Dec 16:22:14.045 # -sdown slave 192.168.1.62:6379 192.168.1.62 6379 @ mymaster 192.168.1.61 6379
4880:X 12 Dec 16:25:14.815 * +fix-slave-config slave 192.168.1.62:6379 192.168.1.62 6379 @ mymaster 192.168.1.61 6379
哨兵配置文件可以放在任意一个从服务器中。
周阳语录:这些牛逼的技术,公司不一定让你去做,但是你要懂!懂了才有机会去做!
主从复制的缺点,是有一定的延迟,主数据更新到从数据库有一定的延迟。
redis主从复制,读写分离的更多相关文章
- redis 主从复制+读写分离+哨兵
1.redis读写分离应用场景 当数据量变得庞大的时候,读写分离还是很有必要的.同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能.redis ...
- redis主从复制读写分离
主从复制,读写分离 Master/Slave 是什么 master写入 slave读取 能干嘛 读写分离,更加安全,性能提升 怎么玩 一主二仆.薪火相传.反客为主 周明老师,能够把长篇大论总结的很精辟 ...
- 基于Redis主从复制读写分离架构的Session共享
1.搭建主从复制 第一步:将Redis拷贝到虚拟机上的指定文件夹内,此Redis作为主服务 第二步:将Redis拷贝到本机的指定文件夹内,此Redis作为从服务 第三步:修改主服务的配置文件(redi ...
- 基于Redis主从复制读写分离架构的Session共享(Windows Server)
搭建主从复制 1.安装软件 下载Redis-x64-3.2.100.zip:https://github.com/MicrosoftArchive/redis/releases 第一步:将Redis拷 ...
- Redis 主从复制, 读写分离
1: 是什么? 2: 经常是配置从库, 不配置主库 3.1: 每次与 master 断开之后都要从连, 除非你配置了redis.conf 3.2: 获取当前redis 服务信息 => info ...
- Redis的读写分离
1.概述 随着企业业务的不断扩大,请求的并发量不断增长,Redis可能终会出现无法负载的情况,此时我们就需要想办法去提升Redis的负载能力. 读写分离(主从复制)是一个比较简单的扩展方案,使用多台机 ...
- redis sentinel 读写分离
redis sentinel 读写分离 https://www.jianshu.com/p/d1636776bb40
- mysql主从复制-读写分离
mysql主从复制+读写分离 环境:mysql主:193.168.1.1mysql从:193.168.1.2amoeba代理:193.168.1.3########################## ...
- Mysql多实例安装+主从复制+读写分离 -学习笔记
Mysql多实例安装+主从复制+读写分离 -学习笔记 .embody{ padding:10px 10px 10px; margin:0 -20px; border-bottom:solid 1px ...
- windows下Redis 主从读写分离部署
原文:windows下Redis 主从读写分离部署 1.可直接下载window下的运行文件(下面这个链接) 也可以浏览github 查看相应的版本说明文档 https://github.com/Ser ...
随机推荐
- 深入了解Token认证的来龙去脉
Token 是在服务端产生的,如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端.前端可以在每次请求的时候带上 Token 证明自己的合法地位. 不久 ...
- spring的四种数据源配置
DriverManagerDataSource spring自带的数据源,配置如下: <bean id="dataSource" class="org.spr ...
- cms初步构想
一.cms系统的初步构想 公司正准备使用yii框架重新弄个类cms的系统: 初步的功能: 栏目文章的管理 SEO的优化功能 推荐位管理 一些思路和规则: 数据库表名的定义:通过"大模块名称+ ...
- 简明git教程(单人版本)
最近开始写一个比较大的东西,所以需要用到git,之前一直在用金山快盘和乌龟搭建的SVN,最近想尝试一下git 1.安装 Ubuntu: sudo apt-get install git 老版本的Ubu ...
- vue 项目初始化、mock数据以及安装less
vue 创建一个项目 1.首先建立一个空文件夹,然后将这个文件夹要放到码云或者其他代码管理平台. 例如码云: 在码云上建立一个项目,然后在控制台进入这文件夹执行 git clone 地址是码云上创建的 ...
- MongoDB_可视化工具Robo 3T
Robo 3T可以对MongoDB进行可视化操作. Robo 3T安装 官网下载地址:https://robomongo.org/ 进入官网,点击下载,Studio 3T功能更全面,基础功能是免费的, ...
- 查看Linux系统版本信息的几种方法
一.查看Linux内核版本命令(两种方法): 1.cat /proc/version 2.uname -a 二.查看Linux系统版本的命令(3种方法): 1.lsb_release -a,即可列出所 ...
- bzoj 3730: 震波 动态点分治_树链剖分_线段树
##### 题目描述 : 在一片土地上有N个城市,通过N-1条无向边互相连接,形成一棵树的结构,相邻两个城市的距离为1,其中第i个城市的价值为value[i].不幸的是,这片土地常常发生地震,并且随着 ...
- gradle多模块构建集成swagger
1.首先说一下软件的版本:springboot:1.5.2:springcloud:D-SR1:swaager2:2.6.0:gradle:4.5.工程模块是分开的单独的entity,api,mapp ...
- 训练1-R
给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和. 例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} -1.3 + 7 + 9 = ...