生产服务器没法下载ruby,因此我只能这么干啊。
环境背景
操作平台:腾讯云
操作系统:CentOS Linux release 7.7.1908 (Core)
内核版本:5.4.13-1.el7.elrepo.x86_64
Docker版本信息:19.03.5
拉取镜像
docker pull docker:4.0
创建网卡
docker network create redis-net
创建redis集群环境
我的文件是放在/opt/docker/redis-cluster/ 目录下,这里酌情修改为自己的目录。
sudo mkdir /opt/docker/redis-cluster/
创建模版文件:vim redis-cluster.tmpl
将以下内容粘贴到你的redis-cluster.tmpl模版文件中注意:修改127.0.0.1为你的可访问的ip地址(内网访问可以用内网ip,外网访问要用外网IP)
port ${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 127.0.0.1 #注意这儿一定是你的外网IP
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
生成配置文件和数据存放目录(直接执行一下命令):
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
这一段的意思就是:创建7001-7006目录以及下面的conf和data目录,并将redis-cluster.tmpl中的${port}替换为7001-7006分别复制到各自的conf下的redis.conf中。
创建Redis4.0容器
创建7001-7006一共6个容器(直接执行命令):
for port in `seq 7001 7006`; do \
docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \
--name="redis-${port}"\
-v /opt/docker/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /opt/docker/redis-cluster/${port}/data:/data \
--restart always --name redis-${port} --net redis-net \
--sysctl net.core.somaxconn=1024 redis:4.0 redis-server /usr/local/etc/redis/redis.conf; \
done
经过这一步目前我们已经有了6 ** 立的redis容器
连接redis容器到集群
打开reids-cli客户端:docker exec -it redis-7001 redis-cli -p 7001
在redis-cli中关联各个容器:cluster meet 127.0.0.1 7001 ,cluster meet 127.0.0.1 7002 ,cluster meet 127.0.0.1 7003 ,cluster meet 127.0.0.1 7004 ,cluster meet 127.0.0.1 7005 ,cluster meet 127.0.0.1 7006 注意:这儿的127.0.0.1替换成你的外网IP
查看关联信息:cluster nodes 注意:第一列是容器id,下面会用到
退出redis-cli:exit
主从配置
我的配置是7001、7002、7003是master,7004、7005、7006是slave
将7004配置为7001的从节点:docker exec -it redis-7004 redis-cli -p 7004 cluster replicate 7001的容器id(一长串字符串) ,
将7005配置为7002的从节点:docker exec -it redis-7005 redis-cli -p 7005 cluster replicate 7002的容器id(一长串字符串) ,
将7006配置为7003的从节点:docker exec -it redis-7006 redis-cli -p 7006 cluster replicate 7003的容器id(一长串字符串)
打开reids-cli客户端:docker exec -it redis-7001 redis-cli -p 7001 ,之后执行cluster nodes 查看主从分配情况。
主节点分配Redis槽点
给7001分配槽点:docker exec -it redis-7001 redis-cli -p 7001 cluster addslots {0..5461} ,
给7002分配槽点:docker exec -it redis-7002 redis-cli -p 7002 cluster addslots {5462..10922} ,
给7003分配槽点:docker exec -it redis-7003 redis-cli -p 7003 cluster addslots {10923..16383} 。 注意1:不管你有几个主节点,一定要完全分配16383个槽点,不能多也不能少。加节点的话,就必须重复切分部分槽点到新节点上。 注意2:一定要在外面执行这个cluster addslots {a..b}命令,在客户端执行的话只能分配单独的节点,不能分配连续的节点。会报错: ERR Invalid or out of range slot
结尾
到此为止,集群已经搭建完毕!你可以使用客户端去访问了。 别忘了把你的服务器端口7001-7006开放了
|
请发表评论