同福

MongoDB集群配置

配置MongoDB的集群

分片(Shard)

主机头

为了方面我们给每个分片节点服务器都设置一个主机头

在这里我们准备了三台服务器

IP分别是 10.16.1.105、10.16.1.106、10.16.1.107

对应主机头是 shard1、shard2、shard3

目录

在每个分片节点服务器上执行如下操作

mkdir -p /tongfu.net/env/mongodb/mongos/log
mkdir -p /tongfu.net/env/mongodb/config/data
mkdir -p /tongfu.net/env/mongodb/config/log
mkdir -p /tongfu.net/env/mongodb/shard/data
mkdir -p /tongfu.net/env/mongodb/shard/log

配置文件

在每个分片节点服务器上执行如下操作

[root@tongfunet]# cat > /tongfu.net/env/mongodb/conf/shard.conf <<EOF
#相关路径
pidfilepath = /tongfu.net/env/mongodb/shard/log/shard.pid
dbpath = /tongfu.net/env/mongodb/shard/data
logpath = /tongfu.net/env/mongodb/shard/log/shard.log
logappend = true

# IP,端口
bind_ip = 0.0.0.0
port = 27017
fork = true

#副本集名称
replSet=shards

#作为分片节点服务器
shardsvr = true

#设置最大连接数
maxConns=20000
EOF

启动

在每个分片节点服务器上启动mongodb分片节点实例

/tongfu.net/env/mongodb/bin/mongod -f /tongfu.net/env/mongodb/conf/shard.conf

初始化

在任意一个分片节点服务器上初始化,不是每个分片节点服务器都操作

进入mongodb控制台

/tongfu.net/env/mongodb/bin/mongo

执行初始化命令

在哪个分片节点上操作就去掉哪个分片节点的 rs.add 操作这一步,这里我们是在 shard1 上操作的,所以没有 shard1 的 rs.add 操作

rs.initiate()
rs.add("shard2")
rs.add("shard3")

配置服务器(Config Server)

配置文件

在每个分片节点服务器执行如下操作

[root@tongfunet]# cat > /tongfu.net/env/mongodb/conf/config.conf <<EOF
#相关路径
pidfilepath = /tongfu.net/env/mongodb/config/log/configsrv.pid
dbpath = /tongfu.net/env/mongodb/config/data
logpath = /tongfu.net/env/mongodb/config/log/configsrv.log
logappend = true

# IP,端口
bind_ip = 0.0.0.0
port = 21000
fork = true

#作为分片配置服务器
configsvr = true

#副本集名称
replSet=configs

#设置最大连接数
maxConns=20000

启动

在每个分片节点服务器启动分片配置实例

/tongfu.net/env/mongodb/bin/mongod -f /tongfu.net/env/mongodb/conf/config.conf

初始化

在任意一个分片配置服务器上初始化,不是每个分片配置服务器都操作

进入mongodb控制台

/tongfu.net/env/mongodb/bin/mongo --port 21000

执行初始化命令

在哪个分片节点上操作就去掉哪个分片节点的 rs.add 操作这一步,这里我们是在 shard1 上操作的,所以没有 shard1 的 rs.add 操作

rs.initiate()
rs.add("shard2:21000")
rs.add("shard3:21000")

路由(Router)

配置文件

路由可以建立在分片服务器上,也可以在单独的服务器上建立

路由的个数和分片的个数可以不一样,路由个数可以多于分片个数,也可以少于分片个数

路由的关键是要通过configdb指定分片服务器的config地址和端口

cat > /tongfu.net/env/mongodb/conf/mongos.conf <<EOF
#相关路径
pidfilepath = /tongfu.net/env/mongodb/mongos/log/mongos.pid
logpath = /tongfu.net/env/mongodb/mongos/log/mongos.log
logappend = true

# IP,端口
bind_ip = 0.0.0.0
port = 20000
fork = true

#监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
configdb = configs/shard1:21000,shard2:21000,shard3:21000
 
#设置最大连接数
maxConns=20000

启动

/tongfu.net/env/mongodb/bin/mongos -f /tongfu.net/env/mongodb/conf/mongos.conf

启动集群

配置

通过前面的步骤以及搭建好了一个基本的MongoDB集群

我们通过路由登录mongodb控制台

/tongfu.net/env/mongodb/bin/mongo --port 20000

我们进行分片节点的绑定操作

sh.addShard("shards/shard1,shard2,shard3");

sh.status();

维护集群

启动

启动集群的顺序是,先启动config server,再启动shard,最后启动router

停止

停止集群的顺序是,先停止router,再停止config server,最后停止shard

总结

关系

建立集群有这么个元素:分片(Shard),配置服务器(Config Server),路由(Router)

建立集群有这么几件事:初始化目录,配置文件,启动进程,初始化数据

顺序

归纳起来就是这样一个顺序:

  1. 在每个分片节点服务器,初始化目录

  2. 在每个分片节点服务器,建立分片节点的配置文件(Shard)

  3. 在每个分片节点服务器,启动分片节点实例

  4. 在每个分片节点服务器,建立分片配置的配置文件(Config Server)

  5. 在每个分片节点服务器,启动分片配置实例

  6. 在路由服务器,建立路由的配置文件(Router)

  7. 在路由服务器,启动路由实例

  8. 在任意分片节点服务器初始化,添加每个分片节点

  9. 在任意分片配置服务器初始化,添加每个分片配置

  10. 在路由服务器初始化,添加分片

FAQ