Docker Redis-cluster 集群配置

avatar 2020年1月30日00:37:18 评论 23 views

本文介绍使用 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

 

然后我们去从节点看下有没有同步数据,可以看到从节点能从主节点那里获取数据

历史上的今天
一月
30
  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: