Redis 集群-主从复制(基于Docker Compose)
·
Redis 集群-主从复制(基于Docker Compose)
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
更多关于Docker及Docker Compose的知识可以进入该链接
Redis 单机
Redis 主从复制
一个主数据库可以拥有多个从数据库,而一个从数据库只能拥有一个主数据库。Master不管Slave, Slave去找Master,Slave与Slave之间是无法进行通讯的。
同步的工作方式如下:
主机启动后台保存过程以生成RDB文件。同时,它开始缓冲从客户端收到的所有新写命令。后台保存完成后,主数据库将数据库文件传输到从数据库,从数据库将其保存在磁盘上,然后将其加载到内存中。然后,主服务器将所有缓冲的命令发送到副本。这是作为命令流完成的,并且与Redis协议本身的格式相同。
1.创建文件夹,进入该文件夹
# 创建文件夹
$ mkdir -p docker/redis/
#进入文件夹
$ cd docker/redis/
2.创建docker-compose.yml文件
也可直接下载我写好的docker-compose.yml文件
$ vim docker-compose.yml
docker-compose.yml内容如下:
# 撰写规范
version: '3.8'
# 定义容器
services:
# 名称
redis_master:
# 镜像名称
image: redis
# 容器名称
container_name: redis_master
# 跟随容器启动
restart: always
# 环境变量
environment:
- "TZ=Asia/Shanghai"
# 端口映射 主机端口:容器端口
ports:
- "6379:6379"
# 启动后默认执行命令
# 设置密码 --requirepass 123456
command:
redis-server --requirepass 123456
# 名称
redis_slave_1:
# 镜像名称
image: redis
# 容器名称
container_name: redis_slave_1
# 跟随容器启动
restart: always
# 环境变量
environment:
- "TZ=Asia/Shanghai"
# 端口映射 主机端口:容器端口
ports:
- "6380:6379"
# 启动后默认执行命令
# 将当前服务器转变为指定服务器的从属服务器 --slaveof host port
# 设置密码 --requirepass 123456
# Master服务器密码 --masterauth 123456
command:
redis-server --slaveof redis_master 6379 --requirepass 123456 --masterauth 123456
# 名称
redis_slave_2:
# 镜像名称
image: redis
# 容器名称
container_name: redis_slave_2
# 跟随容器启动
restart: always
# 环境变量
environment:
- "TZ=Asia/Shanghai"
# 端口映射 主机端口:容器端口
ports:
- "6381:6379"
# 启动后默认执行命令
# 将当前服务器转变为指定服务器的从属服务器 --slaveof host port
# 设置密码 --requirepass 123456
# Master服务器密码 --masterauth 123456
command:
redis-server --slaveof redis_master 6379 --requirepass 123456 --masterauth 123456
docker-compose.yml撰写规范(version)是根据docker版本不同,而有所不同的。
$ sudo docker --version
Docker version 19.03.8, build afacb8b7f0
以下是对应关系:撰写文件版本和升级
| Compose file format | Docker Engine release |
|---|---|
| Compose specification | 19.03.0+ |
| 3.8 | 19.03.0+ |
| 3.7 | 18.06.0+ |
| 3.6 | 18.02.0+ |
| 3.5 | 17.12.0+ |
| 3.4 | 17.09.0+ |
| 3.3 | 17.06.0+ |
| 3.2 | 17.04.0+ |
| 3.1 | 1.13.1+ |
| 3.0 | 1.13.0+ |
| 2.4 | 17.12.0+ |
| 2.3 | 17.06.0+ |
| 2.2 | 1.13.0+ |
| 2.1 | 1.12.0+ |
| 2.0 | 1.10.0+ |
| 1.0 | 1.9.1.+ |
3.docker-compose.yml启动管理的容器
$ sudo docker-compose up -d
Creating network "redis_default" with the default driver
Creating redis_slave_2 ... done
Creating redis_slave_1 ... done
Creating redis_master ... done
4.查看由docker-compose管理的容器
$ sudo docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------
redis_master docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
redis_slave_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6380->6379/tcp
redis_slave_2 docker-entrypoint.sh redis ... Up 0.0.0.0:6381->6379/tcp
5.查看容器运行状态
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9af1bfa762ce redis "docker-entrypoint.s…" 16 seconds ago Up 14 seconds 0.0.0.0:6379->6379/tcp redis_master
dc9280698682 redis "docker-entrypoint.s…" 16 seconds ago Up 14 seconds 0.0.0.0:6380->6379/tcp redis_slave_1
d9a9a2aa0dd3 redis "docker-entrypoint.s…" 16 seconds ago Up 14 seconds 0.0.0.0:6381->6379/tcp redis_slave_2
6.进入容器redis_master,查看主从复制状态
$ sudo docker exec -it 9af1bfa762ce bash
root@9af1bfa762ce:/data# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.19.0.2,port=6379,state=online,offset=112,lag=0
slave1:ip=172.19.0.3,port=6379,state=online,offset=112,lag=0
master_replid:0031d2325bc01f3e25c6a962c1abb14655dcf3e3
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:112
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:112
127.0.0.1:6379> exit
root@9af1bfa762ce:/data# exit
exit
redis-cli:进入redis。auth "123456":密码登录info replication:查看主从复制信息。
在此处我们可以看到connected_slaves:2,这意味着有两台从机连接。slave0和slave1便是两台从机的信息。
7.关闭并删除容器
$ sudo docker-compose down
Stopping redis_master ... done
Stopping redis_slave_2 ... done
Stopping redis_slave_1 ... done
Removing redis_master ... done
Removing redis_slave_2 ... done
Removing redis_slave_1 ... done
Removing network redis_default
更多推荐

所有评论(0)