前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 部署Redis哨兵

Docker 部署Redis哨兵

作者头像
Reset
发布2022-12-27 16:22:41
5120
发布2022-12-27 16:22:41
举报
文章被收录于专栏:ResetReset

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • docker 方式部署redis
    • 创建目录
      • 新建一个redis目录,用于存放redis.conf
    • 配置文件
      • redis配置项
        • redis哨兵配置文件
      • 创建redis容器
        • 启动哨兵
          • 查看活跃的容器
            • 外部访问redis容器服务
              • 其他补充
          相关产品与服务
          云数据库 Redis
          腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档