mongdb 3 安装 分片 复本 搭建

mongo集群分片 启动集群分片: 要对一个集合分片,首先你要对这个集合的数据库启用分片,执行如下命令: sh.enableSharding("test") mydb被配置成启用分片后,配置信息是存放在配置服务器的数据库config的databases集合里! 片键:片键是集合的一个键,MongoDB根据这个键拆分数据。例如:username 。在启用分片之前,先在希望作为片键的键上创建索引: db.u 阅读详情

1.环境
Linux:CentOS 6.5
MongoDB:3.2.7
10.30.44.56 分片1主,分片2从
10.30.44.57 分片2主,分片1从
10.30.44.58 配置、仲裁、路由

2.下载mongodb
https://www.mongodb.com/download-center?jmp=nav#community
[root@VM6-56 ~]$ curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.7.tgz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0 71.6M    0  527k    0     0  25212      0  0:49:40  0:00:21  0:49:19 23015

将下载的mongodb-linux-x86_64-3.2.7.tgz复制到另外两台机器上
[root@VM6-56 ~]$scp mongodb-linux-x86_64-3.2.7.tgz 10.30.44.57:/root
[root@VM6-56 ~]$scp mongodb-linux-x86_64-3.2.7.tgz 10.30.44.58:/root

3.安装mongodb(在三台机器上都执行)
[root@VM6-56 ~]# groupadd mongodb
[root@VM6-56 ~]# useradd -g mongodb mongodb
[root@VM6-56 ~]# passwd mongodb
[root@VM6-56 ~]# mkdir /u01/mongodb -p
[root@VM6-56 ~]# chown mongodb.mongodb /u01/mongodb
[root@VM6-56 ~]# chown mongodb.mongodb mongodb-linux-x86_64-3.2.7.tgz
[root@VM6-56 ~]# mv mongodb-linux-x86_64-3.2.7.tgz /u01/mongodb
[root@VM6-56 ~]# su - mongodb
[mongodb@VM6-56 ~]$ cd /u01/mongodb
[mongodb@VM6-56 mongodb]$ tar -zxvf mongodb-linux-x86_64-3.2.7.tgz
[mongodb@VM6-56 mongodb]$ mv mongodb-linux-x86_64-rhel62-3.2.7 mongodb327
[mongodb@VM6-56 mongodb]$ cd
[mongodb@VM6-56 mongodb]$ vi .bash_profile
export PATH=/u01/mongodb/mongodb327/bin:$PATH:$HOME/bin

3.创建目录
在三台机器上都执行以下命令:
[mongodb@VM6-56 mongodb]$ pwd
/u01/mongodb
[mongodb@VM6-56 mongodb]$ mkdir mongodb     #创建mongodb的base目录
[mongodb@VM6-56 mongodb]$ cd mongodb
[mongodb@VM6-56 mongodb]$ mkdir data logs conf     #创建数据 日志 配置目录
以下命令在56 57上执行:
[mongodb@VM6-56 mongodb]$ cd data
[mongodb@VM6-56data]$ mkdir shard1 shard2     #创建分片数据目录
以下命令在58上执行:
[mongodb@VM6-56 mongodb]$ cd data
[mongodb@VM6-56 data]$ mkdir shard1_arb shard2_arb config     #创建分片1仲裁、分片2仲裁和配置库数据目录

4.配置文件
mongod的启动需要指定各种参数,这些参数可以写在文件里也可以在命令行指定,这里采用写在文件里的方式:
以下两个配置文件在56 57上执行:
[mongodb@VM6-56 mongodb]$ cd conf
[mongodb@VM6-56 conf]$ vi shard1.conf     #在56 57上执行
port = 31001     #端口
dbpath = /u01/mongodb/mongodb/data/shard1     #数据目录
logpath = /u01/mongodb/mongodb/logs/shard1.log     #日志文件
logappend = true     #日志记录方式
pidfilepath = /u01/mongodb/mongodb/logs/shard1.pid     #pid文件位置
directoryperdb = true
replSet = rep1     #副本集名
oplogSize = 1024     #操作日志大小,单位为M
fork = true     #独立进程运行
storageEngine=wiredTiger     #新存储引擎
shardsvr = true     #是不是分片
#journal = true     #是否记日志
[mongodb@VM6-56 conf]$ vi shard2.conf     #在56 57上执行
port = 31002     #端口
dbpath = /u01/mongodb/mongodb/data/shard2     #数据目录
logpath = /u01/mongodb/mongodb/logs/shard2.log     #日志文件

logappend = true     #日志记录方式
pidfilepath = /u01/mongodb/mongodb/logs/shard2.pid     #pid文件位置
directoryperdb = true
replSet = rep2     #副本集名
oplogSize = 1024     #操作日志大小,单位为M
fork = true     #独立进程运行
storageEngine=wiredTiger     #新存储引擎
shardsvr = true     #是不是分片
#journal = true     #是否记日志


以下三个配置文件在58上执行:
[mongodb@VM6-58 conf]$ vi shard1_arb.conf
port = 31001
dbpath = /u01/mongodb/mongodb/data/shard1_arb
logpath = /u01/mongodb/mongodb/logs/shard1_arb.log

logappend = true
pidfilepath = /u01/mongodb/mongodb/logs/shard1_arb.pid
directoryperdb = true
replSet = rep1
oplogSize = 1024
fork = true
storageEngine=wiredTiger
shardsvr = true
#journal = true


[mongodb@VM6-58 conf]$ vi shard2_arb.conf
port = 31002
dbpath = /u01/mongodb/mongodb/data/shard2_arb
logpath = /u01/mongodb/mongodb/logs/shard2_arb.log

logappend = true
pidfilepath = /u01/mongodb/mongodb/logs/shard2_arb.pid
directoryperdb = true
replSet = rep2
oplogSize = 1024
fork = true
storageEngine=wiredTiger
shardsvr = true
#journal = true


[mongodb@VM6-58 conf]$ vi config.conf
port = 31003
dbpath = /u01/mongodb/mongodb/data/config
logpath = /u01/mongodb/mongodb/logs/config.log

logappend = true
pidfilepath = /u01/mongodb/mongodb/logs/config.pid
directoryperdb = true
oplogSize = 1024
fork = true
storageEngine=wiredTiger
configsvr = true
#journal = true


[mongodb@VM6-58 conf]$ vi mongos.conf

port = 31010

#这没有数据目录

logpath = /u01/mongodb/mongodb/logs/mongos.log
logappend = true
pidfilepath = /u01/mongodb/mongodb/logs/mongos.pid
fork = true
configdb = 10.30.44.58:31003     #配置服务器


至此为止,一共在三台机器上产生了八个配置文件:
56上:shard1.conf shard2.conf
57上:shard1.conf shard2.conf
58上:shard1_arb.conf shard2_arb.conf config.conf mongos.conf
这些文件的内容大部分一样,只是config.conf里没有repSet项,因为配置服务器存放分片信息,与复本无关。路由服务器不存放数据,只使用内存,所以没有数据文件。这里配置参数只是简单的示例参数,可以使用集群工作,在生产环境上还要配置更多的参数。

5.运行
在56上,启动第一个:
[mongodb@VM6-56 ~]$ mongod -f /u01/mongodb/mongodb/conf/shard1.conf 
about to fork child process, waiting until server is ready for connections.
forked process: 18789
child process started successfully, parent exiting
启动成功,查看日志,日志文件所在的位置在参数文件里有指定:
[mongodb@VM6-56 logs]$ cat shard1.log 
2016-06-25T20:36:24.508+0800 I CONTROL  [initandlisten] MongoDB starting : pid=19659 port=31001 dbpath=/u01/mongodb/mongodb/data/shard1 64-bit host=VM6-56
2016-06-25T20:36:24.508+0800 I CONTROL  [initandlisten] db version v3.2.7
2016-06-25T20:36:24.508+0800 I CONTROL  [initandlisten] git version: 4249c1d2b5999ebbf1fdf3bc0e0e3b3ff5c0aaf2
2016-06-25T20:36:24.508+0800 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
2016-06-25T20:36:24.508+0800 I CONTROL  [initandlisten] allocator: tcmalloc
2016-06-25T20:36:24.508+0800 I CONTROL  [initandlisten] modules: none
2016-06-25T20:36:24.508+0800 I CONTROL  [initandlisten] build environment:
2016-06-25T20:36:24.508+0800 I CONTROL  [initandlisten]     distmod: rhel62
2016-06-25T20:36:24.508+0800 I CONTROL  [initandlisten]     distarch: x86_64
2016-06-25T20:36:24.508+0800 I CONTROL  [initandlisten]     target_arch: x86_64
2016-06-25T20:36:24.508+0800 I CONTROL  [initandlisten] options: { config: "/u01/mongodb/mongodb/conf/shard1.conf", net: { port: 31001 }, processManagement: { fork: true, pidFilePath: "/u01/mongodb/mongodb/logs/shard1.pid" }, replication: { oplogSizeMB: 1024, replSet: "rep1" }, sharding: { clusterRole: "shardsvr" }, storage: { dbPath: "/u01/mongodb/mongodb/data/shard1", directoryPerDB: true, engine: "wiredTiger" }, systemLog: { destination: "file", logAppend: true, path: "/u01/mongodb/mongodb/logs/shard1.log" } }
2016-06-25T20:36:24.534+0800 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=18G,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
2016-06-25T20:36:25.172+0800 I CONTROL  [initandlisten] 
2016-06-25T20:36:25.172+0800 I CONTROL  [initandlisten] ** WARNING: You are running on a NUMA machine.
2016-06-25T20:36:25.172+0800 I CONTROL  [initandlisten] **          We suggest launching mongod like this to avoid performance problems:
2016-06-25T20:36:25.172+0800 I CONTROL  [initandlisten] **              numactl --interleave=all mongod [other options]
2016-06-25T20:36:25.172+0800 I CONTROL  [initandlisten] 
2016-06-25T20:36:25.172+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-06-25T20:36:25.172+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2016-06-25T20:36:25.172+0800 I CONTROL  [initandlisten] 
2016-06-25T20:36:25.172+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-06-25T20:36:25.172+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2016-06-25T20:36:25.172+0800 I CONTROL  [initandlisten] 
2016-06-25T20:36:25.172+0800 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 1024 processes, 655350 files. Number of processes should be at least 327675 : 0.5 times number of files.

2016-06-25T20:36:25.172+0800 I CONTROL  [initandlisten] 
2016-06-25T20:36:25.175+0800 I REPL     [initandlisten] Did not find local voted for document at startup;  NoMatchingDocument: Did not find replica set lastVote document in local.replset.election
2016-06-25T20:36:25.175+0800 I REPL     [initandlisten] Did not find local replica set configuration document at startup;  NoMatchingDocument: Did not find replica set configuration document in local.system.replset
2016-06-25T20:36:25.176+0800 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/u01/mongodb/mongodb/data/shard1/diagnostic.data'
2016-06-25T20:36:25.176+0800 I NETWORK  [HostnameCanonicalizationWorker] Starting hostname canonicalization worker
2016-06-25T20:36:25.177+0800 I NETWORK  [initandlisten] waiting for connections on port 31001
日志里的内容特别重要,需要认真阅读和特别留意,这里重点关注上面日志里的三个警告:
 ** WARNING: You are running on a NUMA machine.                                                                                                                    
 **          We suggest launching mongod like this to avoid performance problems:                                                                                  
 **              numactl --interleave=all mongod [other options]                                                                                                  
 ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.                                                                                              
 **        We suggest setting it to 'never'                                                                                                                         
 ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.                                                                                               
 **        We suggest setting it to 'never'                                                                                                                         
 ** WARNING: soft rlimits too low. rlimits set to 1024 processes, 655350 files. Number of processes should be at least 327675 : 0.5 times number of files.         
解决第二、三警告,切换到root用户执行:
[root@VM6-56 ~]# echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
[root@VM6-56 ~]# echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
解决第四个警告,切换到mongodb用户执行:
[mongodb@VM6-56 ~]$ vi .bash_profile     #在文件最后加:
ulimit -f unlimited -t unlimited -v unlimited -n 64000 -u 64000
解决第一个警告,是改变mongod的启动方式:
[mongodb@VM6-56 ~]$ numactl --interleave=all mongod -f /u01/mongodb/mongodb/conf/shard1.conf
about to fork child process, waiting until server is ready for connections.
forked process: 6426
ERROR: child process failed, exited with error number 48
报错,查看日志:
[mongodb@VM6-56 logs]$ tail /u01/mongodb/mongodb/logs/shard1.log
2016-06-26T14:31:46.500+0800 E NETWORK  [initandlisten] listen(): bind() failed errno:98 Address already in use for socket: 0.0.0.0:31001
2016-06-26T14:31:46.500+0800 E NETWORK  [initandlisten]   addr already in use
2016-06-26T14:31:46.500+0800 E STORAGE  [initandlisten] Failed to set up sockets during startup.
2016-06-26T14:31:46.500+0800 I CONTROL  [initandlisten] dbexit:  rc: 48
通过日志可知错误原因是addr already in use,这是由于mongod进程正在运行需要先关闭:
[root@VM6-56 ~]# ps -ef | grep mongo
root      8083  6176  0 14:40 pts/0    00:00:00 grep mongo
mongodb  18813     1  0 Jun25 ?        00:04:11 mongod -f /u01/mongodb/mongodb/conf/shard2.conf
mongodb  19659     1  0 Jun25 ?        00:04:10 mongod -f /u01/mongodb/mongodb/conf/shard1.conf
[root@VM6-56 ~]# kill 19659
[root@VM6-56 ~]# ps -ef | grep mongo
root      8182  6176  0 14:40 pts/0    00:00:00 grep mongo
mongodb  18813     1  0 Jun25 ?        00:04:11 mongod -f /u01/mongodb/mongodb/conf/shard2.conf
再次启动:
[mongodb@VM6-56 ~]$ numactl --interleave=all mongod -f /u01/mongodb/mongodb/conf/shard1.conf
about to fork child process, waiting until server is ready for connections.
forked process: 8699
child process started successfully, parent exiting
启动成功,再次查看日志,看看还有警告信息没有:
2016-06-26T14:43:18.705+0800 I CONTROL  [initandlisten] MongoDB starting : pid=8699 port=31001 dbpath=/u01/mongodb/mongodb/data/shard1 64-bit host=VM6-56
2016-06-26T14:43:18.705+0800 I CONTROL  [initandlisten] db version v3.2.7
2016-06-26T14:43:18.705+0800 I CONTROL  [initandlisten] git version: 4249c1d2b5999ebbf1fdf3bc0e0e3b3ff5c0aaf2
2016-06-26T14:43:18.705+0800 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
2016-06-26T14:43:18.705+0800 I CONTROL  [initandlisten] allocator: tcmalloc
2016-06-26T14:43:18.705+0800 I CONTROL  [initandlisten] modules: none
2016-06-26T14:43:18.705+0800 I CONTROL  [initandlisten] build environment:
2016-06-26T14:43:18.705+0800 I CONTROL  [initandlisten]     distmod: rhel62
2016-06-26T14:43:18.705+0800 I CONTROL  [initandlisten]     distarch: x86_64
2016-06-26T14:43:18.705+0800 I CONTROL  [initandlisten]     target_arch: x86_64
2016-06-26T14:43:18.706+0800 I CONTROL  [initandlisten] options: { config: "/u01/mongodb/mongodb/conf/shard1.conf", net: { port: 31001 }, processManagement: { fork: true, pidFilePath: "/u01/mongodb/mongodb/logs/shard1.pid" }, replication: { oplogSizeMB: 1024, replSet: "rep1" }, sharding: { clusterRole: "shardsvr" }, storage: { dbPath: "/u01/mongodb/mongodb/data/shard1", directoryPerDB: true, engine: "wiredTiger" }, systemLog: { destination: "file", logAppend: true, path: "/u01/mongodb/mongodb/logs/shard1.log" } }
2016-06-26T14:43:18.756+0800 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=18G,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
2016-06-26T14:43:19.452+0800 I REPL     [initandlisten] Did not find local voted for document at startup;  NoMatchingDocument: Did not find replica set lastVote document in local.replset.election
2016-06-26T14:43:19.452+0800 I REPL     [initandlisten] Did not find local replica set configuration document at startup;  NoMatchingDocument: Did not find replica set configuration document in local.system.replset
2016-06-26T14:43:19.453+0800 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/u01/mongodb/mongodb/data/shard1/diagnostic.data'
2016-06-26T14:43:19.453+0800 I NETWORK  [HostnameCanonicalizationWorker] Starting hostname canonicalization worker
2016-06-26T14:43:19.455+0800 I NETWORK  [initandlisten] waiting for connections on port 31001
(END) 

这次没有之前的警告信息了。


在56上,启动第二个:
[mongodb@VM6-56 ~]$ numactl --interleave=all mongod -f /u01/mongodb/mongodb/conf/shard2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 10906
child process started successfully, parent exiting


按照以上的方式和处理警告的方法启动57和58上的mongod:
[mongodb@VM6-57 ~]$ numactl --interleave=all mongod -f /u01/mongodb/mongodb/conf/shard1.conf
[mongodb@VM6-57 ~]$ numactl --interleave=all mongod -f /u01/mongodb/mongodb/conf/shard2.conf
[mongodb@VM6-58 ~]$ numactl --interleave=all mongod -f /u01/mongodb/mongodb/conf/shard1_arb.conf 
[mongodb@VM6-58 ~]$ numactl --interleave=all mongod -f /u01/mongodb/mongodb/conf/shard2_arb.conf 
[mongodb@VM6-58 ~]$ numactl --interleave=all mongod -f /u01/mongodb/mongodb/conf/config.conf 


6.初始化复本集
[mongodb@VM6-56 ~]$ mongo --port 31001 admin     #登录admin库
> db.runCommand({"replSetInitiate" : {"_id" : "rep1", "members" : [{"_id" : 0, "host" : "10.30.44.56:31001", "priority" : 10}, {"_id" : 1, "host" : "10.30.44.57:31001", "priority" : 9}, {"_id" : 2, "host" : "10.30.44.58:31001", "arbiterOnly" : true}]}});
{ "ok" : 1 }     #初始化第一个复本集
rep1:OTHER> 
rep1:SECONDARY> 
rep1:PRIMARY>      #我们是在56上执行的初始化,而这个复本集56上的复本优化级最高是10,所以mongod的最后状态为PRIMARY

rep1:PRIMARY> rs.status()     #验证一下复本集状态
{
"set" : "rep1",
"date" : ISODate("2016-06-26T08:23:58.648Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [
{
"_id" : 0,
"name" : "10.30.44.56:31001",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 6040,
"optime" : {
"ts" : Timestamp(1466928690, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2016-06-26T08:11:30Z"),
"electionTime" : Timestamp(1466928689, 1),
"electionDate" : ISODate("2016-06-26T08:11:29Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "10.30.44.57:31001",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 760,
"optime" : {
"ts" : Timestamp(1466928690, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2016-06-26T08:11:30Z"),
"lastHeartbeat" : ISODate("2016-06-26T08:23:57.916Z"),
"lastHeartbeatRecv" : ISODate("2016-06-26T08:23:57.662Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.30.44.56:31001",
"configVersion" : 1
},
{
"_id" : 2,
"name" : "10.30.44.58:31001",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 760,
"lastHeartbeat" : ISODate("2016-06-26T08:23:57.916Z"),
"lastHeartbeatRecv" : ISODate("2016-06-26T08:23:55.397Z"),
"pingMs" : NumberLong(0),
"configVersion" : 1
}
],
"ok" : 1
}
rep1:PRIMARY> rs.config()     #验证一下复本集的优先级
{
"_id" : "rep1",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "10.30.44.56:31001",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 10,
"tags" : {


},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "10.30.44.57:31001",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 9,
"tags" : {


},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "10.30.44.58:31001",
"arbiterOnly" : true,

"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {


},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"getLastErrorModes" : {


},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("576f8e26a0c4408c639a74ef")
}
}
[mongodb@VM6-56 ~]$ mongo --port 31002 admin
> db.runCommand({"replSetInitiate" : {"_id" : "rep2", "members" : [{"_id" : 0, "host" : "10.30.44.56:31002", "priority" : 9}, {"_id" : 1, "host" : "10.30.44.57:31002", "priority" : 10}, {"_id" : 2, "host" : "10.30.44.58:31002", "arbiterOnly" : true}]}});
{ "ok" : 1 }
rep2:OTHER> 
rep2:SECONDARY> 
rep2:SECONDARY>      #我们是在56上执行的初始化,而这个复本集56上的复本优化级是9,所以mongod的最后状态为SECONDARY

rep2:PRIMARY> rs.status()     #验证一下复本集状态
rep2:PRIMARY> rs.config()     #验证一下复本集的优先级


7.配置sharding(分片)
56,57上存在数据,所以把路由服务放在58上,以下命令在58上执行:
[mongodb@VM6-58 ~]$ mongos -f /u01/mongodb/mongodb/conf/mongos.conf     #启动路由服务
2016-06-28T11:38:54.920+0800 W SHARDING [main] Running a sharded cluster with fewer than 3 config servers should only be done for testing purposes and is not recommended for production.
about to fork child process, waiting until server is ready for connections.
forked process: 22219
child process started successfully, parent exiting
[mongodb@VM6-58 logs]$ mongo --port 31010     #登录mongos路由服务
MongoDB shell version: 3.2.7
connecting to: 127.0.0.1:31010/test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5771f14fe8363e34299ca1e5")
}
  shards:     #没有分片存在
  active mongoses:
"3.2.7" : 1
  balancer:
Currently enabled:  yes
Currently running:  no
Failed balancer rounds in last 5 attempts:  0
Migration Results for the last 24 hours: 
No recent migrations
  databases:     #没有数据库存在


mongos> use admin
switched to db admin
mongos> db.runCommand({"addshard" : "rep1/10.30.44.56:31001,10.30.44.56:31001","name" : "shard1"});     #增加第一个分片
{ "shardAdded" : "shard1", "ok" : 1 }
mongos> db.runCommand({"addshard" : "rep2/10.30.44.56:31002,10.30.44.56:31002","name" : "shard2"});     #增加第二个分片
{ "shardAdded" : "shard2", "ok" : 1 }
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5771f14fe8363e34299ca1e5")
}
  shards:     #现在有两个分片,每个分片由一个复本集组成
{  "_id" : "shard1",  "host" : "rep1/10.30.44.56:31001,10.30.44.57:31001" }
{  "_id" : "shard2",  "host" : "rep2/10.30.44.56:31002,10.30.44.57:31002" }

  active mongoses:
"3.2.7" : 1
  balancer:
Currently enabled:  yes
Currently running:  no
Failed balancer rounds in last 5 attempts:  0
Migration Results for the last 24 hours: 
No recent migrations
  databases:


mongos> db.adminCommand({"enablesharding" : "sh_test"});     #使库sh_test可以分片,此时sh_test可以不存在
{ "ok" : 1 }
mongos> db.adminCommand({"shardcollection" : "sh_test.test", "key" : {"time" : 1}});     #使sh_test库下的test表可以分片,分片键是time字段
{ "collectionsharded" : "sh_test.test", "ok" : 1 }


生成测试数据验证一下:

mongos> use sh_test
switched to db sh_test
mongos> for (var i = 1; i <= 9000000; i++) {
...    db.test.insert( { x : i , name: "MACLEAN"+i , time: Date()} )
... }
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("5771f14fe8363e34299ca1e5")
}
  shards:
{  "_id" : "shard1",  "host" : "rep1/10.30.44.56:31001,10.30.44.57:31001" }
{  "_id" : "shard2",  "host" : "rep2/10.30.44.56:31002,10.30.44.57:31002" }
  active mongoses:
"3.2.7" : 1
  balancer:
Currently enabled:  yes
Currently running:  no
Failed balancer rounds in last 5 attempts:  0
Migration Results for the last 24 hours: 
5 : Success
  databases:     #现在test表里的数据确实分在了shard1、shard2两台机器上了
{  "_id" : "sh_test",  "primary" : "shard1",  "partitioned" : true }
sh_test.test
shard key: { "time" : 1 }
unique: false
balancing: true
chunks:
shard1 6
shard2 5
{ "time" : { "$minKey" : 1 } } -->> { "time" : "Tue Jun 28 2016 14:01:23 GMT+0800 (CST)" } on : shard2 Timestamp(2, 0) 
{ "time" : "Tue Jun 28 2016 14:01:23 GMT+0800 (CST)" } -->> { "time" : "Tue Jun 28 2016 14:01:25 GMT+0800 (CST)" } on : shard2 Timestamp(3, 0) 
{ "time" : "Tue Jun 28 2016 14:01:25 GMT+0800 (CST)" } -->> { "time" : "Tue Jun 28 2016 14:02:54 GMT+0800 (CST)" } on : shard2 Timestamp(4, 0) 
{ "time" : "Tue Jun 28 2016 14:02:54 GMT+0800 (CST)" } -->> { "time" : "Tue Jun 28 2016 14:04:37 GMT+0800 (CST)" } on : shard2 Timestamp(5, 0) 
{ "time" : "Tue Jun 28 2016 14:04:37 GMT+0800 (CST)" } -->> { "time" : "Tue Jun 28 2016 14:06:06 GMT+0800 (CST)" } on : shard2 Timestamp(6, 0) 
{ "time" : "Tue Jun 28 2016 14:06:06 GMT+0800 (CST)" } -->> { "time" : "Tue Jun 28 2016 14:07:53 GMT+0800 (CST)" } on : shard1 Timestamp(6, 1) 
{ "time" : "Tue Jun 28 2016 14:07:53 GMT+0800 (CST)" } -->> { "time" : "Tue Jun 28 2016 14:09:23 GMT+0800 (CST)" } on : shard1 Timestamp(4, 2) 
{ "time" : "Tue Jun 28 2016 14:09:23 GMT+0800 (CST)" } -->> { "time" : "Tue Jun 28 2016 14:11:36 GMT+0800 (CST)" } on : shard1 Timestamp(4, 3) 
{ "time" : "Tue Jun 28 2016 14:11:36 GMT+0800 (CST)" } -->> { "time" : "Tue Jun 28 2016 14:13:07 GMT+0800 (CST)" } on : shard1 Timestamp(5, 2) 
{ "time" : "Tue Jun 28 2016 14:13:07 GMT+0800 (CST)" } -->> { "time" : "Tue Jun 28 2016 14:15:53 GMT+0800 (CST)" } on : shard1 Timestamp(5, 3) 
{ "time" : "Tue Jun 28 2016 14:15:53 GMT+0800 (CST)" } -->> { "time" : { "$maxKey" : 1 } } on : shard1 Timestamp(5, 4) 



完成。








































Antigravity 2.0并行Agent团队实战:从环境搭建到性能优化 在智能体技术快速演进的今天,Agent不再局限于单线程的问答式交互,而是逐渐走向多角色协作的团队化执行模式。并行Agent架构通过将复杂任务拆解为相互独立的子任务,由多个智能体同时处理,再从汇总环节整合输出,有效解决了单Agent处理长链路任务时的上下文漂移和效率低下问题。这种模式不仅降低了单一智能体的认知负荷,还大幅缩短了整体执行时间,尤其在市场调研、报告生成、竞品分析等场景中展现出显著优势。Antigravity 2.0作为云端托管Agent平台,提供了一套轻量级的CLI与配置文件机制,让开发者无需自建 阅读详情

相关推荐

MongoDB 4.0 事务实现快速上手

MongoDB 4.0 事务实现快速上手 原创陈小生网易游戏运维平台 陈小生 网易游戏运维工程师,目前主要负责数据库相关的运维工作。 MongoDB 4.0 引入了多文档事务的支持,不过目前仅限于单个复本集(replica sets)的支持,预计 4.2 可以看到对 Sharding 架构的分布式事务支援。在 4.0 中,MongoDB 为多文档事务提供了 "all...

Fish 1602

MongoDB 单实例安装

1.环境 OS: CentOS 6.5 x64 MongoDB:3.2.7 MongoDB的集群安装可以参考:http://blog.youkuaiyun.com/john_chang11/article/details/51733670 2.下载mongodb https://www.mongodb.com/download-center?jmp=nav#commu

木生的博客 3146

Surface Pro 4/5/6/7保姆级黑苹果安装:从Windows分区到OC引导配置全流程(含EFI文件替换避坑)

本文详细介绍了在Surface Pro 4/5/6/7上安装黑苹果的全流程,包括Windows分区、OC引导配置和EFI文件替换等关键步骤。通过实战经验分享,帮助用户避开常见陷阱,实现Windows与macOS双系统完美共存,特别适合对黑苹果安装感兴趣的Surface Pro用户。

weixin_30300225的博客 1369

第九章:MongoDB管理维护sharding

 1. 列出所有的shard Server  1./mongo 192.168.56.90:27017   #这里必须连接路由节点  mongos> use admin switched to db admin mongos> db.runCommand({listshards:1})    -- --列出所有的shard Server {      "sha

小伟的专栏 753

ubunut 系统安装k8s集群

修改配置文件 kube-metrics-server.yaml 添加监控数据采集容器启动参数,启动 tls 证书验证,否则监控容器接口验证不通过,无法采集监控数据。kube-metrics-server.yaml 140行左右添加参数 --kubelet-insecure-tls。服务器添加配置(配置三台阿里云时间同步服务器作为时间源,本机作为时间同步服务器)客户端配置(第一个源选用集群内的 192.168.10.20 )时间同步配置文件参考如下。

weixin_57489252的博客 1329

Windows11上CUDA 12.3配PyTorch踩坑记:一条官网命令救了我的GPU加速

本文详细介绍了在Windows 11上配置CUDA 12.3与PyTorch的完整指南,包括环境准备、安装要点、兼容性解决方案和性能验证。通过官方推荐的conda命令和实用技巧,帮助开发者解决常见问题,实现高效的GPU加速,提升深度学习开发效率。

weixin_42528974的博客 109

启动arbiter失败Oplog entry at { ts: Timestamp 1651735515000|1, t: 1 } is missing; actual entry found is

mongodb版本是:mongodb-linux-x86_64-3.4.2.tgz 操作系统:中标麒麟服务器版 问题: 查看日志,日志里面提示: 2022-05-06T14:27:50.862+0800 I REPL [initandlisten] Did not find local voted for document at startup. 2022-05-06T14:27:50.863+0800 I REPL [initandlisten] Replaying stor

叮咚侠的博客 1319

Matlab生成dsp程序——环境搭建(c2000系列[F28335、F2837x]都适用)

一、环境配置 (28377D的操作是一模一样就是硬件设置的时候需要选择28377d进行相应的设置) 1)matlab与ccs联合编译需要安装对应的matlab版本和ccs版本,且只有2016a以上的matlab支持c2000系列。具体对应关系参照: http://software-dl.ti.com/ccs/esd/documents/ccs_matlab.html 2)matlab版本确定之后,还需要安装有关于ccs的相关软件: I、TI Code Composer Studio xxxx(对应

qq_42151264的博客 2万+

MongoDB分片和复本集介绍

MongoDB在1.6版本中提供分片和复本集技术使得MongoDB真正具备了生产环境部署的能力。 分片--Sharding 1.       MongoDB集群的构成 MongoDB集群主要有以下服务组成 A.分片服务(Shard Server),mongod 实例,2个以上,负责存储实际的数据分片,生产环境中一个Shard Server可由几台服务器组成一个Replica Set代替,避...

tully's Tech Blog 260

基因树构建全流程:从OrthoFinder到iTOL的保姆级教程(附兰科植物案例)

本文提供了一份从OrthoFinder到iTOL的基因树构建全流程保姆级教程。详细解析了利用OrthoFinder构建物种树、IQ-TREE构建无根基因树、Notung进行树调和生根,以及最终在iTOL中实现专业可视化的每一步操作与实战经验,并以兰科植物NB-ARC基因家族为例进行演示,帮助研究者系统掌握基因树分析方法。

tequila的博客 523

用 SemanticObject 把字段变成可点击链接:Fiori Elements Navigation Using a Link 的工程化实践

SAP Fiori elements 通过 Common.SemanticObject 注解可将字段转为可点击链接,实现应用间跳转。当源字段名与目标属性名不一致时,需使用 Common.SemanticObjectMapping 进行映射。该功能依赖 Fiori Launchpad 的目标映射配置,确保正确解析 semantic object + action 并传递参数。常见误区包括未配置目标映射或字段映射错误,需逐一检查语义标注、intent 解析和参数传递链路。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 272

MongoDB副本集与分片

一、MongoDB 副本集 1.1、MongoDB复制 在mongodb学习阶段,一般功德都是单台服务器,一个mongod服务进程。如果仅仅作为学习开发是可以的,但是如果用到生产环境,风险会很高,例如服务器崩溃、硬件出现问题,最坏的情况是磁盘或网络出问题可能会导致数损坏或数据不可访问。 MongoDB复制是将数据同步在多个服务器的过程。 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。 1.2、副本集 副本集是一组维护相同数据集的mongod实例。 副本

weixin_38932035的博客 1932

BDD测试用例:Playwright的MCP Server实战

Playwright MCP Server建立了大模型和真实的浏览环境之间的桥梁,可以让大模型操作多款浏览器完成测试任务。

Criss@陈磊 448

MongoDB 分片技术

MongoDB Sharding 分片技术 1、概述 MongoDB在1.6版本中提供分片和复本集技术使得MongoDB真正具备了生产环境部署的能力。        MongoDB 包含一个自动分片模块 ("mongos")。自动分片可以用于构建一个大规模的可扩展的数据库集群,这个集群可以并入动态增加的机器,自动建立一个水平扩展的数据库集群系统,将数据库数

wsh_mar的专栏 388

成对使用离轴抛物面反射镜的设计

成对使用离轴抛物面反射镜的设计

weixin_72050316的博客 638

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MongoDB 复本集搭建

复制集的特点 数据一致性   主是唯一的,但不是固定的没有MySQL那样的双主结构   大多数原则,集群存活节点小于等于二分之一时集群不可写,只可读。   是否能选举出新的主节点,是由当前复制集成员存活量来决定的。   从库无法写入 MySQL从库的readonly对具有super权限的用户无效   自动容灾 传统主从 ---&g...

weixin_34327761的博客 135

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

spring boot mongo (复本集群)读写分离

spring boot mongo (复本集群)读写分离 引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> application.yml配置文件 spring: data: mo

面朝大海,春暖花开 1823

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

window下MongoDB3.6b版本带安全验证的副本集和分片高可靠性部署

一、概述 MongoDB复本集解决了数据库的备份与自动故障转移,但是围绕数据库的业务中当前还有两个方面的问题变得越来越重要,一是海量数据如何存储,二是如何高效地读写海量数据。尽管复制集也可以实现读写分离,如在primary节点上写,在secondary节点上读,但在这种方式下客户端读出来的数据有可能不是最新的,因为primary节点到secondary节点间的数据同步会带来一定延迟...

lishiming0308的专栏 1827

mongdb3.4 Replica Set集群部署

mongodb的多服务器配置,master-slave模式,不能自动实现故障转移和恢复。为了实现多服务器的高可用,我们可以使用mongodb的replica set。replica set类似于heartbeat的功能,实现高可用。复制集是一个带有故障转移的主从集群。是从现有的主从模式演变而来,增加了自动故障转移和节点成员自动恢复。复制集模式中没有固定的主结点,在启动后,多个...

weixin_34185320的博客 163

MongoDB集群部署原理

在MongoDB安装目录下,可以发现有mongo.exe,mongod.exe,mongos.exe三个应用程序,这三个应用程序也是MongoDB底层实现的主要支柱,它的实现原理和Zookeeper是非常相似的。 集群部署 MongoDB的集群部署方案中有三种节点,分别是:数据存储节点(mongod)、配置文件存储节点(mongod config)、路由接入节点(mongos)。具体过程是,客户...

lx_Frolf的博客 1346

MongoDB存储配置

无论数据还是索引都存放在硬盘中。到要使用的时候才交换到内存中。 对于读密集型应用,规划好服务器大小以保证在内存中能支撑整个工作集并且进行复制以得到更高的可用性。如果你服务器的内存(RAM)不能够保证在内存中容纳工作集,进行分片以从多个复本集群中整合内存(RAM)。使用与部署相同的服务器硬件创建一个概念验证系统。通过这个方法,你可以在你的概念验证系统中配置和测试一个服务器。接着,你可以根据需要,在

做个有幸福感的人 603

Linux 之 MongoDB副本集安装与配置

Linux 之 MongoDB副本集安装与配置

weixin_40863968的博客 822

MongoDB副本集(一主一备+仲裁)环境部署

MongoDB复制集是一个带有故障转移的主从集群。是从现有的主从模式演变而来,增加了自动故障转移和节点成员自动恢复。MongoDB复制集模式中没有固定的主结点,在启动后,多个服务节点间将自动选举产生一个主结点。该主结点被称为primary,一个或多个从结点被称为secondaries。primary结点基本上就是master结点,不同之处在于primary结点在不同时间可能是不同的服务器。如果当前的主结点失效了,复制集中的其余结点将会试图选出一个新的主结点。 MongoDB提供了两种复制部署方案:主从复制

zhuchunyan_aijia的博客 4901

MongoDB 学习之复制(副本集)(九)

复制(副本集) 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据备份 数据灾难恢复 读写分离 高(24* 7)数据可用性 无宕机维护 副本集对应用程序是透明 复制的工作原理 复制至少需要两个节点A、B... A是主节点,负责处理客户端请求 其余的都是从...

代码帮 216

MongoDB 副本集丢失数据的测试

在MongoDB副本集的测试中发现了一个丢数据的案例。 1. 概要描述 测试场景为:一主一从一验证 测试案例 step1 :关闭从副本; step 2 ;向主副本中插入那条数据; step 3 :关闭主副本; step 4 :开启辅助副本,此副本升级为主副本,这是后会看到新的主副本没有刚才插入的几笔数据。 ----测试时,请注意测试步骤。 step 5 :原主节...

weixin_30546933的博客 195

MongoDB数据库-------------分片群集的搭建及分片管理

目录一、分片群集搭建1.1 安装MongoDB 3.21.2 某节点内存不足时,从其他节点分配内存1.3 分片服务器搭建1.4 启动路由服务器1.5 启用分片服务器1.6 分片功能二、分片管理2.1 分片2.2 添加标签2.3 连接配置服务器2.4 添加分片服务器2.5 删除分片节点 一、分片群集搭建 1.1 安装MongoDB 3.2 上传mongodb-linux-x86_64-3.2.1.tgz软件包到/opt目录下 [root@localhost ~]# yum -y install ope

weixin_48191138的博客 732
上一篇: MySQL 存储引擎 介绍
下一篇: MySQL 将数据文件分布到不同的磁盘
本木生
博客等级 码龄14年 18粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值