Docker Redis-cluster 集群配置

avatar 2020年01月30日00:37:18 6 6440 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此
本文介绍使用 Docker 安装配置6台Redis集群

一、安装最新的redis客户端

1、默认latest 版本最新 
docker pull redis

 2、查看镜像时候安装成功
docker images |grep "redis"

二、开始配置redis环境

1、创建配置文件
注意:我这里是在本机测试,大家可以替换 /Users/liuyanzhao/home 目录为自己的即可
cd  /Users/liuyanzhao/home  
mkdir redis-cluster
cd redis-cluster
vim redis-cluster.tmpl

2、编辑  redis-cluster文件
redis-cluster.tmpl 该文件为模板文件,里面的 TEMP 和 PORT 为变量,待会儿通过 for 循环遍历,envsubst 命令传入

port ${PORT}
protected-mode no
bind 0.0.0.0
requirepass 123456789
masterauth 123456789
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.18.0.${TEMP}
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes


3、创建虚拟网卡
docker network create --driver bridge --subnet 172.18.0.0/16 redis-net  #创建网卡并且指定子网


如果报错,提示网络与其他网络区间有覆盖,可以通过 docker network rm 网络ID 进行删除,然后再次执行
4、为节点创建配置文件
for port in `seq 7010 7015`; do \
base=7008 \
&& ip=$[port-base] \
&& mkdir -p ./${port}/conf \
&& PORT=${port} TEMP=${ip} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done

注意:Mac下没有 envsubst 命令,需要安装,参考
5、校验目录正确
tree


Mac 下如果没有 tree 命令,执行 brew install tree 安装即可
或者通过 Finder 目录查看也行
可见,上面的命令循环创建 7010-7015 总共6个文件夹,每个里面都有 conf 和 data 目录,conf 里有 redis.conf 文件,redis.conf 文件内容为 redis-cluster.tmpl 模板文件内容,不过里面的 PORT 和 TEMP 变量已经替换
6、查看配置文件
cat 701*/conf/redis.conf


三、创建容器并指定IP

遍历创建容器
for port in `seq 7010 7015`; do \
base=7008
myips=$[port-base]
docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \
--privileged=true -v /Users/liuyanzhao/home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
--privileged=true -v /Users/liuyanzhao/home/redis-cluster/${port}/data:/data \
--restart always --name redis-${port} --net redis-net --ip 172.18.0.${myips} \
--sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; \
done

默认会启动,如果没有启动可以执行 docker start redis-7010 redis-7011 redis-7012 redis-7013 redis-7014 redis-7015 启动


通过 docker ps 可以看到,6个节点都已经启动




四、查看容器ip时候与自己配置的ip一致

for port in `seq 7010 7015`;do echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port} ' '; done;



五、集群创建

进入一个容器
docker exec -it redis-7010 bash



用redis-cli工具启动集群

redis-cli --cluster create 172.18.0.2:7010 172.18.0.3:7011 172.18.0.4:7012 172.18.0.5:7013 172.18.0.6:7014 172.18.0.7:7015 --cluster-replicas 1 -a 123456789


如果 redis 没有设置密码可以不加后面的 -a 123456789
注意只用在一台服务器里执行上面命令就行哦
通过 redis-cli -c -h 172.18.0.2 -p 7010 -a 123456789 可以直接连接指定ip和端口的客户端
记得一定要加 -c 连接客户端开启集群模式,否则会出现 (error) MOVED
从上图可见 7010 是主,7014是从
我们执行 info replication  可以查看主从信息
先看看 7010 的,这是一个主节点
然后查看 7014 的,这是一个从节点
注意如果出现 master_link_status:down 或者主节点连接从节点数为0 的情况
很可能是没有设置 masterauth
因为从节点连接主节点需要通过 masterauth 里的主节点密码来访问的
因为我这里设置所有节点(即包括主节点)密码为 123456,需要在 redis.conf 里添加该配置
主节点可以读写,从节点只能读不能写

六、测试

1、客户端连接
redis-cli -c -h 172.18.0.2 -p 7010 -a 123456789
三个主节点,根据 key 哈希值分配到三台节点中的一台
如上图,sss分配到7010,name 分配到 7011,age 分配到 7010,999 分配到 7010
然后我们去从节点看下有没有同步数据,可以看到从节点能从主节点那里获取数据
  • 微信
  • 交流学习,服务定制
  • weinxin
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0