暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis-cluster

上官吕布 2020-04-17
451

前言

#之前一直用的 redis3, 就想试试 redis4

#下载docker redis
docker pull redis:4.0.14
#下载ruby (redis的集群管理使用它)
docker pull ruby

#创建虚拟网卡
docker network create --subnet=172.20.0.0/16 redisnet
mkdir -p /Users/yuandeqiao/docker/rediscluster/{1,2,3,4,5,6}/
mkdir -p /Users/yuandeqiao/docker/rediscluster/{1/data,2/data,3/data,4/data,5/data,6/data}
mdir="/Users/yuandeqiao/docker/rediscluster"
cd $mdir/1/
touch redis.conf

复制

查看配置文件

$ cat 1/redis.conf
##节点端口
port
6379
##cluster集群模式
cluster-enabled yes
##集群配置名
cluster-config-file nodes.conf
##超时时间 
cluster-node-timeout 5000
##实际为各节点网卡分配ip  先用上网关ip代替
cluster-announce-ip 172.20.0.11
##节点映射端口
cluster-announce-port 6379
##节点总线端
cluster-announce-bus-port 16379
##持久化模式
appendonly yes
protected-mode no
#requirepass mypass
#masterauth mypass

复制

查看不同配置文件差异

for i in 2 3 4 5 6
do
cp redis.conf $mdir/$i
done

$ diff 1/redis.conf 2/redis.conf
< cluster-announce-ip 172.20.0.11
---
> cluster-announce-ip 172.20.0.12
......

#手动修改了各个 redis.conf 的IP

复制

启动容器

for i in 1 2 3 4 5 6
do
docker run -d -ti -p 700$i:6379 -p 1700$i:16379 --restart always -h=redis$i --name redis$i --net redisnet --privileged=true \
--ip 172.20.0.1$i \
-v $mdir/$i/redis.conf:/etc/redis/redis.conf \
-v $mdir/$i/data:/data \
redis:4.0.14 redis-server /etc/redis/redis.conf;\
done

# 创建集群
#redis4 上用 redis-trib.rb 创建集群(折腾了好一会命令参数
因为redis4 不支持 --cluster 参数。。。好吧!)

echo yes | docker run -i --rm --net redisnet ruby sh -c '\
gem install redis \
&& wget http://download.redis.io/releases/redis-4.0.14.tar.gz \
&& tar xvf redis-4.0.14.tar.gz && cd redis-4.0.14/src \
&& ruby redis-trib.rb create --replicas 1 \
'
"$(for port in `seq 1 6`; do \
echo -n "
$(docker inspect --format '{{ (index .NetworkSettings.Networks "redisnet").IPAddress }}' "redis${port}")":6379' ' ; \
done)"


#上面命令相当于运行了:
ruby redis-trib.rb create --replicas 1 172.20.0.11:6379 172.20.0.12:6379 172.20.0.13:6379 172.20.0.14:6379 172.20.0.15:6379 172.20.0.16:6379

复制

查看集群

docker exec -it redis1 /bin/bash -c "redis-cli -p 6379 cluster nodes"

# 确定是不是 随地儿 操作 整体同步

docker exec -it redis1 /bin/bash -c "redis-cli -c -p 6379 "
127.0.0.1:6379> set name "yuandeqiao"
-> Redirected to slot [5798] located at 172.20.0.12:6379
OK
172.20.0.12:6379>
yuandeqiaodeMacBook-Pro:rediscluster yuandeqiao$ docker exec -it redis6 /bin/bash -c "redis-cli -c -p 6379 "
127.0.0.1:6379> get name
-> Redirected to slot [5798] located at 172.20.0.12:6379
"yuandeqiao"
172.20.0.12:6379> del name
(integer) 1
yuandeqiaodeMacBook-Pro:rediscluster yuandeqiao$ docker exec -it redis1 /bin/bash -c "redis-cli -c -p 6379 "
127.0.0.1:6379> get name
-> Redirected to slot [5798] located at 172.20.0.12:6379
(nil)
172.20.0.12:6379> exit

复制


文章转载自上官吕布,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论