`

docker mongodb 集群(1)--使用Docker创建Replicas(复制集)

 
阅读更多

最近准备自学mongodb集群的相关知识

鉴于项目部署已经全面使用docker,故准备将mongodb集群放在容器中

 

系统:

 

cat /etc/issue
Ubuntu 16.04.2 LTS \n \l

 宿主环境是ubuntu 16.04.2

 

docker的相关安装不在介绍,docker-compose相关也不在介绍有兴趣的小伙伴可以自行查阅资料。

 

-----------------------------------------------------------相关背景知识------------------------------------------------------------------

MongoDB复制集由一组MongoDB实例节点组成,包含一个Primary节点、多个Secondary节点。

 

客户端写入的数据会被写入Primary节点,Secondary节点从Primary节点自动同步数据,保持所有成员的数据相同,提供数据库的高可用性 

 

MongoDB复制集的配置非常简单,只需要指定复制集中包含哪些节点就好了 

 

不需要我们指定哪个节点是Primary,会自动选举出来,其他节点便成为Secondary,自动与Primary同步,当Primary坏掉后,也会自动从多个Secondary中重新选举出Primary 

 

下面使用Docker的MongoDB镜像创建3个MongoDB实例,配置成复制集,然后测试一下数据自动复制的情况,并模拟Primary坏掉的情况 

 

好了,先用docker 安装好 mongo

 

docker pull mongo

 

直接下载官方latest版本就OK

 

-----------------------------------------------------------构建docker网络层------------------------------------------------------------

由于复制集合应该在docker中同属于一个网络层,所以我们先创建一个network,执行命令

 

 

docker network create mongo-cluster 

 

 

查看网络层

 

docker network ls

 如图所示:

 

 

-----------------------------------------------------------docker-compose构建-------------------------------------------------------

现在创建文件 docker-compose.yml

 

mongo-replica-1-1:
     image: 'mongo'
     net: 'mongo-cluster'
     ports:
        - '30001:27017'
     volumes:
        - '/root/mondodb-cluster/replica-1-1-data:/data/db'
     command: mongod --replSet mongo-repliset

 

mongo-replica-1-2:
     image: 'mongo'
     net: 'mongo-cluster'
     ports:
        - '30002:27017'
     command: mongod --replSet mongo-repliset

 

mongo-replica-1-3:
     image: 'mongo'
     net: 'mongo-cluster'
     ports:
        - '30003:27017'
     command: mongod --replSet mongo-repliset

 

 

注意复制节点是不需要挂载的,执行构建命令

 

docker-compose up -d

docker-compose ps

 可以看到:




 

三个mongo实例已经运行起来了

-----------------------------------------------------------添加配置信息-----------------------------------------------------------------

OK 实例已经建立,现在我们让mongo1成为primary

执行命令:

 

docker-compose exec mongo-replica-1-1 mongo

 进入mongo1的mongod的shell控制台

 

 

config = {
      "_id" : "mongo-repliset",
      "members" : [
          {
              "_id" : 0,
              "host" : "mondodbcluster_mongo-replica-1-1_1:27017"
          },
          {
              "_id" : 1,
              "host" : "mondodbcluster_mongo-replica-1-2_1:27017"
          },
          {
              "_id" : 2,
              "host" : "mondodbcluster_mongo-replica-1-3_1:27017"
          }
      ]
  }

 注意哦,host是指在docker ps 下原本的container 名字,config 中第一个 key "_id" 的值 "mongo-repliset" 就是 启动容器时 --replSet 参数的值,"members" 指定了复制集成员的信息 ,继续执行命令

rs.initiate(config)

 

返回{"ok":1},则成功了,多敲几次回车键你会发现shell变为

 

 



 
 ok,mongo1已经变为主节点了,写数据必须使用本节点

-----------------------------------------------------------验证复制集------------------------------------------------------------

 

好使用mongoBooster创建三个mongo的连接

 



 

ok,都连接成功



 我们创建testDB及collection,最后插入几条数据,可以看到3个数据库均有数据

 



 OK到此,数据一致性一验证成功

最后我们模拟当有一个节点,比如primary节点爆炸了的情况

 docker-compose stop mongo-replica-1-1

 现在进入mongo2容器

docker-compose exec mongo-replica-1-2  mongo

 

你可以在shell上看到mongo2变为primary,此节点变为了主节点,图就不截了。

 

 

至此你已经成功构建了一个mongodb副本集

 

但是到mongo集群还有很多东西需要处理,config集,路由集等等。博主也在学习。

 

 

 

 

 

  • 大小: 6.8 KB
  • 大小: 10.7 KB
  • 大小: 4 KB
  • 大小: 46.5 KB
  • 大小: 22.6 KB
  • 大小: 64.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics