docker部署redis集群(一主双从,哨兵模式)

docker部署redis集群(一主双从,哨兵模式)

一、一主多从模式

1、创建目录

mkdir  -p /xjj/redis-master/conf
mkdir  -p /xjj/redis-master/data
mkdir  -p /xjj/redis-master/logs

mkdir  -p /xjj/redis-slave1/conf
mkdir  -p /xjj/redis-slave1/data
mkdir  -p /xjj/redis-slave1/logs

mkdir  -p /xjj/redis-slave2/conf
mkdir  -p /xjj/redis-slave2/data
mkdir  -p /xjj/redis-slave2/logs

2、拷贝redis.conf文件,放到master节点conf目录下

 cd /xjj/redis-master/conf/
 vi  redis.conf

redis.conf内容如下:

#外部访问(要修改)
bind 0.0.0.0
# 是否启用保护模式
protected-mode no
#端口号
port 6379
#守护模式
daemonize no
#端口文件
pidfile /var/run/redis_6379.pid
#日志级别
loglevel notice
#日志文件地址
logfile "/var/log/redis/redis6379-server.log"
#数据库个数
databases 16
#rdb保存策略
save 5 2
#rdb保存文件的名称
dbfilename redis6379.rdb
#rdb和aop保存的文件目录
dir /data

#开启aof
appendonly yes
#aof的名称,可修改
appendfilename "appendonly6379.aof"
#aof保存的文件路径,和dir拼接 “/data/appendonlydir”,aof保存在/data/appendonlydir路径下
appenddirname "appendonlydir"
#aof保存策略,每秒写入一次
appendfsync everysec
#设置密码
requirepass 111111
masterauth  111111

3、创建网络

docker network create redis-net

4、运行容器

docker run -d --name redis-master  \
--network redis-net \
 -p 6379:6379 \
-v /xjj/redis-master/data:/data  \
 -v /xjj/redis-master/conf:/etc/redis \
 -v /xjj/redis-master/logs/:/var/log/redis   \
redis:latest redis-server /etc/redis/redis.conf

发现启动不起来,使用命令docker logs redis-master,会报错如下:

在这里插入图片描述

没有权限,解决方法:

加权限:

chmod  777 /xjj/redis-master/logs/

在重新启动redis-master容器:

docker  start redis-master

5、slave1从节点

编写redis.conf文件:

#外部访问(要修改)
bind 0.0.0.0
# 是否启用保护模式
protected-mode no
#端口号
port 6380
#守护模式
daemonize no
#端口文件
pidfile /var/run/redis_6380.pid
#日志级别
loglevel notice
#日志文件地址
logfile "/var/log/redis/redis6380-server.log"
#数据库个数
databases 16
#rdb保存策略
save 5 2
#rdb保存文件的名称
dbfilename redis6380.rdb
#rdb和aop保存的文件目录
dir /data

#开启aof
appendonly yes
#aof的名称,可修改
appendfilename "appendonly6380.aof"
#aof保存的文件路径,和dir拼接 “/data/appendonlydir”,aof保存在/data/appendonlydir路径下
appenddirname "appendonlydir"
#aof保存策略,每秒写入一次
appendfsync everysec
#设置密码
requirepass 111111
# replicaof 主节点ip 端口
replicaof 122.51.104.189 6379
#master节点密码
masterauth 111111

给logs目录加权限:

chmod  777 /xjj/redis-slave1/logs/

启动容器:

docker run -d --name redis-slave1    \
--network redis-net  \
 -p 6380:6380 \
-v /xjj/redis-slave1/data:/data  \
 -v /xjj/redis-slave1/conf:/etc/redis \
 -v /xjj/redis-slave1/logs/:/var/log/redis   \
redis:latest redis-server /etc/redis/redis.conf --replicaof redis-master 6379

6.slave2从节点

编写redis.conf文件:

#外部访问(要修改)
bind 0.0.0.0

# 是否启用保护模式

protected-mode no
#端口号
port 6381
#守护模式
daemonize no
#端口文件
pidfile /var/run/redis_6381.pid
#日志级别
loglevel notice
#日志文件地址
logfile "/var/log/redis/redis6381-server.log"
#数据库个数
databases 16
#rdb保存策略
save 5 2
#rdb保存文件的名称
dbfilename redis6381.rdb
#rdb和aop保存的文件目录
dir /data

#开启aof
appendonly yes
#aof的名称,可修改
appendfilename "appendonly6381.aof"
#aof保存的文件路径,和dir拼接 “/data/appendonlydir”,aof保存在/data/appendonlydir路径下
appenddirname "appendonlydir"
#aof保存策略,每秒写入一次
appendfsync everysec
#设置密码
requirepass 111111

# replicaof 主节点ip 端口
replicaof 122.51.104.189 6379
#master节点密码
masterauth 111111

给logs目录加权限:

chmod  777 /xjj/redis-slave2/logs/

启动容器:

docker run -d --name redis-slave2    \
--network redis-net  \
 -p 6381:6381 \
-v /xjj/redis-slave2/data:/data  \
 -v /xjj/redis-slave2/conf:/etc/redis \
 -v /xjj/redis-slave2/logs/:/var/log/redis   \
redis:latest redis-server /etc/redis/redis.conf --replicaof redis-master 6379

7.查看naster主节点日志文件

cat /xjj/redis-master/logs/redis6379-server.log

在这里插入图片描述

代表成功。

8、有一个问题,为什么我redis.conf配置文件中已经指定了

# replicaof 主节点ip 端口
replicaof 122.51.104.189 6379

但是不起作用,必须要在docker run 启动容器时指定

--replicaof redis-master 6379

才生效主从复制配置。

二、哨兵模式配置

1、新建目录

mkdir -p  /xjj/sentinel26379/conf;
mkdir -p  /xjj/sentinel26379/logs;
mkdir -p /xjj/sentinel26379/data;

mkdir -p  /xjj/sentinel26380/conf;
mkdir -p  /xjj/sentinel26380/logs;
mkdir -p /xjj/sentinel26380/data;

mkdir -p  /xjj/sentinel26381/conf;
mkdir -p  /xjj/sentinel26381/logs;
mkdir -p /xjj/sentinel26381/data;

2、直接写服务器ip地址,配置不会生效(注意)

查找主节点的ip地址(172.18.0.7)

docker inspect redis-master | grep IPAddress

sentinel.conf的配置文件都要修改

2、编辑配置/xjj/sentinel26379/conf/sentinel.conf文件

#外部访问(要修改)
bind 0.0.0.0
# 是否启用保护模式
protected-mode no
#哨兵端口号
port 26379
#守护模式
daemonize no
#pid文件
pidfile /var/run/redis-sentinel26379.pid
#日志级别
loglevel notice
#日志文件所在路径
logfile "/logs/sentinel26379.log"
#哨兵模式并不需要,配置了和redis实例一样
dir /data
#哨兵监听名为mymaster的主服务器,它的IP是122.51.104.189,端口是6379,至少需要多少2个哨兵同意这个主节点确实发生了故#障,才会触发故障转移。
#sentinel monitor mymaster 122.51.104.189 6379 2
sentinel monitor mymaster 172.18.0.7 6379 2
#连接到名为mymaster的主服务器时所需的密码
sentinel auth-pass mymaster 111111
#-----------------------------------------
#这条指令定义了哨兵认为主服务器或从服务器已下线的时间阈值。具体来说,如果哨兵在30000毫秒(即30秒)内没有收到主服务器#或从服务器的有效回复,则它会将该服务器标记为“主观下线”。如果足够数量的哨兵(由quorum决定)都认为同一个服务器已经下#线,则该服务器会被标记为“客观下线”,从而可能触发故障转移。
#-----------------------------------------
sentinel down-after-milliseconds mymaster 30000

4、编辑配置/xjj/sentinel26380/conf/sentinel.conf文件

#外部访问(要修改)
bind 0.0.0.0

# 是否启用保护模式

protected-mode no
#哨兵端口号
port 26380
#守护模式
daemonize no
#pid文件
pidfile /var/run/redis-sentinel26380.pid
#日志级别
loglevel notice
#日志文件所在路径
logfile "/logs/sentinel26380.log"
#哨兵模式并不需要,配置了和redis实例一样
dir /data
#哨兵监听名为mymaster的主服务器,它的IP是122.51.104.189,端口是6379,至少需要多少2个哨兵同意这个主节点确实发生了故#障,才会触发故障转移。
#sentinel monitor mymaster 122.51.104.189 6379 2
sentinel monitor mymaster 172.18.0.7 6379 2
#连接到名为mymaster的主服务器时所需的密码
sentinel auth-pass mymaster 111111
#-----------------------------------------
#这条指令定义了哨兵认为主服务器或从服务器已下线的时间阈值。具体来说,如果哨兵在30000毫秒(即30秒)内没有收到主服务器#或从服务器的有效回复,则它会将该服务器标记为“主观下线”。如果足够数量的哨兵(由quorum决定)都认为同一个服务器已经下#线,则该服务器会被标记为“客观下线”,从而可能触发故障转移。
#-----------------------------------------
sentinel down-after-milliseconds mymaster 30000

5、编辑配置/xjj/sentinel26381/conf/sentinel.conf文件

#外部访问(要修改)
bind 0.0.0.0

# 是否启用保护模式

protected-mode no
#哨兵端口号
port 26381
#守护模式
daemonize no
#pid文件
pidfile /var/run/redis-sentinel26381.pid
#日志级别
loglevel notice
#日志文件所在路径
logfile "/logs/sentinel26381.log"
#哨兵模式并不需要,配置了和redis实例一样
dir /data
#哨兵监听名为mymaster的主服务器,它的IP是122.51.104.189,端口是6379,至少需要多少2个哨兵同意这个主节点确实发生了故#障,才会触发故障转移。
#sentinel monitor mymaster 122.51.104.189 6379 2
sentinel monitor mymaster 172.18.0.7 6379 2
#连接到名为mymaster的主服务器时所需的密码
sentinel auth-pass mymaster 111111
#-----------------------------------------
#这条指令定义了哨兵认为主服务器或从服务器已下线的时间阈值。具体来说,如果哨兵在30000毫秒(即30秒)内没有收到主服务器#或从服务器的有效回复,则它会将该服务器标记为“主观下线”。如果足够数量的哨兵(由quorum决定)都认为同一个服务器已经下#线,则该服务器会被标记为“客观下线”,从而可能触发故障转移。
#-----------------------------------------
sentinel down-after-milliseconds mymaster 30000

6、运行容器redis-sentinel26379

docker run -d \
  --privileged=true\
  --network redis-net \
  --name redis-sentinel26379 \
  -v /xjj/sentinel26379/conf/sentinel.conf:/etc/redis/sentinel.conf \
  -v /xjj/sentinel26379/logs/:/logs \
   -v /xjj/sentinel26379/data/:/data \
  -p 26379:26379 \
  redis:latest redis-sentinel  /etc/redis/sentinel.conf

7、运行容器redis-sentinel26380

docker run -d \
  --privileged=true\
  --network redis-net \
  --name redis-sentinel26380 \
  -v /xjj/sentinel26380/conf/sentinel.conf:/etc/redis/sentinel.conf \
  -v /xjj/sentinel26380/logs/:/logs \
   -v /xjj/sentinel26380/data/:/data \
  -p 26380:26380 \
  redis:latest redis-sentinel  /etc/redis/sentinel.conf

8、运行容器redis-sentinel26381

docker run -d \
  --privileged=true\
  --network redis-net \
  --name redis-sentinel26381 \
  -v /xjj/sentinel26381/conf/sentinel.conf:/etc/redis/sentinel.conf \
  -v /xjj/sentinel26381/logs/:/logs \
   -v /xjj/sentinel26381/data/:/data \
  -p 26381:26381 \
  redis:latest redis-sentinel  /etc/redis/sentinel.conf

9、测试哨兵模式是否搭建成功

进入master节点:

docker  exec -it redis-master  /bin/bash
redis-cli  -a 111111
info replication

在这里插入图片描述

比方说,master节点挂了。

 docker  stop redis-master

登入 redis-slave1节点

docker  exec -it redis-slave1 /bin/bash
 redis-cli  -p 6380 -a 111111
info replication

在这里插入图片描述

哨兵模式搭建成功。

我用的是一台服务器搭建的三个实例,和3台服务器,搭建集群差别不是很大。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值