
docker-compose搭建一个公网访问的redis哨兵集群
docker-compose搭建redis主从+哨兵集群
系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 docker-compose入门之redis哨兵的搭建
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
docker的出现,极大的方便了我们快速的安装各种java开发中用到的中间件。这里首先以redis的哨兵为例,redis的单机版安装这里就不简述了。首先确保你的云服务器上已经安装了doker和docker-compose。
提示:以下是本篇文章正文内容,下面案例可供参考
一、部署环境
环境: 一台云服务器、Docker、Docker-Compose
目标: Redis哨兵模式,一主二从三哨兵
明细: Redis主节点(端口6379)、Redis从节点1(端口6380)、Redis从节点2(端口6381)、Redis哨兵1(端口26379)、Redis哨兵2(端口26380)、Redis哨兵3(端口26381)
二、哨兵集群目录
按照这个目录创建文件夹以及文件
二、使用步骤
1.创建master的redis.conf文件
在/home/docker/redis_master_slave_sentinel/master/conf/redis.conf文件中:
# redis 服务器的端口号(默认:6379)
port 6379
# 绑定的 IP 地址,如果设置为 127.0.0.1,则只能本地访问;若设置为 0.0.0.0,则监听所有接口(默认:127.0.0.1)
bind 0.0.0.0
#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭设置为no。
protected-mode yes
# 设置密码,客户端连接时需要提供密码才能进行操作,如果不设置密码,可以注释掉此行(默认:无)
# requirepass foobared
#requirepass gzlr123456
# 是否以守护进程(daemon)模式运行,默认为 "no",设置为 "yes" 后 Redis 会在后台运行
daemonize no
# 设置日志级别(默认:notice)。可以是 debug、verbose、notice、warning
loglevel notice
# 设置日志文件的路径(默认:空字符串),如果不设置,日志会输出到标准输出
logfile "/var/log/redis.log"
# 指定本地数据存放位置
dir "/data"
# 设置数据库数量(默认:16),Redis 使用数据库索引从 0 到 15
databases 16
# 是否启用 AOF 持久化,默认为 "no"。如果设置为 "yes",将在每个写操作执行时将其追加到文件中
appendonly no
# 指定更新日志的条件,有三个可选参数 - no:表示等操作系统进行数据缓存同步到磁盘(快),always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全), everysec:表示每秒同步一次(折衷,默认值);
appendfsync everysec
# 设置 AOF 持久化的文件路径(默认:appendonly.aof)
appendfilename "appendonly.aof"
# 设置是否开启 RDB 持久化,默认为 "yes"。如果设置为 "no",禁用 RDB 持久化功能
save 900 1
save 300 10
save 60 10000
# 设置 RDB 持久化文件的名称(默认:dump.rdb)
dbfilename dump.rdb
把上面master的redis.conf配置文件内容复制到/home/docker/redis_master_slave/sentinel/node_1/conf/redis.conf以及
在/home/docker/redis_master_slave/sentinel/node_2/conf/redis.conf文件中,node_1/conf/redis.conf把port端口修改为6380,node_2/conf/redis.conf中把port端口修改为6381
2.创建启动启动命令shell文件
在/home/docker/redis_master_slave_sentinel/scripts/run_redis_server.sh文件中
if [[ $1 = 'master' ]]; then
redis-server /etc/redis/redis.conf --requirepass $REQUIRE_PASS --masterauth $MASTER_AUTH
elif [[ $1 = 'slave' ]]; then
redis-server /etc/redis/redis.conf --slaveof $MASTER_HOST $MASTER_PORT --requirepass $REQUIRE_PASS --masterauth $MASTER_AUTH
else
echo "Usage: $0 [master|slave]"
echo " master - Redis master"
echo " slave - Redis slave"
fi
这样,当启动参数为slave时,则会执行–slaveof $MASTER_HOST $MASTER_PORT 命令,成为master的从节点
3.启动主从集群
在/home/docker/redis_master_slave_sentinel/replication/docker-compose.yml中:
version: "3"
services:
redis_master: # 服务名
image: redis # 使用的镜像
container_name: redis_master # docker启动的容器名称
volumes:
- /home/docker/redis_master_slave_sentinel/master/data:/data
- /home/docker/redis_master_slave_sentinel/master/conf:/etc/redis
- /home/docker/redis_master_slave_sentinel/master/log:/var/log
- /home/docker/redis_master_slave_sentinel/scripts:/root/redis_scripts
command: /bin/bash /root/redis_scripts/run_redis_server.sh master
env_file:
- /home/docker/redis_master_slave_sentinel/common.env
#ports:
# - 6379:6379
network_mode: host
redis_node_1:
image: redis
container_name: redis_node_1
depends_on:
- redis_master
volumes:
- /home/docker/redis_master_slave_sentinel/node_1/data:/data
- /home/docker/redis_master_slave_sentinel/node_1/conf:/etc/redis
- /home/docker/redis_master_slave_sentinel/node_1/log:/var/log
- /home/docker/redis_master_slave_sentinel/scripts:/root/redis_scripts
command: /bin/bash /root/redis_scripts/run_redis_server.sh slave
env_file:
- /home/docker/redis_master_slave_sentinel/common.env
#ports:
# - 6380:6380
network_mode: host
redis_node_2:
image: redis
container_name: redis_node_2
depends_on:
- redis_master
volumes:
- /home/docker/redis_master_slave_sentinel/node_2/data:/data
- /home/docker/redis_master_slave_sentinel/node_2/conf:/etc/redis
- /home/docker/redis_master_slave_sentinel/node_2/log:/var/log
- /home/docker/redis_master_slave_sentinel/scripts:/root/redis_scripts
command: /bin/bash /root/redis_scripts/run_redis_server.sh slave
env_file:
- /home/docker/redis_master_slave_sentinel/common.env
#ports:
# - 6381:6381
network_mode: host
该处的网络模式为 host,所以你的云服务器安全组设置中,必须把这些用到的端口添加到安全组中。
在/home/docker/redis_master_slave_sentinel/common.env文件中配置密码
REQUIRE_PASS=ghxk123456
MASTER_AUTH=ghxk123456
#MASTER_HOST=redis_master
MASTER_HOST=1.192.111.236 #注意,此处一定要修改成你自己的服务器ip
MASTER_PORT=6379
在/home/docker/redis_master_slave_sentinel/replication目录下运行容器启动命令
启动主从集群容器后,使用 docker ps 命令查看集群
至此,主从集群启动成功。
我们进入master节点内部,查看信息
set以及get都没问题。接着看一下主从信息
3.启动哨兵
在/home/docker/redis_master_slave_sentinel/docker-compose.yml文件中,配置哨兵相关的设置
# 服务器的端口号
port 26379
# 可访问的 IP 地址
bind 0.0.0.0
# 日志文件
logfile "sentinel.log"
# 监控的主机(格式为 sentinel monitor 主机名 主机ip 主机端口 多少个哨兵节点都认为主节点不可达时才会进行故障转移的数量)
sentinel monitor ms_redis 1.197.111.239 6379 2 #注意,此处一定要修改为你的服务器ip地址
# 监控的主机密码(格式为 sentinel auth-pass 主机名 主机连接密码)
sentinel auth-pass ms_redis ghxk123456
# 指定在多少毫秒内,哨兵节点没有收到主节点的响应时,就会将主节点判定为下线状态(格式为 sentinel down-after-milliseconds 主机名 超时毫秒数)
sentinel down-after-milliseconds ms_redis 5000
# 指定进行故障转移的超时时间,即在多少毫秒内完成故障转移操作(格式为 sentinel failover-timeout 主机名 主机连接密码)
sentinel failover-timeout ms_redis 60000
# 这个配置项用于指定在进行故障转移时可以同时同步的从节点数量(格式为 sentinel parallel-syncs 主机名 数量)
sentinel parallel-syncs ms_redis 1
#表示禁止通过脚本重写哨兵的配置 该参数是涉及到安全问题的,避免脚本重复,默认为Yes
sentinel deny-scripts-reconfig yes
#设置认证密码
requirepass ghxk123456
在/home/docker/redis_master_slave_sentinel/目录下启动哨兵容器
在此目录下运行 docker-compose up -d 启动哨兵
启动后查看容器,如下图
现在我们进入sentinel哨兵容器内部查看信息
再开一个会话窗口,通过docker pause redis_master来暂停master容器
暂停之后,再来sentinei哨兵节点查看信息,可以看到master节点已经从6379转移到6380了,至此主从+哨兵演示完成
故障转移完成,,现在可以恢复redis_master了
docker unpause redis_master
总结
提示:这里对文章进行总结:
以上就是本次搭建过程
更多推荐
所有评论(0)