前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker部署redis-cluster集群

Docker部署redis-cluster集群

作者头像
胡齐
发布2020-05-07 10:25:46
1.3K0
发布2020-05-07 10:25:46
举报
文章被收录于专栏:运维猫运维猫

1、创建网络

代码语言:javascript
复制
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker network create redis --subnet 172.38.0.0/16
 4323026b1d7145e167f22ecc0e908dfe0d75765380840e29e6b7010f1b3b902c
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker network ls
 NETWORK ID         NAME               DRIVER             SCOPE
 f92c1c2c4bf7       bridge             bridge             local
 e6983a928f90       host               host               local
 e99e400ffce3       mynet               bridge             local
 21e45a3c002b       none               null               local
 4323026b1d71       redis               bridge             local
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker network inspect redis
 [
   {
        "Name": "redis",
        "Id": "4323026b1d7145e167f22ecc0e908dfe0d75765380840e29e6b7010f1b3b902c",
        "Created": "2020-05-05T17:22:17.497116433+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
               {
                    "Subnet": "172.38.0.0/16"
               }
           ]
       },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
       },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
   }
 ]

2、编写配置文件

代码语言:javascript
复制
 forport in$(seq 1 6); \
 do\
 mkdir-p/mydata/redis/node-${port}/conf
 touch/mydata/redis/node-${port}/conf/redis.conf
 cat<< EOF >/mydata/redis/node-${port}/conf/redis.conf
 port 6379
 bind 0.0.0.0
 cluster-enabled yes
 cluster-config-file nodes.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

3、创建容器

代码语言:javascript
复制
 # 安装redis-cluster;3主3从方式,从为了同步备份,主进行slot数据分片
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -p 6371:6379 -p 16371:16379 --name redis-1 \
 > -v/mydata/redis/node-1/data:/data \
 > -v/mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
 > -d--netredis  --ip172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -p 6372:6379 -p 16372:16379 --name redis-2 \
 -v/mydata/redis/node-2/data:/data \
 -v/mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \
 -d--netredis  --ip172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -p 6373:6379 -p 16373:16379 --name redis-3 \
 -v/mydata/redis/node-3/data:/data \
 -v/mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf \
 -d--netredis  --ip172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -p 6374:6379 -p 16374:16379 --name redis-4 \
 -v/mydata/redis/node-4/data:/data \
 -v/mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf \
 -d--netredis  --ip172.38.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -p 6375:6379 -p 16375:16379 --name redis-5 \
 -v/mydata/redis/node-5/data:/data \
 -v/mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf \
 -d--netredis  --ip172.38.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker run -p 6376:6379 -p 16376:16379 --name redis-6 \
 -v/mydata/redis/node-6/data:/data \
 -v/mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf \
 -d--netredis  --ip172.38.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;

4、查看镜像

代码语言:javascript
复制
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker ps
 CONTAINER ID       IMAGE                   COMMAND                 CREATED             STATUS             PORTS                                             NAMES
 2341a8496789       redis:5.0.9-alpine3.11   "docker-entrypoint.s…"  7seconds ago       Up 7seconds        0.0.0.0:6376->6379/tcp, 0.0.0.0:16376->16379/tcp   redis-6
 195f467bd6c9       redis:5.0.9-alpine3.11   "docker-entrypoint.s…"  14seconds ago     Up 13seconds       0.0.0.0:6375->6379/tcp, 0.0.0.0:16375->16379/tcp   redis-5
 798f165cd2b6       redis:5.0.9-alpine3.11   "docker-entrypoint.s…"  21seconds ago     Up 21seconds       0.0.0.0:6374->6379/tcp, 0.0.0.0:16374->16379/tcp   redis-4
 511f9a7d2dab       redis:5.0.9-alpine3.11   "docker-entrypoint.s…"  29seconds ago     Up 28seconds       0.0.0.0:6373->6379/tcp, 0.0.0.0:16373->16379/tcp   redis-3
 820cfdd85652       redis:5.0.9-alpine3.11   "docker-entrypoint.s…"  3minutes ago       Up 3minutes        0.0.0.0:6372->6379/tcp, 0.0.0.0:16372->16379/tcp   redis-2
 d5798ca01b02       redis:5.0.9-alpine3.11   "docker-entrypoint.s…"  8minutes ago       Up 8minutes        0.0.0.0:6371->6379/tcp, 0.0.0.0:16371->16379/tcp   redis-1

5、建立集群

代码语言:javascript
复制
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it redis-1 /bin/sh
 /data # 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-replicas1
 >>> Performing hash slots allocation on 6nodes...
 Master[0] -> Slots 0-5460
 Master[1] -> Slots 5461-10922
 Master[2] -> Slots 10923-16383
 Adding replica 172.38.0.15:6379 to 172.38.0.11:6379
 Adding replica 172.38.0.16:6379 to 172.38.0.12:6379
 Adding replica 172.38.0.14:6379 to 172.38.0.13:6379
 M: a3d11679dd434e61a8c301b02f34ed2e37a6ce0d 172.38.0.11:6379
   slots:[0-5460] (5461 slots) master
 M: 19293d61791795cae773eef640d55e0ac0cc090c 172.38.0.12:6379
   slots:[5461-10922] (5462 slots) master
 M: 13134855b3ad0d731688a0714543a7131520088d 172.38.0.13:6379
   slots:[10923-16383] (5461 slots) master
 S: 455e94fb32c097c63bd2e43dff4c7fac6875acea 172.38.0.14:6379
   replicates 13134855b3ad0d731688a0714543a7131520088d
 S: 165f0a056153eaa49f0d70b062ada0e1a44ebe33 172.38.0.15:6379
   replicates a3d11679dd434e61a8c301b02f34ed2e37a6ce0d
 S: 3195a7ceab0c2312fe15487a5a4bc9a16a7cf4de 172.38.0.16:6379
   replicates 19293d61791795cae773eef640d55e0ac0cc090c
 Can I setthe 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 forthe cluster to join
 ...
 >>> Performing Cluster Check (using node172.38.0.11:6379)
 M: a3d11679dd434e61a8c301b02f34ed2e37a6ce0d 172.38.0.11:6379
   slots:[0-5460] (5461 slots) master
   1additional replica(s)
 S: 455e94fb32c097c63bd2e43dff4c7fac6875acea 172.38.0.14:6379
   slots: (0 slots) slave
   replicates 13134855b3ad0d731688a0714543a7131520088d
 S: 165f0a056153eaa49f0d70b062ada0e1a44ebe33 172.38.0.15:6379
   slots: (0 slots) slave
   replicates a3d11679dd434e61a8c301b02f34ed2e37a6ce0d
 M: 19293d61791795cae773eef640d55e0ac0cc090c 172.38.0.12:6379
   slots:[5461-10922] (5462 slots) master
   1additional replica(s)
 M: 13134855b3ad0d731688a0714543a7131520088d 172.38.0.13:6379
   slots:[10923-16383] (5461 slots) master
   1additional replica(s)
 S: 3195a7ceab0c2312fe15487a5a4bc9a16a7cf4de 172.38.0.16:6379
   slots: (0 slots) slave
   replicates 19293d61791795cae773eef640d55e0ac0cc090c
 [OK] All nodes agree about slots configuration.
 >>> Check foropen slots...
 >>> Check slots coverage...
 [OK] All 16384slots covered.

6、存储数据

代码语言:javascript
复制
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it redis-1 /bin/sh
 
 /data # redis-cli -c
 
 127.0.0.1:6379> cluster nodes
 455e94fb32c097c63bd2e43dff4c7fac6875acea 172.38.0.14:6379@16379 slave 13134855b3ad0d731688a0714543a7131520088d 015886730278134connected
 165f0a056153eaa49f0d70b062ada0e1a44ebe33 172.38.0.15:6379@16379 slave a3d11679dd434e61a8c301b02f34ed2e37a6ce0d 015886730288165connected
 a3d11679dd434e61a8c301b02f34ed2e37a6ce0d 172.38.0.11:6379@16379 myself,master -015886730270001connected 0-5460
 19293d61791795cae773eef640d55e0ac0cc090c 172.38.0.12:6379@16379 master -015886730280002connected 5461-10922
 13134855b3ad0d731688a0714543a7131520088d 172.38.0.13:6379@16379 master -015886730280003connected 10923-16383
 3195a7ceab0c2312fe15487a5a4bc9a16a7cf4de 172.38.0.16:6379@16379 slave 19293d61791795cae773eef640d55e0ac0cc090c 015886730280006connected
 
 127.0.0.1:6379> setywm 123456
 -> Redirected to slot [10844] located at 172.38.0.12:6379
 OK
 
 172.38.0.12:6379> getywm
 "123456"

7、测试高可用

代码语言:javascript
复制
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker stop redis-2
 redis-2
 
 [root@iZ2zeir6vcnpz8qw3t455tZ ~]# docker exec -it redis-1 /bin/sh
 
 /data # redis-cli -c
 
 127.0.0.1:6379> getywm
 -> Redirected to slot [10844] located at 172.38.0.16:6379
 "123456"
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、创建网络
  • 2、编写配置文件
  • 3、创建容器
  • 4、查看镜像
  • 5、建立集群
  • 6、存储数据
  • 7、测试高可用
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档