0、前提需求
为了满足mongodb数据库高可用环境,可以使用配置副本集CSRS(config server replica set),搭建方法点击此处,但是当业务吞吐量特别高的时刻,单台节点已经不能满足访问需求,因此需要考虑sharding cluster 模式,提高访问性能。
1、将集群架构从csrs调整为sharding cluster,下文按照上面搭建的csrs架构继续调整:
1.1、节点信息如下:
主:10.0.7.53
从:10.0.7.51
仲裁:10.0.7.50
依次关闭仲裁、从、主节点,修改配置文件mongodb.conf,添加如下信息:
1 | sharding: |
1.2、修改完三个节点之后,依次启动主,从,仲裁三个节点,进入控制台使用rs.status(),查看集群状态是否正常。为了保证停机时间较短,可使用rs.stepDown()分别进行主从切换,对从库进行配置并重启。
2、新建一个shard1集群节点,操作如下(三个节点都要执行):
2.1、节点信息如下:
从:10.0.7.53
主:10.0.7.51
仲裁:10.0.7.50
2.2、拷贝一份mongodb.conf文件,并重新命名
cp mongodb.conf shard1mongodb.conf
2.3、主节点需要在无需验证的模式下,先配置用户名密码。之后修改(三个节点)shard1mongodb.conf配置文件内容如下:
cat shard1mongodb.conf
1 | # mongod.conf |
注意修改sharding、port、path、replname等参数
2.4、创建相应的数据目录和日志目录:
1 | mkdir -p /data/mongodb/shard1/{log,data} |
2.5、生成keyfile文件并拷贝keyfile文件到指定目录:
1 | cp mongodb.keyfile /data/mongodb/shard1/ |
2.6、三个节点启动mongodb-shard1:
1 | /data/mongodb/bin/mongod -f /data/mongodb/shard1mongodb.conf |
2.7、初始化集群配置:
/data/mongodb/bin/mongo –port 30001
–
rs.initiate(
{
_id : “shard”,
members: [
{ _id : 0, host : “10.0.7.53:30001” },
{ _id : 1, host : “10.0.7.50:30001” },
{ _id : 2, host : “10.0.7.51:30001”,”arbiterOnly” : true }
]
}
)
2.8、查看集群节点信息:
1 | rs.status(); |
1 | { |
3、新建一个config-server集群节点,操作如下(三个节点都要执行):
3.1、节点信息如下:
1 | 从:10.0.7.53 |
3.2、拷贝一份mongodb.conf文件,并重新命名
1 | cp shard1mongodb.conf configmongodb.conf |
3.3、主节点需要在无需验证的模式下,先配置用户名密码。之后修改(三个节点)configmongodb.conf配置文件内容如下:
cat configmongodb.conf
1 | # mongod.conf |
注意修改sharding、repl、port、path
3.4、创建相应的数据目录和日志目录:
1 | mkdir -p /data/mongodb/config/{log,data} |
3.5、三个节点启动mongodb-shard1:
1 | /data/mongodb/bin/mongod --configsvr -f /data/mongodb/configmongodb.conf |
启动config-server服务需要指定参数,否则初始化集群的时候会报错:
1 | "errmsg" : "Nodes being used for config servers must be started with the --configsvr flag" |
3.6、初始化集群配置:
/data/mongodb/bin/mongo –port 30002
–
rs.initiate(
{
_id : “config”,
configsvr: true,
members: [
{ _id : 0, host : “10.0.7.53:30002” },
{ _id : 1, host : “10.0.7.50:30002” },
{ _id : 2, host : “10.0.7.51:30002” }
]
}
)
3.7、查看集群信息:
1 | rs.status(); |
4、配置mongs(mongodb-router),用于客户端连接到mongodb集群,为防止单点故障,可配置多个mongos节点
4.1、拷贝一份配置文件,并重命名
1 | cp configmongodb.conf routermongodb.conf |
4.2、修改配置文件参数,内容如下:
cat routermongodb.conf
1 | # mongod.conf |
注意修改sharding,port参数,注释掉storage参数
4.3、创建router日志目录
1 | mkdir -p /data/mongodb/router/log |
4.4、启动mongos
1 | /data/mongodb/bin/mongos -f /data/mongodb/routermongodb.conf |
4.5、为模拟生产环境数据,对testrepl集群节点,插入部分数据,批量插入脚本如下:
1 | use test |
4.6、连接到mongos
1 | shell > mongo --host 10.0.7.50 --port 30004 |
4.7、将节点添加到集群内:
1 | mongos> sh.addShard("testrepl/10.0.7.53:30000") |
4.8、使数据库test支持sharding
1 | mongos> sh.enableSharding("test") |
4.9、查看拆分结果,(可多次重复4.5步骤进行测试)
sh.status()或者db.printShardingStatus()
1 | --- Sharding Status --- |