如果这篇文章对您有些用处,请点赞告诉我O(∩_∩)O
抱歉,之前的文章有错误,集群本身测试没有问题,但使用Jedis客户端JedisCluster调用时,报No reachable node in cluster。究其原因是docker MacOS不支持Host模式。
以下内容已修正并测试通过。
目录
一、安装
(1)搜索redis
docker search redis
(2)拉取redis,默认拉取laster
docker pull redis
(3)查看laster具体版本
docker image inspect redis:latest | grep -i version
也可以在https://hub.docker.com搜索指定版本拉取
(4)查看镜像
docker images
二、配置
(1)在用户目录创建redis集群配置文件夹。(Mac系统中,配置文件必须在/Users 子目录下,原因后面解释)
mkdir redis_cluster
(2)创建配置模板
vim redis_cluster/redis-cluster.tmpl
redis-cluster.tmpl
# 关闭保护模式
protected-mode no
# 开启集群
cluster-enabled yes
# 集群节点配置
cluster-config-file nodes.conf
# 超时
cluster-node-timeout 5000
# 集群节点IP host模式为宿主机IP
cluster-announce-ip 10.211.242.73
# 集群节点端口 7001 - 7006
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
# 开启 appendonly 备份模式
appendonly yes
# 后台
daemonize no
# 密码
requirepass xxxxredis密码在此xxxx
masterauth xxxxredis密码在此xxxx
坑1:cluster-announce-ip 不能是127.0.0.1,这一点和不使用docker直接在MacOS上搭建redis-cluster不同,会被容器认为是自己,而不是宿主。
(3)利用模板生成三主三从(7001-7006)配置文件
cd redis-cluster
for port in `seq 7001 7006`; do \
mkdir -p ${port}/conf \
&& PORT=${port} envsubst < redis-cluster.tmpl > ${port}/conf/redis.conf \
&& mkdir -p ${port}/data; \
done
(4)树结构查看已生成的配置文件
安装tree命令(已存在跳过)
brew install tree
tree
三、启动并创建集群节点
(1)使用docker run批量启动容器7001-7006
for port in `seq 7001 7006`; do \
docker run -id --restart always --name redis-${port} \
-p ${port}:${port} -p 1${port}:1${port} \
-v /Users/yaoguangyao/DEV/docker/redis-cluster/${port}/conf:/usr/local/etc/redis \
-v /Users/yaoguangyao/DEV/docker/redis-cluster/${port}/data:/data \
redis redis-server /usr/local/etc/redis/redis.conf \
--requirepass "xxxxredis密码在此xxxx"; \
done
坑2:-v 表示挂载,在MacOS中挂载目录被限制为只能在\Users下,也就是网络上大多文章挂载的目录/usr/local/****等,对于Mac都是无效目录。(这不是权限问题,不能通过chmod简单解决)
如果进入容器查看/Data目中没有任何文件(应该至少存在nodes.conf)或者 /usr/local/etc/redis/redis.conf 不是一个文件而是一个空目录,
则表示挂载失败,redis启动时也就无法读入redis.conf配置。
(在Windows系统中也有同样的问题,挂载目录被限制在C:\Users下)
坑3:MacOS和docker网络交互,不支持host模式(--net host),需要使用默认的bridge模式(使用-p映射端口)。
(2)查看容器
docker ps
(3)查看容器日志,确认是否启动成功
docker logs redis-7001
如果启动错误,停止并删除容器。
for port in `seq 7001 7006`; do \
docker stop redis-${port};
docker rm redis-${port};
done
(4)创建集群节点
进入容器redis-7001(建议第一个容器)
docker exec -it redis-7001 bash
创建集群节点
redis-cli -a xxxxredis密码在此xxxx --cluster create 10.211.242.73:7001 10.211.242.73:7002 10.211.242.73:7003 10.211.242.73:7004 10.211.242.73:7005 10.211.242.73:7006 --cluster-replicas 1
四、验证
在容器redis-7001中进入redis
redis-cli -c -a xxxxredis密码在此xxxx -h 10.211.242.73 -p 7001
查看集群节点信息
cluster nodes
设置值并获取值
set name flyzing
get name