如何用docker部署redis cluster的方法

yizhihongxing

下面是使用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 容器节点,端口号分别为 70017006,注意其中的 --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,具体操作步骤如下:

  1. 在主目录下创建 package.json 文件,添加依赖:
{
  "dependencies": {
        "express": "^4.17.1",
        "redis": "^3.0.2"
  }
}
  1. 在主目录下创建 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 集群信息。

  1. 在主目录下创建 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技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 搭建Go语言的ORM框架Gorm的具体步骤(从Java到go)

    下面是搭建Go语言的ORM框架Gorm的具体步骤的攻略: 1.安装Gorm 首先需要在电脑上安装Go语言的环境。可以参考Go官网的安装教程:https://golang.google.cn/doc/install 安装Go完成后,我们开始安装Gorm。可以通过以下命令在命令行中安装Gorm: go get -u github.com/jinzhu/gorm …

    database 2023年5月22日
    00
  • access mysql mssql 随机 10条数据的sql语句 原创

    如果您想从MySQL和SQL Server的表中随机获取10条记录,可以使用以下SQL语句: MySQL SELECT * FROM `table_name` ORDER BY RAND() LIMIT 10; SQL Server SELECT TOP 10 * FROM `table_name` ORDER BY NEWID(); 以上两个示例中,tab…

    database 2023年5月21日
    00
  • 查询Oracle中正在执行和执行过的SQL语句

    要查询Oracle数据库中正在执行和执行过的SQL语句,可以进行以下步骤: 步骤1:开启SQL跟踪 在Oracle数据库中,SQL跟踪是一种捕捉SQL执行信息的机制,它可以记录SQL语句的执行时间、执行计划、I/O等信息。要查询数据库中正在执行和执行过的SQL语句,需要先开启SQL跟踪。可以通过以下命令开启SQL跟踪: ALTER SESSION SET S…

    database 2023年5月21日
    00
  • Redis面试必会的题目

    当准备面试Redis的时候,以下是一些必须掌握的问题。 Redis的数据类型 Redis支持五种不同的数据类型,包括字符串、列表、哈希、集合和有序集合。应该理解每一种数据类型的含义和使用。 示例1:创建一个简单的字符串类型键值对: SET key value 示例2:创建一个哈希类型键值对: HSET myhash field1 "Hello&qu…

    database 2023年5月19日
    00
  • MySQL中select语句介绍及使用示例

    MySQL中select语句介绍及使用示例 select语句介绍 在MySQL中,使用SELECT语句可以从一个或多个表中获取数据。SELECT语句使用以下基本语法: SELECT 列名1, 列名2, … FROM 表名 WHERE 条件; 其中,列名是需要查询的列名,可以使用通配符*代表所有列;表名是要查询的表名;WHERE关键字后跟条件,用来指定筛选…

    database 2023年5月21日
    00
  • MyBatis多表关联查询的实现示例

    下面是关于”MyBatis多表关联查询的实现示例”的完整攻略。 标题 MyBatis多表关联查询的实现示例 简介 在MyBatis框架中,多表关联查询是非常常见的,本文将介绍如何使用MyBatis实现多表关联查询。 数据准备 在实现多表关联查询之前,我们需要先准备好测试数据。假设我们有两张表:学生表(student)和班级表(class),并且学生表中有一个…

    database 2023年5月22日
    00
  • 详解MySQL的二进制类型

    MySQL的二进制类型用于存储二进制数据,比如图像、音频、视频等文件。MySQL提供了多种二进制类型,下面将分别介绍这些类型的特点。 BINARY BINARY类型用于存储定长的二进制数据,长度需指定,最大长度为255。在比较两个BINARY类型的值时,区分大小写,即’A’和’a’被视为不同的值。 示例代码: CREATE TABLE t_binary ( …

    MySQL 2023年3月9日
    00
  • redis的keys命令与scan命令

    1 keys命令 可以使用正则查找匹配的结果。时间复杂度是O(N),N为redis中所有key的总数量。 该命令有致命的缺点: a. 没有limit,只能一次性获取所有符合条件的key。如果数据量很大的话,就会产生无穷无尽的输出。 b. keys命令是遍历算法,遍历全部的key,时间复杂度是O(N)。redis是单线程的,如果keys查询的时间过长,redi…

    Redis 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部