引言: centos 7.5 版本 ; docker 20.10.8
1.拉取redis镜像
#根据docker hub 官网上进行版本选择
docker pull redis
#查看镜像
docker images
2.服务器中创建文件夹
这里我的路径是 /usr/local/docker/redis-sentinel
redis 文件夹用于搭建 redis集群 3台
sentinel 文件夹用于搭建 redis的哨兵服务 3台
3.搭建redis集群
3.1搭建redis集群-编写docker-compose.yml
#这里我们使用docker-compose 进行批量搭建
#将文件复制到相应目录 下面内容根据自身情况自定义
##这里一定一定要注意,yml文件对于格式要求非常严格!一个空格都不能错!!
#强烈建议用idea进行编写。。。 别问我怎么知道的,都是眼泪!!!!
yml文件对于格式要求非常严格!!
上传服务器之前,一定要把带#的注释删除,切记切记!!
version: '3.1' #版本号必须要输入(自定义 例如:1.1 2.2.) 不然无法运行
services:
master:
image: redis #镜像名称
container_name: redis-master #自定义docker容器
#command和volumes下面细说
command: redis-server /usr/local/etc/redis/redis.conf --replica-announce-ip 192.168.10.7 --replica-announce-port 6379
ports:
- 6379:6379 #docker容器对外映射端口:容器内部端口
environment:
# 设置时区为上海,否则时间会有问题
- TZ=Asia/Shanghai
volumes:
- ./data/master_datadir:/data
- ./conf/master_conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./logs/master_logs:/logs
slave1:
image: redis
container_name: redis-slave-1
command: redis-server /usr/local/etc/redis/redis.conf --slaveof redis-master 6379 --replica-announce-ip 192.168.10.7 --replica-announce-port 6380
ports:
- 6380:6379
environment:
# 设置时区为上海,否则时间会有问题
- TZ=Asia/Shanghai
volumes:
- ./data/slave1_datadir:/data
- ./conf/slave1_conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./logs/slave1_logs:/logs
slave2:
image: redis
container_name: redis-slave-2
command: redis-server /usr/local/etc/redis/redis.conf --slaveof redis-master 6379 --replica-announce-ip 192.168.10.7 --replica-announce-port 6381
ports:
- 6381:6379
environment:
# 设置时区为上海,否则时间会有问题
- TZ=Asia/Shanghai
volumes:
- ./data/slave2_datadir:/data
- ./conf/slave2_conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./logs/slave2_logs:/logs
#command 容器启动指令
command:
#将redis.conf 作为启动项
redis-server /usr/local/etc/redis/redis.conf
#从机确定主机端口 主机名 主机端口
--slaveof redis-master 6379
#设置当前服务的ip 这里必须用实际ip地址 不要用127.0.0.1
--replica-announce-ip 192.168.10.7
#设置当前服务的端口号
--replica-announce-port 6380
#挂载卷 不会的同学,请自学docker
volumes:
#服务器路径 : docker内部路径 (默认,无需修改)
- ./data/master_datadir:/data
- ./conf/master_conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./logs/master_logs:/logs
3.2搭建redis集群-编写redis.conf
##一定从官网下载reids安装包,获取该文件。并且和docker中镜像的版本尽量保持一致,不然会有坑!!
#这里只展示需要注意和需要改动的地方,基本上没有太多改动
port 6379 #无需修改 docker容器有很好的隔离性
protected-mode no #如果redis中设置了yes 则这里也必须相同
#如果需要设置reids密码 必须开启 从机密码一定与主机相同
requirepass 密码
#从机必须再加上
masterauth 密码(最好与上相同)
#打开aof,默认是关闭的
appendonly yes
#默认64m 修改为 5g
auto-aof-rewrite-min-size 5g
#注意 和cluster有关的配置最好不要开放 容易出各种奇怪的bug
3.3搭建redis集群-启动
#一定要在当前的docker-compose.yml文件夹中
docker-compose up -d
#查看运行状态 一定要看日志,有的时候docker容器启动了,但是内部服务是失败的
docker-compose logs -f
#查看docker容器
docker ps
#进入redis-master
docker exec -it 容器名|容器ID /bin/bash
#进入redis
#默认进入指令
redis-cli
#如果端口改了或者增加密码了 需要这样写
redis-cli -p 端口号 -a 密码
#添加 并查看
set key value #添加数据 只有主机有这个功能 从机只能读
keys * #查看所有数据
主机添加数据后,用同样的方法登录从机,如果看到了相应的数据,说明集群搭建完毕。如果数据不同意,请查看相关日志。其中一定会有问题!!
docker logs 容器名|容器ID
4.sentinel哨兵模式搭建
4.1配置文件
version: '3.1'
services:
sentinel1:
image: redis
container_name: redis-sentinel-1
ports:
- 26379:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf
environment:
# 设置时区为上海,否则时间会有问题
- TZ=Asia/Shanghai
sentinel2:
image: redis
container_name: redis-sentinel-2
ports:
- 26380:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf
environment:
# 设置时区为上海,否则时间会有问题
- TZ=Asia/Shanghai
sentinel3:
image: redis
container_name: redis-sentinel-3
ports:
- 26381:26379
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
volumes:
- ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
environment:
# 设置时区为上海,否则时间会有问题
- TZ=Asia/Shanghai
#这里是个坑,之前没有设置,会导致docker时间不同步,哨兵模式无限失败的问题
conf文件
#第一台
port 26379
sentinel announce-ip 192.168.10.7
sentinel announce-port 26379 #需要修改
#所有xxx的地方均为 自定义名称 例如:myredis
sentinel monitor xxx 192.168.10.7 6379 2
sentinel down-after-milliseconds xxx 30000
sentinel parallel-syncs xxx 1
sentinel failover-timeout xxx 180000
sentinel deny-scripts-reconfig yes
sentinel auth-pass xxx 密码
#第二台
port 26379
sentinel announce-ip 192.168.10.7
sentinel announce-port 26380
sentinel monitor xxx 192.168.10.7 2
sentinel down-after-milliseconds xxx 30000
sentinel parallel-syncs xxx 1
sentinel failover-timeout xxx 180000
sentinel deny-scripts-reconfig yes
sentinel auth-pass xxx 密码
其余不做具体展示,同上,需要修改相应信息即可
4.2启动
#创建容器
docker-compose up -d
#进入 容器
docker exec -it 容器名|容器ID /bin/bash
#进入redis 因为端口不是默认的,所以要设置
redis-cli -p 26379
#测试 查看哨兵信息
> info
#sentinel 容器内的常用api
1、sentinel masters
展示所有被监控的主节点状态以及相关的统计信息
2、sentinel master master-name
展示指定master-name的主节点状态以及相关的统计信息
3、sentinel slaves master-name
展示指定master-name的从节点状态以及相关统计信息
4、sentinel sentinels master-name
展示指定master-name的sentinel节点集合,不包含当前sentinel节点。
5、sentinel get-master-addr-by-name master-name
返回指定master-name的主节点的ip和端口
以上都完成,即可进行试验。比如 主从复制 leader选举 监控等等
docker相关
#如果docker-compose 成功 但是服务开启失败 需要删除容器 重新进行
docker ps #查看所有运行的容器
docker restart 容器名称|容器id #重启容器
docker stop 容器名称|容器id #停止容器
docker ps -a 查看所有容器(运行中和关闭中的都有)
docker rm -f 容器名称|容器id #删除容器