云社区 博客 博客详情
云社区 博客 博客详情

docker下redis集群、哨兵部署

珂娃子の小可爱 发表于 2019-08-06 14:41:24 08-06 14:41
珂娃子の小可爱 发表于 2019-08-06 14:41:24 2019/08/06
0
0

【摘要】 本文章主要记录在docker中搭建redis集群以及哨兵的步骤,redis为一主两从,sentinel为三个节点,如果没有要求,sentinel配置一个节点即可。

Redis部署

一、redis主从

1.       下载redis.conf文件

a)         redis.confRedis的核心配置文件,默认docker运行的redis是不存在配置文件的,这里可以先从官网下载:

wget http://download.redis.io/redis-stable/redis.conf

2.       在宿主机创建redis数据目录

a)         创建主目录

                         i.              Mkdir redis1 redis2 redis3

b)         创建redis数据文件目录、日志文件目录、配置文件目录

                         i.              Mkdir /redis1/data /redis1/logs /redis1/conf

                       ii.              Mkdir /redis2/data /redis2/logs /redis2/conf

                      iii.              Mkdir /redis3/data /redis3/logs /redis3/conf

c)         创建配置文件、日志文件

                         i.              cp ./redis.conf /redis1/conf/ /redis2/conf/ /redis3/conf/

                       ii.              touch /redis1/logs/redis.log

                      iii.              touch /redis2/logs/redis.log

                      iv.              touch /redis3/logs/redis.log

3.       修改配置文件

a)         修改3个目录下redis.conf文件

                         i.              Vim reids.conf

# bind 127.0.0.1

protected-mode no

daemonize yes

logfile "/var/run/log/redis.log"

requirepass slavepassword # 从库密码,可选配置

# <masterip>表示主库所在的ip,而<masterport>则表示主库启动的端口,默认是6379

# 主库有密码必需要配置,<master-password>代表主库的访问密码

masterauth <master-password>

4.创建docker容器,一主两从

a)       # 运行服务

docker run –it -d -p 6301:6379 --name redis1 -v /redis/redis1/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /redis/redis1/data:/data –v /redis/redis1/logs/redis.log:/var/run/log/redis.log redis /bin/bash

docker run –it -d -p 6302:6379 --name redis2 -v /redis/redis2/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /redis/redis2/data:/data –v /redis/redis2/logs/redis.log:/var/run/log/redis.log redis /bin/bash

docker run –it -d -p 6303:6379 --name redis3 -v /redis/redis3/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /redis/redis3/data:/data –v /redis/redis3/logs/redis.log:/var/run/log/redis.log redis /bin/bash

b)       # 进入容器,运行redis

docker exec -it redis1  /bin/bash

redis-server /usr/local/etc/redis/redis.conf

docker exec -it redis2  /bin/bash

redis-server /usr/local/etc/redis/redis.conf

docker exec -it redis3  /bin/bash

redis-server /usr/local/etc/redis/redis.conf

c)       # 测试连接

redis-cli

d)       # 密码认证

auth <slave-password>

e)        # 加入集群,ip为主机,仅从机需要

Slaveof <ip>:<port>

f)       # 查看是否完成主从配置

Info   replication


 

sentinel集群

redis-sentinel作为独立的服务,用于管理多个redis实例,该系统主要执行以下三个任务:

监控 (Monitor): 检查redis主、从实例是否正常运作

通知 (Notification): 监控的redis服务出现问题时,可通过API发送通知告警

自动故障迁移 (Automatic Failover): 当检测到redis主库不能正常工作时,redis-sentinel会开始做自动故障判断、迁移等操作,先是移除失效redis主服务,然后将其中一个从服务器升级为新的主服务器,并让失效主服务器的其他从服务器改为复制新的主服务器。当客户端试图连接失效的主服务器时,集群也会向客户端返回最新主服务器的地址,使得集群可以使用新的主服务器来代替失效服务器


1.       下载sentinel.conf文件

a)         sentinel.conf是启动redis-sentinel的核心配置文件,可以从官网下载:

                         i.              wget http://download.redis.io/redis-stable/sentinel.conf

2.       在宿主机创建sentinel数据目录

a)         创建主目录

                         i.              Mkdir sentinel1 sentinel2 sentinel3

b)         创建sentinel日志文件目录、配置文件目录

                         i.              Mkdir /sentinel1/logs /sentinel1/conf

                       ii.              Mkdir /sentinel2/logs /sentinel2/conf

                      iii.              Mkdir /sentinel3/logs /sentinel3/conf

c)         创建配置文件、日志文件

                         i.              cp ./sentinel.conf /sentinel1/conf/ /sentinel2/conf/ /sentinel3/conf/

                       ii.              touch /sentinel1/logs/sentinel.log

                      iii.              touch /sentinel2/logs/sentinel.log

                      iv.              touch /sentinel3/logs/sentinel.log

3.       修改配置文件

a)         修改3个目录下sentinel.conf文件

                         i.              Vim sentinel.conf

# bind 127.0.0.1

protected-mode no

port 26000

# 添加后台运行

daemonize yes

logfile "/var/run/log/redis-sentinel.log"

#<myid>3sentinel必须不一样

sentinel myid e306cdbedb40459a8760e6e47302073b702db53e

# mymaster:自定义集群名,如果需要监控多个redis集群,只需要配置多次并定义不同的<master-name> <master-redis-ip>:主库ip <master-redis-port>:主库port <quorum>:最小投票数,由于有三台redis-sentinel实例,所以可以设置成1或者2

sentinel monitor mymaster <master-redis-ip> <master-redis-port> <quorum>

# 注:redis主从库搭建的时候,要么都不配置密码(这样下面这句也不需要配置),不然都需要设置成一样的密码

sentinel auth-pass mymaster redispassword

#故障切换时间

sentinel down-after-milliseconds mymaster 1000

sentinel failover-timeout mymaster 1000

4.       创建docker容器,3台哨兵

a)       # 运行服务

docker run –it -d -p 26001:26000 --name sentinel1 -v /redis/sentinel1/conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf -v /redis/sentinel1/logs/sentinel.log:/var/run/log/sentinel.log redis /bin/bash

b)       # 进入容器

docker exec -it sentinel1  /bin/bash

c)       # 加载配置

redis-server /usr/local/etc/redis/sentinel.conf

5.       连接并使用redis-sentinel API查看监控状况:

redis-cli -p 26000 (26001 | 26002)

sentinel master mymaster sentinel slaves mymaster

6.       测试redis主从切换

a)         进入redis-master容器,休眠60redis服务:

docker exec -it redis-master bash

         redis-cli -a redispassword -p 6300 DEBUG sleep 6

b)         进入redis-slaveredis-slave2容器,查看info Replication

测试结果:略

注意:如sentinel.confquorum配置为“1”,则必须存在两个sentinel才能完成redis主从切换;如sentinel.confquorum配置为“2”,则必须存在三个sentinel才能完成redis主从切换


登录后可下载附件,请登录或者注册

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请发送邮件至:huaweicloud.bbs@huawei.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
评论文章 //点赞 收藏 0
点赞
分享文章到微博
分享文章到朋友圈

评论 (0)


0/1000
评论

登录后可评论,请 登录注册

评论

您还没有写博客的权限!

温馨提示

您确认删除评论吗?

确定
取消
温馨提示

您确认删除评论吗?

删除操作无法恢复,请谨慎操作。

确定
取消
温馨提示

您确认删除博客吗?

确定
取消

确认删除

您确认删除博客吗?

确认删除

您确认删除评论吗?

温馨提示

登录超时或用户已下线,请重新登录!!!

确定
取消