数客联盟

搭建Redis容器集群

2019-06-04  本文已影响8人  老陕西

参考:
https://www.cnblogs.com/cxbhakim/p/9151720.html
https://www.cnblogs.com/wozijisun/p/6043511.html

说明

Redis Cluster是Redis的分布式解决方案,它解决了redis单机中心化的问题,分布式数据库——首要解决把整个数据集按照分区规则映射到多个节点的问题。

这边就需要知道分区规则——哈希分区规则。Redis Cluster 采用哈希分区规则中的虚拟槽分区。所有的键根据哈希函数映射到0 ~ 16383,计算公式:slot = CRC16(key)&16383。每一个节点负责维护一部分槽以及槽所映射的键值数据。

image.png

编译redis集群容器镜像

从这个链接选择一个redis版本,本文选择的是4.0.14版本:
http://download.redis.io/releases/

version=4.0.14

wget http://download.redis.io/releases/redis-${version}.tar.gz
tar zxvf redis-${version}.tar.gz

echo "bind 0.0.0.0" >> redis-${version}/redis.conf
echo "daemonize no" >> redis-${version}/redis.conf
echo "cluster-enabled yes" >> redis-${version}/redis.conf
echo "cluster-config-file nodes-6379.conf" >> redis-${version}/redis.conf
echo "cluster-node-timeout 15000" >> redis-${version}/redis.conf


sudo echo '
# Redis
FROM centos
ENV VER=4.0.14
ENV REDIS_HOME /usr/local/redis/
ADD redis-${VER}.tar.gz /
RUN yum install -y gcc make; \
    tar zxvf redis-${VER}.tar.gz ;  \
    cd redis-${VER}; make; \
    mkdir -p $REDIS_HOME; \
    mv /redis-${VER}/src/redis-*  $REDIS_HOME
ADD redis-${VER}/redis.conf $REDIS_HOME/redis.conf
WORKDIR $REDIS_HOME
EXPOSE 6379
ENTRYPOINT ["/usr/local/redis/redis-server", "/usr/local/redis/redis.conf"]
' | sudo tee Dockerfile


docker build -t redis-cluster:${version} .

启动redis容器

docker run -d --name redis01 -p 30001:6379 redis-cluster:4.0.14
docker run -d --name redis02 redis-cluster:4.0.14
docker run -d --name redis03 redis-cluster:4.0.14
docker run -d --name redis04 redis-cluster:4.0.14
docker run -d --name redis05 redis-cluster:4.0.14
docker run -d --name redis06 redis-cluster:4.0.14

docker inspect redis01 redis02 redis03 redis04 redis05 redis06 | grep \"IPAddress\"| grep 172
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
            "IPAddress": "172.17.0.3",
                    "IPAddress": "172.17.0.3",
            "IPAddress": "172.17.0.4",
                    "IPAddress": "172.17.0.4",
            "IPAddress": "172.17.0.5",
                    "IPAddress": "172.17.0.5",
            "IPAddress": "172.17.0.6",
                    "IPAddress": "172.17.0.6",
            "IPAddress": "172.17.0.7",
                    "IPAddress": "172.17.0.7",

配置redis集群

yum install centos-release-scl-rh -y
yum install rh-ruby23  -y
scl  enable  rh-ruby23 bash
ruby -v
gem install redis --version 4.0.3
redis-4.0.14/src/redis-trib.rb create --replicas 1 172.17.0.2:6379 \
> 172.17.0.3:6379 \
> 172.17.0.4:6379 \
> 172.17.0.5:6379 \
> 172.17.0.6:6379 \
> 172.17.0.7:6379
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
172.17.0.2:6379
172.17.0.3:6379
172.17.0.4:6379
Adding replica 172.17.0.6:6379 to 172.17.0.2:6379
Adding replica 172.17.0.7:6379 to 172.17.0.3:6379
Adding replica 172.17.0.5:6379 to 172.17.0.4:6379
M: cf016bfad3672b0bc4de003f63b9345ecebb768b 172.17.0.2:6379
   slots:0-5460 (5461 slots) master
M: f490db12b9e31e142729f7396ffa6d44d3c56dab 172.17.0.3:6379
   slots:5461-10922 (5462 slots) master
M: abe902050c367e0be493006c07c24b0732884baa 172.17.0.4:6379
   slots:10923-16383 (5461 slots) master
S: f7219e42dd52a89ba2f466f0585a9beae8ae5eb9 172.17.0.5:6379
   replicates abe902050c367e0be493006c07c24b0732884baa
S: c174c09ab7ac99bacf7fa0b135d0b855167af395 172.17.0.6:6379
   replicates cf016bfad3672b0bc4de003f63b9345ecebb768b
S: 2e8de92e602f8cffc9fb7ccfac6abeaf5e921366 172.17.0.7:6379
   replicates f490db12b9e31e142729f7396ffa6d44d3c56dab
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join......
>>> Performing Cluster Check (using node 172.17.0.2:6379)
M: cf016bfad3672b0bc4de003f63b9345ecebb768b 172.17.0.2:6379
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: c174c09ab7ac99bacf7fa0b135d0b855167af395 172.17.0.6:6379
   slots: (0 slots) slave
   replicates cf016bfad3672b0bc4de003f63b9345ecebb768b
M: abe902050c367e0be493006c07c24b0732884baa 172.17.0.4:6379
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: 2e8de92e602f8cffc9fb7ccfac6abeaf5e921366 172.17.0.7:6379
   slots: (0 slots) slave
   replicates f490db12b9e31e142729f7396ffa6d44d3c56dab
S: f7219e42dd52a89ba2f466f0585a9beae8ae5eb9 172.17.0.5:6379
   slots: (0 slots) slave
   replicates abe902050c367e0be493006c07c24b0732884baa
M: f490db12b9e31e142729f7396ffa6d44d3c56dab 172.17.0.3:6379
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

测试redis集群

docker exec -ti redis01 /bin/bash
./redis-cli -p 6379 -c
127.0.0.1:6379> CLUSTER NODES
c174c09ab7ac99bacf7fa0b135d0b855167af395 172.17.0.6:6379@16379 slave cf016bfad3672b0bc4de003f63b9345ecebb768b 0 1559659434000 5 connected
cf016bfad3672b0bc4de003f63b9345ecebb768b 172.17.0.2:6379@16379 myself,master - 0 1559659432000 1 connected 0-5460
abe902050c367e0be493006c07c24b0732884baa 172.17.0.4:6379@16379 master - 0 1559659433689 3 connected 10923-16383
2e8de92e602f8cffc9fb7ccfac6abeaf5e921366 172.17.0.7:6379@16379 slave f490db12b9e31e142729f7396ffa6d44d3c56dab 0 1559659433000 6 connected
f7219e42dd52a89ba2f466f0585a9beae8ae5eb9 172.17.0.5:6379@16379 slave abe902050c367e0be493006c07c24b0732884baa 0 1559659435701 4 connected
f490db12b9e31e142729f7396ffa6d44d3c56dab 172.17.0.3:6379@16379 master - 0 1559659434696 2 connected 5461-10922
127.0.0.1:6379>
上一篇 下一篇

猜你喜欢

热点阅读