CentOS7安装Docker版单机集群Redis

CentOS7安装Docker版单机集群Redis

大家好,我是testerzhang, 上次跟大家分享了非Docker版Redis的搭建,这次来写写Docker版Redis集群版的简单教程。

本文以CentOS7为例进行教程说明,搭建单机版的三主三从集群Redis。

Docker

这里就不展开如何安装Docker,但是这里会使用Docker-compose,这里你需要下载配置下。

# wget https://github.com/docker/compose/releases/download/v2.0.1/docker-compose-linux-x86_64

# chmod +x docker-compose-linux-x86_64

# cp docker-compose-linux-x86_64  /usr/local/bin/docker-compose

# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

操作

1.在某个目录建立如下文件夹

# mkdir 7001 7002 7003 7004 7005 7006

2.提前创建好6个文件

redis-7001.conf
redis-7002.conf
redis-7003.conf
redis-7004.conf
redis-7005.conf
redis-7006.conf

以redis-7001.conf为例

port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize no
protected-mode no
pidfile  ./7001/pid/redis_7001.pid
# 集群节点IP地址,这里填宿主机的IP
cluster-announce-ip 172.17.102.36
# 节点映射端口
cluster-announce-port 7001
#节点总线端
cluster-announce-bus-port 17001

#masterauth testerzhang@redis
#requirepass testerzhang@redis

其他配置文件主要是端口和路径修改下即可。

3.创建docker-compose.yml文件

# cat docker-compose.yml
version: '3.7'

x-image:
  &default-image
    redis:latest

networks:
  redis-cluster-net:
    external:
      name: redis-cluster-net

services:
  redis-master-1:
    image: *default-image
    container_name: redis-master-1
    command:
      ["redis-server", "/home/redis/cluster/redis.conf"]
    volumes:
      - ./redis-7001.conf:/home/redis/cluster/redis.conf
      - ./7001/data:/data
    ports:
      - 7001:7001
      - 17001:17001

  redis-master-2:
    image: *default-image
    container_name: redis-master-2
    command:
      ["redis-server", "/home/redis/cluster/redis.conf"]
    volumes:
      - ./redis-7002.conf:/home/redis/cluster/redis.conf
      - ./7002/data:/data
    ports:
      - 7002:7002
      - 17002:17002

  redis-master-3:
    image: *default-image
    container_name: redis-master-3
    command:
      ["redis-server", "/home/redis/cluster/redis.conf"]
    volumes:
      - ./redis-7003.conf:/home/redis/cluster/redis.conf
      - ./7003/data:/data
    ports:
      - 7003:7003
      - 17003:17003

  redis-salve-1:
    image: *default-image
    container_name: redis-salve-1
    command:
      ["redis-server", "/home/redis/cluster/redis.conf"]
    volumes:
      - ./redis-7004.conf:/home/redis/cluster/redis.conf
      - ./7004/data:/data
    ports:
      - 7004:7004
      - 17004:17004

  redis-salve-2:
    image: *default-image
    container_name: redis-salve-2
    command:
      ["redis-server", "/home/redis/cluster/redis.conf"]
    volumes:
      - ./redis-7005.conf:/home/redis/cluster/redis.conf
      - ./7005/data:/data
    ports:
      - 7005:7005
      - 17005:17005

  redis-salve-3:
    image: *default-image
    container_name: redis-salve-3
    command:
      ["redis-server", "/home/redis/cluster/redis.conf"]
    volumes:
      - ./redis-7006.conf:/home/redis/cluster/redis.conf
      - ./7006/data:/data
    ports:
      - 7006:7006
      - 17006:17006

为了提高速度,先行下载镜像

# docker pull redis:latest

4.在docker-compose.yml文件的目录下执行。

# docker-compose up -d

可以看到容器正常运行

# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                                                                                NAMES
e582837b5458   redis:latest   "docker-entrypoint.s…"   8 seconds ago   Up 4 seconds   0.0.0.0:7003->7003/tcp, :::7003->7003/tcp, 6379/tcp, 0.0.0.0:17003->17003/tcp, :::17003->17003/tcp   redis-master-3
ddabad0d1191   redis:latest   "docker-entrypoint.s…"   8 seconds ago   Up 4 seconds   0.0.0.0:7001->7001/tcp, :::7001->7001/tcp, 6379/tcp, 0.0.0.0:17001->17001/tcp, :::17001->17001/tcp   redis-master-1
42774b5f3843   redis:latest   "docker-entrypoint.s…"   8 seconds ago   Up 4 seconds   0.0.0.0:7006->7006/tcp, :::7006->7006/tcp, 6379/tcp, 0.0.0.0:17006->17006/tcp, :::17006->17006/tcp   redis-salve-3
16a571521bd9   redis:latest   "docker-entrypoint.s…"   8 seconds ago   Up 4 seconds   0.0.0.0:7004->7004/tcp, :::7004->7004/tcp, 6379/tcp, 0.0.0.0:17004->17004/tcp, :::17004->17004/tcp   redis-salve-1
2c618f3ac583   redis:latest   "docker-entrypoint.s…"   8 seconds ago   Up 4 seconds   0.0.0.0:7005->7005/tcp, :::7005->7005/tcp, 6379/tcp, 0.0.0.0:17005->17005/tcp, :::17005->17005/tcp   redis-salve-2
1fb08d8d1f27   redis:latest   "docker-entrypoint.s…"   8 seconds ago   Up 4 seconds   0.0.0.0:7002->7002/tcp, :::7002->7002/tcp, 6379/tcp, 0.0.0.0:17002->17002/tcp, :::17002->17002/tcp   redis-master-2

5.进入某个容器节点

# docker exec -it redis-master-1 /bin/bash

进入容器后执行

# redis-cli --cluster create 172.17.102.36:7001 172.17.102.36:7002  172.17.102.36:7003 172.17.102.36:7004 172.17.102.36:7005  172.17.102.36:7006 --cluster-replicas 1

过程中遇到询问输入:yes

Can I set the above configuration? (type 'yes' to accept): yes

然后会提示:

[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

6.查看集群信息

继续在该容器上连接redis服务

# redis-cli -h 172.17.102.36 -p 7001
172.17.102.36:7001> cluster nodes
7363cbf8ec1a09bfe5b722d44aa5e7fed4654c71 172.17.102.36:7003@17003 master - 0 1638716147000 3 connected 10923-16383
2ab5ae6366a95b38fcaf73d7ad45fd2b7d8b7633 172.17.102.36:7001@17001 myself,master - 0 1638716146000 1 connected 0-5460
4224159b844de4ba90c115080cc97f1654a863c4 172.17.102.36:7002@17002 master - 0 1638716146000 2 connected 5461-10922
50452b57f8910da35a1642c5bef99e96c4fa1bd4 172.17.102.36:7004@17004 slave 2ab5ae6366a95b38fcaf73d7ad45fd2b7d8b7633 0 1638716146000 1 connected
d1574bf283c009f4dccc1846e7f9143e1a2d0d7f 172.17.102.36:7005@17005 slave 4224159b844de4ba90c115080cc97f1654a863c4 0 1638716147879 2 connected
b05a16e93fb848be701d8a46e1ab6f1c9680808b 172.17.102.36:7006@17006 slave 7363cbf8ec1a09bfe5b722d44aa5e7fed4654c71 0 1638716147000 3 connected

7.停止redis容器集群

退出容器,然后执行关闭容器命令

# docker-compose down

8.将每个配置文件上面的密码打开

masterauth testerzhang@redis
requirepass testerzhang@redis

9.再次启动Redis容器

# docker-compose up -d

10.再次进入容器验证是否需要密码

# redis-cli -h 172.17.102.36 -p 7001
172.17.102.36:7001> cluster nodes
NOAUTH Authentication required.
172.17.102.36:7001> auth testerzhang@redis
OK
172.17.102.36:7001> cluster nodes
b05a16e93fb848be701d8a46e1ab6f1c9680808b 172.17.102.36:7006@17006 slave 7363cbf8ec1a09bfe5b722d44aa5e7fed4654c71 0 1638716360588 3 connected
7363cbf8ec1a09bfe5b722d44aa5e7fed4654c71 172.17.102.36:7003@17003 master - 0 1638716359000 3 connected 10923-16383
2ab5ae6366a95b38fcaf73d7ad45fd2b7d8b7633 172.17.102.36:7001@17001 myself,master - 0 1638716358000 1 connected 0-5460
4224159b844de4ba90c115080cc97f1654a863c4 172.17.102.36:7002@17002 master - 0 1638716360085 2 connected 5461-10922
50452b57f8910da35a1642c5bef99e96c4fa1bd4 172.17.102.36:7004@17004 slave 2ab5ae6366a95b38fcaf73d7ad45fd2b7d8b7633 0 1638716360588 1 connected
d1574bf283c009f4dccc1846e7f9143e1a2d0d7f 172.17.102.36:7005@17005 slave 4224159b844de4ba90c115080cc97f1654a863c4 0 1638716360000 2 connected

本文没有授权给任何组织、企业和个人转载,未经作者允许禁止转载!

欢迎关注我的公众号testerzhang,原创技术文章第一时间推送。

公众号二维码

updatedupdated2021-12-062021-12-06