主从复制.png
Rdis 的主从复制特点:
- 一个master可以有多个slave
- 一个slave只能有一个master
- 数据流向是单向的,从master到slave
配置环境:
宿主机上创建一个从redis服务器的docker
docker exec -it redis-s1 bash
从redis服务器
- 创建文件夹
mkdir /etc/redis
宿主机:
- 把前一个主redis服务器中的6379.conf文件cp到宿主机上:
docker cp b08dd3c84c50:/etc/redis/6379.conf .
- 把宿主机上的6379.cof文件cp到从redis服务器中
docker cp 6379.conf redis-s1:/etc/redis
从redis服务器
- 查看
/etc/redis/
可观察到cp成功
image.png
主从复制实验
主redis服务器:
-
修改配置文件
将bind从127.0.0.1改为0.0.0.0
修改bind -
重启服务
supervisorctl restart redis-6379
image.png redis-cli
进入终端-
info replication
查看主从信息
此时还未绑定任何从服务器
image.png
若在此之前有绑定从服务器,可用
slaveof no one
清空绑定
- 进行写操作
set n 10
image.png
从redis服务器
- 修改配置文件
vi /etc/redis/6379.conf
-
将bind从127.0.0.1改为0.0.0.0
修改bind 配置隶属于哪个主服务器
slaveof 主服务器的IP 端口号
slaveof 命令是
异步的
,非阻塞
。
并且此时,从服务器现有的数据会先被清空,之后再同步主服务器的数据。
其中172.17.0.2
是主redis服务器的ip地址,也可使用主服务器的容器名,前提是可以ping
通
image.png
- 重启服务,让配置文件生效
supervisorctl restart redis-6379
image.png - 进入终端,查看主从信息
redis-cli
进入终端
info replication
查看主从信息
可观察到,此时该服务器的role
是slave
,表明为从redis服务器
master_host
: 主服务器的ip地址 (若配置文件中填写的容器名,则会显示为容器名)
从服务器
- 获取主服务器设置的n的值
此时,通过get n
可获取到之前主服务器set
的n
的值
image.png
主redis服务器
- 回到主服务器可观察到
主redis服务器
已经配置了一个从服务器,且从服务器的ip是:172.17.0.3
主redis服务器.png