7.2 手动部署一个分片集群

7.2 手动部署一个分片集群

搭建分片集群步骤
1、创建文件夹db_rs0
2、在db_rs0文件夹下创建data、logs文件夹
3、data文件夹下创建rs0_0,rs0_1,rs0_2,logs文件夹下创建rs0_0.log、rs0_1.log、rs0_2.log
4、创建configs_rs0文件夹。代表分片集rs0
5、在configs_rs0下写入rs0_0.conf 、rs0_1.conf 、rs0_2.conf

rs0中primary节点的配置文件为rs0_0.conf:
dbpath = D:\mongodb\db_rs0\data\rs0_0
logpath = D:\mongodb\db_rs0\logs\rs0_0.log
journal = true (7.0版本这句话可以删掉) port = 40000
replSet = rs0
shardsvr=true //分片服务

rs0中secondary节点的配置文件为rs0_1.conf:
dbpath = D:\mongodb\db_rs0\data\rs0_1
logpath = D:\mongodb\db_rs0\logs\rs0_1.log
journal = true
port = 40001
replSet = rs0
shardsvr=true //分片服务

rs0中arbiter节点的配置文件为rs0_2.conf:
dbpath = D:\mongodb\db_rs0\data\rs0_2
logpath = D:\mongodb\db_rs0\logs\rs0_2.log
journal = true
port = 40002
replSet = rs0
shardsvr=true //分片服务

6、rs0中3个节点配置完成后,初始化和配置复制集:
先启动3个服务器:.\mongod.exe –config D:\mongodb\configs_rs0\rs0_0.conf
(将rs0_0.conf替换为rs0_1.conf、rs0_2.conf即可)
再开一个终端窗口mongo –port 40000 // 连接实例进行初始化 rs.initiate()
rs0:PRIMARY>rs.add(“localhost:40001”)
rs0:PRIMARY>rs.addArb(“localhost:40002”)
rs0:PRIMARY>rs.status() //查看状态是否成功
7、重复步骤1-5建立分片集1 rs1中primary节点的配置文件为rs1_0.conf:
dbpath = D:\mongodb\db_rs1\data\rs1_0
logpath = D:\mongodb\db_rs1\logs\rs1_0.log
journal = true
port = 40003
replSet = rs1
shardsvr=true

rs1中secondary节点的配置文件为rs1_1.conf:
dbpath = D:\mongodb\db_rs1\data\rs1_1
logpath = D:\mongodb\db_rs1\logs\rs1_1.log
journal = true
port = 40004
replSet = rs1
shardsvr=true

rs1中arbiter节点的配置文件为rs1_2.conf:
dbpath = D:\mongodb\db_rs1\data\rs1_2
logpath = D:\mongodb\db_rs1\logs\rs1_2.log
journal = true
port = 40005
replSet = rs1
shardsvr=true

8、重复步骤6 先启动3个服务器:.\mongod.exe –config D:\mongodb\configs_rs0\rs0_3.conf
(将rs0_3.conf替换为rs0_4.conf、rs0_5.conf即可)
再开一个终端窗口mongo –port 40003 // 连接实例进行初始化
rs.initiate()
rs1:PRIMARY>rs.add(“localhost:40004”)
rs1:PRIMARY>rs.addArb(“localhost:40005”)
rs1:PRIMARY>rs.status() //查看状态是否成功

9、配置config服务器(是三个独立的配置服务器)
首先建立db_configs文件夹
接着在db_configs建立子文件夹data、logs
最后在data里创建db_config0、db_config1、db_config2文件夹 在logs文件夹里创建db_config0.log、db_config1.log、db_config2.log
以下是配置文件:
config服务器0的配置文件cfgserver0.conf:
dbpath = D:\mongodb\db_configs\data\db_config0
logpath = D:\mongodb\db_configs\logs\db_config0.log
journal = true
port = 40006
configsvr = true //说明是配置服务器类型的实例
replSet = rs-config //复制集,但各个节点独立,不建立关联

config服务器1的配置文件cfgserver1.conf:
dbpath = D:\mongodb\db_configs\data\db_config1
logpath = D:\mongodb\db_configs\logs\db_config1.log
journal = true
port = 40007
configsvr = true
replSet = rs-config

config服务器2的配置文件cfgserver2.conf:
dbpath = D:\mongodb\db_configs\data\db_config2
logpath = D:\mongodb\db_configs\logs\db_config2.log
journal = true
port = 40008
configsvr = true
replSet = rs-config

10、配置完3个服务器节点后,需要分别初始化和配置服务器:
mongo –port 40006 //分别连接实例进行初始化
mongo –port 40007
mongo –port 40008
rs.initiate() //因为三个节点是独立的,均需要初始化。

11、配置mongs路由服务器
首先建立文件夹mongos建立子文件夹logs在该文件里添加mongos.log
再在文件夹mongos添加cfg_mongos.conf
其配置文件cfg_mongos.conf内容为:
logpath = D:\mongodb\mongos\logs\mongos.log
port = 40009
configdb = rs-config/localhost:40006,localhost:40007,localhost:40008

12、启动路由服务器:
mongos –config D:\mongodb\mongos\cfg_mongos.conf
注意
实例对应的进程为mongos,路由服务器只是一个轻量级和非持久化操作的进程,因此上面的配置文件里面没有像其它mongod实例那样有一个存放数据文件的路径选项dbpath。

13、添加各分片到集群
打开一个mongo客户端连接到mongos服务器:

mongo –port 40009
mongos> sh.addShard(“rs0/ localhost :40000, localhost :40001”) //出现ok:1,即成功
mongos> sh.addShard(“rs1/ localhost :40003, localhost :40004”) //出现ok:1,即成功

14、通过命令sh.status()检查上面的配置是否正确
正常的话输出信息类似下面:
mongos> sh.status() //输出包含shards内容
shards:
{ “_id” : “rs0”, “host” : “rs0/ localhost :40000, localhost :40001” }
{ “_id” : “rs1”, “host” : “rs1/ localhost :40003, localhost :40004” }

注意 此时在整个分片集群中还没有创建任何其它数据库,通过路由进程mongos连接集群,执行命令show dbs可以看到集群中只有系统默认创建的一个config数据库,且这个数据库只存在于三个配置服务器上,config数据库中的集合包含了整个集群的配置信息,执行命令show collections,可以看到有如下集合:

7.2-2

7.2-2

15、正确关闭集群 第一步:关闭所有mongoss路由实例
use admin db.shutdownServer() 第二步:关闭所有分片,先secondary再primary
第三步:关闭所有配置服务器

16、正确重启集群
启动配置服务器、启动所有分片、启动mongos 不正确的顺序可能出现通信问题或失败

现实生活环境中的实际部署的问题
通过前面的分析可知,一个生产环境最少需要9个mongod实例进程,一个mongos进程实例,理论上说最少需要10台机器才能组成。
但是这些进程中有些并不需要很多软硬件资源,它们可以与其它进程共存部署在同一个机器上,如复制集中arbiter进程、mongos进程可以部署到应用程序所在的服务器,综合考虑后可以得到下面一个典型的部署:

7.2-1

7.2-1