首页 > 数据库 >Redis安装之Redis7主从复制(replica)安装(Linux版)

Redis安装之Redis7主从复制(replica)安装(Linux版)

时间:2024-03-11 21:46:23浏览次数:37  
标签:主从复制 slave ## Redis7 redis 7.2 master 172.19 安装

官网说明:https://redis.io/docs/management/replication/

一. 背景

单机部署存在单点故障及数据丢失问题,为了实现

  • 读写分离
  • 容灾恢复
  • 数据备份
  • 水平扩容支撑高并发
    等功能,Redis可基于 主从复制 的特性搭建集群。

二. 方案原理

2.1. 读写分离

  • Master主机负责 写操作,Slave从机负责 读操作。
  • 当Master数据变化时,程序将采用异步的方式将数据同步给其他 Slave。

2.2. 主从同步

  1. slave 启动后,向 master 发起加入请求;
  2. 成功加入 master 后,向 master 发送 sync 命令;
  3. master 收到 sync 命令后,另起线程执行 bgsave 命令后台保存快照(即RDB持久化,主从复制时会触发RDB),同时缓存所有更新数据库的命令;
  4. master 执行 RDB 后,一次性将 RDB 和 所有缓存的命令发送到所有 slave,完成一次完全同步;
  5. slave 接收到 master 同步的数据后,将其存盘并加载到内存,完成复制初始化。 slave 自身拥有数据将会覆盖清除;
  6. master 为在 backlog 中为每个 slave 维护了一份同步数据偏移量(offset),后续将通过偏移量与每个 slave 实现增量同步。

Tips:

  1. redis 2.8 以前不支持部分同步。
    当主从服务器断接重连后,会再次进行全量数据同步。
  2. redis 2.8 之后支持部分同步。
    原理:
  • master 内存中为每个 slave 维护了一份同步日志和同步标识。
  • 每个 slave 在同步时会携带 同步标识 和 上次同步的最后位置。
  • 当主从断连后,slave 间隔时间内(默认1s)主动尝试和 master 连接。
    若 slave 携带的偏移量标识在 master 的同步日志中,则 slave 发送的偏移量开始继续上次的同步操作;
    若 slave 发送的偏移量不在 master 的同步日志中,则进行一次全量更新。
  • 增量同步时,master 会根据 backlog 中记录的每个 slave 的 offset 将该 slave 未同步的数据增量同步。

可参考:
https://www.cnblogs.com/sparkss/p/14707718.html#_lab20_3
https://developer.aliyun.com/article/1335735
https://developer.aliyun.com/article/1335736

2.3. 相关配置

################################# REPLICATION(主从复制) #################################
# 复制选项,slave复制对应的master。
# replicaof <masterip> <masterport>

#如果master设置了requirepass,那么slave要连上master,需要有master的密码才行。masterauth就是用来
#配置master的密码,这样可以在连上master后进行认证。
# masterauth <master-password>

#当slave同master失去连接 或者 复制正在进行,slave有两种运行方式:
#1) 如果slave-serve-stale-data设置为yes(默认设置),slave会继续响应客户端的请求。
#2) 如果slave-serve-stale-data设置为no,除INFO,replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG,SUBSCRIBE, UNSUBSCRIBE,
#PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB,COMMAND, POST, HOST: and LATENCY命令之外的任何请求都会返回一个错误”SYNC with master in progress”。
replica-serve-stale-data yes

#作为从服务器,默认情况下是只读的(yes),可以修改成NO,用于写(不建议)
replica-read-only yes

# 是否使用无磁盘复制(即使用socket方式复制数据),默认是使用disk方式复制数据
repl-diskless-sync no

#diskless复制的延迟时间,防止设置为0。一旦复制开始,节点不会再接收新slave的复制请求直到下一个rdb传输。所以最好等待一段时间,等更多的slave连上来
repl-diskless-sync-delay 5

#slave根据指定的时间间隔向master发送ping请求。时间间隔可以通过 repl_ping_slave_period 来设置,默认10秒。
# repl-ping-replica-period 10

# 复制连接超时时间。master和slave都有超时时间的设置。master检测到slave上次发送的时间超过repl-timeout,即认为slave离线,清除该slave信息。
#slave检测到上次和master交互的时间超过repl-timeout,则认为master离线。需要注意的是repl-timeout需要设置一个比repl-ping-slave-period更大的值,不然会经常检测到超时
# repl-timeout 60

#是否禁止 主从复制tcp连接的 tcp nodelay参数(结尾有解释)。默认是no,即使用tcp nodelay。
#如果master设置了yes来禁止tcp nodelay设置,在把数据复制给slave的时候,会减少包的数量并且更小的网络带宽。
#但是这也可能带来数据的延迟。默认我们推荐更小的延迟,但是在数据量传输很大的场景下,建议选择yes
repl-disable-tcp-nodelay no

#复制缓冲区大小,这是一个环形复制缓冲区,用来保存最新写命令。这样在slave离线的时候,不需要完
#全复制master的数据,如果可以执行部分同步,只需要把缓冲区的部分数据复制给slave,就能恢复正常复制状
#态。缓冲区的大小越大,slave离线的时间可以更长,复制缓冲区只有在有slave连接的时候才分配内存。没有
#slave的一段时间,内存会被释放出来,默认1m
# repl-backlog-size 1mb

# master没有slave一段时间会释放复制缓冲区的内存,repl-backlog-ttl用来设置该时间长度。单位为秒。
# repl-backlog-ttl 3600

# 当master不可用,Sentinel会根据slave的优先级选举一个master。最低的优先级的slave,当选master。而配置成0,永远不会被选举
replica-priority 100

#redis提供了可以让master停止写入的方式,如果配置了min-replicas-to-write,健康的slave的个数小于N,
#mater就禁止写入。master最少得有多少个健康的slave存活才能执行写命令。这个配置虽然不能保证N个slave都一
#定能接收到master的写操作,但是能避免没有足够健康的slave的时候,master不能写入来避免数据丢失。设置为0是关闭该功能
# min-replicas-to-write 3
 
# 延迟小于min-replicas-max-lag秒的slave才认为是健康的slave
# min-replicas-max-lag 10

三. 集群部署

3.1. 部署实现方案

  • 一主二从(配置版)
  • 一主二从(命令版)
  • 薪火相传

3.2. 环境准备

  • 172.19.223.161(主)
  • 172.19.223.162(从1)
  • 172.19.223.163(从2)

为方便区分,将从机端口分别置为:6380、6381。具体如下:

  • 172.19.223.161:6379
  • 172.19.223.162:6380
  • 172.19.223.163:6381

3.3. 一主二从(配置版)

此处仅redis主要安装步骤,无服务器环境检查及安装步骤。
具体可参照:https://www.cnblogs.com/DeepInThought/p/18059602

架构图:

3.3.1. 安装Redis

执行如下步骤,分别为172.19.223.161、172.19.223.162、172.19.223.163安装Redis。

## 下载
mkdir -p /opt/package
wget https://github.com/redis/redis/archive/7.2.4.tar.gz 

## 解压
tar -zxvf 7.2.4.tar.gz  -C ../
cd /opt/redis-7.2.4

## 编译
make && make install
cp /opt/redis-7.2.4/redis.conf /opt/redis-7.2.4/redis.conf.bak

3.3.2. 配置主机

配置主机: 172.19.223.161。
配置要点:配从(库)不配(主)库。

vi /opt/redis-7.2.4/redis.conf
## 找到如下配置项,将其参数值修改为如下

daemonize yes
## bind 127.0.0.1
protected-mode no
port 6379
dir /opt/redis-7.2.4/data
pidfile /var/run/redis_6379.pid
logfile /opt/redis-7.2.4/log/redis_6379.log
requirepass 219527
dbfilename dump_6379.rdb
appenddirname "appenddir"
appendfilename "appendonly_6379.aof"

## 退出保存
:wq

3.3.3. 配置从机

配置从机<1>: 172.19.223.162。

vi /opt/redis-7.2.4/redis.conf
## 找到如下配置项,将其参数值修改为如下

daemonize yes
## bind 127.0.0.1
protected-mode no
port 6380
dir /opt/redis-7.2.4/data
pidfile /var/run/redis_6380.pid
logfile /opt/redis-7.2.4/log/redis_6380.log
requirepass 219527
dbfilename dump_6379.rdb
appenddirname "appenddir"
appendfilename "appendonly_6380.aof"
## 从机新增配置
replicaof 172.19.223.160 6379
masteraurh "219527"

## 退出保存
:wq

配置从机<2>: 172.19.223.163。

vi /opt/redis-7.2.4/redis.conf
## 找到如下配置项,将其参数值修改为如下

daemonize yes
## bind 127.0.0.1
protected-mode no
port 6381
dir /opt/redis-7.2.4/data
pidfile /var/run/redis_6381.pid
logfile /opt/redis-7.2.4/log/redis_6381.log
requirepass 219527
dbfilename dump_6379.rdb
appenddirname "appenddir"
appendfilename "appendonly_6381.aof"
## 从机新增配置
replicaof 172.19.223.160 6379
masteraurh "219527"

## 退出保存
:wq

3.3.4 服务启动

## 先启动主机:172.19.223.161
redis-serve /opt/redis-7.2.4/redis.conf

## 再启动备机<1>:172.19.223.162
## 备机日志中出现 Connection to MASTER 172.19.223.161:6379  即OK。
redis-serve /opt/redis-7.2.4/redis.conf

## 再启动备机<2>:172.19.223.163
## 备机日志中出现 Connection to MASTER 172.19.223.161:6379  即OK。
redis-serve /opt/redis-7.2.4/redis.conf

## 待集群同步启动后,连接任意redis实例查看集群状态。
## 主机日主出现 Streamed RDB transfer with replica xxxx:xx succeeded 即连接从机成功。
## 主机日志出现 Synchronization with replica xxxx:xx succeeded 即同步数据至从机成功。
## 此处登录主机:
redis-cli -a 219527 -p 6379
> info replication 

3.4. 一主二从(命令版)

此处仅redis主要安装步骤,无服务器环境检查及安装步骤。
具体可参照:https://www.cnblogs.com/DeepInThought/p/18059602

3.4.1. 安装Redis

执行如下步骤,分别为172.19.223.161、172.19.223.162、172.19.223.163安装Redis。

## 下载
mkdir -p /opt/package
wget https://github.com/redis/redis/archive/7.2.4.tar.gz 

## 解压
tar -zxvf 7.2.4.tar.gz  -C ../
cd /opt/redis-7.2.4

## 编译
make && make install
cp /opt/redis-7.2.4/redis.conf /opt/redis-7.2.4/redis.conf.bak

3.4.2. 配置Redis

  1. 配置 172.19.223.161 Redis:
vi /opt/redis-7.2.4/redis.conf
## 找到如下配置项,将其参数值修改为如下

daemonize yes
## bind 127.0.0.1
protected-mode no
## 其他两台应用分别为 6380、6381
port 6379 
dir /opt/redis-7.2.4/data
pidfile /var/run/redis_6379.pid
logfile /opt/redis-7.2.4/log/redis_6379.log
requirepass 219527
dbfilename dump_6379.rdb
appenddirname "appenddir"
appendfilename "appendonly_6379.aof"

## 退出保存
:wq
  1. 配置 172.19.223.162 Redis:
vi /opt/redis-7.2.4/redis.conf
## 找到如下配置项,将其参数值修改为如下

daemonize yes
## bind 127.0.0.1
protected-mode no
port 6380
dir /opt/redis-7.2.4/data
pidfile /var/run/redis_6380.pid
logfile /opt/redis-7.2.4/log/redis_6380.log
requirepass 219527
dbfilename dump_6380.rdb
appenddirname "appenddir"
appendfilename "appendonly_6380.aof"
## 从机需要配置主机密码
masteraurh "219527" 

## 退出保存
:wq
  1. 配置 172.19.223.163 Redis:
vi /opt/redis-7.2.4/redis.conf
## 找到如下配置项,将其参数值修改为如下

daemonize yes
## bind 127.0.0.1
protected-mode no
port 6381
dir /opt/redis-7.2.4/data
pidfile /var/run/redis_6381.pid
logfile /opt/redis-7.2.4/log/redis_6381.log
requirepass 219527
dbfilename dump_6381.rdb
appenddirname "appenddir"
appendfilename "appendonly_6381.aof"
## 从机需要配置主机密码
masteraurh "219527" 

## 退出保存
:wq

3.4.3 服务启动

## 先启动主机:172.19.223.160
redis-serve /opt/redis-7.2.4/redis.conf
## 再启动备机<1>:172.19.223.161
redis-serve /opt/redis-7.2.4/redis.conf
## 再启动备机<2>:172.19.223.162
redis-serve /opt/redis-7.2.4/redis.conf

## 此时使用 redis-cli 分别登录三个实例执行 info replication  会发现三个实例均为 Master。

## 在备机<1>:172.19.223.161上执行
redis-cli -a 219527 -p 6380
> SLAVEOF 172.19.223.160 6379

## 在备机<2>:172.19.223.162上执行
redis-cli -a 219527 -p 6381
> SLAVEOF 172.19.223.160 6379

## 两台备机Redis启动一段时间后,将会称为 Master 的 Slaver。
## 可使用如下命令使当前实例停止与其他数据库的同步关系,成为 Master:
slaveof no one

Tips:

  • 一主二从(配置版)持久稳定,永久生效
  • 一主二从(命令版)当次生效,重启失效。备机 SHUTDOWN 后,再启动后将不会再次成为 Master 的 Slaver。

3.5. 薪火相传

架构图:

## 在 《## 3.3. 一主二从(配置版)》的配置基础上,仅需修改从机 172.19.223.162 的配置项 replicaof  为:
replicaof 172.19.223.161 6380 

四. Tips Mark

  • Slaver 只能读,不能写。
  • Slaver 连接 Master 后,Master 一次性将所有数据同步给 Slaver,后续 Master 会将收到的写操作也一一同步给 Slaver。
  • Master 停止服务后,Slaver 依然可以提供读操作,但不会上位接替 Master 的工作,即仍不可写。
  • Master 停止服务后,再重启,主从关系依然存在,集群如初运转。
  • Slaver 停止服务后,再重启,将于 Master 再次数据同步后,正常提供服务。

标签:主从复制,slave,##,Redis7,redis,7.2,master,172.19,安装
From: https://www.cnblogs.com/DeepInThought/p/18059921

相关文章

  • docker安装awvs
    1,下载awvsdockerpullsecfa/docker-awvs2,创建容器命令:dockerrun-it-d-p3443:3443secfa/docker-awvs如果报错!(提示crack失败)添加参数--cap-addLINUX_IMMUTABLE命令:dockerrun-itd-p3443:3443--cap-addLINUX_IMMUTABLE--nameawvssecfa/docker-awvs3,登录访......
  • 在virtualbox上安装ubuntu
    本教程以virtualbox7.0.14+ubuntu20.04.4为例。ubuntu官网其实已经有一篇写的非常棒的安装教程,链接如下。https://ubuntu.com/tutorials/how-to-run-ubuntu-desktop-on-a-virtual-machine-using-virtualbox#1-overview目录如下。OverviewCreateanewvirtualmachineI......
  • Linux安装Libevent
    环境Ubuntu20.04.264位 软件包安装通过apt-get命令可以直接安装Libevent,这种方式方便快捷,省时省力。安装命令如下:sudoapt-getinstalllibevent-dev源码安装源码安装一般有如下步骤:./configuremakemakeinstall运行./configure命令:运行该命令会当前路......
  • t02_安装docker
    一、安装方式一、Docker#1、yum包更新到最新yumupdate#2、安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2#3、设置yum源yum-config-manager--add-repohttps......
  • 解决问题:HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相
      缺少AspNetCoreModuleV2模块,下载安装即可。ps:.netframework是可以直接发布,IIS指定就能正常访问的。但aspnetcore项目略有不同,要额外安装一个模块,如果没有安装,会报HTTP错误500.19-InternalServerError的错。1、官方版本地址:https://dotnet.microsoft.com/down......
  • Esxi 安装企业版 suse 系统
    ......
  • linux系统centos7.9如何安装nginx
    1、官网下载nginxnginx官网:https://nginx.org/选择稳定版进行下载,也可以下载老版本,下载成功后上传到服务器。2、使用wget下载访问nginx官网,在下载页面鼠标右击复制链接地址。登录服务器使用wget命令下载:wgethttps://nginx.org/download/nginx-1.24.0.tar.gz3、解压文件t......
  • Windows系统中安装docker
    目录一.安装wsl二.下载dockerdesktop三.更换Docker镜像引用出处一.安装wsl在安装wsl之前,先在Windows中配置WSL环境,步骤很简单,按照以下文章进行Windows10/11配置WSL(Ubuntu)环境以管理员身份打开WindowsPowerShell,执行以下命令执行该命令必须是Windows102004及更高版本......
  • ubuntu20.04-通过docker安装jenkins并自动化发布java
    前言jenkins需要git、maven和node,其中maven和node手动添加,git和git环境是jenkins镜像自带了的。如果删除了docker对应的jenkins容器后(删除前一定备份jenkins_home整个文件夹,否则怕前功尽弃:tar-czvfjenkins_home.tar.gz/var/jenkins_home)如果删除了容器,需要重新安装并配置m......
  • centos7安装sftp
    FTP明文传输,SFTP传输加密后更加的可靠,所以选择sftp1、ssh-V命令来查看openssh的版本版本必须大于4.8p1低于的这个版本需要升级升级的话可以在网上找下输入ssh-V  2、创建SFTP相关用户及目录 2.1创建一个系统用户,并设置成不能登录,按需设置登录的shell和家目录use......