阿里云 Ubuntu 搭建 docker redis 主从+哨兵(1主2从3哨兵)

Docker 搭建自定义网络段

推荐使用自定义网络段的原因:因为docker容器之间默认通信方式使用的是桥接模式,每次重启容器会分配新的IP地址,这会导致每次重启Redis Master Node都需要重新修改Slave Node相对应的IP地址,过于繁琐。

创建自定义网络段: docker network create --subnet=172.17.0.0/16 mynetwork
查看网络段: docker network ls
查看网络使用情况:docker network inspect  mynetwork

根据查看网络使用情况,用没有使用过的ip进行分配地址
Slave Node :172.18.0.2 、 172.18.0.3
Mater IP地址 :172.18.0.4
哨兵IP地址:172.18.0.5 、172.18.0.6、 172.18.0.7

拉取Redis5.0镜像文件

查看Redis版本:docker search  redis
拉取镜像:docker pull redis:5.0

创建Redis集群文件目录

mkdir /usr/local/program/rediscluster/redis1/data
mkdir /usr/local/program/rediscluster/redis1/conf
mkdir /usr/local/program/rediscluster/redis2/data
mkdir /usr/local/program/rediscluster/redis2/conf
mkdir /usr/local/program/rediscluster/redis3/data
mkdir /usr/local/program/rediscluster/redis3/conf
mkdir /usr/local/program/rediscluster/redis4
mkdir /usr/local/program/rediscluster/redis5
mkdir /usr/local/program/rediscluster/redis6
目录redis1,redis2,redis3用于存放主从配置文件,redis4、redis5、redis6用于存放哨兵配置文件(根据个人习惯自定义)

配置redis.conf文件

首先去redis官网https://redis.io/download下载一份linux的Reis文件,然后进行解压,修改redis.conf文件

Master Node 配置如下:
port 6379
# 0.0.0.0表示所有主机都可以连接到redis,127.0.0.1表示本机可连
bind 0.0.0.0
#打开AOF持久化
appendonly yes
#推荐配置
appendfsync everysec
#设置密码
requirepass 123456

将修改好的master redis.conf文件放置之前创建好的目录/usr/local/program/rediscluster/redis1/conf下

Salve Node配置如下:
bind 0.0.0.0
#打开AOF持久化
appendonly yes
#配置连接Master Node(有如下声明则当前redis为从节点)
replicaof 172.18.0.4 6379
#推荐配置
appendfsync everysec
#设置密码
requirepass 123456
#master有设置密码,配置连接master的登录密码
masterauth 123456

将修改好的slaev redis.conf文件上传至阿里云ubutu创建好的目录
/usr/local/program/rediscluster/redis2/conf
/usr/local/program/rediscluster/redis3/conf

创建Redis启动容器,加载配置文件并持久化数据

docker run -d --privileged=true -p 6001:6379 -v /usr/local/program/rediscluster/redis1/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/program/rediscluster/redis1/conf/data:/data  --name redis1 --network=mynetwork --ip 172.18.0.2 redis:5.0 redis-server /etc/redis/redis.conf --appendonly yes
docker run -d --privileged=true -p 6002:6379 -v /usr/local/program/rediscluster/redis2/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/program/rediscluster/redis2/conf/data:/data  --name redis1 --network=mynetwork --ip 172.18.0.3 redis:5.0 redis-server /etc/redis/redis.conf --appendonly yes
docker run -d --privileged=true -p 6003:6379 -v /usr/local/program/rediscluster/redis3/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/program/rediscluster/redis3/conf/data:/data  --name redis1 --network=mynetwork --ip 172.18.0.4 redis:5.0 redis-server /etc/redis/redis.conf --appendonly yes

参数说明:

–privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限

-v /docker/redis/conf/redis.conf:/etc/redis/redis.conf:映射配置文件

-v /docker/redis/data:/data:映射数据目录

–appendonly yes:开启数据持久化

-d :以守护进程开启

redis-server /etc/redis/redis.conf:指定配置文件启动redis-server进程

测试Redis主从是否搭建成功

  1. 连接容器,进入容器内部
    docker exec -it redis1 redis-cli -a 123456
  2. 输入info replication 命令查看主从信息
    在这里插入图片描述
  3. 连接Master 查看 docker exec -it redis3 redis-cli -a 123456在这里插入图片描述

到这里主从搭建成功

开始搭建哨兵

拷贝一份sentinel.conf进行文件进行修改

#配置端口
port 26379
bind 0.0.0.0
##设置为no,如果创建容器启动没有用-d则改成YES,两者二选一
daemonize no
#主机名称 ip 端口 投票选取次数
sentinel monitor mymaster 172.18.0.4 6379 2
#连接master的密码,这个必须在配置sentinel monitor mymaster的下面,不然会报错
sentinel auth-pass mymaster 123456
#从节点的数量
sentinel parallel-syncs mymaster 2
#主节点连接失效的timeout时间,视为宕机
sentinel failover-timeout mymaster 30000

将修改好的文件分别上传到目录
/usr/local/program/rediscluster/redis4
/usr/local/program/rediscluster/redis5
/usr/local/program/rediscluster/redis6

创建Docker 哨兵 容器服务

docker run -it --name sentinel1 --network=mynetwork --ip 172.18.0.5 -p 20000:26379 -v /usr/local/program/rediscluster/redis4:/data -d redis:5.0 redis-sentinel sentinel.conf 
docker run -it --name sentinel2 --network=mynetwork --ip 172.18.0.6 -p 20001:26379 -v /usr/local/program/rediscluster/redis5:/data -d redis:5.0 redis-sentinel sentinel.conf 

docker run -it --name sentinel3 --network=mynetwork --ip 172.18.0.7 -p 20002:26379 -v /usr/local/program/rediscluster/redis6:/data -d redis:5.0 redis-sentinel sentinel.conf 

验证哨兵是否配置成功

 docker logs -f sentinel1

在这里插入图片描述
说明:只有监听到master,并且同时能寻找到slave和其他集群里的哨兵才算配置成功
注:如果只有master没有监听到slave和其他哨兵的情况,则要检查配置redis主从的地址和sentinel的地址是否在同一个网段内,并且sentinel.conf是否正确配置了master的地址和端口,如果master有配置密码,则sentinel.conf也必须配置连接master认证的密码sentinel auth-pass

实验

关闭Master查看slave是否升级为master

docker stop redis3

查看sentinel日志

docker logs -f sentinel1

在这里插入图片描述
通过选举将redis2升级为了Master Node,可以进入redis2容器内,再用info replication进行查看
在这里插入图片描述
到此为止,主从+哨兵配置完成,由于配置了自定义网段,再也不用担心重启容器IP改变的问题咯!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值