docker搭建redis集群

1.从官网下载配置文件:http://download.redis.io/redis-stable/redis.conf

 

2.挂载配置文件的宿主机目录

#配置文件,需要将官网下载的redis.conf拷贝到这个路径下

mkdir -p /data/service/redis/conf

#redis的data

mkdir -p /data/service/redis/data

 

3.修改bind ip地址

bind 127.0.0.1 改为

bind 0.0.0.0

 

4.守护进程yes改成no

5.requirepass和masterauth设置密码

 

 

 

6.开启集群信息

其中,cluster-config-file要一个节点一个配置

7.以上配置改好之后,下载镜像

docker search redis

 

8.pull镜像

docker pull redis:5.0.7

 

9.启动镜像

docker run -p 7000:6379 --name redis-node-7000 -v /data/service/redis/conf/redis_7000.conf:/etc/redis/redis.conf -v /data/service/redis/data:/data -d redis:5.0.7 redis-server /etc/redis/redis.conf --appendonly yes --requirepass "123456"
docker run -p 7001:6379 --name redis-node-7001 -v /data/service/redis/conf/redis_7001.conf:/etc/redis/redis.conf -v /data/service/redis/data:/data -d redis:5.0.7 redis-server /etc/redis/redis.conf --appendonly yes --requirepass "123456"
docker run -p 7002:6379 --name redis-node-7002 -v /data/service/redis/conf/redis_7002.conf:/etc/redis/redis.conf -v /data/service/redis/data:/data -d redis:5.0.7 redis-server /etc/redis/redis.conf --appendonly yes --requirepass "123456"
docker run -p 7003:6379 --name redis-node-7003 -v /data/service/redis/conf/redis_7003.conf:/etc/redis/redis.conf -v /data/service/redis/data:/data -d redis:5.0.7 redis-server /etc/redis/redis.conf --appendonly yes --requirepass "123456"
docker run -p 7004:6379 --name redis-node-7004 -v /data/service/redis/conf/redis_7004.conf:/etc/redis/redis.conf -v /data/service/redis/data:/data -d redis:5.0.7 redis-server /etc/redis/redis.conf --appendonly yes --requirepass "123456"
docker run -p 7005:6379 --name redis-node-7005 -v /data/service/redis/conf/redis_7005.conf:/etc/redis/redis.conf -v /data/service/redis/data:/data -d redis:5.0.7 redis-server /etc/redis/redis.conf --appendonly yes --requirepass "123456"

命令解释说明:

-p 7000:6379 #端口映射:前表示主机部分,:后表示容器部分。

--name redis-node-7000 # 指定该容器名称,查看和进行操作都比较方便。

-v #挂载目录,规则与端口映射相同。

为什么需要挂载目录:个人认为docker是个沙箱隔离级别的容器,这个是它的特点及安全机制,不能随便访问外部(主机)资源目录,所以需要这个挂载目录机制。

-d redis:5.0.7 #表示后台启动redis

redis-server /etc/redis/redis.conf # 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/data/service/redis/conf/redis_7000.conf,一个节点一个配置

--appendonly yes #开启redis持久化

--requirepass "123456" #指定密码

提示:可以将命令写入.sh的文件中批量启动

10.集群配置

找到容器ip

docker inspect 94e22a7f417e 531ecb77ffc8 c98f5a95cebd 57aca11a8ccb d1f25c86f0ac f22fb3089bf0 IpAddress

或用以下命令找ip

docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

 

添加节点

CLUSTER MEET 172.17.0.2 6379

 

如果redis-cli -p 7000 没有生效可以自行在宿主机下载一个redis如:

yum -y install redis

然后再连接

11.分配slave

vim add_slave.sh


#CLUSTER REPLICATE后面跟的是172.17.0.5:6379的集群ID
redis-cli -h 127.0.0.1 -p 7000 -a 123456 CLUSTER REPLICATE c8b32b56ef01ecf46529850cb92b32f7a27f4f7f

#CLUSTER REPLICATE后面跟的是172.17.0.6:6379的集群ID
redis-cli -h 127.0.0.1 -p 7001 -a 123456 CLUSTER REPLICATE beb33efaa910850ecdedc2cdbba6c4857ac58c15

#CLUSTER REPLICATE后面跟的是172.17.0.7:6379的集群ID
redis-cli -h 127.0.0.1 -p 7002 -a 123456 CLUSTER REPLICATE 2f95fd3749e36a173d19abb66703657ce0a1e841

 

执行sh add_slave.sh

12.分配槽:

分配槽的脚本:

vim addslots.sh

#!/bin/bash
#将0-5461的槽点配置在172.17.0.4:6379(宿主机127.0.0.1:7000)的redis上
n=0
for ((i=n;i<=5461;i++))
do
   redis-cli -h 127.0.0.1 -p 7000 -a 123456  CLUSTER ADDSLOTS $i
done

#将5462-10922的槽点配置在172.17.0.5:6379(宿主机127.0.0.1:7001)的redis上
n=5462
for ((i=n;i<=10922;i++))
do
   redis-cli -h 127.0.0.1 -p 7001 -a 123456  CLUSTER ADDSLOTS $i
done

#将10923-16383的槽点配置在172.17.0.6:6379(宿主机127.0.0.1:7002)的redis上
n=10923
for ((i=n;i<=16383;i++))
do
   redis-cli -h 127.0.0.1 -p 7002 -a 123456  CLUSTER ADDSLOTS $i
done

 执行脚本:

sh addslots.sh

查看机群状态

 

坑还是不少的,但是大致的流程是这样子的,如有疑问可以留言一起讨论。

 

附录:集群常用命令

集群

cluster info #打印集群的信息

cluster nodes #列出集群当前已知的所有节点( node),以及这些节点的相关信息。

节点

cluster meet <ip> <port> # 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。

cluster forget <node_id> # 从集群中移除 node_id 指定的节点。

cluster replicate <master_node_id> # 将当前从节点设置为 node_id 指定的master节点的slave节点。只能针对slave节点操作。

cluster saveconfig # 将节点的配置文件保存到硬盘里面。

槽(slot)

cluster addslots <slot> [slot ...]  # 将一个或多个槽( slot)指派( assign)给当前节点。

cluster delslots <slot> [slot ...]  # 移除一个或多个槽对当前节点的指派。

cluster flushslots  # 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。

cluster setslot <slot> node <node_id> # 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给

另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。

cluster setslot <slot> migrating <node_id> # 将本节点的槽 slot 迁移到 node_id 指定的节点中。

cluster setslot <slot> importing <node_id> # 从 node_id 指定的节点中导入槽 slot 到本节点。

cluster setslot <slot> stable  # 取消对槽 slot 的导入( import)或者迁移( migrate)。

cluster keyslot <key> # 计算键 key 应该被放置在哪个槽上。

cluster countkeysinslot <slot>  # 返回槽 slot 目前包含的键值对数量。

cluster getkeysinslot <slot> <count>  # 返回 count 个 slot 槽中的键 

 

 

 

 

 

 

要使用 Docker 搭建 Redis 集群,你可以按照以下步骤进行操作: 1. 确保已经安装并配置好了 Docker。 2. 创建一个用于 Redis 集群的自定义网络: ```bash docker network create redis-net ``` 3. 创建 Redis 主节点的容器。假设我们需要创建3个主节点,分别使用端口 7001、7002 和 7003: ```bash docker run -d --name redis1 --network redis-net -p 7001:6379 redis redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes docker run -d --name redis2 --network redis-net -p 7002:6379 redis redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes docker run -d --name redis3 --network redis-net -p 7003:6379 redis redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes ``` 这将创建三个 Redis 主节点容器,并将端口映射到主机的 7001、7002 和 7003 端口。 4. 创建 Redis 集群: ```bash docker run -it --rm --network redis-net redis redis-cli --cluster create <node-ip>:<node-port> <node-ip>:<node-port> <node-ip>:<node-port> ``` 将 `<node-ip>` 替换为你主机的 IP 地址, `<node-port>` 替换为容器中 Redis 主节点的端口(6379)。 例如: ```bash docker run -it --rm --network redis-net redis redis-cli --cluster create 172.18.0.2:6379 172.18.0.3:6379 172.18.0.4:6379 ``` 这将创建一个 Redis 集群,并将三个主节点添加到集群中。 5. 检查集群状态: ```bash docker run -it --rm --network redis-net redis redis-cli --cluster check <node-ip>:<node-port> ``` 例如: ```bash docker run -it --rm --network redis-net redis redis-cli --cluster check 172.18.0.2:6379 ``` 这将检查集群的状态,并输出每个节点的信息。 这样,你就成功使用 Docker 搭建了一个 Redis 集群。请根据你的实际需求进行相应的配置和调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值