Docker 部署单机版部署单机版 Pulsar 和集群架构和集群架构 Redis(开发神器开发神器)的方法的方法
一、前言:一、前言:
现在互联网的技术架构中,不断出现各种各样的中间件,例如 MQ、Redis、Zookeeper,这些中间件在部署的时候一般都是以主从架构或者集群的架构来部署,公司一般都会在开发环境、测试环境和生
产环境各部署一套。
当我们开发的时候,一般就会连着开发环境。但是呢,一般公司的开发环境都只能在内网使用,当我们回家了,除非公司提供有 VPN,不然就没办法使用了。有时候我们是有VPN了,但是开发起来还是
很不方便。例如我们现在的 MQ 中间件使用的是 Pulsar,但是 Pulsar 的 tenant 和 namespace 都是不能自动创建的,所以平时开发起来非常的不方便,只能每次需要时都找一遍 DBA。
所以,一般我们都会在本地自己部署一套,但是自己部署有下面的两个难点:
中间件有自己的实现语言,例如 RabbitMQ,当我们部署 RabbitMQ 时,首先要安装好 Erlang 语言。部署集群架构会耗费大量的系统资源,导致本来资源就吃紧的笔记本更加卡顿,开发起来非常的不
爽。
二、二、Docker::
Docker 可以完美地解决上面的问题,并且让部署变得极其的简单。下面以我自己用到的中间件为例子。
A、Pulsar:
上面提到,Pulsar 的租户是不能自动创建的,命名空间也是不能自动创建的,如果我们要使用,只能找到负责这块的同事帮忙创建了。而我最近做的功能:广播中心和会员导出都使用到 Pulsar,但是不
想麻烦同事,而且我经常会在家里干活,所以
最后直接到官网上面,找了本地如何部署。
官网介绍了多种部署方式:有利用压缩包的,Docker的,Kubernetes的。当然了,有 Docker 的部署方式,我们必须使用 Docker 的部署方式,反正拉取一个镜像启动一个容器就直接搞定了,相当的方
便。
下面上命令:
docker run -it -d -p 6650:6650 -p 8080:8080 -v data -v conf --name=mypulsar apachepulsar/pulsar:2.6.1 bin/pulsar standalone
命令是非常的简单:将 pulsar 的 6650和8080端口号开放出来,并绑定到宿主机对应的端口号,这样我们能直接访问宿主机 ip:port 就能访问到容器。接着,将 Pulsar 的 data 和 conf 挂载到宿主机中,这
样数据就不会丢失了。接着利用 pulsar standalone 命令启动一个单机版的 Pulsar。
接着,不管我们是需要创建租户或者命名空间,直接进入容器中创建即可。
进入容器:
docker exec -it mypulsar /bin/bash
关于tenant 和 namespace 的增删改查命令:
## 1 租户
#查看有哪些租户(public 是系统默认的租户)
pulsar-admin tenants list
##创建租户
pulsar-admin tenants create my-tenant
#删除租户
pulsar-admin tenants delete my-tenant
## 2 命名空间
#查看指定租户下边的命名空间
pulsar-admin namespaces list my-tenant
#创建指定租户命名空间
pulsar-admin namespaces create my-tenant/my-namespace
#删除指定租户命名空间
pulsar-admin namespaces delete my-tenant/my-namespace
B、Redis:
Redis 一般我们生产的架构都是使用 Cluster 的,但是如果是自己部署一套集群的 Redis,是相当的麻烦,以前我自己也写过文章:Linux 部署 Redis 集群
如果使用 Docker 的话,会非常的简单。
1 自定义网络自定义网络
1.1 创建 Redis 的专属网络
Redis 集群的各个节点公用一个专属网络,节点间就可以互相访问了,而避免了每个节点之间都要用 –link 去做网络互通。
docker network create 命令创建的网络默认是 bridge 模式。
winfun@localhost ~ % docker network create redis-net --subnet 172.26.0.0/16
5001355940f43474d59f5cb2d78e4e9eeb0a9827e53d8f9e5b55e7d3c5285a09
winfun@localhost ~ % docker network list
NETWORK ID NAME DRIVER SCOPE
4d88d473e947 bridge bridge local
79a915fafbb5 host host local
f56e362d3c68 none null local
5001355940f4 redis-net bridge local
winfun@localhost ~ %
1.2 查看自定义网络详情
我们可以利用命令 docker network inspect redis-net 来查看自定义网络的详情,可以看到现在网络里面是没有容器的。
winfun@localhost mydata % docker network inspect redis-net
[
{
"Name": "redis-net",
"Id": "aed8340bbf8ab86cedc1d990eb7612854ba2b0bd4eae0f978ff95eadc3dbcf65",
"Created": "2020-10-22T08:46:55.695434Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.26.0.0/16"
}
] },
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
2 开始部署开始部署
2.1 创建六个Redis节点的配置