首先我们先来了解一下Mongo集群的概念,Mongo集群有3个主要组件
ConfigServer:在集群中扮演存储整个集群的配置信息,负责配置存储,如果需要高可用的ConfigServer那么需要3个节点。
Shard:分片,存储真实的数据,每一个Shard分片都负责存储集群中的数据,例如一个集群有3个分片,然后我们定义分片规则为哈希,那么整个集群的数据就会(分割)到3个分片中的某一个分片,那么分片是特别重要的,如果集群中的一个分片全部崩溃了那么集群将不可用,所以我们要保证集群的高可用,那么我们需要一个分片配置3个节点,2个副本集一个仲裁节点,仲裁节点类似于Redis的哨兵模式,如果发现主节点挂了那么让另一个副本集进行数据存储。
Mongos:Mongos我们可以理解为整个集群的入口,类似于Kafka的Broker代理,也就是客户端,我们通过客户端连接集群进行查询。
下面是MongoDB的官方集群架构图,我们看到Mongos是一个路由,他们的信息都存储在ConfigServer中,我们通过Mongos进行添加,然后根据条件将数据进行分片到分片的副本集中
首先我们搭建两个config-server
创建两个config-server的配置文件
然后配置文件中配置端口
然后启动容器
然后进入容器初始化
如果ok为1表示成功
下面我们给每个server创建2个分片
创建挂载文件
创建配置文件
然后启动容器
进入第一个分片
进入第二个分片
创建挂载文件
然后启动Mongo
mongo添加分片组
新建数据启用分片
那么我们先来总结一下我们搭建一个高可用集群需要多少个Mongo
mongos : 3台
configserver : 3台
shard : 3片
每一片shard 分别 部署两个副本集和一个仲裁节点 : 3台
那么就是 3 + 3 + 3 3 = 15 台,我这里演示采用3台服务器
1146780169 4核16g 部署一个configserver,一个mongos,2个分片组
18261216 2核4g 部署一个configserver,一个mongos,1个分片组
1061211362 1核2g 部署一个configserver,一个mongos,不搭建分片组
由于此处服务器原因所以不是均衡分布,请根据自身实际情况搭建
我们先来搭建ConfigServer,因为我们知道搭建的话一定要高可用而且一定要权限这里mongo之间通信采用秘钥文件,所以我们先进行生成
创建挂载文件目录
写入配置文件
然后生成keyFile
文件如下,我们,之后我们所以key都采用这个(请采用自己生成的key)
写入key文件
然后启动config-server1容器
创建挂载文件目录
写入配置文件
写入配置文件
文件如下,我们,之后我们所以key都采用这个(请采用自己生成的key)
写入key文件
然后启动config-server2容器
创建挂载文件目录
写入配置文件
文件如下,我们,之后我们所以key都采用这个(请采用自己生成的key)
写入key文件
然后启动config-server3容器
进入第一台容器
输入
如果返回ok则成功
然后我们创建用户
由于mongos是客户端,所以我们先搭建好config以及shard之后再搭建mongos。
在同一台服务器上初始化一组分片
创建挂载文件
配置配置文件
创建keyfile
运行shard1分片组
并且制定第三个副本集为仲裁节点
返回ok后创建用户
然后退出,分片组1搭建完成
在同一台服务器上初始化一组分片
创建挂载文件
配置配置文件
创建keyfile
运行shard2分片组
并且制定第三个副本集为仲裁节点
返回ok后创建用户
然后退出,分片组2搭建完成
在同一台服务器上初始化一组分片
创建挂载文件
配置配置文件
创建keyfile
运行shard3分片组
并且制定第三个副本集为仲裁节点
返回ok后创建用户
然后退出,分片组3搭建完成
创建配置文件
填入配置文件,这里我们删除了认证的信息,因为mongos是不能设置认证的,他也是用的前面使用的密码即可,如configserver的密码
创建keyfile
运行mongos1
创建配置文件
填入配置文件,这里我们删除了认证的信息,因为mongos是不能设置认证的,他也是用的前面使用的密码即可,如configserver的密码
创建keyfile
运行mongos2
创建配置文件
填入配置文件,这里我们删除了认证的信息,因为mongos是不能设置认证的,他也是用的前面使用的密码即可,如configserver的密码
创建keyfile
运行mongos3
进入第一台mongos
先登录(使用前面设置的root用户密码)
进行配置分片信息
全部返回ok则成功
去其他两台mongos执行
mongos2
mongos3
创建用户
插入数据
openssl rand -base64 756 > mongokey
清空server1两个分片数据
清空server2两个分片数据官方镜像下的简单示例
本节中,将创建一个 Container 来运行 Docker 的官方 Registry 镜像。你将推送(Push)一个镜像到这个 Registry 服务器,然后再从该 Registry 中拉取(Pull)同一个镜像。
这是个很好的练习,有助于理解客户端与本地 Registry 的基本交互。
1、安装 Docker。
2、从 Docker 公共 Registry 中运行 hello-world 镜像。
$ docker run hello-world
run 命令自动从 Docker 的官方镜像库中将 hello-world 镜像 pull 下来。
3、在 localhost 上启动 Registry 服务。
$ docker run -p 5000:5000 registry:20
这将在 DOCKER_HOST 上启动一个 Registry 服务,并在 5000 端口监听。
4、列出镜像。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry 20 bbf0b6ffe923 3 days ago 5451 MB
golang 14 121a93c90463 5 days ago 5149 MB
hello-world latest e45a5af57b00 3 months ago 910 B
这个列表应当包括一个由先前运行而得来的 hello-world 镜像。
5、为本地 repoistory 重新标记 hello-world 镜像。
$ docker tag hello-world:latest localhost:5000/hello-mine:latest
此命令使用 [REGISTRYHOST/]NAME[:TAG] 格式为 hello-world:latest 重新打标。REGISTRYHOST在此例中是 localhost。在 Mac OSX 环境中,得把 localhost 换成 $(boot2docker ip):5000。
6、列出新镜像。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry 20 bbf0b6ffe923 3 days ago 5451 MB
golang 14 121a93c90463 5 days ago 5149 MB
hello-world latest e45a5af57b00 3 months ago 910 B
localhost:5000/hello-mine latest ef5a5gf57b01 3 months ago 910 B
可以看到,新镜像已经出现在列表中。
7、推送新镜像到本地 Registry 中。
$ docker push localhost:5000/hello-mine:latest
The push refers to a repository [localhost:5000/hello-mine] (len: 1)
e45a5af57b00: Image already exists
31cbccb51277: Image successfully pushed
511136ea3c5a: Image already exists
Digest: sha256:a1b13bc01783882434593119198938b9b9ef2bd32a0a246f16ac99b01383ef7a
8、使用 curl 命令及 Docker Registry 服务 API v2 列出 Registry 中的镜像:
$ curl -v -X GET >
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)