Redis 集群安装实验手册(一) - 主从复制

Redis 的主、从模式是一种比较简单的部署模式,主要为系统提供了有限的水平扩展能力。

实验环境

操作系统: Ubuntu 18.04
Docker: 18.09 ( 安装可参考 在Ubuntu 18.04 中安装 Docker )
Docker-Compose: 1.8.0 (可以执行 sudo apt install docker-compose 进行安装)
Redis-Cli: 3.0.6 (可以执行 sudo apt install redis-tools 进行安装)

实验目标

架设一个一主二从的 Redis 主从复制集群。 为尽量简化实验的复杂度,使用 Docker 和 Docker-Compose 进行配置,并且不配置存储,使用简单的 host 网络模式。

Master 主机端口为: 6379
Slave1 配置端口为: 6380
Slave2 配置端口为: 6381

Redis 配置文件

首先,我们为 Master 实例建立一个名为: redis-master.conf 的配置文件,内容如下:

1
2
3
4
5
6
7
bind 127.0.0.1

protected-mode no

port 6379

requirepass redis.123

端口设置为: 6379, 因为是主服务器,支持读、写,所以将 protected-mode 设置为 yes。设置了简单的安全机制,需要提供正确的密码才能连接。

接下来,定义两个从服务器的配置文件,分别是:

redis-slave-1.conf

1
2
3
4
5
6
7
8
9
10
11
bind 127.0.0.1

protected-mode yes

port 6380

requirepass redis.123

slaveof redis-server-master 6379

masterauth "redis.123"

slaveof 用于配置master节点信息。其格式为:

1
slaveof <masterip> <masterport>

masterip 用于指定 master 节点IP。

masterauth 用于指定 master 连接时需要的密码,必须和在 redis-master.conf 文件中配置的: requirepass 一致。

protected-mode 设置为 yes, 因为从节点对外时只读的。

redis-slave-2.conf

1
2
3
4
5
6
7
8
9
10
11
bind 127.0.0.1

protected-mode yes

port 6381

requirepass redis.123

slaveof 127.0.0.1 6379

masterauth "redis.123"

Docker-Compose 配置文件

定义好三个 Redis 实例的配置后,现在用 Docker-Compose 把它们的运行组合起来,新建名为: docker-compose.yml 的文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
version: '2'

services:
# 主节点的容器
redis-server-master:
image: redis
container_name: redis-server-master
network_mode: host
volumes:
- ./redis-master.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
# 从节点1的容器
redis-server-slave-1:
image: redis
container_name: redis-server-slave-1
network_mode: host
depends_on:
- redis-server-master
volumes:
- ./redis-slave-1.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
# 从节点2的容器
redis-server-slave-2:
image: redis
container_name: redis-server-slave-2
network_mode: host
depends_on:
- redis-server-master
volumes:
- ./redis-slave-2.conf:/usr/local/etc/redis/redis.conf
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]

注意:在本实验中,假设所有文件时在同一目录中的

启动 Master-Slave 集群

在 docker-compose.yml 所在的目录执行:

1
docker-compose up -d

系统显示:

1
2
3
Creating redis-server-master
Creating redis-server-slave-1
Creating redis-server-slave-2

如果使用 docker ps 命令,可以看到三个容器被启动了。

1
2
3
4
5
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
bf453b50450d redis "docker-entrypoint.s…" About a minute ago Up About a minute redis-server-slave-2
50ea91b18cbf redis "docker-entrypoint.s…" About a minute ago Up About a minute redis-server-slave-1
ffad579ed42e redis "docker-entrypoint.s…" About a minute ago Up About a minute redis-server-master
u

注意: PORT 列是空的,因为使用的是 host 模式,docker 直接使用的是宿主机的端口,所以在端口映射列是空的

验证集群

执行

1
redis-cli -a redis.123

登入 master 实例,再在 redis-cli 命令行提示符下执行

1
info replication

系统将显示类似信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6381,state=online,offset=14,lag=1
slave1:ip=127.0.0.1,port=6380,state=online,offset=14,lag=1
master_replid:cee0121df399d4b03a6bb67e76cf0180b9b36981
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14

下一步

下一步,我们将演示如何设定 Redis 的哨兵模式。

本文标题:Redis 集群安装实验手册(一) - 主从复制

文章作者:Morning Star

发布时间:2020年09月21日 - 19:09

最后更新:2021年04月16日 - 15:04

原始链接:https://www.mls-tech.info/redis/redis-setup-master-slave/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。