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.1protected-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.1protected-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.1protected-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" ] 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" ] 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 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 直接使用的是宿主机的端口,所以在端口映射列是空的
验证集群 执行
登入 master 实例,再在 redis-cli 命令行提示符下执行
系统将显示类似信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 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 的哨兵模式。