docker redis5.0 cluster集群搭建的实现
系统环境:ubuntu16.04LTS
本文是使用6个docker容器搭建单机集群测试,实际环境如果是多台,可对应修改容器数量、端口号和集群ip地址,每台机器都按下面步骤同样操作即可。
拉取redis官方镜像
dockerpullredis:5.0
创建配置文件和数据目录
创建目录
mkdir~/redis_cluster cd~/redis_cluster
新建一个模板文件sudovimredis_cluster.tmpl,填入如下内容:
#redis端口 port${PORT} #关闭保护模式 protected-modeno #开启集群 cluster-enabledyes #集群节点配置 cluster-config-filenodes.conf #超时 cluster-node-timeout5000 #集群节点IPhost模式为宿主机IP cluster-announce-ip10.10.100.197 #集群节点端口7000-7005 cluster-announce-port${PORT} cluster-announce-bus-port1${PORT} #开启appendonly备份模式 appendonlyyes #每秒钟备份 appendfsynceverysec #对aof文件进行压缩时,是否执行同步操作 no-appendfsync-on-rewriteno #当目前aof文件大小超过上一次重写时的aof文件大小的100%时会再次进行重写 auto-aof-rewrite-percentage100 #重写前AOF文件的大小最小值默认64mb auto-aof-rewrite-min-size5120mb #关闭快照备份 save""
批量创建配置文件和数据目录,终端运行以下命令:
forportin`seq70007005`;do\ mkdir-p./${port}/conf\ &&PORT=${port}envsubst<./redis_cluster.tmpl>./${port}/conf/redis.conf\ &&mkdir-p./${port}/data;\ done
批量启动redis容器
容器的ip地址采用host模式:
forportin`seq70007005`;do\ dockerrun-d-it--memory=1G\ -v~/redis_cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf\ -v~/redis_cluster/${port}/data:/data\ --restartalways--nameredis-${port}--nethost\ --sysctlnet.core.somaxconn=1024redis:5.0redis-server/usr/local/etc/redis/redis.conf;\ done
这里的--memeory=1G是限制单个docker容器占用内存大小为1G,超过会被进程杀死。运行时可能会出现...Memorylimitedwithoutswap...这个警告,可以忽略。如不需要限制内存,可以去掉--memeory参数。
创建集群
随便进入其中一个容器:
dockerexec-itredis-7000bash
进入后执行如下命令创建集群:
redis-cli--clustercreate10.10.100.197:700010.10.100.197:700110.10.100.197:700210.10.100.197:700310.10.100.197:700410.10.100.197:7005--cluster-replicas1
安装redis-cli命令(如已有可跳过此步):
sudoaptinstallredis-tools
输入yes后,集群创建完毕,exit退出docker,接着登录其中一个节点,验证集群可用性:
redis-cli-c-p7000
输入clusternodes查看集群状态
127.0.0.1:7000>clusternodes 06851aa134d50096d82a434eced9194233b5204e10.10.100.197:7003@17003slave8b33f273386c9504ef8bd10b005e24825b3b9596015676719010004connected a42297b65f7101fc9e4941ef8a0e65080d1b633810.10.100.197:7005@17005slave0aa20378d14e3ef0859815196cbafa67e1001d0e015676719015816connected e7b6a35b1e92f94c225c507ea19f7f0318f0d1c310.10.100.197:7002@17002master-015676719025823connected10923-16383 0aa20378d14e3ef0859815196cbafa67e1001d0e10.10.100.197:7000@17000myself,master-015676719010001connected0-5460 8b33f273386c9504ef8bd10b005e24825b3b959610.10.100.197:7001@17001master-015676719023832connected5461-10922 fe355eed99100197f43d1216d1de82643dd496a510.10.100.197:7004@17004slavee7b6a35b1e92f94c225c507ea19f7f0318f0d1c3015676719013805connected
设置集群密码
设置密码为什么不在上面的步骤,利用模板文件批量创建配置文件的时候就写进去?
无论是在redis5.x版本,还是以前的redis版本利用ruby创建集群的方式,在redis-cli--clustercreate创建集群的环节没有密码参数配置,所以我们需要创建完集群再设置密码。
我们用configset方式分别为每一个节点设置相同的密码(不需要重启redis,且重启后依然有效),在此之前先给所有redis配置文件加w权限,不然密码无法保存到文件。
注意当前路径依然是在~/redis_cluster/:
forportin`seq70007005`;do\ chmoda+w./${port}/conf/redis.conf;\ done
下面用一台做示例:
登录一个节点:
redis-cli-c-p7000
设置密码:
127.0.0.1:7000>configsetmasterauth123456 OK 127.0.0.1:7000>configsetrequirepass123456 OK 127.0.0.1:7000>auth123456 OK 127.0.0.1:7000>configrewrite OK
后面几台执行同样的操作即可。
集群写入数据简单测试
随便登录一个集群节点:
redis-cli-c-p7003-a123456
写入数据:
127.0.0.1:7003>setva1 ->Redirectedtoslot[7800]locatedat10.10.100.197:7001 OK 10.10.100.197:7001>getva "1" 10.10.100.197:7001>delva (integer)1
可以看到,集群中任意节点写入数据,在其他任意节点都能读到。
至此,redis集群搭建完成。
其他注意事项
- 外网访问redis,可能需要防火墙开放相应端口;
- 如果需要删除容器,可批量操作:
forportin`seq70007005`;do\ dockerstopredis-${port}; dockerrmredis-${port}; done
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。