基于Docker搭建Redis集群

在这里插入图片描述

一. 问题背景

研究完关于Redis的架构,现在动手搭建一个Redis集群试一下

参考自:基于Docker搭建Redis集群(主从集群)

二. 前言

Linux:CentOS 7
Redis:5.0
Docker:19.03.13
Redis集群:在一台Linux上开6个Redis,算是伪集群吧

三. 集群地址

192.168.199.130是Linux的ip地址,启动redis容器的时候是以host的docker网络模式启动的,因此redis容器的ip与Linux的ip一致

容器名ip端口
redis-node1192.168.199.1306379
redis-node2192.168.199.1306380
redis-node3192.168.199.1306381
redis-node4192.168.199.1306382
redis-node5192.168.199.1306383
redis-node6192.168.199.1306384

四. 部署Redis

4.1 拉取Redis镜像

Redis的版本建议是5.x版本,比如5.0.4,5.0.6:

docker pull redis:5.0

4.2 准备配置文件

4.2.1 创建数据卷路径

后面将会以指定配置文件来启动容器,因此需要先准备好数据卷路径

mkdir -p /mydata/redis-cluster/node1/conf /mydata/redis-cluster/node1/data
mkdir -p /mydata/redis-cluster/node2/conf /mydata/redis-cluster/node2/data
mkdir -p /mydata/redis-cluster/node3/conf /mydata/redis-cluster/node3/data
mkdir -p /mydata/redis-cluster/node4/conf /mydata/redis-cluster/node4/data
mkdir -p /mydata/redis-cluster/node5/conf /mydata/redis-cluster/node5/data
mkdir -p /mydata/redis-cluster/node6/conf /mydata/redis-cluster/node6/data

4.2.2 修改redis.conf配置文件

先去官网下载redis.conf,然后将文件重命名为nodes-6379.conf,其余5台Redis也分别修改为nodes-6380.confnodes-6381.conf等等,以此类推

然后修改配置文件中的配置,如下:

  • 将此行bind 127.0.0.1注释
  • daemonize yes改成no
  • protected-mode改成no
  • 设置开启集群,cluster-enabled yes
  • 设置节点超时时间,单位毫秒,cluster-node-timeout 15000
  • 设置集群的配置文件,cluster-config-file nodes-6379.conf,其中nodes-6379.conf是redis对应的配置文件,如果是192.168.199.130:6380这台redis,则为nodes-6380.conf

4.2.3 上传配置文件

将修改好的配置文件分别上传到对应的文件夹,比如nodes-6379.conf上传到/mydata/redis-cluster/node1/conf/文件夹下。如下:

4.3 创建容器

建议将如下命令都放在一个shell脚本里面,这样方便下次重复使用,执行shell脚本前需要给shell脚本添加执行权限,例如:chmod +x ./xxxx.sh

docker create --name redis-node1 --net host -v /mydata/redis-cluster/node1/data:/data -v /mydata/redis-cluster/node1/conf/nodes-6379.conf:/etc/redis/nodes-6379.conf redis:5.0 --appendonly yes --cluster-enabled yes --cluster-config-file nodes-6379.conf --port 6379

docker create --name redis-node2 --net host -v /mydata/redis-cluster/node2/data:/data -v /mydata/redis-cluster/node2/conf/nodes-6380.conf:/etc/redis/nodes-6380.conf redis:5.0 --appendonly yes --cluster-enabled yes --cluster-config-file nodes-6380.conf --port 6380

docker create --name redis-node3 --net host -v /mydata/redis-cluster/node3/data:/data -v /mydata/redis-cluster/node3/conf/nodes-6381.conf:/etc/redis/nodes-6381.conf redis:5.0 --appendonly yes --cluster-enabled yes --cluster-config-file nodes-6381.conf --port 6381

docker create --name redis-node4 --net host -v /mydata/redis-cluster/node4/data:/data -v /mydata/redis-cluster/node4/conf/nodes-6382.conf:/etc/redis/nodes-6382.conf redis:5.0 --appendonly yes --cluster-enabled yes --cluster-config-file nodes-6382.conf --port 6382

docker create --name redis-node5 --net host -v /mydata/redis-cluster/node5/data:/data -v /mydata/redis-cluster/node5/conf/nodes-6383.conf:/etc/redis/nodes-6383.conf redis:5.0 --appendonly yes --cluster-enabled yes --cluster-config-file nodes-6383.conf --port 6383

docker create --name redis-node6 --net host -v /mydata/redis-cluster/node6/data:/data -v /mydata/redis-cluster/node6/conf/nodes-6384.conf:/etc/redis/nodes-6384.conf redis:5.0 --appendonly yes --cluster-enabled yes --cluster-config-file nodes-6384.conf --port 6384

解释:

  1. docker create:创建容器,但不启动容器
  2. --net:docker的网络模式,host是指使用宿主机的IP以及端口
  3. -v:挂载数据卷,实现宿主机与docker数据共享
  4. --appendonly:是否开启持久化,选值:yes、no
  5. --cluster-enabled:是否启动集群,选值:yes、no
  6. --cluster-config-file:指定节点信息,自动生成

4.5 启动容器

启动上面创建的容器,也是可以自行创建一个shell脚本填入下面命令:

docker start redis-node1 redis-node2 redis-node3 redis-node4 redis-node5 redis-node6

五. 部署集群

5.1 进入容器

前面已经将6台Redis部署好了,但是他们之间还不知道其他人的信息,即此时还不是一个集群,现在创建集群:

# 随便进入一台redis容器,这里以redis-node1为例
docker exec -it redis-node1 bash

5.2 创建集群

输入下面命令创建集群,随后会询问是否可以设置以上的配置信息?需要手动输入yes

# 192.168.199.130是linux的ip
redis-cli --cluster create 192.168.199.130:6379 192.168.199.130:6380 192.168.199.130:6381 192.168.199.130:6382 192.168.199.130:6383 192.168.199.130:6384 --cluster-replicas 1

参数解释:
--cluster-replicas 1,表示1台redis master配置多少台slave从机,如果是--cluster-replicas 2,则表示1台master配置2台slave从机。如果所有Redis加起来不够分配主从,会出现报错,无法创建集群。本博客搭建了6台Redis,如果1台master配置2台slave从机,则会报错,因为6台不够分配,需要加多3台。

5.3 注意事项

  1. Redis集群必须至少配置3台master,否则创建集群时会报错。
  2. 当总共6台Redis,我要配置4台master是可以的,此时就是4台master,剩余2台由自己手动配置为哪台master的slave

5.3.1 手动配置主从

情况:当总共有6台Redis,我想要4台master,2台slave,那么就用--cluster-replicas 0手动创建集群:

# 创建master  --cluster-replicas 0
redis-cli --cluster create 192.168.199.130:6379  192.168.199.130:6380 192.168.199.130:6381 192.168.199.130:6382  --cluster-replicas 0
# 手动添加slave

# 跟随6379这台master
redis-cli --cluster add-node 192.168.199.130:6383 192.168.199.130:6379 --cluster-slave --cluster-master-id 要跟随的master容器的id

# 跟随6379这台master
redis-cli --cluster add-node 192.168.199.130:6384 192.168.199.130:6379 --cluster-slave --cluster-master-id 要跟随的master容器的id

参数解释:

  1. --cluster-slave:人工指定主从
  2. --cluster-master-id:master容器的id

下图是cluster nodes的信息:

在这里插入图片描述

六. 测试Redis集群

向master写入数据,去slave获取是否有数据

# 随便进入一台redis容器
docker exec -it redis-node1 bash

必须以集群的方式登入Redis的客户端,命令为redis-cli -c,如下:

# 登入redis客户端,指定登入6380
redis-cli -c -h 192.168.199.130 -p 6380

向Redis写数据:

set k1 v1

获取数据:

get k1

会发现有时写、读数据,会被重定向到某台Redis上,其实原理是Redis对key做了一个哈希,根据哈希值放到对应的slot上,每一台Redis有属于自己的一段slot,这段slot由若干个slot组成。但是根据三张图秒懂Redis集群设计原理说的原理,读数据的时候不应该出现重定向到对应的slot所属的Redis上。有待研究这点。

七. Redis集群的某些常用操作命令

命令作用
redis-cli登录Redis客户端,-c表示以集群方式登入,-h指定ip,-p指定端口
cluster nodes在Redis客户端,输入此命令可以显示集群的各个节点信息
info replication在Redis客户端,输入此命令可以显示集群的节点信息
redis-cli -h查看redis-cli命令帮助手册
redis-cli --cluster help查看管理集群命令的帮助手册
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通过docker搭建Redis集群的步骤如下: 1. 创建容器:使用docker命令创建多个Redis容器,每个容器代表一个节点。例如,可以使用以下命令创建一个名为redis-node-1的节点容器: ``` docker run --name redis-node-1 -p 6381:6379 -d redis ``` 2. 进入容器:使用docker exec命令进入容器内部,例如,可以使用以下命令进入redis-node-1容器: ``` docker exec -it redis-node-1 /bin/bash ``` 3. 构建集群关系:在容器内部,使用Redis命令行工具,将新增的节点作为master节点加入原集群。例如,可以使用以下命令将节点redis-node-7加入集群: ``` redis-cli -p 6381 cluster add-node <new_node_ip:port> <existing_node_ip:port> ``` 4. 查看集群状态:使用Redis命令行工具查看集群的状态。例如,可以使用以下命令在节点redis-node-1上查看集群信息: ``` redis-cli -p 6381 cluster info ``` 通过以上步骤,你可以使用docker搭建Redis集群,并查看集群的状态。请根据实际情况进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [阿昌教你通过docker搭建Redis集群](https://blog.csdn.net/qq_43284469/article/details/122458602)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值