MongoDB集群搭建详细过程!

一:环境

1.服务器操作系统:ubuntu16.04

2. mongodb版本:mongdb3.6.12 (注意:MongoDB版本可能跟配置文件有一些细节差异,需自行调节,下面会详细指明)

二:开始安装MongoDB。

第一步 - 安装公钥

Ubuntu软件包管理器apt(高级软件包工具)需要软件分销商的GPG密钥来确保软件包的一致性和真实性。 运行此命令将MongoDB密钥导入到您的服务器

sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5

第二步 -  创建源列表文件MongoDB

使用以下命令在/etc/apt/sources.list.d/中添加一个MongoDB源:

echo “deb repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

第3步 – 更新存储库 使用apt命令更新存储库:

sudo apt-get update

第4步 – 安装MongoDB  (环境搭建结束!)

sudo apt-get install -y mongodb-org

三:开始配置MongoDB集群

第1步 -  首先配置mongod.conf文件。我有三台服务器,因此每台服务器都需要配置3个mongod.conf文件。一共9个mongod.conf

安装完mongodb目录下默认就有一个mongod.conf文件,复制2份出来,命名mongod2.conf,mongod3.conf。一共(mongod.conf,mongod2.conf,mongod3.conf)第一台服务器。依次内推,每台服务器都需要如此。

#   http://docs.mongodb.org/manual/reference/configuration-options/

# Where and how to store data.
storage:
  dbPath: /opt/mongo/data/db
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /opt/mongo/logs/mongodb.log

# network interfaces
net:
  port: 37017  (mongod.conf配置37017,mongod2.conf配置37018,mongod3.conf配置37019)
  bindIp: (服务器机器:私有访问ip地址)(测试机:ip地址)

# how the process runs
processManagement:
  timeZoneInfo: /usr/share/zoneinfo

#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options:

#auditLog:

#snmp:

还有一种配置版本,是我参考的配置版本。但是根据服务器环境与mongodb版本不一样。在这里也把配置写出来。根据自身环境配置就好。 环境:服务器Centos  --- mongodb:4.0.6  (此处一点要看仔细!这是不同的环境的配置。重要的事情说三遍!)

fork=true
#数据路径
dbpath=/opt/mongo/data/db  ---根据自身路径
port=37017  (mongod.conf配置37017,mongod2.conf配置37018,mongod3.conf配置37019)
bind_ip=(服务器机器:私有访问ip地址)(测试机:ip地址)
#日志文件路径
logpath=/opt/mongo/logs/mongodb.log
logappend=true
#复制集名称
replSet=shardRep1  (mongod.conf配置shardRep1,mongod2.conf配置shardRep2,mongod3.conf配置shardRep3,三台服务都一样)
smallfiles=true
#分片集群必须要有的属性
shardsvr=true

第2步 -  启动副本集

此处是 ubuntu18.04  Mongodb3.6的环境,启动命令。(启动命令根据自己的配置路径去选择  用绝对路径还是相对路径启动)

mongod -f /etc/mongod.conf --shardsvr --replSet shardRep1 &
mongod -f /etc/mongod2.conf --shardsvr --replSet shardRep2 &
mongod -f /etc/mongod3.conf --shardsvr --replSet shardRep3 &

此处是 Centos  --- mongodb:4.0.6 的环境,启动命令

mongod -f /etc/mongod.conf 
mongod -f /etc/mongod2.conf
mongod -f /etc/mongod3.conf

看的仔细的可以发现,启动命令后面没有复制集名称和shardsvr参数,这是因为我在ubuntu18.04  Mongodb3.6的环境配置在mongod.conf文件中启动会报错,而我看别人的配置Centos  --- mongodb:4.0.6中直接写在mongod.conf文件中启动则没有问题,推测应该与系统环境和Mongodb版本有关。各位配置时,可以先写入到配置文件中启动,会省很多事!

第3步 - 初始化副本集

1.初始化第一台服务器

(1)、在第一台服务器上执行以下操作:
1.登录mongo,根据自身配置路径启动。
mongo --port 37017 127.0.0.1(第一台ip写服务器的ip地址,不要用127.0.0.1,(Private-ip))
2.use admin
3.config = {
    _id : "shardRep1",
     members : [
         {_id : 0, host : "127.0.0.1(第一台服务器的ip地址,不要用127.0.0.1,):37017" },
         {_id : 1, host : "127.0.0.1(第二台服务器的ip地址,不要用127.0.0.1,):37017" },
         {_id : 2, host : "127.0.0.1(第三台服务器的ip地址,不要用127.0.0.1,):37017" }
     ]
 }
4.//初始化副本集配置
 rs.initiate(config);
5.//查看副本集配置
 rs.status();

2.初始化第二台服务器

(1)、在第二台服务器上执行以下操作:
1.mongo --port 37018 127.0.0.1 (第二台ip写服务器的ip地址,不要用127.0.0.1,(Private-ip))
2.use admin 
3.config = {
    _id : "shardRep2",
     members : [
         {_id : 0, host : "127.0.0.1(第一台服务器的ip地址,不要用127.0.0.1,):37018" },
         {_id : 1, host : "127.0.0.1(第二台服务器的ip地址,不要用127.0.0.1,):37018" },
         {_id : 2, host : "127.0.0.1(第三台服务器的ip地址,不要用127.0.0.1,):37018" }
     ]
 }
4.//初始化副本集配置
 rs.initiate(config);
5.//查看副本集配置
 rs.status();

3.初始化第三台服务器

(3)、在第三台服务器上执行以下操作:
1.mongo --port 37019 127.0.0.1(第二台ip写服务器的ip地址,不要用127.0.0.1,(Private-ip))
2.use admin
3.config = {
    _id : "shardRep3",
     members : [
         {_id : 0, host : "127.0.0.1(第一台服务器的ip地址,不要用127.0.0.1,):37019" },
         {_id : 1, host : "127.0.0.1(第二台服务器的ip地址,不要用127.0.0.1,):37019" },
         {_id : 2, host : "127.0.0.1(第三台服务器的ip地址,不要用127.0.0.1,):37019" }
     ]
 }
4.//初始化副本集配置
 rs.initiate(config);
5.//查看副本集配置
 rs.status();

如果,每台副本集都初始化成功,并查看副本集配置 无错误信息,则第一步配置成功。

第4步 -  搭建config节点复制集

1.在三台服务器上分别创建config节点配置文件:mongo-cfg.conf  (注意三台服务器都要有,但是只需要一个就够了。)

systemLog:
	destination: file
	#日志存储位置  注意检查此路径 此文件是否存在
	path: /data/mongo/mongo-cfg/logs/mongodb.logs
	logAppend: true
storage:
	journal:
		enabled:true
	#数据存储位置  注意检查此路径 此文件是否存在
	dbPath: /data/mongo/mongo-cfg/data
	#是否一个库一个文件夹
	directoryPerDB: true
	wiredTiger:
		engineConfig:
			#最大使用cache(根据真实情况自行调节)
			cacheSizeGB: 1
			#是否将索引也按照数据库名单单独存出
			directoryForIndexes: true
		collectionConfig:
			#表压缩配置
			blockCompressor: zlib
		indexConfig:
			prefixCompression: true
net:
	#IP地址
	bindIp: 127.0.0.1 (第一台服务器IP)
	#端口
	port: 20001
replication:
	oplogSizeMB: 2048
	#配置节点的复制集名字  此处与mongd.conf配置名称一样,但是不会报错,也不会生效,还是需要加在命令行后面,centos  mongodb 4.0.6可加在此处。
	repliSetName: configRepl
sharding:
	clusterRole: configsvr
processManagement:
	fork: true

2.启动配置复制集

跟启动mongd.conf 类似。也有版本因素。分别启动三台服务器的mongo-cfg.conf

mongod -f /etc/mongo-cfg.conf --configsvr --replSet configRepl &

3.登录配置节点 (注意:登录配置节点只需要随便挑选一台服务器就好了,登录进去)

mongo -host 127.0.0.1(任意一台服务器) -port 20001

4.初始化命令, 初始化完成后,大概几秒后,三台服务器就会自动选择一台生成主从关系。

rs.initiate(
  {
    _id : "configRepl",
    members : [
      { _id : 0, host : "127.0.0.1(第一台服务器ip):20001" },
      { _id : 1, host : "127.0.0.1(第一台服务器ip):20001" },
      { _id : 2, host : "127.0.0.1(第一台服务器ip):20001" }
    ]
  }
)

第5步 -- 配置 mongos.conf文件,(在第一台服务器中配置,只需要配置一个即可,也可以配置多个但是一个服务器只能有一个)

destination: file
path: /data/mongos/log/mongos.log
logAppend: true

net:
  bindIp: 127.0.0.1 (你选择配置mongos.conf的这台服务器的ip)
  port: 27017

sharding:
  configDB: configRepl/127.0.0.1:20001,127.0.0.1:20001,127.0.0.1:20001  

# 举例:
#configDB: configRepl/192.168.0.23:20001,192.168.0.24:20001,192.168.0.25:20001  

1.启动mongos

mongos -f /etc/mongos.conf &

2.登录mongos节点

mongo 127.0.0.1:27017  (ip为你选择配置mongos.conf的服务器ip)

3.在登录了mongos之后,需要切换admin:use admin

use admin

4.添加shard1、shard2、shard3复制集:

db.runCommand( {addshard : "shardRep1/192.168.0.23:37017,192.168.0.24:37017,192.168.0.25:37017",name:"shard1"} )
db.runCommand( {addshard : "shardRep2/192.168.0.23:37018,192.168.0.24:37018,192.168.0.25:37018",name:"shard2"} )
db.runCommand( {addshard : "shardRep3/192.168.0.23:37019,192.168.0.24:37019,192.168.0.25:37019",name:"shard3"} )

5.列举分片

db.runCommand( {listshards : 1 } ) 

6.查看分片状态

sh.status();

四:配置接近尾声,现在测试。

第1步 - 因为我们没有库,创建一个库。

 db.runCommand( {enablesharding : "testdb" } )

第2步 - 数据库分片,必须设置一个字段,并且这个字段必须为索引。(空集合系统会自动创建,如果不是空集合,必须先创建索引)

 db.runCommand( { shardcollection : "testdb.users", key : {id : 1} } )`

第3步 -  添加测试数据,

    var arr = [];
      for (var i = 0; i < 1000000; i++) {
         var uid = i;
         var name = "schweini" + i;
         arr.push({"id":uid, "name":name});
      }
db.users.insertMany(arr);

到这里就结束了。

分片均衡器开启时间:当其中有一个分片的数据大小超过了64M时,他就会自动负载均衡。

描述:shard1分片中的数据为1条,shard2分片中的数据为75W条,shard3分片中的数据为150W条,现在shard3中的数据超过了chunk的阀门值它就会自动为 shard1 shard2 shard3自动均衡数据。让他们平均。

不了解 mongodb集群工作原理,以及一些细节问题,查看上篇文章。

你可能感兴趣的:(MongoDB,设计)