Redis-11-Redis主从复制
说明
- Redis-11-Redis主从复制
- 包含Redis主从复制的特点、注意事项、主从复制的原理、主从复制的模式、哨兵模式(sentinel)
- 官方文档:https://redis.io/documentation
- Redis命令参考:http://redisdoc.com/
核心概念
》Redis主从复制的特点?
- 读写分离
- Redis主从复制都是一主多从,要多主就需要集群实现
- 容灾快速恢复
》本案例搭建环境描述
- 本案例简单搭建一主二从
- 在同一台机器中使用3个不同的端口模拟三个Redis服务
- 原本的6379端口不受影响也不在本案例操作范围内
》注意事项
- 主从复制中的从服务器默认只有读权限,一般也都是这样的
》主从复制的原理
- 从服务启动后,向主服务发送数据同步请求
- 主服务收到从服务同步请求后,将数据持久化到rdb,然后将rdb文件发送给从服务(全量复制)
- 从服务收到主服务发送过来的rdb后,以之进行数据初始化
- 后续主服务所有写操作,主服务都会同步发送给从服务(增量复制)
》主从复制的模式
- 一主多从
- 基本模式,一个主服务剩下的全部作为从服务
- 薪火相传
- 一代一代往下继承,比如:A <- B <- C
- 反客为主
- 当主服务挂掉后,可以将从服务设置为主服务,但是只能通过动态命令实现,无法通过修改配置方式实现。要实现自动需要结合下面的哨兵模式
- 命令:
127.0.0.1:6382> slaveof no one
》哨兵模式(sentinel)
- 什么是哨兵模式?
- 反客为主的自动版
- 哨兵模式的原理?
- 启动一个服务专门用来监听Redis,该服务由Redis官方提供,与redis-server同级目录
- 当监控到主机挂掉以后,会自动切换一台从服务为主服务,并把原先的主服务变为从服务,当原先的主服务启动后将会作为从服务
- 选择从服务作为主服务的优先级判断条件
- 根据从服务的配置文件:
replica-priority 100
,这个值越小优先级越高 - 数据偏移量越大优先级越高(偏移量指数据同步最全的)
- runid越小优先级越高
- 根据从服务的配置文件:
- 哨兵模式结合代码使用?
- 使用Redis连接池,连接哨兵模式配置文件中定义的IP、端口
- 注意:连接的是哨兵服务,而不是Redis服务
操作步骤
》先正常开启三个Redis服务端
- 新建目录:/root/redisSlave,并进入该目录
- 在当前目录下创建数据存储目录:data
- 将默认配置文件redis.conf复制一份到该目录
- 新建三个配置文件:redis6381.conf、redis6382.conf、redis6383.conf
[root@192 ~]# cd /root/redisSlave [root@192 redisSlave]# mkdir data [root@192 redisSlave]# ll total 76 drwxr-xr-x 2 root root 6 Jan 9 17:55 data -rw-r--r-- 1 root root 103 Jan 9 17:53 redis6381.conf -rw-r--r-- 1 root root 103 Jan 9 17:53 redis6382.conf -rw-r--r-- 1 root root 103 Jan 9 17:53 redis6383.conf -rw-r--r-- 1 root root 61813 Jan 9 17:21 redis.conf
- 配置文件内容如下
[root@192 redisSlave]# more redis6381.conf include ./redis.conf port 6381 pidfile /var/run/redis6381.pid dbfilename dump6381.rdb dir ./data[root@192 redisSlave]# more redis6382.conf include ./redis.conf port 6382 pidfile /var/run/redis6382.pid dbfilename dump6382.rdb dir ./data[root@192 redisSlave]# more redis6383.conf include ./redis.conf port 6383 pidfile /var/run/redis6383.pid dbfilename dump6383.rdb dir ./data
- 配置文件内容如下
- 分别启动三个Redis服务
# 启动6381 [root@192 redisSlave]# /usr/local/redis/bin/redis-server ./redis6381.conf 44407:C 09 Jan 2022 17:59:51.059 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 44407:C 09 Jan 2022 17:59:51.060 # Redis version=5.0.9, bits=64, commit=00000000, modified=0, pid=44407, just started 44407:C 09 Jan 2022 17:59:51.060 # Configuration loaded# 启动6382 [root@192 redisSlave]# /usr/local/redis/bin/redis-server ./redis6382.conf 44429:C 09 Jan 2022 18:00:11.818 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 44429:C 09 Jan 2022 18:00:11.818 # Redis version=5.0.9, bits=64, commit=00000000, modified=0, pid=44429, just started 44429:C 09 Jan 2022 18:00:11.818 # Configuration loaded# 启动6383 [root@192 redisSlave]# /usr/local/redis/bin/redis-server ./redis6383.conf 44437:C 09 Jan 2022 18:00:15.680 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 44437:C 09 Jan 2022 18:00:15.680 # Redis version=5.0.9, bits=64, commit=00000000, modified=0, pid=44437, just started 44437:C 09 Jan 2022 18:00:15.680 # Configuration loaded# 查看状态(6379是默认的,不用管) [root@192 redisSlave]# ps -ef |grep redis root 1845 1 0 Jan07 ? 00:05:39 /usr/local/redis/bin/redis-server *:6379 root 44408 1 0 17:59 ? 00:00:00 /usr/local/redis/bin/redis-server *:6381 root 44430 1 0 18:00 ? 00:00:00 /usr/local/redis/bin/redis-server *:6382 root 44438 1 0 18:00 ? 00:00:00 /usr/local/redis/bin/redis-server *:6383 root 44458 1803 0 18:00 pts/0 00:00:00 grep --color=auto redis
- 使用客户端连接Redis服务进行测试,三个端口都能连接即可。
[root@192 redisSlave]# /usr/local/redis/bin/redis-cli -p 6381 127.0.0.1:6381>
- 查看主从复制信息,命令:info replication
127.0.0.1:6381> info replication # Replication role:master connected_slaves:0 master_replid:6c47a5c58d4b536ab60c65539b04e562686dec4c 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
role:master
:表示本机作为主服务connected_slaves:0
:表示连接的从服务器数量
》绑定三个Redis服务,开启主从复制
》》实现方式一:动态命令(slaveof )绑定主从复制关系(适用于Redis没有密码的情况)
- 分别在从服务器上执行以下命令进行绑定(以6382为例)
[root@192 redisSlave]# /usr/local/redis/bin/redis-cli -p 6382 127.0.0.1:6382> slaveof 192.168.3.241 6381 OK
- 注意:这种方式,如果重启从服务,那么原先配置的主从复制关系就失效了
- 注意:重启主服务,原先的主从复制关系不变
》》实现方式二:修改配置文件绑定主从复制关系(适用于Redis有密码情况)
- 分别修改从服务器配置文件(以6382为例)
[root@192 redisSlave]# cat redis6382.conf include ./redis.confport 6382 pidfile /var/run/redis6382.pid dbfilename dump6382.rdb dir ./data# 主从复制关联主服务器IP和端口 replicaof 192.168.3.241 6381 # 主从复制关联主服务器Redis密码 masterauth 123456
- 修改完重启Redis服务,查看主从复制信息
# 连接主服务器,并查看 [root@192 redisSlave]# /usr/local/redis/bin/redis-cli -p 6381 127.0.0.1:6381> auth 123456 OK 127.0.0.1:6381> info replication # Replication role:master connected_slaves:2 slave0:ip=192.168.3.241,port=6382,state=online,offset=56,lag=1 slave1:ip=192.168.3.241,port=6383,state=online,offset=56,lag=1 master_replid:be633cdf584be908844294ddf2a67cfbb2217db7 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:56 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:56# 连接从服务器,并查看(以6382为例) [root@192 redisSlave]# /usr/local/redis/bin/redis-cli -p 6382 127.0.0.1:6382> auth 123456 OK 127.0.0.1:6382> info replication # Replication role:slave master_host:192.168.3.241 master_port:6381 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:1134 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:be633cdf584be908844294ddf2a67cfbb2217db7 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1134 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:1134
- 注意:这种方式,重启从服务,依旧是原先的主从复制关系,因为配置文件是重新加载了
- 注意:重启主服务,原先的主从复制关系不变
》开启哨兵模式
新建哨兵配置文件:sentinel.conf
[root@192 redisSlave]# ll total 80 drwxr-xr-x 2 root root 66 Jan 10 12:47 data -rw-r--r-- 1 root root 103 Jan 9 17:53 redis6381.conf -rw-r--r-- 1 root root 209 Jan 10 02:03 redis6382.conf -rw-r--r-- 1 root root 209 Jan 10 02:03 redis6383.conf -rw-r--r-- 1 root root 61813 Jan 9 17:21 redis.conf -rw-r--r-- 1 root root 45 Jan 10 16:07 sentinel.conf# 配置文件内容如下 [root@192 redisSlave]# cat sentinel.conf # 哨兵监控主机信息 sentinel monitor myMaster 192.168.3.241 6381 1 # 哨兵监控主机的密码(如果没密码忽略这行) sentinel auth-pass myMaster 123456 # 哨兵服务后台启动(配置稳定后可以开启后台) # daemonize yes
- 配置文件说明:
- sentinel monitor <主机别名> <端口> <至少几个哨兵同意迁移>
- sentinel auth-pass <主机别名> <密码>
- 配置文件说明:
启动一个哨兵服务
[root@192 redisSlave]# /usr/local/redis/bin/redis-sentinel ./sentinel.conf 79386:X 10 Jan 2022 16:48:13.552 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 79386:X 10 Jan 2022 16:48:13.552 # Redis version=5.0.9, bits=64, commit=00000000, modified=0, pid=79386, just started 79386:X 10 Jan 2022 16:48:13.552 # Configuration loaded ...... 79386:X 10 Jan 2022 16:48:13.553 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 79386:X 10 Jan 2022 16:48:13.555 # Sentinel ID is 431ce25764c7cac5f9504729c89c3eff496ba4b3 79386:X 10 Jan 2022 16:48:13.555 # +monitor master myMaster 192.168.3.241 6381 quorum 1 79386:X 10 Jan 2022 16:48:13.556 * +slave slave 192.168.3.241:6383 192.168.3.241 6383 @ myMaster 192.168.3.241 6381 79386:X 10 Jan 2022 16:48:13.557 * +slave slave 192.168.3.241:6382 192.168.3.241 6382 @ myMaster 192.168.3.241 6381
- 通过哨兵服务的启动日志,你可以清晰的看到主从复制服务信息
当你启动哨兵服务以后,哨兵服务会自动重写你的配置文件,就像下边这样:
[root@192 redisSlave]# cat sentinel.conf sentinel myid b28d162eff8336dbd397caf6e4d5521ea5fcb925 sentinel deny-scripts-reconfig yes daemonize yes# Generated by CONFIG REWRITE port 26379 dir "/root/redisSlave" protected-mode no sentinel monitor myMaster 192.168.3.241 6381 1 sentinel auth-pass myMaster 123456 sentinel config-epoch myMaster 0 sentinel leader-epoch myMaster 0 sentinel known-replica myMaster 192.168.3.241 6382 sentinel known-replica myMaster 192.168.3.241 6383
Redis-11-Redis主从复制相关推荐
- 【八股文】11 Redis
1. 谈下你对 Redis 的了解? Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型 ...
- redis主从_Redis主从复制部署
点击上方Java资料社区,选择"置顶公众号" 优质文章,第一时间送达 引言 如果您是初学Redis,建议先阅读上三篇文章"初识Redis"."spri ...
- php连接redis 主从复制,redis怎么进行主从复制
redis主从复制同步实现的过程 1.从服务发送一个sync同步命令给主服务要求全量同步 (推荐学习:Redis视频教程) 2.主服务接收到从服务的sync同步命令时,会fork一个子进程后台执行bg ...
- Redis 实战之主从复制、高可用、分布式
简介 本节内容基于 CentOS 7.4.1708,Redis 3.2.12 环境实验. Redis 是一个开源的高性能键值对数据库. 安装:yum install -y redis 特性: 高性能 ...
- Redis进阶之主从复制
转载自 Redis进阶之主从复制 一.主从复制概述 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器.前者称为主节点(master),后者称为从节点(slave):数据的复制 ...
- Redis 如何实现主从复制
什么是主从复制(Master/Slave)? 我们的数据一般是存储在数据库中,为了保证数据的高可用,我们一般使用多台数据库服务器做集群.选中其中的一台作为主服务器(Master),其余的作为从服务器( ...
- 面试精讲之面试考点及大厂真题 - 分布式专栏 11 Redis热点key大Value解决方案
11 Redis热点key大Value解决方案 时间像海绵里的水,只要你愿意挤,总还是有的. --鲁迅 引言 上期分析了<Redis 雪崩,穿透,击穿三连问>,看了我的分析后回答面试官肯定 ...
- Linux企业化运维--(7)redis服务之redis配置及主从复制、主从自动切换、集群、redis+mysql、gearman实现数据同步
Linux企业化运维 实验所用系统为Redhat-rhel7.6. 目录 Linux企业化运维 Linux企业化运维--(7)redis服务之redis配置及主从复制.主从自动切换.集群.redis+ ...
- 深入学习 Redis 之第 1 篇 —— Docker 安装 Redis 并搭建主从复制集群
环境要求:CentOS7 X64 位,Redis6.0+ 理论基础 1.什么是 Redis 的主从复制? Redis 的复制功能支持多个库之间的数据同步.一类是主库(master),另一类是从库(sl ...
- Redis集群-主从复制 作者哇塞大嘴好帥(哇塞大嘴好帅)
1.Redis集群 - 主从复制 作者:哇塞大嘴好帥(哇塞大嘴好帅) 主从复制 1.概念 讲一台Redis服务器数据复制到其他Redis服务器.被复制的服务器叫做主节点,复制被复制的服务器数据叫做从节 ...
最新文章
- SAP PM 入门系列17 - IB03 显示设备BOM
- C++ Double Ended Queues(双向队列)
- python定义构造函数、包括颜色价格品牌_《Python编程与算法基础教程》(第二版),蒋洪宇,青松,第9章:课后练习,程序设计,版江红余,第九章,习题,答案...
- 塔拉 孤岛危机2_2月15日新作密集周Xbox游戏热度排行公布《Apex英雄》登顶《除暴战警3》战役模式名列前3...
- XML万能数据库设计
- c++ 数组初始化_C++入门篇(二十九),字符数组在内存中存储的情况
- 安卓中java或取上下文_android-Xposed:如何获取挂钩的应用程序的上下文?
- My interested stuff(2008-07-18)
- IPhone之NSXMLParser的使用
- php7.1 mysql_安装最新LAMP环境 (CentOS7+PHP7.1.5+Mysql5.7)
- vbs整人代码蓝屏_vbs整人程序大全
- visa卡号生成器 在线_AINLP公众号新增quot;彩虹屁生成器quot;
- 基于ESP-IDF环境的ESP32-C3开发
- 台式机计算机里所有文档都打不开,电脑里的所有word文档都打不开,如何处理掉?...
- 带你从头到尾梳理大图片加载OOM处理问题
- 华为服务器告警状态,华为RH2288H V5服务器CPU告警
- UE5 Gameplay 框架拆解
- hive静态与动态分区理解
- OpenGL中三原色对应的glcolor3f
- UCGUI使用外部字库芯片显示汉字