主从复制,读写分离 Master/Slave

是什么

master写入

slave读取

能干嘛

读写分离,更加安全,性能提升

怎么玩

一主二仆、薪火相传、反客为主

周明老师,能够把长篇大论总结的很精辟。

  1. 配从不配主
  2. 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主从复制,读写分离相关推荐

  1. 架构师成长记_第六周_11_Redis 主从复制(读写分离) 搭建

    文章目录 Redis 主从复制(读写分离) 搭建 1. 三台虚拟机都进入Redis服务器 PS: `info replication` 查看主从复制信息 2. 进入我们的138从节点修改配置 PS: ...

  2. redis主从读写分离replication复制数据+sentienl哨兵集群主备切换

    说明:最近公司在自己搭建了一套redis主从读写分离+sentinel哨兵集群主备切换,通过手工去搭建replication复制+主从架构+读写分离+哨兵集群+高可用redis集群架构 公司的已经搭建 ...

  3. Linux企业运维 6.6 -- Redis部署及主从切换、Redis+Mysql读写分离

    目录 Redis简介 redis的编译.安装 1.server1的redis配置 2.server2的redis安装 3.server3配置redis 三.redis主从复制 四.Sentine主从自 ...

  4. java读取mysql配置文件_一文读懂 MySQL 主从复制读写分离

    文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 前言 在很多项目,特别是互联网项目,在使用MySQL时都会采用主从复 ...

  5. mysql5.7 读写分离_mysql5.7的主从复制+读写分离

    Mysql主从复制与读写分离 目录: 1.mysql主从复制工作原理 2.mysql读写分离原理,使用Amoeba中间代理层实现读写分离 3.在vmware中实现mysql主从复制+读写分离 一.My ...

  6. mysql5.6主从复制(读写分离)方案_MySQL5.6主从复制(读写分离)方案

    MySQL5.6主从复制(读写分离)方案 一.前言:为什么MySQL要做主从复制(读写分离)? 通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低. 为了提升业务系统性能, ...

  7. MySQL5.6主从复制(读写分离)方案

    MySQL5.6主从复制(读写分离)方案 https://yq.aliyun.com/articles/24255 摘要: 一.前言:为什么MySQL要做主从复制(读写分离)? 通俗来讲,如果对数据库 ...

  8. mysql proxy 主从_【MYSQL知识必知必会】MySQL主从复制读写分离(基于mysql-proxy实现)...

    MySQL主从复制读写分离(基于mysql-proxy实现) http://mirror.bit.edu.cn/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8. ...

  9. redis之读写分离

    写在前面 本文一起看下redis的读写分离架构. 1:为什么要读写分离 读写分离,即主库执行写请求,然后写的数据同步到从库,从库执行读请求,架构图如下: 一般读写分离带给我们的好处可能如下: 分担主库 ...

  10. MySQL之——MSS主从复制(读写分离)实现

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52746393 前面,在博文<MySQL之--MS主从复制(读写分离)实现&g ...

最新文章

  1. 强制修改mysql 中root的密码
  2. sqlserver中65535_sqlserver中 varchar 最大长度是多少?
  3. 《高性能JavaScript》第九章 构建并部署高性能JavaScript应用
  4. Dotnet core基于ML.net的销售数据预测实践
  5. vector容器中关于处理从非0位置开始赋值的操作
  6. Java 8中HotSpot选项的改进文档
  7. 文件系统管理 之 文件和目录访问权限设置
  8. 条件信息熵的决策表约简
  9. 代写php代码作业,代写phpmyadmin留学生作业、代做SQL语言作业、SQL程序设计作业调试、代做PHP script作业...
  10. 消息中间件 rabbitMQ
  11. httplistener java_Java监听器Listener使用详解
  12. android OpenGL ES实现渲染到透明的纹理 render to transparent texture
  13. BurpSuite 设置Hostname Resolution
  14. 你以为海淘产品能逃过海关法眼?大数据技术一网打尽
  15. 带你细品Cookie、Session和Token的区别
  16. 非家用的监控摄像头都无复位功能
  17. python 视频教程推荐_求各位大佬推荐Python学习视频教程?
  18. 使用Everything清理垃圾文件
  19. java做一个查询网页版_用java写一个网页输入url点击查询即可在下面显示网页源代码...
  20. 《走出软件作坊》51:幽幽一缕香

热门文章

  1. 寄存器位查看小工具.exe
  2. 病毒导致win2003服务器共享丢失业务中断
  3. 保湿护肤要注意的一些细节 - 生活至上,美容至尚!
  4. Java高并发程序设计学习笔记(十一):Jetty分析
  5. 拜读及分析Element源码-alert组件篇
  6. WIN10系统上,新建AliOS Things项目
  7. CentOS7 Apache调优之开启deflate压缩模块
  8. 找回MySQL的root密码
  9. [BZOJ 1014][JSOI2008]火星人prefix(Splay+二分+hash)
  10. linux 测试各大网站速度curl