【Redis】高可用——复制

什么是Redis的复制

官网地址: redis.io/docs/manage...

其实就是主从复制,master以写为主,slave以读为主

当master数据变化的时候,自动将新的数据异步同步到其它slave数据库

能解决的问题

  • 读写分离
  • 容灾备份
  • 数据备份
  • 水平扩容支撑高并发

实际操作

配从库不配主库

权限细节

  • 主机(master)如果配置了requirepass参数,需要密码登陆
  • 那么从机(slave)就要配置masterauth来设置校验密码,否则的话主机会拒绝从机的访问请求

主要命令

  • info replication
    • 可以查看复制节点的主从关系和配置信息
  • replicaof 主库IP 主库端口(主从复制)
    • 一般写入redis.conf配置文件内
  • slaveof 主库IP 主库端口(上面命令的手动配置版,手动指定做谁的小弟,可用于"改换门庭")
    • 每次与masterl断开之后,都需要重新连接,除非你配置进redis.conf文件
    • 在运行期间修改slave节点的信息,如果该数据库已经是某个主数据库的从数据库,那么会停止和原主数据库的同步关系转而和新的主数据库同步,重新拜码头~
  • slaveof no one("自立为王")
    • 使当前数据库停止与其他数据库的同步,转成主数据库,自立为王

操作流程

本文以Redis的一主二从(一台主机(master)两台从机(slave))为示例

准备阶段

下载镜像(本文用的docker,也可以使用虚拟机)

取一个centos的镜像(可以跟我用一样的,也可以用你自己的,前提是安装了docker)

bash 复制代码
docker pull bitnami/centos-base-buildpack:7-r9

​

安装Redis

  1. 下载redis安装包并解压
arduino 复制代码
wget https://download.redis.io/releases/redis-7.0.9.tar.gz

具体的版本参考地址(本文是用的是redis-7.0.9.tar.gz)

download.redis.io/releases/

  1. 解压

    tar -zxvf redis-7.0.9.tar.gz

  2. 进入解压目录

bash 复制代码
cd redis-7.0.9

​

  1. 编译
go 复制代码
make

​

  1. 指定安装目录并进行安装
ini 复制代码
make install PREFIX=/usr/local/redis

​

  1. 添加软连接
bash 复制代码
ln -s /usr/local/redis/bin/redis-server /usr/bin/redis-server 
ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis-cli
  1. 复制配置文件
bash 复制代码
cp /root/redis-7.0.9/redis.conf /usr/local/redis/bin/

​

此时/usr/local/redis/bin/目录下就出现了redis的配置文件

修改redis配置

进入配置文件所在目录(按照上面的操作redis.conf文件复制了一份到/usr/local/redis/bin)

​

打开redis.conf文件

​

差不多长这样

​

使用:set nu可以显示行号,方便查找

​

:行号可以快速跳转到某一行

​

/搜索内容可以定位到包含"搜索内容"的行

​

  1. 开启daemonize yes

    ​

  2. 注释掉bind127.0.0.1

    ​

  3. protected-mode no

    ​

  4. 指定端口

主不用改

​

2个从需要换一下端口号

​

  1. 指定当前工作目录,dir

​

  1. pid文件名字,pidfile

主不用改

​

从需要对应上面port的设置修改

​

  1. log文件名字,logfile

主不用改

​

从需要按照上面port的配置进行修改

​

  1. requirepass

为主机(master)设设置密码,后面从机(slave)连接要使用

​

  1. dump.rdb名字(建议添加端口号)

主机

​

从机

​

  1. aof文件,appendfilename

appendonly yes 时配置

  1. 从机(slave)访问主机(master)的通行密码masterauth,必须从机(slave)需要配置,此步骤主机(master)不用配置

​

从机(slave)需要做如下修改

  1. replicaof 主机(master)IP 主机(master)端口
  2. masterauth 就是主机(master)requirepass配置的密码

​

补充一下(我真体贴(。・ω・。))~

如何获取docker镜像的IP呢?

查看当前运行的容器信息

​

根据容器ID获取该容器的IP

​

在我们这个一主二从的案例中

  • 主机(master)
    • 172.17.0.2
  • 从机(slave)
    • 172.17.0.3
    • 172.17.0.4

在每个docker都完成上面的配置后,可以将配置文件复制一份到我们配置中用到的aqinredis文件夹下,并加上端口重命名下(方便管理非必需)

启动测试

先主后从,依次启动

主机(master)启动需要添加密码(requirepass中指定了的)

​

从机(slave)启动记得指定端口

​

​

在主里存入值,可以看到在两台从机(slave)中都可以获取到

​

但是从机(slave)是不能存值的(是只读的)

​

查看主从信息

主机(master)

​

从机(slave)

​

​

查看日志

我们查看下主机的日志(就是一开始配置文件redis.conf中设置的log文件),可以发现,已经记录了两台从机挂到主机上的日志了

​

可以再看下从机的日志,也可以看到相关信息

​

搞定!撒花🎉~~~~

相关推荐
陈随易1 小时前
Postman 被曝自动往 Claude Code 和 Codex 装插件
前端·后端·程序员
云-缩影3 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
考虑考虑4 小时前
Posrgresql恢复.backup文件
数据库·后端·postgresql
无奈何杨4 小时前
风控决策系统决策流,策略模式,权重、顺序、投票、最坏
后端
Patrick_Wilson5 小时前
Go 为什么需要 defer?从函数怎么收尾说起
后端·go·编程语言
苏三说技术6 小时前
DeepSeek Harness入驻B站,评论区被干成了大型插件集市!
后端
橙序员小站6 小时前
我一句话让 AI 把公众号工作台搭完了:部署实测记录
后端
Patrick_Wilson6 小时前
从文本输出理解 Go 方法与接口
后端·go·编程语言
QCoding7 小时前
企业级Agent Evaluation实战:Agent能跑就能上线?AI Agent到底怎么测?
后端·spring
苍何7 小时前
让 WorkBuddy 操控浏览器,干活有点猛啊1
后端