本文介绍使用 Docker 安装配置6台Redis集群
2、查看镜像时候安装成功
注意:我这里是在本机测试,大家可以替换 /Users/liuyanzhao/home 目录为自己的即可
2、编辑 redis-cluster文件
redis-cluster.tmpl 该文件为模板文件,里面的 TEMP 和 PORT 为变量,待会儿通过 for 循环遍历,envsubst 命令传入
3、创建虚拟网卡
如果报错,提示网络与其他网络区间有覆盖,可以通过 docker network rm 网络ID 进行删除,然后再次执行
4、为节点创建配置文件
注意:Mac下没有 envsubst 命令,需要安装,参考
5、校验目录正确
Mac 下如果没有 tree 命令,执行 brew install tree 安装即可
或者通过 Finder 目录查看也行
可见,上面的命令循环创建 7010-7015 总共6个文件夹,每个里面都有 conf 和 data 目录,conf 里有 redis.conf 文件,redis.conf 文件内容为 redis-cluster.tmpl 模板文件内容,不过里面的 PORT 和 TEMP 变量已经替换
6、查看配置文件
用redis-cli工具启动集群
如果 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 里添加该配置
主节点可以读写,从节点只能读不能写
redis-cli -c -h 172.18.0.2 -p 7010 -a 123456789
三个主节点,根据 key 哈希值分配到三台节点中的一台
如上图,sss分配到7010,name 分配到 7011,age 分配到 7010,999 分配到 7010
然后我们去从节点看下有没有同步数据,可以看到从节点能从主节点那里获取数据
一、安装最新的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
然后我们去从节点看下有没有同步数据,可以看到从节点能从主节点那里获取数据
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏