docker搭建redis集群详细篇

1. 安装docker

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine (防止之前存在的残留文件对docker的安装产生影响)

2.配置阿里云docker   yum源

    # yum install -y yum-utils device-mapper-persistent-data lvm2 git
    # yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos     /docker-ce.repo

3.安装docker

加上rpm包名的版本号部分或不加都可以:
        # yum install docker-ce-18.03.0.ce  -y
        或者
        # yum install docker-ce -y

4.启动docker服务

    #systemctl enable docker
    #systemctl start docker

5.查看docker版本信息

    # docker -v
    Docker version 1.13.1, build 8633870/1.13.1  
    
    # docker version
    Client:
     Version:           18.09.0
     API version:       1.39
     Go version:        go1.10.4
     Git commit:        4d60db4
     Built:             Wed Nov  7 00:48:22 2018
     OS/Arch:           linux/amd64
     Experimental:      false

    Server: Docker Engine - Community
     Engine:
      Version:          18.09.0
      API version:      1.39 (minimum version 1.12)
      Go version:       go1.10.4
      Git commit:       4d60db4
      Built:            Wed Nov  7 00:19:08 2018
      OS/Arch:          linux/amd64
      Experimental:     false  (需要client端和server端都启动才可)

废话不多说直接上才艺

6.先为redis集群创建一个自定义网络,可以实现容器与容器之前互通(仅限redis的容器互通)

docker network create --driver=bridge --gateway=172.38.0.1 --subnet=172.38.0.0/16 redis(指定了网关和子网,)

7.通过for循环批量创建redis的配置文件

for port in $(seq 1 6); \
do \
mkdir -p /data/redis/node-${port}/conf
touch /data/redis/node-${port}/conf/redis.conf
cat << EOF >/data/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file redis.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done (配置三主三从的redis集群)

8.启动redis容器

docker run -itd -p 6376:6379 -p 16376:16379 --name redis-6 -v /data/redis/node-6/data:/data -v
/data/redis/node-6/conf/redis.conf:/etc/redis/redis.conf  --net redis --ip 172.38.0.16 redis:5.0.9-alpine3.11
redis-server /etc/redis/redis.conf

六个容器都是一样的启动,只需要修改对外的端口号,还有每一个不同的redis配置文件  并且指定网络和ip

六个容器全部创建成功!

 9.随机进入一个redis容器

docker exec -it redis-1  /bin/sh   (redis内部默认是sh 不是 bash)

10.创建redis集群

redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379  172.38.0.13:6379  172.38.0.14:6379  172.38.0.15:6379   172.38.0.16:6379 --cluster-replicas 1(将创建的六个redis容器全部加入到集群当中,需要指定容器内部的端口)

 看到下面的绿色的OK即表示创建成功

 11.进入redis集群

redis-cli -c(加上-c才是进入集群模式  不加进入单机模式)

12.查看集群信息和节点信息

 用cluster nodes 查看到三主三从

 13.接下来就是模拟服务宕掉,看看能否正常的主从转移

127.0.0.1:6379> set a b
-> Redirected to slot [15495] located at 172.38.0.13:6379(表明你写入的数据在哪一台服务器上)
OK

[root@localhost ~]# docker stop redis-3(将写入数据的那一台redis容器停掉)
redis-3

127.0.0.1:6379> get a
-> Redirected to slot [15495] located at 172.38.0.14:6379(看到重定向到另外一台从服务器中了,也就是宕掉的那一台服务器,表示能正常的读取到数据)
"b"

 表示主从转移成功了

 14.如何查看key值对应的slot,

172.38.0.14:6379> cluster keyslot a
(integer) 15495(查找到对应的分片位置)

15.查看slot和对应节点的关系

172.38.0.14:6379> cluster slots
1) 1) (integer) 10923(负责分片的范围)
   2) (integer) 16383
   3) 1) "172.38.0.14"(3和4分别对应主从节点,主节点在前,从节点在后)
      2) (integer) 6379
      3) "4ee39b44a183666a5955c56d6b73ef93f98e3d31"
   4) 1) "172.38.0.13"
      2) (integer) 6379
      3) "b3a33c888d39398d2a625de936c92a219cdaf0e5"
2) 1) (integer) 0
   2) (integer) 5460
   3) 1) "172.38.0.11"
      2) (integer) 6379
      3) "d45f15d88614bcbfd99937d3fc2b707a95c70a9e"
   4) 1) "172.38.0.15"
      2) (integer) 6379
      3) "b313d36928acc02a5f093c7c88a47fc6adf35781"
3) 1) (integer) 5461
   2) (integer) 10922
   3) 1) "172.38.0.12"
      2) (integer) 6379
      3) "a2554cf22a15c79184026e67764823b7a79fff21"
   4) 1) "172.38.0.16"
      2) (integer) 6379
      3) "cac2d635238b46c2a8a839d28ac969d4240c0fed"
172.38.0.14:6379> cluster keyslot a
(integer) 15495

到这里利用docker搭建redis集群就完成了!!!


版权声明:本文为m0_55116875原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。