Docker 部署Redis哨兵

2022-12-27 16:22:41 浏览数 (1)

docker 方式部署redis

创建目录

新建一个redis目录,用于存放redis.conf

代码语言:javascript复制
mkdir /software/redis
# 主节点
mkdir /software/redis/master
mkdir /software/redis/master/conf
mkdir /software/redis/master/data
# 从节点1
mkdir /software/redis/salve1
mkdir /software/redis/salve1/conf
mkdir /software/redis/salve1/data

# 从节点2
mkdir /software/redis/salve1
mkdir /software/redis/salve1/conf
mkdir /software/redis/salve1/data

配置文件

下载官网配置文件

redis配置项

代码语言:javascript复制
bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问

protected-mode no #默认yes,开启保护模式,限制为本地访问

daemonize no #默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败

databases 16 #数据库个数(可选),我修改了这个只是查看是否生效。。

dir  ./ #输入本地redis数据库存放文件夹(可选)

appendonly yes #redis持久化(可选)

logfile "access.log"

# redis密码配置
# requirepass master_123
requirepass salve_123

# 修改端口号
port 7001
# port 7002
# port 7003
############################以下配置为从服务器配置,主服务器无需配置#################

#下面的IP和端口号为表示为redis主服务器
replicaof  192.168.3.115 7001
# 如果主服务器配置了密码,则需要添加如下命令(123456表示redis主服务器的密码)
masterauth 123456

redis哨兵配置文件

代码语言:javascript复制
# 哨兵使用的端口号,默认是26379,可以更改
port 8001
# port 8002
# port 8003
# 文件存储位置
dir "/"
# 日志保存的文件路径(该文件路径必须存在)
logfile "/sentinel.log"
# 哨兵监控IP为192.168.3.115端口号为7002的redis主服务器,主服务器名称为mymaster,最后的数字表示数量,例如3台哨兵,其中有2台哨兵认为redis主服务器已经宕机,则主机已经宕机,否则不认为redis的主服务器宕机
sentinel monitor mymaster 192.168.3.115 7002 2
# 在指定的毫秒数内,若主节点没有应答哨兵的 PING 命令,此时哨兵认为服务器主观下线,默认时间为 30 秒。
sentinel down-after-milliseconds mymaster 5000

# 如果主服务器配置了密码,则哨兵也必须配置密码,否则哨兵无法对主从服务器进行监控,该密码与主服务器密码一致
sentinel auth-pass mymaster 123456

# redis哨兵密码
requirepass 123456

创建redis容器

代码语言:javascript复制
# 可以在从服务器的docker命令加入如下代码,则可以省略配置文件中配置的masterauth和requirepass
--requirepass 123456 --masterauth 123456 
# 启动redis主节点 7001
docker run --net host --name redis1 
-v /software/redis/master/conf/redis.conf:/redis.conf 
-v /software/redis/master/data:/data 
--privileged=true -d redis:6.0.6 redis-server /redis.conf


# 启动redis从节点1 7002
docker run --net host --name redis2 
-v /software/redis/slave1/conf/redis.conf:/redis.conf 
-v /software/redis/master/data:/data 
--privileged=true -d redis:6.0.6 redis-server /redis.conf


# 启动redis从节点2 7003
docker run --net host --name redis3 
-v /software/redis/slave2/conf/redis.conf:/redis.conf 
-v /software/redis/master/data:/data 
--privileged=true -d redis:6.0.6 redis-server /redis.conf 

# -p 6379:6379 端口映射:前表示主机部分:后表示容器部分
# -name master_redis 指定该容器名称
# -v 挂载配置文件目录,规则与端口映射相同
# -d redis 表示后台启动redis
# --appendonly yes 开启redis 持久化
# --net host docker网络模式,直接使用宿主机的端口,无需进行挂载端口号

启动哨兵

代码语言:javascript复制
# 启动从节点1哨兵 8001
docker run --net host --name redis-sentinel1 
-v /software/redis-sentinel/node1/sentinel.conf:/sentinel.conf 
-d redis:6.0.6  redis-sentinel /sentinel.conf

# 启动从节点2哨兵 8002
docker run --net host --name redis-sentinel2 
-v /software/redis-sentinel/node2/sentinel.conf:/sentinel.conf 
-d redis:6.0.6  redis-sentinel /sentinel.conf

# 启动从节点3哨兵 8003
docker run --net host --name redis-sentinel3 
-v /software/redis-sentinel/node3/sentinel.conf:/sentinel.conf 
-d redis:6.0.6  redis-sentinel /sentinel.conf

# 查看容器IP
docker inspect redis1
docker inspect redis2
docker inspect redis3

查看活跃的容器

代码语言:javascript复制
# 查看活跃的容器
docker ps
# 如果没有 redis1 说明启动失败 查看错误日志
docker logs redis1
# 查看 redis1 的 ip 挂载 端口映射等信息
docker inspect redis1
# 查看 redis1 的端口映射
docker port redis1

外部访问redis容器服务

代码语言:javascript复制
# 进入容器
docker exec -it redis1 bash
# 打开redis控制台
redis-cli

其他补充

手动配置redis主从
代码语言:javascript复制
# 如果没有在redis从节点的配置文件中进行配置replicaof和masterauth,则可以通过命令行进行手动配置(服务器若重启,则也需要重新配置)
# 步骤1:输入从密码
auth 123456
# 步骤2:配置主服务器认证密码
masterauth 123456
# 步骤3:从服务器连接主服务器(slaveof/replicaof)
replicaof 192.168.3.115 7001
其他错误问题

1.1 若文件挂载变成了文件夹,则证明挂载有问题、docker的挂载命令必须是文件夹,例如宿主机的配置文件在路径为/conf/sentinel.conf,需要挂载到docker容器中的/conf/sentinel.conf,则命令为:-v /conf:/conf

1.2 若挂载命令正确,还是无法挂载,可以通过ls命令查看一下该文件、保证文件名称是正确的(ftp展示的文件夹正确、但ls命令下不正确,则以ls命令为准)

1.3 若在redis中的配置文件中注释了bind 127.0.0.1,但redis服务器还是无法连接,则可以把该命令取消注释并修改为:bind 0.0.0.0 然后重启容器

1.4 若redisson配置了哨兵,当主服务器关闭时,redisson获取不到新的主服务器地址,一直在重新连接,则该问题可以通过调整哨兵的【心跳时间】,我这里调成5s,则Redisson重新连接上新的主服务器

1.5 欢迎各位进行留言讨论

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=34ljcn7ymwaog

0 人点赞