建立六台主机 三主三从 redis网络
1、docker network create redis --subnet 172.38.0.0/16
命令创建名为 “redis” 的网络,并指定子网为 “172.38.0.0/16
2、docker network inspeect redis
3、编写一个创建redis集群配置文件的脚本
for port 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
序列生成器 seq
来循环生成端口号从 1 到 6 的循环。在每次循环中,它创建一个目录并在该目录下创建一个名为 redis.conf
的配置文件,并将配置写入其中。
脚本创建 Redis 集群配置文件的过程:
- 使用
mkdir -p
命令创建一个名为/mydata/redis/node-$port/conf
的目录。$port
是当前循环的端口号。 - 使用
touch
命令创建一个空的redis.conf
文件。 - 使用
cat <<EOF >"/mydata/redis/node-$port/conf/redis.conf"
命令将配置写入redis.conf
文件。 - 在配置文件中设置了以下配置项:
port
:设置 Redis 服务器的监听端口为 6379。bind
:将 Redis 绑定到所有可用的网络接口。cluster-enabled
:启用 Redis 集群模式。cluster-config-file
:指定 Redis 集群的配置文件名为nodes.conf
。cluster-node-timeout
:设置 Redis 集群节点的超时时间为 5000 毫秒。cluster-announce-ip
:设置用于集群节点通告的 IP 地址。cluster-announce-port
:设置用于集群节点通告的端口号为 6379。cluster-announce-bus-port
:设置用于集群节点通告总线的端口号为 16379。appendonly
:启用 Redis AOF (Append-Only File) 持久化。
- 使用
EOF
关键字来标记配置内容的结束。
脚本将在循环结束后创建了 6 个配置文件,分别对应端口号从 1 到 6 的 Redis 节点。
4、docker pull redis:5.0.9-alpine3.11
拉取redis镜像
5、docker run -p 6731:6739 -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 --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
创建redis 1主机
使用 Docker 运行 Redis 容器,并指定了一些参数和选项。下面是每个选项的解释:
-p 6731:6739 -p 16371:16379
:将容器内的 Redis 服务端口(默认为 6379)映射到主机上的端口,其中6731:6739
是内外端口的映射关系,16371:16379
是集群总线端口的映射关系。--name redis-1
:为容器指定一个名称,即 “redis-1”。-v /mydata/redis/node-1/data:/data
:在容器内使用挂载卷将 Redis 数据目录/data
映射到主机上的/mydata/redis/node-1/data
目录。-v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf
:将主机上的 Redis 配置文件/mydata/redis/node-1/conf/redis.conf
映射到容器内的/etc/redis/redis.conf
。-d
:将容器设置为在后台运行(以守护进程方式)。--net redis
:将容器连接到名为 “redis” 的网络。这是之前创建的网络。--ip 172.38.0.11
:为 Redis 容器分配一个指定的 IP 地址。redis:5.0.9-alpine3.11
:指定要使用的 Redis 镜像和版本。redis-server /etc/redis/redis.conf
:在容器中运行 Redis 服务器,并指定使用/etc/redis/redis.conf
配置文件。
创建并启动一个名为 “redis-1” 的 Redis 容器,并将该容器连接到 “redis” 网络中。容器将会使用指定的 IP 地址(172.38.0.11)运行 Redis 服务并加载提供的配置文件。
docker run -p 6732:6739 -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 --net redis --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
docker run -p 6733:6739 -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 --net redis --ip 172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
docker run -p 6734:6739 -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 --net redis --ip 172.38.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
docker run -p 6735:6739 -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 --net redis --ip 172.38.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
docker run -p 6736:6739 -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 --net redis --ip 172.38.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
6、 docker exec -it redis-1 /bin/sh
7、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-cli
:Redis 客户端命令行界面。--cluster create
:指定创建 Redis 集群。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
:指定要用于创建集群的主节点地址和端口。在这个例子中,有 6 个主节点,每个节点的地址和端口分别为:
- 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
:指定每个主节点要创建一个从节点(副本)。这个参数使您的集群拥有 6 个主节点和 1 个从节点。
8、redis-cli -c
进入redis集群
redis-cli
:Redis 客户端命令行界面。-c
:参数表示启用 Redis Cluster 模式。这将打开 Redis 客户端并在 Redis Cluster 模式下进行连接。
9、cluster info
Redis 将返回关于集群的信息,其中可能包括以下内容:
cluster_state
:指示集群当前状态的字符串,可以是 “ok”、“fail” 或 “nofailover”。cluster_slots_assigned
:已分配的槽位数量。cluster_slots_ok
:正常工作的槽位数量。cluster_slots_pfail
:与有问题的节点关联的槽位数量。cluster_known_nodes
:已知节点的数量。cluster_size
:集群中节点的数量。cluster_current_epoch
:当前纪元的编号。cluster_my_epoch
:本节点的纪元编号。cluster_stats_messages_sent
:发送的消息数量。cluster_stats_messages_received
:接收的消息数量
10、cluster nodes
执行 CLUSTER NODES
命令,您可以获得有关 Redis Cluster 中每个节点的详细信息,包括节点 ID、IP 地址、角色等。
请注意,在执行 CLUSTER NODES
命令之前,您需要在 Redis 客户端中启用 Cluster 模式(通过 redis-cli -c
命令)
11、set a b
SET a b
是一个 Redis 命令,用于将键名 a
关联到值 b
。它会在 Redis 中创建或更新一个键值对,将键 a
的值设置为 b
12、get a
GET a
是一个 Redis 命令,用于获取键名为 a
的值。它会返回键 a
关联的值