阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Redis 主从复制

394次阅读
没有评论

共计 6962 个字符,预计需要花费 18 分钟才能阅读完成。

Redis 有两种不同的持久化方式,Redis 服务器通过持久化,把 Redis 内存中持久化到硬盘当中,当 Redis 宕机时,我们重启 Redis 服务器时,可以由 RDB 文件或 AOF 文件恢复内存中的数据。

不过持久化后的数据仍然只在一台机器上,因此当硬件发生故障时,比如主板或 CPU 坏了,这时候无法重启服务器,有什么办法可以保证服务器发生故障时数据的安全性?或者可以快速恢复数据呢?想做到这一点,我们需要再了解 Redis 另外一种机制:主从复制。

一、主从复制概述

1.1、单机问题

1.1.1、机器宕机

如果发生机器宕机(主板烧坏、硬盘损坏、内存损坏等),短时间内我们也无法修复,我们就会考虑将 redis 迁移到另外一台机器上,并且还要考虑数据同步问题。

1.1.2、容器瓶颈

一台机器内存是 16G,redis 使用 12 个 G 内存,除了 redis 还要使用其他的应用,这个时候,我们可能需要 32 个 G 内存才能使用,但是 redis 的应用对内存的增加也会提交,我们不能一直去提高单机的内存?

1.1.3、QPS 瓶颈

redis 官方数据显示 redis 可以处理达到 10w 的 QPS,如果业务需要 50w、100w 的 QPS 时我们怎么办?

关于容量瓶颈、QPS 瓶颈和机器宕机,这就是 redis 分布式和高可用需要解决的问题。

1.2、什么是主从复制

Master 可以拥有多个 slave;多个 slave 可以连接同一个 Master 外,还可以连接到其他的 slave;主从复制不会阻塞 Master,在主从复制时,Master 可以处理 client 请求。

1.3、主从复制形式

1.3.1、一主一从

Redis 主从复制

左边是 Master 节点,右边是 slave 节点,即主节点和从节点。主节点是数据写入,从节点可以通过复制操作将主节点的数据同步过来,并且随着主节点数据不断写入,从节点数据也会做同步的更新。

1.3.2、一主多从

Redis 主从复制

一个 master 可以有多个 slave,也就相当于有了多份的数据副本。这样可以做一个更加高可用的选择,例如一个 master 和一个 slave 挂掉了,还能有其他的 slave 数据备份。

1.4、主从复制作用

数据备份

将 master 的数据,备份到 slave

读写分离

用 master 来写入数据,用 slave 完成备份后,来完成只读的功能。

注意:

当 master 宕机后,不会去选择 slave 作为 master。需要手动将一台 slave 使用 slaveof on one 提升为 master,要想自动实现提升,我们就需要使用哨兵。

二、单机主从

配置一主二从

2.1、复制 redis.conf

在 /usr/local/redis 目下,将 redis.conf 复制成三份分别取名为:redis-8000.conf、redis-8001.conf、redis-8002.conf 三个配置文件

[root@zutuanxue redis]# cp redis.conf redis-8000.conf [root@zutuanxue redis]# cp redis.conf redis-8001.conf [root@zutuanxue redis]# cp redis.conf redis-8002.conf

2.2、配置主机

以 redis-8000 为主机

#bind 127.0.0.1 #将 bind 注释掉 或 bind 0.0.0.0 port 8000 # 改变其服务端口 daemonize yes # 修改服务为后台运行 pidfile /var/run/redis_8000.pid # 指定不同的 pid 文件,注意三份配置文件不同。 logfile "/usr/local/redis/log/redis_8000.log" # 指定 log 日志路径,自己配,要求不同。 dir ./data/redis_8000 # 这个指定 rdb 文件和 aof 文件的路径配置,要求改成不同。 masterauth ibethfy # 都配上吧,从服务到主服务的认证密码。 requirepass ibethfy # 三份文件都配置,客户端访问需要密码验证。

2.3、配置从机

以 redis-8001,redis-8002 为从机

#bind 127.0.0.1 #将 bind 注释掉 或 bind 0.0.0.0 port 8001 # 改变其服务端口 daemonize yes # 修改服务为后台运行 pidfile /var/run/redis_8001.pid # 指定不同的 pid 文件,注意三份配置文件不同。 logfile "/usr/local/redis/log/redis_8001.log" # 指定 log 日志路径,自己配,要求不同。 dir ./data/redis_8001 # 这个指定 rdb 文件和 aof 文件的路径配置,要求改成不同。 replicaof 127.0.0.1 8000 # 主服务这句话注释,从服务配置的两台需要开启。配置主服务的 ip 的 port。 masterauth ibethfy # 都配上吧,从服务到主服务的认证密码。 requirepass ibethfy # 三份文件都配置,客户端访问需要密码验证。
#bind 127.0.0.1 #将 bind 注释掉 或 bind 0.0.0.0 port 8002 # 改变其服务端口 daemonize yes # 修改服务为后台运行 pidfile /var/run/redis_8002.pid # 指定不同的 pid 文件,注意三份配置文件不同。 logfile "/usr/local/redis/log/redis_8002.log" # 指定 log 日志路径,自己配,要求不同。 dir ./data/redis_8002 # 这个指定 rdb 文件和 aof 文件的路径配置,要求改成不同。 replicaof 127.0.0.1 8000 # 主服务这句话注释,从服务配置的两台需要开启。配置主服务的 ip 的 port。 masterauth ibethfy # 从服务到主服务的认证密码。 requirepass ibethfy # 三份文件都配置,客户端访问需要密码验证。

注意:

replicaof 127.0.0.1 8000 在以前的版本中用的是 slaveof 127.0.0.1 8000,这个配置现在也可以使用

2.4、启动服务

开启服务

[root@zutuanxue redis]# ./src/redis-server ./redis-8000.conf [root@zutuanxue redis]# ./src/redis-server ./redis-8001.conf [root@zutuanxue redis]# ./src/redis-server ./redis-8002.conf

查看服务是否启动

[root@zutuanxue redis]# ps -ef|grep redis root 14464 1 0 11:58 ? 00:00:00 ./src/redis-server 0.0.0.0:8000 root 14477 1 0 11:58 ? 00:00:00 ./src/redis-server 0.0.0.0:8001 root 14484 1 0 11:58 ? 00:00:00 ./src/redis-server 0.0.0.0:8002 root 14491 13960 0 11:58 pts/1 00:00:00 grep --color=auto redis

开启三个客户端

[root@zutuanxue redis]# ./src/redis-cli -h 127.0.0.1 -p 8000 [root@zutuanxue redis]# ./src/redis-cli -h 127.0.0.1 -p 8001 [root@zutuanxue redis]# ./src/redis-cli -h 127.0.0.1 -p 8002

查看主从信息 info replication

127.0.0.1:8000> info replication # Replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=8001,state=online,offset=392,lag=1 slave1:ip=127.0.0.1,port=8002,state=online,offset=392,lag=1 master_replid:9e9ab9f313fae877e7330507fd7b4ce99bc98124 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:392 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:392
127.0.0.1:8001> info replication # Replication role:slave master_host:127.0.0.1 master_port:8000 master_link_status:up master_last_io_seconds_ago:6 master_sync_in_progress:0 slave_repl_offset:434 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:9e9ab9f313fae877e7330507fd7b4ce99bc98124 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:434 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:434
127.0.0.1:8002> info replication # Replication role:slave master_host:127.0.0.1 master_port:8000 master_link_status:up master_last_io_seconds_ago:4 master_sync_in_progress:0 slave_repl_offset:420 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:9e9ab9f313fae877e7330507fd7b4ce99bc98124 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:420 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:420

2.5、读写分离

主机写入信息

[root@zutuanxue redis]# ./src/redis-cli -h 127.0.0.1 -p 8000 127.0.0.1:8000> set str helloworld OK

从机查看信息

[root@zutuanxue redis]# ./src/redis-cli -h 127.0.0.1 -p 8001 127.0.0.1:8001> get str "helloworld" 127.0.0.1:8001> set h 123 (error) READONLY You can't write against a read only replica.
[root@zutuanxue redis]# ./src/redis-cli -h 127.0.0.1 -p 8002 127.0.0.1:8002> get str "helloworld" 127.0.0.1:8002> set h 123 (error) READONLY You can't write against a read only replica.

三、多机主从

配置一主二从

3.1、准备工作

开启三台虚拟主机 123、124、125,分别安装 redis

关闭主机防火墙

firewall-cmd --state # 查看防火墙状态 service firewalld stop # 关闭防火墙

3.2、配置主机和从机

123 为主机,修改配置文件 redis.conf

主机配置 #bind 127.0.0.1 #将 bind 注释掉 或 bind 0.0.0.0 port 6379 # 改变其服务端口 daemonize yes # 修改服务为后台运行 pidfile /var/run/redis_6379.pid # 指定不同的 pid 文件,注意三份配置文件不同。 logfile "/usr/local/redis/log/redis.log" # 指定 log 日志路径,自己配,要求不同。 dir ./ # 这个指定 rdb 文件和 aof 文件的路径配置,要求改成不同。 masterauth ibethfy # 都配上吧,从服务到主服务的认证密码。 requirepass ibethfy # 三份文件都配置,客户端访问需要密码验证。 从机配置 replicaof 192.168.1.123 6379 # 主服务这句话注释,从服务配置的两台需要开启。配置主服务的 ip 的 port。

3.3、启动服务

分别启动三台主机的 redis 服务器端服务

[root@zutuanxue redis]# ./src/redis-server ./redis.conf [root@zutuanxue redis]# ps -ef|grep redis

分别启动三台主机客户端服务

[root@zutuanxue redis]# ./src/redis-cli

查看主从信息 info replication

127.0.0.1:6379> info replication

3.4、读写分离

123 为 Master,124、125 为 Slave

Master 为写

127.0.0.1:6379> set str helloworld OK

Slave 为读

127.0.0.1:6379> get str "helloworld" 127.0.0.1:6379> set ss fdfd (error) READONLY You can't write against a read only replica.

四、手动设置主从

当 123 虚拟机死机后,如何去手动设置我们的主从,124 为主,125 为从

124 执行 slaveof no one

执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。

127.0.0.1:6379> slaveof no one OK 127.0.0.1:6379> info replication # Replication role:master connected_slaves:0 master_replid:edb62cdf853a4c9caeab077005a58a3633cb55d0 master_replid2:4bf0fb1edcb4ed661b919c0d10e6be193c63ccd1 master_repl_offset:1630 second_repl_offset:1631 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:1630

125 执行 slaveof host port

执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。

127.0.0.1:6379> slaveof 192.168.1.124 6379 OK 127.0.0.1:6379> info replication # Replication role:slave master_host:192.168.1.124 master_port:6379 master_link_status:up master_last_io_seconds_ago:3 master_sync_in_progress:0 slave_repl_offset:1701 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:edb62cdf853a4c9caeab077005a58a3633cb55d0 master_replid2:4bf0fb1edcb4ed661b919c0d10e6be193c63ccd1 master_repl_offset:1701 second_repl_offset:1631 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:1701

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-06-09发表,共计6962字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7966269
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛 NAS-4:飞牛 NAS 安装 istore 旁路由,家庭网络升级的最佳实践 开始 大家好我是...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...