下面是使用Docker部署Redis Cluster的攻略,具体过程如下:
1. 搭建 Redis Cluster Docker 环境
首先启动三个 Redis Docker 镜像,并将它们进行彼此链接:
1.1. 创建 Redis Docker 网络
首先我们要创建一个 Docker 网络用来在不同的容器间进行通信,这里使用 Bridge 模式的网络:
$ docker network create redis-cluster
1.2. 创建 Redis 节点容器
接下来我们要创建 6 个 Redis 节点容器,其中 3 个作为 master 节点,3 个作为 slave 节点。其中,每个 master 节点都有与之对应的一个 slave 节点。
$ docker run --name redis-7001 --network redis-cluster -d redis:6.0.9-alpine redis-server --appendonly yes --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendfsync everysec --protected-mode no --port 7001
$ docker run --name redis-7002 --network redis-cluster -d redis:6.0.9-alpine redis-server --appendonly yes --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendfsync everysec --protected-mode no --port 7002
$ docker run --name redis-7003 --network redis-cluster -d redis:6.0.9-alpine redis-server --appendonly yes --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendfsync everysec --protected-mode no --port 7003
$ docker run --name redis-7004 --network redis-cluster -d redis:6.0.9-alpine redis-server --appendonly yes --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendfsync everysec --protected-mode no --port 7004
$ docker run --name redis-7005 --network redis-cluster -d redis:6.0.9-alpine redis-server --appendonly yes --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendfsync everysec --protected-mode no --port 7005
$ docker run --name redis-7006 --network redis-cluster -d redis:6.0.9-alpine redis-server --appendonly yes --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendfsync everysec --protected-mode no --port 7006
以上这些命令将会创建 6 个 redis 容器节点,端口号分别为 7001
到 7006
,注意其中的 --port
参数表示正在运行的容器所使用的端口号。
1.3. 检查 Redis 节点容器是否正常运行
执行下面的命令获取 Redis 节点容器的监听地址和端口号:
$ docker ps
可以看到,每个 Redis 节点容器都有自己的 IP 和端口号:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
41e08af22ea1 redis:6.0.9-alpine "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 6379/tcp, 0.0.0.0:7001->7001/tcp, 7001/tcp redis-7001
6dfd1d6e26cd redis:6.0.9-alpine "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 6379/tcp, 7002/tcp, 0.0.0.0:7002->7002/tcp redis-7002
d0ec29d6e31d redis:6.0.9-alpine "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 6379/tcp, 0.0.0.0:7003->7003/tcp, 7003/tcp redis-7003
b32ca6a50450 redis:6.0.9-alpine "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 6379/tcp, 0.0.0.0:7004->7004/tcp, 7004/tcp redis-7004
a47bcb85372c redis:6.0.9-alpine "docker-entrypoint.s…" 4 seconds ago Up 2 seconds 6379/tcp, 0.0.0.0:7005->7005/tcp, 7005/tcp redis-7005
ff297357dbc9 redis:6.0.9-alpine "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 6379/tcp, 0.0.0.0:7006->7006/tcp, 7006/tcp redis-7006
1.4. 创建 Redis 集群
创建 Redis 集群之前,需要对容器中的 Redis 进行复制操作。每个 master 节点都需要一个 slave 节点,并且 3 个 master 节点必须处于运行状态,不然就不能创建 Redis 集群。
创建 Redis 集群的操作如下:
$ docker exec -it redis-7001 redis-cli --cluster create 172.18.0.2:7001 172.18.0.3:7002 172.18.0.4:7003 172.18.0.5:7004 172.18.0.6:7005 172.18.0.7:7006 --cluster-replicas 1
执行 docker ps
命令可以查看到如下信息,表示搭建 Redis 集群成功:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
41e08af22ea1 redis:6.0.9-alpine "docker-entrypoint.s…" 17 minutes ago Up 17 minutes 6379/tcp, 0.0.0.0:7001->7001/tcp, 7001/tcp redis-7001
d2274fa5f920 redis:6.0.9-alpine "docker-entrypoint.s…" 17 minutes ago Up 17 minutes 6379/tcp, 7002/tcp, 0.0.0.0:7002->7002/tcp redis-7002
36375a21449e redis:6.0.9-alpine "docker-entrypoint.s…" 17 minutes ago Up 17 minutes 6379/tcp, 0.0.0.0:7003->7003/tcp, 7003/tcp redis-7003
dee7bb8a15dc redis:6.0.9-alpine "docker-entrypoint.s…" 17 minutes ago Up 17 minutes 6379/tcp, 0.0.0.0:7004->7004/tcp, 7004/tcp redis-7004
079c0cafb56b redis:6.0.9-alpine "docker-entrypoint.s…" 17 minutes ago Up 17 minutes 6379/tcp, 0.0.0.0:7005->7005/tcp, 7005/tcp redis-7005
facf2de3b4f7 redis:6.0.9-alpine "docker-entrypoint.s…" 17 minutes ago Up 17 minutes 6379/tcp, 0.0.0.0:7006->7006/tcp, 7006/tcp redis-7006
2. 使用 Redis Cluster
2.1. 基本使用
我们可以通过使用 redis-cli
命令行工具来测试集群是否运行正常。首先进入到某一 Redis 节点的终端中,并连接到 cluster:
$ docker exec -it redis-7001 redis-cli -c
进入之后便可以对 Redis 进行命令行操作了:
10.0.1.3:7001> set name redis-cluster
-> Redirected to slot [9227] located at 172.18.0.4:7004
OK
172.18.0.4:7004> get name
"redis-cluster"
172.18.0.4:7004> set age 21
-> Redirected to slot [12539] located at 172.18.0.5:7005
OK
可以看到,我们通过 set
命令设置 key 和 value,然后使用 get
命令获取了刚刚设置的值。
2.2. RESTful API 使用
为了便于以后使用,我们还可以将 Redis Cluster 封装成 RESTful API 进行使用。
使用 node-redis 方式来建立 Redis Cluster API,具体操作步骤如下:
- 在主目录下创建 package.json 文件,添加依赖:
{
"dependencies": {
"express": "^4.17.1",
"redis": "^3.0.2"
}
}
- 在主目录下创建 routes.js 文件,编写前端路由:
const express = require('express')
const redis = require('redis')
const router = express.Router()
// 获取 Redis 集群信息
router.get('/redis/cluster/info', async (req, res) => {
const cluster = redis.createClient({
'nodes': [
{ 'host': '172.18.0.2', 'port': 7001 },
{ 'host': '172.18.0.3', 'port': 7002 },
{ 'host': '172.18.0.4', 'port': 7003 },
{ 'host': '172.18.0.5', 'port': 7004 },
{ 'host': '172.18.0.6', 'port': 7005 },
{ 'host': '172.18.0.7', 'port': 7006 }
]
})
cluster.cluster('cluster', (err, info) => {
res.json(info)
})
})
module.exports = router
在这里,我们设置了获取 Redis 集群信息的接口,启动应用之后,可以通过 localhost:3000/redis/cluster/info
接口获取 Redis 集群信息。
- 在主目录下创建 app.js 文件:
const express = require('express')
const app = express()
const routes = require('./routes')
app.use('/', routes)
const port = process.env.PORT || 3000
app.listen(port, () => console.log(`Running at port ${port}`))
以上三个步骤结束后,我们就可以使用 node app.js
启动服务,然后通过 localhost:3000/redis/cluster/info
接口获取 Redis 集群信息。
好了,这样我们就完成了 Docker 部署 Redis Cluster,并且封装成 RESTful API 使用的过程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何用docker部署redis cluster的方法 - Python技术站