MongoDB分片副本集的环境搭建
下面是在生产环境下部署mongodb sharded replica set集群的步骤:
系统环境配置情况:
3个副本集(replica set),每个副本集由不同的机器上的3个mongod实例组成。
3个sharding。每个shard是一个副本集。
3个配置服务器。每个服务器是在不同的机器上。
1个mongos路由。
集群架构如下,这套步骤在如下Ubuntu服务器上测试成功:
1 2 3 |
Server 1: 10.31.142.101 Server 2: 10.31.142.102 Server 3: 10.31.142.103 |
最佳实践:
1.在生产环境下,您必须部署有三个配置服务器实例,并且每一个运行在在不同服务器上,以保证良好的性能和数据的安全性。在测试环境中,可以运行在一台服务器配置所有三个实例。
2.一个shard可以是一个独立的mongod或副本集。在生产环境中,每个碎片应该是一个副本集。
3.副本集应该保证有奇数个成员,这将确保选举能顺利进行。每个成员实例应该放在不同的服务器上。在生产环境中,三个成员实例可以保证数据的安全性。
4.这套mongos是轻量级的,不需要数据目录。可以在上面运行其它集群组件,诸如运行应用服务或跑mongod进程。
好吧,我们现在开始:
1. 创建replica set 1
在每台服务器上执行如下操作:
1 2 3 4 5 |
$ sudo mkdir -p /data $ sudo chown `id -u` /data $ mkdir /data/db1 $ nohup mongod --shardsvr --dbpath /data/db1 --port 10001 --replSet myset1 > /tmp/shard1.log & |
说明:
nohup命令让mongod后台运行。
shardsvr
选项配置此mongod实例作为一个分区集群shard。
DBPATH的<path>
选项指定数据存储到文件夹/data/db1。
<PORT>
选项指定实例侦听端口10001。
replSet<setname>
选项指定副本集的名称。在副本集中的所有主机必须具有相同的一组名称。该组的名字是我的设定是1。
日志数据写入到/tmp/shard1.log.You可以使用cat /tmp/shard1.log来查看日志。
执行MogoDB 命令创建replica set。
1 2 3 4 5 6 |
$ mongo localhost:10001/admin config = {_id: 'myset1', members: [ {_id: 0, host: '10.31.142.101:10001'}, {_id: 1, host: '10.31.142.102:10001'}, {_id: 2, host: '10.31.142.103:10001'}] } |
说明:
congfig对象定义了replica set的成员
id 对应了replSet
rs.initiate(config) 初始化replica set
rs.status()返回replica set的状态
注意,这些命令必须在所有三台机器上都执行一遍,不仅仅是在server1上。
启动三个config server
在所有服务器上执行如下命令:
1 2 |
$ mkdir /data/config $ nohup mongod --configsvr --dbpath /data/config --port 20000 > /tmp/config.log & |
启动mongos query路由
在server1上执行:
1 |
$ nohup mongos --configdb 10.31.142.101:20000,10.31.142.102:20000,10.31.142.103:20000 --port 30000 > /tmp/mongos.log & |
创建shard 1
在server1上执行:
1 2 3 |
$ mongo localhost:30000/admin mongos> db.runCommand({addshard : "myset1/10.31.142.101:10001,10.31.142.102:10001,10.31.142.103:10001"}) { "shardAdded" : "myset1", "ok" : 1 } |
开启sharding collection
在server1上执行:
1 2 3 4 |
$ mongo localhost:30000/admin mongos> use admin mongos> db.runCommand( { enablesharding : "test" } ); mongos> db.runCommand( { shardcollection : "test.data" , key : { name : 1 } } ) |
可以执行下面的命令列出shard的状态:
1 |
mongos> db.runCommand( {listshards : 1} ) |
创建replica set 2
在所有节点上执行:
1 2 |
$ mkdir /data/db2 $ nohup mongod --shardsvr --dbpath /data/db2 --port 10002 --replSet myset2 > /tmp/shard2.log & |
在Server1上执行如下MongoDB shell,并且执行命令创建replica set
1 2 3 4 5 6 7 8 9 |
$ mongo localhost:10002/admin config = {_id: 'myset2', members: [ {_id: 0, host: '10.31.142.101:10002'}, {_id: 1, host: '10.31.142.102:10002'}, {_id: 2, host: '10.31.142.103:10002'}] } rs.initiate(config) rs.status() |
创建shard 2
在server 1 上执行:
1 2 3 |
$ mongo localhost:30000/admin mongos> db.runCommand({addshard : "myset2/10.31.142.101:10002,10.31.142.102:10002,10.31.142.103:10002"}) { "shardAdded" : "myset2", "ok" : 1 } |
创建replica set 3
在所有节点上执行:
1 2 |
$ mkdir /data/db3 $ nohup mongod --shardsvr --dbpath /data/db3 --port 10003 --replSet myset3> /tmp/shard3.log & |
在Server1上执行如下MongoDB shell,并且执行命令创建replica set
1 2 3 4 5 6 7 8 9 |
$ mongo localhost:10003/admin config = {_id: 'myset3', members: [ {_id: 0, host: '10.31.142.101:10003'}, {_id: 1, host: '10.31.142.102:10003'}, {_id: 2, host: '10.31.142.103:10003'}] } rs.initiate(config) rs.status() |
创建shard 3
在server 1 上执行:
1 2 3 |
$ mongo localhost:30000/admin mongos> db.runCommand({addshard : "myset3/10.31.142.101:10003,10.31.142.102:10003,10.31.142.103:10003"}) { "shardAdded" : "myset3", "ok" : 1 } |
现在sharding 状态:
server1上执行
1 2 3 |
$ mongo localhost:30000/admin mongos> db.runCommand( {listshards : 1} ) mongos> db.printShardingStatus() |
在query router上保存和查询数据
router是管理集群上存储数据的实例,客户端连接mongos而不是链接mongod实例。
server1上执行如下:
1 2 3 |
$ mongo localhost:30000/test mongos> db.data.insert({"name":"jeffrey"}) mongos> db.data.find() |
启动另一个query router
server1上执行:
1 |
$ nohup mongos --configdb 10.31.142.101:20000,10.31.142.102:20000,10.31.142.103:20000 --port 30001 > /tmp/mongos1.log & |
原作者:jeffreysun http://www.sunzhongkui.me
参考文档:
[1] mongod command options
http://docs.mongodb.org/manual/reference/program/mongod/
[2] mongos command options
http://docs.mongodb.org/manual/reference/program/mongos/
本文固定链接: https://www.sudops.com/mongodb-sharded-replica-set-setup.html | 运维·速度