1
先决条件
安装docker、docker-compose.

因为需要外网访问,所以docker容器的network_mode必须为host
docker-compose.yml文件
version: '3'
services:
  redis-master:
    container_name: redis-node01
    image: docker.io/redis:6.0.7-alpine
    volumes:
      - /data/redis/config/node01:/usr/local/etc/redis
    network_mode: "host" 
    restart: always
    command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes --appendfsync everysec
    labels:
      registory: 'office-registry'
      editor: 'huyindu'
  redis-salve:
    container_name: redis-node02
    image: docker.io/redis:6.0.7-alpine
    volumes:
      - /data/redis/config/node02:/usr/local/etc/redis
    network_mode: "host" 
    restart: always
    command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes --appendfsync everysec
    labels:
      registory: 'office-registry'
      editor: 'huyindu'
  redis-slave:
    container_name: redis-node03
    image: docker.io/redis:6.0.7-alpine
    volumes:
      - /data/redis/config/node03:/usr/local/etc/redis
    network_mode: "host" 
    restart: always
    command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes --appendfsync everysec
    labels:
      registory: 'office-registry'
      editor: 'huyindu'
修改Redis配置文件

我们先下载Redis的官方配置文件,下载地址:http://download.redis.io/redis-stable/redis.conf

修改部分配置

端口号6378为容器服务端口,16378为集群通信端口
集群配置--cluster-replicas 0主从比例我设置的0,所有节点都是master节点,所以最少只需要3个节点,如果设置为1,则最少集群节点为6个。
把一下配置复制三份,修改为不同的端口,笔者测试使用的分别是6378、6377、6376三个端口。

cluster-enabled yes #启用集群
bind 0.0.0.0    #默认127.0.0.1只能本地访问,改为0.0.0.0,所有主机都能访问
#集群开启外网访问,需要填写集群的外网IP
cluster-announce-ip 外网IP
cluster-announce-port 6378
cluster-announce-bus-port 16378
通过docker-compose安装redis节点
在docker-compose.yml所在目录下执行如下命令:docker-compose up -d.执行后会运行三个redis节点,分别为redis-node01、redis-node02、redis-node03.
注:此时的三个redis节点是相互独立的,还不是集群。
将多个node节点组成集群

进入任意一个节点容器:

docker exec -it redis-node01 sh

可以通过执行docker inspect docker容器id | grep Address查看容器IP信息,或者使用我自己写的命令,能直接过滤出来容器IP地址

docker inspect ac4f3b337eef 504081ad3323  8e242428578a| grep "IPAddress\""|awk '{print $2}'|sed 's/[\",]//g'|grep -v ^$

然后执行以下命令,ip地址替换成你自身的节点IP,IP是生成的三个节点的容器内部IP,--cluster-replicas 0说明对于主从节点比例没有要求,如果设置为1,则最少需要6个节点,3主3从。 -a参数指定密码为123456,如果没有开启密码,则不需要加此参数,开启密码校验的节点,密码必须相同。

如果是外网访问,则直接使用外网IP地址即可,不需要容器内ip地址和端口。
redis-cli --cluster create 172.19.0.4:6379 172.19.0.3:6379 172.19.0.2:6379 --cluster-replicas 0 -a 123456

在节点容器内输入redis-cli -c,查看集群信息cluster info,

cluster_state:ok   #<---如果此处为ok说明集群创建成功>
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:3
cluster_size:3
cluster_current_epoch:3
cluster_my_epoch:1
cluster_stats_messages_ping_sent:218
cluster_stats_messages_pong_sent:217
cluster_stats_messages_sent:435
cluster_stats_messages_ping_received:215
cluster_stats_messages_pong_received:218
cluster_stats_messages_meet_received:2
cluster_stats_messages_received:435

此时通过set设置key-value的时候,就会将key-value添加到3个不同的节点中去了,三个节点的总key数就是全量key,每个节点仅存储各自的key集合,但是在集群不同节点都可以get到其他节点key的value值。


killbill
6 声望2 粉丝

没有什么比编程更快乐了~