手把手教你用Docker部署一个MongoDB集群

原创
2016-06-07 16:08:06 1143浏览

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的。支持类似于面向对象的查询语言,几

【编者的话】MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中最像关系数据库的。支持类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。本文介绍了如何使用Docker搭建MongoDB集群。

手把手教你用Docker部署一个MongoDB集群

本文我会向大家介绍如何使用Docker部署一个MongoDB集群,具体如下:

首先要准备三个运行的Docker服务器,这意味着你要准备一个安装了Docker的本地Vagrant Box虚拟机(系统可以使用CoreOS)或者使用AWS或者其它的你喜欢的方式。

步骤 Step1

你要拿到3台Docker服务器的IP地址,并且将下面给出的IP地址配置到所有的服务器上面,每一台服务器都要执行如下命令(记得要替换掉IP地址哦):

root@node root@node

理想情况下你并不需要这么做,这些IP都是可以通过DNS自动配置好的。但是这样会更加简单,,毕竟这只是一次安装测试。

Step2

为每个节点创建密钥文件。在其中某一台服务器上面执行如下的命令,然后把密钥文件复制到其余两个服务器的同样的位置。

在这个教程中,我将把所有的东西都放在“/home/core”文件夹中。

core root@node core root@node keyfile root@node keyfile root@node

这个密钥文件的所有者被设置成id为“999”的用户了,因为在MongoDB的Docker容器中,这个用户需要有操作密钥文件的权限。

Step3

启动node1(即第一台Docker服务器)的MongoDB容器。它会启动一个没有身份验证机制的容器,所以我们要设置一个用户。

name mongo \ db \ keyfile \ \ \

现在创建一个admin用户。我们可以连接到刚刚启动的mongoDB容器,并进入一个交互式的shell环境.

这时候,我们就进到MongoDB的Docker容器里面了,然后我们要打开一个mongo shell环境:

上面的命令可以打开mongo shell环境。执行后你会看到这样的输出:

connecting to: test see http http

切换到admin用户:

admin switched to db admin

创建一个新的site admin 用户

user pwd roles

创建成功的话你会看到如下的成功信息:

{ } ]
}

创建一个root用户:

user pwd roles

你会看到如下的成功信息:

{ } ]
}

我们已经创建好了我们以后要使用的几个用户,现在我们不会退出交互式shell环境(mongo和Docker容器的环境)。

bye root@node1 Step4

停止第一个MongoDB实例:

Step5

这次使用密钥文件启动第一台MongoDB实例(还是在node1上面操作的)。

root@node1:/# docker rm mongo root@node1:/# docker run \ --name mongo \ db \ keyfile \ \ \ \ \ \ --smallfiles \ keyfile \

注意:

  • --keyFile的路径是/opt/keyfile/mongodb-keyfile,这是正确的。这是密钥文件在Docker内部的地址,我们用-v选项将密钥文件映射到容器内部的那个路径上(即:/opt/keyfile/mongodb-keyfile)。
  • --add-host把这些信息添加到Docker容器的/etc/hosts文件中,所以我们可以使用域名而不是IP地址了。在实际的生产环境中这些信息都是DNS,这些参数都可以忽略。
  • Step6

    连接到副本集上并且安装配置好它。这还是在node1上面进行的。我们要开启另外一个新的交互式shell环境进入mongo容器,同时开启一个mongo shell环境:

    bash root@node1:/# mongo

    切换到admin用户下:

    admin switched to db admin

    因为我们已经设置了一个密码,所以这次我们不得不做身份验证。我们把密码设置为:password。

    现在我们可以开启副本集:

    Step7

    验证已经初始化的副本集的配置:

    > rs0 r { } ]
    } Step8

    在其余的两个节点启动MongoDB。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。