当前位置: 萬仟网 > 网络运营>服务器>虚拟主机 > Docker 部署单机版 Pulsar 和集群架构 Redis(开发神器)的方法

Docker 部署单机版 Pulsar 和集群架构 Redis(开发神器)的方法

2020年11月21日  | 萬仟网网络运营  | 我要评论
一、前言:现在互联网的技术架构中,不断出现各种各样的中间件,例如 mq、redis、zookeeper,这些中间件在部署的时候一般都是以主从架构或者集群的架构来部署,公司一般都会在开发环境、测试环境和

一、前言:

现在互联网的技术架构中,不断出现各种各样的中间件,例如 mq、redis、zookeeper,这些中间件在部署的时候一般都是以主从架构或者集群的架构来部署,公司一般都会在开发环境、测试环境和生产环境各部署一套。

当我们开发的时候,一般就会连着开发环境。但是呢,一般公司的开发环境都只能在内网使用,当我们回家了,除非公司提供有 vpn,不然就没办法使用了。有时候我们是有vpn了,但是开发起来还是很不方便。例如我们现在的 mq 中间件使用的是 pulsar,但是 pulsar 的 tenant 和 namespace 都是不能自动创建的,所以平时开发起来非常的不方便,只能每次需要时都找一遍 dba。

所以,一般我们都会在本地自己部署一套,但是自己部署有下面的两个难点:

中间件有自己的实现语言,例如 rabbitmq,当我们部署 rabbitmq 时,首先要安装好 erlang 语言。部署集群架构会耗费大量的系统资源,导致本来资源就吃紧的笔记本更加卡顿,开发起来非常的不爽。

二、docker:

docker 可以完美地解决上面的问题,并且让部署变得极其的简单。下面以我自己用到的中间件为例子。

a、pulsar:

上面提到,pulsar 的租户是不能自动创建的,命名空间也是不能自动创建的,如果我们要使用,只能找到负责这块的同事帮忙创建了。而我最近做的功能:广播中心和会员导出都使用到 pulsar,但是不想麻烦同事,而且我经常会在家里干活,所以
最后直接到官网上面,找了。

官网介绍了多种部署方式:有利用压缩包的,docker的,kubernetes的。当然了,有 docker 的部署方式,我们必须使用 docker 的部署方式,反正拉取一个镜像启动一个容器就直接搞定了,相当的方便。

下面上命令:

命令是非常的简单:将 pulsar 的 6650和8080端口号开放出来,并绑定到宿主机对应的端口号,这样我们能直接访问宿主机 ip:port 就能访问到容器。接着,将 pulsar 的 data 和 conf 挂载到宿主机中,这样数据就不会丢失了。接着利用 pulsar standalone 命令启动一个单机版的 pulsar。

接着,不管我们是需要创建租户或者命名空间,直接进入容器中创建即可。
进入容器:

关于tenant 和 namespace 的增删改查命令:

b、redis:

redis 一般我们生产的架构都是使用 cluster 的,但是如果是自己部署一套集群的 redis,是相当的麻烦,以前我自己也写过文章:linux 部署 redis 集群

如果使用 docker 的话,会非常的简单。

1 自定义网络

1.1 创建 redis 的专属网络

redis 集群的各个节点公用一个专属网络,节点间就可以互相访问了,而避免了每个节点之间都要用 --link 去做网络互通。

docker network create 命令创建的网络默认是 bridge 模式。

1.2 查看自定义网络详情

我们可以利用命令 docker network inspect redis-net 来查看自定义网络的详情,可以看到现在网络里面是没有容器的。

2 开始部署

2.1 创建六个redis节点的配置

2.2 启动容器

2.3 查看启动成功的6个容器

3 再查看网络

3.1 查看网络中的容器

我们上面启动容器时,都指定使用 redis-net 网络,所以我们可以先看看 redis-net 网络的信息:
我们可以看到 “containers”包含了我们启动的6个容器,也就是6个redis 节点。

3.2 查看容器间是否能网络互通

我们还可以尝试利用 redis-1 来对 redis-2 执行 ping 命令,看看网络是否可以互通:

4 创建集群

4.1 利用 redis-cli 命令创建集群:

4.2 利用 redis-cli 连接当前节点,查看集群信息:

4.3 尝试增加一个key

5 测试

至此,应该可以说,我们已经成功利用 docker 在本地部署了一套 redis 集群。
那么接下来,我们会直接在代码中测试这redis 是否可以使用。

但是结果是不如意的,返回的是一个异常:

从这里可以猜测到,估计是没法连接到我们在 docker 中部署的 redis 集群。
所以在下次调试的时候,我就看看 jediscluster 拿到的集群节点的信息是怎么样的。
如下图:

我们可以看到,即使我们给 jediscluster 配置的写的是本地 ip 和映射好的 port。

但是没想到,jediscluster 自己又拿里一遍集群的元数据,此时候的节点的ip都是自定义网络 redis-net 分配的子网了,宿主机可能就走不通了(关于这个问题,我们可以考虑使用 host 类型的自定义网络)。

6 应用也部署到自定义网络中

那么怎么测试呢?

我下面将自己编写一个简单的 springboot 项目,然后利用 dockerfile 根据项目生成的 jar 包构建成一个镜像,然后利用 docker 部署起来,并且将部署后的容器加入到自定义网络 redis-net 中,最后进行测试。

6.1 创建 springboot 项目

配置如下:

6.1.1 pom.xml:

主要引入了 web 和 redis 的 starter。

6.1.2 项目的 application.properties :

6.1.3 controller如下:

6.2 将项目打包并生成镜像

6.2.1 将项目打包成 jar 包

6.2.2 生成镜像

编写 dockerfile 文件:

接着去到 dockerfile 当前目录,执行下面命令:

6.3 启动容器,进行测试

6.3.1 启动容器,并将容器加入上面创建的自定义网络 redis-net

构建后,我们可以利用 docker ps 命令看看我们的镜像:

利用 docker run 命令运行此镜像启动一个容器:

利用 docker network connect 将这个容器加入到上面的自定义网络 redis-net 中:

当我们再查看自定义网络 redis-net 的详情,我们可以在 containers 中找到 myrediscluster 这个容器,并且还给这个容器分配了自定义网络 redis-net 的一个 ip 地址。
如下图:

6.3.2 我们此时可以直接到浏览器调用 redisclustercontroller的接口:

设置一个 key/value:

根据key获取value:

从上面可以看到,已经完全没问题了。

但是呢,这样我们每次测接口,都需要重新构建镜像然后部署。

6.4 bridge 和 host 模式

我们都知道,上面我们创建的自定义网络 redis-net 的模式是桥接模式,也就是 bridge。

他的最大特点是将 docker 中容器的网络和宿主机隔离开来,容器的ip和宿主机的ip是不通的,所以在上面利用 jediscluster 来操作 redis 集群时,当 jediscluster 获取到集群的节点信息是 docker 中容器的 ip 时,是访问不通的。

所以解决这个问题,其实我们可以利用 host 模式,它的原理其实就是容器共享宿主机的网络环境。这样的话,jediscluster 访问 redis 集群应该就没问题了。

对,就是应该,因为我自己尝试了很多遍 host 模式下的 redis 集群部署,部署和利用 redis-cli 命令操作都是没问题的。但是,当利用 jediscluster 访问集群时,连集群节点的信息都没拿到!!

所以需要大家自己去尝试一下,具体可参考下面的文章:

7 最后

到此,我相信大家都体验了一波 docker 的强大。在开发时利用好,简直就是开发的神器。可以在本地利用最少的系统资源,轻松地去搭建一套完整的开发环境,包括各种中间件。

到此这篇关于docker 部署单机版 pulsar 和集群架构 redis(开发神器)的文章就介绍到这了,更多相关docker 部署redis集群内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

  • Docker数据卷常用操作代码实例

    Docker数据卷常用操作代码实例

    如果开发者使用了dockerfile去构建镜像,也可以在构建镜像时声明数据卷,例如下面这样:from nginxadd https://www.baidu.co... [阅读全文]
  • Docker容器编排实现过程解析

    Docker容器编排实现过程解析

    在实际的开发环境或者生产环境,容器往往都不是独立运行的,经常需要多个容器一起运行,此时,如果继续使用run命令启动容器,就会非常不便,在这种情况下,docker... [阅读全文]
  • Docker容器网络端口配置过程详解

    暴露网络端口实际上,docker中涉及暴露网络端口的参数有两个,分别是-p和-p。下面分别来介绍.-p使用-p,docker会在宿主机上随机为应用分配一个未被使... [阅读全文]
  • Docker创建本地镜像实现方法解析

    Docker创建本地镜像实现方法解析

    所谓的容器实际上是在父镜像的基础上创建了一个可读写的文件层级,所有的修改操作都在这个文件层级上进行,而父镜像并未受影响,如果读者需要根据这种修改创建一个新的本地... [阅读全文]
  • Docker镜像管理常用操作代码示例

    Docker镜像管理常用操作代码示例

    镜像也是docker的核心组件之一,镜像时容器运行的基础,容器是镜像运行后的形态。总体来说,镜像是一个包含程序运行必要以来环境和代码的只读文件,它采用分层的文件... [阅读全文]
  • 一次docker错误的耗时排查过程记录

    由来客户是深信服的订制系统,基于 centos 改的,排查半天发现居然是文件损坏,而不是 docker 的问题。环境信息docker信息:系统信息服务器信息:排... [阅读全文]
  • CentOS8下的Docker使用详解

    CentOS8下的Docker使用详解

    一、centos8下docker的安装二、centos8下docker的启动与停止三、镜像加速器配置1. 访问阿里云2. 配置镜像加速地址进入控制台查看配置的镜... [阅读全文]
  • VMware安装苹果虚拟机的教程(亲测有效)

    VMware安装苹果虚拟机的教程(亲测有效)

    写在前面工欲善必先利其器(虽然能去苹果机房做,但我太菜了,能玩一年 ),虽然没有苹果机,但是可以在虚拟机上操作一波。主要还是unlock和找镜像,网上不乏类似的... [阅读全文]
  • 详解docker pull 下来的镜像都存到了哪里

    详解docker pull 下来的镜像都存到了哪里

    docker pull 下来的命令都默认存在/var/lib/docker/文件夹下。查看/var/lib/docker/image/overlay2/repo... [阅读全文]
  • 详解docker-compose速度太慢解决方式

    解决办法只有一个一个一个,那就是换源!使用的是github的源基本都是超时,此时使用:记得修改权限,否则会报错:最后查看版本:安装docker-compose(... [阅读全文]
验证码:
Copyright © 2017-2020  萬仟网 保留所有权利. 粤ICP备17035492号-1