Redis 主从架构搭建
引言
准备搭建的是主从架构( Master/Slave )中的一主两从模式;其中 Master 为 Redis 的主服务器,主要负责写操作,两个 Slave 为 Redis 的从服务器,主要负责读操作,该架构最终可以实现主从复制和读写分离,架构图如下:

搭建步骤
这里采用在一台虚拟机上启动多个 Redis 服务,模拟多个 Redis 服务器环境(与实际生产环境中相比,基本配置几乎相同,仅 IP 地址和端口号不同)
第一步:修改 redis.conf 配置文件
将 redis.conf 配置文件复制三份,通过修改端口分别模拟三台 Redis 服务器
[root@dtinone2 redis-5.0.9]# cp redis.conf 6379redis.conf
[root@dtinone2 redis-5.0.9]# cp redis.conf 6380redis.conf
[root@dtinone2 redis-5.0.9]# cp redis.conf 6381redis.conf
分别对 6379redis.conf、6380redis.conf 和 6381redis.conf 三份配置文件进行修改
注:以下以 6379redis.conf 配置修改为例,其他两个配置文件修改方式相似(唯一区别是端口号不同)
1)将默认的 daemonize no 修改为 daemonize yes,表示指定 Redis 以守护进程的方式启动(后台启动)
daemonize yes
2) 配置 pidfile 文件路径, 表示当 Redis 作为守护进程运行的时候,它会把 pid 进程号默认写到 pidfile 文件里面
pidfile /var/run/redis_6379.pid
3) 配置 port 端口号(其他两个配置文件的端口号分别为 6380 和 6381)
port 6379
4)配置 log 文件名
logfile "6379.log"
5) 配置rdb文件名
dbfilename dump_6379.rdb
注:再依次修改 6380redis.conf 、6381redis.conf 两个配置文件,则配置完毕。
第二步:分别启动三个 Redis 服务
启动时一定要分别加载三个 Redis 配置文件,如下:
[root@dtinone2 redis-5.0.9]# ./redis-server ../6379redis.conf
[root@dtinone2 redis-5.0.9]# ./redis-server ../6380redis.conf
[root@dtinone2 redis-5.0.9]# ./redis-server ../6381redis.conf
通过命令查看三个 Redis 后台服务是否启动,如下:
[root@dtinone2 redis-5.0.9]# ps -ef | grep redis
root 1991 1 0 04:46 ? 00:00:05 ./redis-server *:6379
root 1996 1 0 04:46 ? 00:00:04 ./redis-server *:6380
root 2001 1 0 04:46 ? 00:00:04 ./redis-server *:6381
root 2559 1819 0 05:28 pts/0 00:00:00 grep redis
以上显示三个 Redis 服务已全部启动成功
第三步:启动 Redis 客户端
-p 选项:表示设置客户端连接的 Redis 服务器的端口号
[root@dtinone2 redis-5.0.9]# ./redis-cli -p 6379
注:以上命令表示启动客户端连接监听端口为 6379 的 Redis 服务器(如需连接其他两个 Redis 服务器,只需要修改 -p 选项后面的端口号即可)
第四步:查看 Redis 服务器的主从关系
- info replication 命令:用于查看 Redis 服务器主从关系
127.0.0.1:6379> info replication
# Replication
role:master #表示该 Redis 服务器是主服务器
connected_slaves:0 #表示有0个从服务器连接到主服务器
slave0:ip=127.0.0.1,port=6381,state=online,offset=3875,lag=0
slave1:ip=127.0.0.1,port=6380,state=online,offset=3875,lag=1
master_replid:01db272d607cc12eb5717104bae4bcf53490856c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3875
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:3875
继续查看端口号为 6380和 6381 的 Redis 服务器,结果显示三个 Redis 服务器的 role 都是 Master,也就是都是主服务器。
第五步:设置端口号 6380 和 6381 两个服务器为从服务器
- 通过客户端连接端口号为 6380 的 Redis 服务器
[root@dtinone2 redis-5.0.9]# ./redis-cli -p 6380
设置端口号为 6380 的 Redis 服务器为端口号 6379 的 Redis 服务器的从服务器
命令:saveof master_ip master_port
把当前服务器设置为从服务器,master_ip 表示其主服务器的IP地址,master_port 表示其主服务器的端口号
127.0.0.1:6380> slaveof 127.0.0.1 6379
OK
- 再通过客户端连接端口号为 6381 的 Redis 服务器
[root@dtinone2 redis-5.0.9]# ./redis-cli -p 6381
- 再设置端口号为 6381 的 Redis 服务器为 端口号 6379 的 Redis 服务器的从服务器
127.0.0.1:6381> slaveof 127.0.0.1 6379
OK
第六步:查看主从关系是否设置成功
- 使用 info replication 命令查看端口号为 6379 的 Redis 服务器,如下:
127.0.0.1:6379> info replication
# Replication
role:master #表示端口 6379 的 Redis 服务器是一个主服务器
connected_slaves:2 #表示该主服务器拥有 2个从服务器
#从服务器列表信息
slave0:ip=127.0.0.1,port=6381,state=online,offset=4701,lag=0
slave1:ip=127.0.0.1,port=6380,state=online,offset=4701,lag=0
master_replid:01db272d607cc12eb5717104bae4bcf53490856c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4701
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:4701
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6381,state=online,offset=4701,lag=0
slave1:ip=127.0.0.1,port=6380,state=online,offset=4701,lag=0以上信息表示当前服务器角色为主服务器,而且有两个从服务器连接,分别是 slave0 和 slave1
- 使用 info replication 命令查看端口号为 6380 的 Redis 服务器,如下:
127.0.0.1:6380> info replication
# Replication
role:slave # 表示端口 6380 的 Redis 服务器是一个从服务器
master_host:127.0.0.1 # 表示连接的主服务器的 IP 地址
master_port:6379 # 表示连接的主服务器的端口号
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:4925
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:01db272d607cc12eb5717104bae4bcf53490856c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4925
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:29
repl_backlog_histlen:4897
role:slave
master_host:127.0.0.1
master_port:6379以上信息表示当前服务器角色为从服务器,它的主服务器端口为 6379
同样,使用 info replication 命令再查看端口号为 6381 的 Redis 服务器,显示结果应该和端口号为 6380 的 Redis 服务器相同。
至此,我们通过命令完成了设置主从架构的搭建。
由于设置命令修改的是内存配置,所以一旦 Redis 服务重启,那么服务器之间的角色关系将不复存在,实际生产环境中可以通过 redis.conf 文件来配置,如下:
replicaof 127.0.0.1 6379
第七步:测试主从复制
- 在 Redis 主服务器执行一个写操作
127.0.0.1:6379> set myname zhangsan
OK
- 在 Redis 从服务器读取
127.0.0.1:6380> get myname
"zhangsan"
127.0.0.1:6381> get myname
"zhangsan"
第八步:测试主从读写分离
- 在 Redis 主服务器执行一个写操作和读操作
127.0.0.1:6379> set myname zhansan
OK
127.0.0.1:6379> get myname
"zhansan"
- 分别在 Redis 从服务器可以执行一个写操作和读操作
127.0.0.1:6380> get myname
"zhansan"
127.0.0.1:6380> set myname lisi
(error) READONLY You can't write against a read only replica.
127.0.0.1:6381> get myname
"zhansan"
127.0.0.1:6381> set myname lisi
(error) READONLY You can't write against a read only replica.
可以看到,主服务器有读写操作,两个从服务器只有读操作,主从读写分离测试成功。
如果想让从服务器也能执行写操作,只需要修改配置文件 redis.conf 中如下配置项:
replica-read-only yes # 表示从服务器仅支持只读操作
注意:从服务器即使支持写操作,其写入的数据是无法同步到主服务器和其他从服务器
第九步:测试主服务器宕机
- 将 Master 主服务关掉模拟服务器宕机,也就是关闭端口号 为 6379 的 Redis 服务器,然后观察从服务器是否发生变化
127.0.0.1:6379> shutdown
- 查看 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:322
master_link_down_since_seconds:10
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:18bb9d5dc7016635dd09f21c2fcdcfb5b9b619ba
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:322
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:322
以上查看结果为 Master 主服务器挂掉后,Slave 从服务器没有任何改变。
Redis 主从架构搭建的更多相关文章
- Redis主从架构搭建和哨兵模式(四)
一主一从,往主节点去写,在从节点去读,可以读到,主从架构就搭建成功了 1.启用复制,部署slave node wget http://downloads.sourceforge.net/tcl/tcl ...
- redis主从架构的搭建
本项目采用主从架构,一主两从一个哨兵.在x.x.x.69上部署主节点,在70上部署从节点1和哨兵节点,在71上部署从节点2. 准备: 1.首先上传redis文件到三台linux上,目录/home/sy ...
- 10.Redis 主从架构
作者:中华石杉 Redis 主从架构 单机的 redis,能够承载的 QPS 大概就在上万到几万不等.对于缓存来说,一般都是用来支撑读高并发的.因此架构做成主从(master-slave)架构,一主多 ...
- redis主从架构,分片集群详解
写在前面:这篇笔记有点长,如果你认真看完,收获会不少,如果你只是忘记了相关命令,请翻到末尾. redis的简单介绍: 一个提供多种数据类类型储存,整个系统都在内存中运行的, 定期通过异步的方式把数据刷 ...
- 采用redis 主从架构的原因
如果系统的QPS超过10W+,甚至是百万以上的访问,则光是Redis是不够的,但是Redis是整个大型缓存架构中,支撑高并发的架构非常重要的环节. 首先,你的缓存中间件.缓存系统,必须能够支撑起10w ...
- redis 主从同步搭建
redis 一主二从 1.redis 安装 安装教程:https://www.cnblogs.com/zwcry/p/9505949.html 2.redis主从 1)创建主从目录 mkdir /us ...
- DNS服务-主从架构搭建
为了网站的可靠性,通常都会有多个DNS服务器,万一DNS服务器宕机了,可以实现DNS服务器容错 通常都会有一个主DNS服务器,后面配若干个辅助DNS服务器,这个主DNS服务器的数据库会同步给其他的DN ...
- 【Redis】Redis 主从模式搭建
主从模式介绍 Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据 ...
- redis主从架构宕机问题手动解决
1 主机宕机 1. 设置端口6379是主机,端口6380是从机,全部都正常启动 2. 验证在6379写入数据,在6380也能得到数据 3. 现在将6379主机停掉,模拟主机宕机 4. 由 ...
随机推荐
- BUAA_OO_2020_第四单元与课程总结
BUAA_OO_2020_第四单元与课程总结 第四单元架构 第一次 架构设计 第一次作业要求实现UML类图解析器. 我才用自顶向下依次解析的方法,首先将类图中涉及的所有元素分成三层: 第一层 第二层 ...
- addeventlistener回调函数中的黑科技
dom.addEventListener('click',callback/obj){},这里的callback除了传递一个函数之外,还可以传递一个属性带有 HandleEvent 方法的对象obj, ...
- .Net程序内存泄漏解析
一.概要 大概在今年三月份的时候突然被紧急调到另外一个项目组解决线上内存泄漏问题.经过两周的玩命奋战终于解决了这个问题这里把心路历程及思路分享给大家.希望可以帮助到各位或现在正遇到这样事情的小伙伴提供 ...
- java面试一日一题:java的类加载过程
问题:请讲下java的类加载机制及过程 分析:该问题主要考察对JVM加载类的机制及过程,延申出的问题是为什么使用双亲委托模型,有什么办法可以打破双亲委托吗: 回答要点: 主要从以下几点去考虑, 1.类 ...
- 【DB宝49】Oracle如何设置DB、监听和EM开机启动
目录 一.Windows系统 二.Linux系统 方法1:配置/etc/rc.d/rc.local文件(推荐) 方法2:配置service服务 三.Oracle 18c版本 四.总结 一.Window ...
- 数据结构之Stack | 让我们一块来学习数据结构
栈的介绍 栈就是和列表类似的一种数据结构,它可用来解决计算机世界里的很多问题.栈是一种高 效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现. 栈的使用遍布程序语言实现的方方 ...
- ESP32音频开发板ESP32-Korvo V1.1踩坑
电池供电ESP32-Korvo V1.1开发板供电电压低于3.9V不断复位: 报错->Brownout detector was triggered 断电探测器触发复位 根据同行资料发现,禁用断 ...
- 通过钉钉网页上的js学习xss打cookie
做完了一个项目,然后没啥事做,无意看到了一个钉钉的外部链接: 题外话1: 查看源码,复制其中的代码: try { var search = location.search; if (search &a ...
- PAT 乙级 -- 1013 -- 数素数
题目简介 令Pi表示第i个素数.现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数. 输入格式: 输入在一行中给出M和N,其间以空格分隔. 输出格式: 输出从PM到PN ...
- 查找和定位Android应用的按钮点击事件的代码位置基于Xposed Hook实现
本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80956455 在进行Android程序的逆向分析的时候,经常需要通过Androi ...