目录
1. 拉取redis镜像
2.使用可视化redis工具
3. 设置从redis
4.设置哨兵模式
5. 使用docker-compose快速创建
1. 拉取redis镜像
docker pull redis
默认拉取最新的镜像。
然后pull结束后使用docker images检查镜像:
然后docker run创建container容器
首先创建主redis服务
先使用如下命令创建redis.conf文件和data文件夹用于存放docker container中的volume:
mkdir -p /home/test_redis/redis_master_1/conf
mkdir -p /home/test_redis/redis_master_1/data
touch /home/test_redis/redis_master_1/conf/redis.conf
然后vim /home/test_redis/redis_master_1/conf/redis.conf 编辑配置文件
主redis其实不需要配置,默认就好,所以redis.conf为空就可以
然后创建container容器:
docker run -d -p 6379:6379 --restart unless-stopped \
-v /home/test_redis/redis_master_1/data:/data \
-v /home/test_redis/redis_master_1/conf/redis.conf:/etc/redis/redis.conf \
--name redis_master_1 \
redis \
redis-server
然后复制到命令行运行
运行成功后:
2.使用可视化redis工具
使用redisinsight工具,官网:RedisInsight - The Best Redis GUI
然后下载安装:
这里下载需要填写各种信息。提供下载好的windows版本:
https://wwf.lanzouo.com/ihBUC1utxjmf
密码:hehb
我这里使用windows版本远程连接
填写ip和端口号
连接后是空,添加一个key
也可使用cli命令行工具
3. 设置从redis
这里另外创建一个redis容器
不过redis.conf需要修改。
首先创建文件夹和文件,这里直接复制
cd /home/test_redis/
mkdir -p redis_slave_1/data
mkdir -p redis_slave_1/conf
touch redis_slave_1/conf/redis.conf
然后编辑redis.conf,输入如下内容:
port 6380
replicaof <ip地址> 6379
然后创建容器:
docker run -d -p 6380:6380 --restart unless-stopped \
-v /home/test_redis/redis_slave_1/data:/data \
-v /home/test_redis/redis_slave_1/conf/redis.conf:/etc/redis/redis.conf \
--name redis_slave_1 \
redis \
redis-server /etc/redis/redis.conf
然后用redisinsight连接6380端口
连接成功后在cli命令行键入 info replication命令:
说明已经连接上了。
查看一下Key:
成功复制了主redis的key。
然后测试在从redis创建key
报错,因为从redis只能复制主redis,即不能写。
尝试在主redis设置key:
从redis:
主从复制设置成功
然后再添加一个从redis
cd /home/test_redis/
cp -r redis_slave_1 reids_slave_2
rm redis_slave_2/data/*
vim redis_slave_2/conf/redis.conf
输入如下内容:
port 6381
replicaof 121.37.188.69 6379
就改了一下端口
然后创建容器:
docker run -d -p 6381:6381 --restart unless-stopped \
-v /home/test_redis/redis_slave_2/data:/data \
-v /home/test_redis/redis_slave_2/conf/redis.conf:/etc/redis/redis.conf \
--name redis_slave_2 \
redis \
redis-server /etc/redis/redis.conf
在主redis的redisinsight窗口的cli命令行输入info replication
现在已经有两个从redis了。
检查一下新的从redis:
数据也复制过来了。
4.设置哨兵模式
这里还是使用之前pull的redis镜像,只不过更改了配置文件: sentinel.conf,redis-server运行时也是运行sentinel.conf文件。
然后运行如下命令:
cd /home/test_redis
cp -r redis_master_1 redis_sentinel_1
rm redis_sentinel_1/data/*
rm redis_sentinel_1/conf/*
touch redis_sentinel_1/conf/sentinel.conf
vim redis_sentinel_1/conf/sentinel.conf
输入如下内容:
sentinel monitor mymaster 121.37.188.69 6379 1
表示只需一个哨兵即可开启哨兵模式。
然后创建容器:
docker run -d --restart unless-stopped \
-v /home/test_redis/redis_sentinel_1/data:/data \
-v /home/test_redis/redis_sentinel_1/conf/sentinel.conf:/etc/redis/sentinel.conf \
--name redis_sentinel_1 \
redis \
redis-sentinel /etc/redis/sentinel.conf
进入docker内部检查:
已经配置成功。
尝试关闭主redis模拟主redis故障
这里世界docker stop 停止主redis
docker stop redis_master_1
6380 redis
6381从redis
可以看到6380变为了主redis, 6381还是从redis
尝试设置6380的key:
6381:
6381成功更新
这时重启6379:
docker start redis_master_1
6379变为6380的从redis了,并且数据也复制了:
哨兵模式设置成功。
5. 使用docker-compose快速创建
前面总公设置了4个服务,使用docker-compose可以一次性部署:
cd /home
cp -r test_redis test_redis_2
cd /home/test_resis_2
rm */data/*
创建docker-compose.yml文件:
touch docker-compose.yml
输入如下内容:
version: '3'
services:
redis_master_1:
ports:
- "6379:6379"
image: "redis"
restart: unless-stopped
volumes:
- /home/test_redis_2/redis_master_1/data:/data
- /home/test_redis_2/redis_master_1/conf/redis.conf:/etc/redis/redis.conf
command: redis-server /etc/redis/redis.conf
redis_slave_1:
ports:
- "6380:6380"
image: "redis"
restart: unless-stopped
volumes:
- /home/test_redis_2/redis_slave_1/data:/data
- /home/test_redis_2/redis_slave_1/conf/redis.conf:/etc/redis/redis.conf
command: redis-server /etc/redis/redis.conf
redis_slave_2:
ports:
- "6381:6381"
image: "redis"
restart: unless-stopped
volumes:
- /home/test_redis_2/redis_slave_2/data:/data
- /home/test_redis_2/redis_slave_2/conf/redis.conf:/etc/redis/redis.conf
command: redis-server /etc/redis/redis.conf
redis_sentinel_1:
image: "redis"
restart: unless-stopped
volumes:
- /home/test_redis_2/redis_sentinel_1/data:/data
- /home/test_redis_2/redis_sentinel_1/conf/sentinel.conf:/etc/redis/sentinel.conf
command: redis-sentinel /etc/redis/sentinel.conf
结果:
测试:
测试可行,这里就不放图了。
使用docker-compose主要是方便部署。