redis 主从发复制架构
仅仅用来解决数据的冗余【备份】,从节点仅仅用来同步数据
接下来开始完整的使用docker部署一个redis主从复制架构
1、下载redis镜像
docker pull redis:5.0
2、修改配置文件
由于docker 拉取的镜像文件中不包含redis.conf配置文件,所以只能只能手动导入,存放在/home文件夹下,后续通过文件映射的方式来进行配置。
-
创建文件夹存放data持久化文件和配置文件
mkdir -p /data/redis/master/data mkdir -p /data/redis/slave1/data mkdir -p /data/redis/slave2/data cp /home/redis.conf /data/redis/master/ cp /home/redis.conf /data/redis/slave1/ cp /home/redis.conf /data/redis/slave2/
-
修改redis.conf配置文件
master下配置文件修改
#修改rdb持久化模式下dump.rbd文件存放位置 dir /data #修改bind,运行外部访问连接 bind 0.0.0.0
slave下配置文件修改
#修改rdb持久化模式下dump.rbd文件存放位置 dir /data #修改bind,运行外部访问连接 bind 0.0.0.0 #修改主从复制配置 #replicaof redis-master 6379
注意点:这里如果设置了访问密码,那么在slave配置下也要设置master的访问密码;其次,这里由于是docker容器,ip地址不能确定,所以这里直接使用
docker run --link
来配置访问master节点。关于--link
redis-master:redis 使用的格式为 :name:alias 这里的redis-master就是master节点容器名称,redis是别名
3、启动容器
- 主master节点启动
docker run --name redis-master -p 6379:6379 -v /data/redis/master/data:/data -v /data/redis/master/redis.conf:/usr/local/etc/redis/redis.conf -d redis:5.0 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
- slave1节点启动
docker run --name redis-slave1 --link redis-master:master -p 6380:6379 -v /data/redis/slave1/data:/data -v /data/redis/slave1/redis.conf:/usr/local/etc/redis/redis.conf -d redis:5.0 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
- slave2节点启动
docker run --name redis-slave2 --link redis-master:master -p 6381:6379 -v /data/redis/slave2/data:/data -v /data/redis/slave2/redis.conf:/usr/local/etc/redis/redis.conf -d redis:5.0 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
启动完成之后使用docker ps
查看是否存在三个容器,如果存在就表示正常启动。上面的命令完整可用
4、测试
这里测试就可以分别连接三个服务器,通过在master节点写入key 在slave1和slave2节点查看是否同步到数据
在服务器端进入容器方式如下:
#进入容器
docker exec -it redis-master /bin/bash
#连接redis客户端
redis-cli
#执行命令
set name zhangsan
Ok
分别在slave1和slave2查看是否同步到name
ps:这里还可以测试主从复制下是否master节点挂掉之后从节点是否会顶替主节点以及从节点是否能够写入数据,验证一开始的结论。