基于Docker的Redis集群搭建

Docker redis集群配置。我们会在一台centos的虚拟机上,配置redis集群

前期规划:

  • redis版本 redis:5.0.14

  • 网络配置,我们会创建名称为redis的网络,子网掩码为 172.38.0.0/16的网络

  • 我们会启动六个redis。对应的容器名分别为:redis-1,redis-2,redis-3,redis-4,redis-5,redis-6;对应的IP为:172.38.0.11,172.38.0.12,172.38.0.13,172.38.0.14,172.38.0.15,172.38.0.16;映射到宿主机的端口分别为:6371,6372,6373,6374,6375,6376;配置文件和数据文件分别挂载在宿主机:/usr/local/docker/redis/node-1,/usr/local/docker/redis/node-2,/usr/local/docker/redis/node-3,/usr/local/docker/redis/node-4,/usr/local/docker/redis/node-5,/usr/local/docker/redis/node-6

配置过程:

    1. 创建网络
# 创建一个名为redis,子网掩码为172.38.0.0/16的网络
[root@localhost ~]# docker network create redis --subnet 172.38.0.0/16
# 查看网络是否创建成功,看到NAME为redis的则表示创建成功
[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
910bb1c3ed53   bridge    bridge    local
0abda6b25a0e   host      host      local
7c4403334c93   mynet     bridge    local
844e3f85e00e   mysql     bridge    local
c2bbcb4013a7   none      null      local
295732ea0dac   redis     bridge    local
# docker network inspect redis可以查看redis的详细信息
[root@localhost ~]# docker network inspect redis
[
    {
        "Name": "redis",
        "Id": "295732ea0dacb5f64ba0c2748db3eeeb54271fe8e97f5d316df70b091279673b",
        "Created": "2021-12-11T06:32:00.216608768-05:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.38.0.0/16",
                    "Gateway": "172.38.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
    1. 下载redis镜像
    # 我们下载redis:5.0.14(docker pull redis:5.0.14)
    [root@localhost /]# docker pull redis:5.0.14
    5.0.14: Pulling from library/redis
    e5ae68f74026: Pull complete 
    37c4354629da: Pull complete 
    b065b1b1fa0f: Pull complete 
    99ab464ba8bb: Pull complete 
    eb5bbe3179d2: Pull complete 
    2067794f93b6: Pull complete 
    Digest: sha256:310f81701011175dc868e833d73f539282dd18510ca35d6f7b63c4d33ab4f54e
    Status: Downloaded newer image for redis:5.0.14
    docker.io/library/redis:5.0.14
    # docker images查看redis镜像是否下载成功
    [root@localhost /]# docker images
    REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
    redis        5.0.14    071510791e92   2 weeks ago   110MB
    mysql        5.7       738e7101490b   2 weeks ago   448MB
    
    1. 启动六个redis

    我们会在宿主机上的/usr/local/docker/redis文件夹下,分别创建node-1,node-2,node-3,node-4,node-5,node-6。写入对应的redis.conf文件的内容。注意cluster-announce-ip对应的ip。

    # 1. 创建6个redis对应的配置,下面的命令可以直接复制到xshell里面执行。会生成对应的文件和写入相应的配置
    for index in $(seq 1 6);\
    do \
    mkdir -p /usr/local/docker/redis/node-${index}/conf
    touch /usr/local/docker/redis/node-${index}/conf/redis.conf
    cat << EOF >> /usr/local/docker/redis/node-${index}/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${index}
    cluster-announce-port 6379
    cluster-announce-bus-port 16379
    appendonly yes
    EOF
    done
    
    # 2. 查看相应的文件是否成功,配置文件是否正常写入
    [root@localhost redis]# pwd
    /usr/local/docker/redis
    [root@localhost redis]# ll
    总用量 0
    drwxr-xr-x. 3 root root 18 12月 18 00:59 node-1
    drwxr-xr-x. 3 root root 18 12月 18 00:59 node-2
    drwxr-xr-x. 3 root root 18 12月 18 00:59 node-3
    drwxr-xr-x. 3 root root 18 12月 18 00:59 node-4
    drwxr-xr-x. 3 root root 18 12月 18 00:59 node-5
    drwxr-xr-x. 3 root root 18 12月 18 00:59 node-6
    
    
    # 3. 启动6个redis。注意ip的配置。注意docker数据文件和配置文件挂载到宿主机。下面的内容可以直接复制到xshell里面执行
    for index in $(seq 1 6);\
    do \
    docker run -p 637${index}:6379 -p 1637${index}:16379 --name redis-${index} \
    -v /usr/local/docker/redis/node-${index}/data:/data \
    -v /usr/local/docker/redis/node-${index}/conf/redis.conf:/etc/redis/redis.conf \
    -d --net redis --ip 172.38.0.1${index} redis:5.0.14 redis-server /etc/redis/redis.conf
    done
    
    # 4. 查看redis是否启动成功,没啥大问题的话,docker ps 我们可以看到我们启动了6个redis
    [root@localhost redis]# docker ps 
    
    
    
    
    1. 创建集群

    创建集群,我们需要进入容器里面输入命令: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

    # 1. 创建集群,这里我们有6个redis,我们随便进入一个redis里面配置,比如这里我们进入redis-1里面配置  docker exec -it redis-1 /bin/sh 进入容器
    [root@localhost redis]# docker exec -it redis-1 /bin/sh
    
    # 进入容器之后,输入命令 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  
    # 执行过程中,提示输入的时候,输入yes
    # 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
    >>> Performing hash slots allocation on 6 nodes...
    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: b5afda552e13a82efcbad213159a5f51b1ff5e9e 172.38.0.11:6379
       slots:[0-5460] (5461 slots) master
    M: db1d24dd03af679c59543807b918496d185246ec 172.38.0.12:6379
       slots:[5461-10922] (5462 slots) master
    M: b33635d04f16c013c85c69bfda59f810a2c63421 172.38.0.13:6379
       slots:[10923-16383] (5461 slots) master
    S: e15110b81065f8a882115f068026785803a1e4e1 172.38.0.14:6379
       replicates b33635d04f16c013c85c69bfda59f810a2c63421
    S: 5ea19fe52c450aea5e18c74f8086b9d35ed7183e 172.38.0.15:6379
       replicates b5afda552e13a82efcbad213159a5f51b1ff5e9e
    S: 79ae80b43bdbc7eb7acf0ba3965bd1077c9a6d79 172.38.0.16:6379
       replicates db1d24dd03af679c59543807b918496d185246ec
    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.38.0.11:6379)
    M: b5afda552e13a82efcbad213159a5f51b1ff5e9e 172.38.0.11:6379
       slots:[0-5460] (5461 slots) master
       1 additional replica(s)
    M: b33635d04f16c013c85c69bfda59f810a2c63421 172.38.0.13:6379
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
    M: db1d24dd03af679c59543807b918496d185246ec 172.38.0.12:6379
       slots:[5461-10922] (5462 slots) master
       1 additional replica(s)
    S: 79ae80b43bdbc7eb7acf0ba3965bd1077c9a6d79 172.38.0.16:6379
       slots: (0 slots) slave
       replicates db1d24dd03af679c59543807b918496d185246ec
    S: 5ea19fe52c450aea5e18c74f8086b9d35ed7183e 172.38.0.15:6379
       slots: (0 slots) slave
       replicates b5afda552e13a82efcbad213159a5f51b1ff5e9e
    S: e15110b81065f8a882115f068026785803a1e4e1 172.38.0.14:6379
       slots: (0 slots) slave
       replicates b33635d04f16c013c85c69bfda59f810a2c63421
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK]
    
    
    # 2. 查看集群是否创建成功,进入容器,连接redis,cluster nodes查看集群信息
    [root@localhost redis]# docker exec -it redis-1 /bin/sh
    # redis-cli
    127.0.0.1:6379> cluster nodes
    b33635d04f16c013c85c69bfda59f810a2c63421 172.38.0.13:6379@16379 master - 0 1639808016802 3 connected 10923-16383
    db1d24dd03af679c59543807b918496d185246ec 172.38.0.12:6379@16379 master - 0 1639808017000 2 connected 5461-10922
    79ae80b43bdbc7eb7acf0ba3965bd1077c9a6d79 172.38.0.16:6379@16379 slave db1d24dd03af679c59543807b918496d185246ec 0 1639808017805 6 connected
    5ea19fe52c450aea5e18c74f8086b9d35ed7183e 172.38.0.15:6379@16379 slave b5afda552e13a82efcbad213159a5f51b1ff5e9e 0 1639808017000 5 connected
    b5afda552e13a82efcbad213159a5f51b1ff5e9e 172.38.0.11:6379@16379 myself,master - 0 1639808016000 1 connected 0-5460
    e15110b81065f8a882115f068026785803a1e4e1 172.38.0.14:6379@16379 slave b33635d04f16c013c85c69bfda59f810a2c63421 0 1639808016600 4 connected
    127.0.0.1:6379> 
    
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容