Docker搭建redis
之前介绍了用docker来搭建redis主从环境,但这只是对数据添加了从库备份(主从复制),当主库down掉的时候,从库是不会自动升级为主库的,也就是说,该redis主从集群并非是高可用的。
目前来说,高可用(主从复制、主从切换)redis集群有两种方案,一种是redis-sentinel,只有一个master,各实例数据保持一致;一种是redis-cluster,也叫分布式redis集群,可以有多个master,数据分片分布在这些master上。
本文介绍基于docker和redis-sentinel的高可用redis集群搭建,大多数情况下,redis-sentinel也需要做高可用,这里先对redis搭建一主二从环境,另外需要3个redis-sentinel监控redis master。
Linux centOS 7
首先,我们需要理论知识:Redis Cluster是Redis的分布式解决方案,它解决了redis单机中心化的问题,分布式数据库——首要解决把整个数据集按照分区规则映射到多个节点的问题。
这边就需要知道分区规则——哈希分区规则。Redis Cluster 采用哈希分区规则中的虚拟槽分区。所有的键根据哈希函数映射到0 ~ 16383,计算公式:slot = CRC16(key)&16383。每一个节点负责维护一部分槽以及槽所映射的键值数据。
使用网易蜂巢的镜像中心地址:https://c.163.com/hub#/m/home/
安装命令 : docker pull hub.c.163.com/library/redis:latest
方式1 不指定redis.conf
# 运行服务
docker run -it --name (容器名称) -d -p 6300:6379 (镜像名) redis-server --requirepass 新密码
测试连接
docker exec -it (容器名) redis-cli -a
2) 从库
# 运行服务
docker run -it --name redis-slave -d -p 6301:6379 redis redis-server --requirepass slavepassword # 设定从库密码,可选
# 测试连接redis
docker exec -it (容器名) redis-cli
3)主从配置
输入命令 docker ps找到redis 的容器id
输入命令 docker inspect (容器id 可以多个 空格隔开) | grep IPAd 查看各个容器的服务ip
由上图可以看出172.18.0.5 与 172.18.0.7 为从库ip,172.18.0.4为主库ip
进入从库容器 docker exec -it (容器名) redis-cli -a 密码
若出现上图中的报错,说明需要输入密码auth
绑定主从关系slaveof
设置认证密码config set masterauth
测试 info replication
从库
进入主库查看
方式2 指定redis.conf
下载redis.conf 到指定位置
wget http://download.redis.io/redis-stable/redis.conf /opt/docker-volume/redis
复制改名
编辑 vim 文件名
-- 注释bind 127.0.0.1
# bind 127.0.0.1,表示任意ip可连 或者 改为 bind 0.0.0.0
-- 让redis服务后台运行
daemonize yes
-- 设定密码
requirepass ido85_123
-- 注释bind 127.0.0.1
# bind 127.0.0.1 或者 改为 bind 0.0.0.0
-- 让redis服务后台运行
daemonize yes
-- 从库密码,可选配置
requirepass slavepassword
-- 配置配置主从关系
slaveof
-- 当主库有密码时必需要配置
masterauth
master(主库)
# 运行服务
docker run -it --name redis-master -v /opt/docker-volume/redis/redis-master.conf:/usr/local/etc/redis/redis.conf -d -p 6379:6379 redis /bin/bash
# 进入容器
docker exec -it redis-master bash
# 加载配置
redis-server /usr/local/etc/redis/redis.conf
# 测试连接
redis-cli -a
slave(从库)
# 运行服务
docker run -it --name redis-slave -v /opt/docker-volume/redis/redis-slave.conf:/usr/local/etc/redis/redis.conf -d -p 6380:6379 redis /bin/bash
# 进入容器
docker exec -it redis-slave bash
# 加载配置
redis-server /usr/local/etc/redis/redis.conf
# 测试连接
redis-cli
# 密码认证
auth
https://blog.csdn.net/qq_28804275/article/details/80907796
https://blog.csdn.net/javasun608/article/details/79512966
https://www.imooc.com/article/48697 (没有试过,需要些脚本 )