当前位置: 首页 > mongodb > 正文

MongoDB分片副本集的环境搭建

下面是在生产环境下部署mongodb sharded replica set集群的步骤:
系统环境配置情况:
3个副本集(replica set),每个副本集由不同的机器上的3个mongod实例组成。
3个sharding。每个shard是一个副本集。
3个配置服务器。每个服务器是在不同的机器上。
1个mongos路由。

集群架构如下,这套步骤在如下Ubuntu服务器上测试成功:

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
在每台服务器上执行如下操作:

$ 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。

$ 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
在所有服务器上执行如下命令:

$ mkdir /data/config
$ nohup mongod --configsvr --dbpath /data/config --port 20000 > /tmp/config.log &

启动mongos query路由
在server1上执行:

$ 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上执行:

$ 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上执行:

$ mongo localhost:30000/admin
mongos> use admin
mongos> db.runCommand( { enablesharding : "test" } );
mongos> db.runCommand( { shardcollection : "test.data" , key : { name : 1 } } )

可以执行下面的命令列出shard的状态:

mongos> db.runCommand( {listshards : 1} )

创建replica set 2
在所有节点上执行:

$ mkdir /data/db2
$ nohup mongod --shardsvr --dbpath /data/db2 --port 10002 --replSet myset2 > /tmp/shard2.log &

在Server1上执行如下MongoDB shell,并且执行命令创建replica set

$ 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 上执行:

$ 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
在所有节点上执行:

$ mkdir /data/db3
$ nohup mongod --shardsvr --dbpath /data/db3 --port 10003 --replSet myset3> /tmp/shard3.log &

在Server1上执行如下MongoDB shell,并且执行命令创建replica set

$ 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 上执行:

$ 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上执行

$ mongo localhost:30000/admin
mongos> db.runCommand( {listshards : 1} )
mongos> db.printShardingStatus()

在query router上保存和查询数据
router是管理集群上存储数据的实例,客户端连接mongos而不是链接mongod实例。
server1上执行如下:

$ mongo localhost:30000/test
mongos> db.data.insert({"name":"jeffrey"})
mongos> db.data.find()

启动另一个query router
server1上执行:

$ 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://sudops.com/mongodb-sharded-replica-set-setup.html | 运维速度

该日志由 u2 于2014年02月24日发表在 mongodb 分类下,
原创文章转载请注明: MongoDB分片副本集的环境搭建 | 运维速度
关键字:

报歉!评论已关闭.