MongoDB分片集群部署详解
程序员文章站
2022-07-02 21:56:56
一、环境说明
1、我们prod环境mongodb的集群架构是做的分片集群的部署,但是目前我们没有分片,即所有数据都在一个分片上,后期如果数量大,需要分配,集群...
一、环境说明
1、我们prod环境mongodb的集群架构是做的分片集群的部署,但是目前我们没有分片,即所有数据都在一个分片上,后期如果数量大,需要分配,集群随时可以分片,对业务方透明
2、各个角色的部署情况
角色 | ip | 端口 | 复制集名称 |
---|---|---|---|
mongos | 172.21.244.101,172.21.244.102,172.21.244.94 | 27000 | 无 |
config server | 172.21.244.101,172.21.244.102,172.21.244.94 | 27100 | repl_configsvr |
存储节点(shard) | 172.21.244.101,172.21.244.102,172.21.244.94 | 27101 | shard1 |
3、mongodb版本
mongos> db.version() 4.0.4-62-g7e345a7
二、基础信息准备
0、系统优化
echo "never" >/sys/kernel/mm/transparent_hugepage/enabled echo "never" >/sys/kernel/mm/transparent_hugepage/defrag
1、下载mongodb二进制文件
cd /chj/app wget ops.chehejia.com:9090/pkg/chj_mongodb_4.0.4.tar.gz tar -zxvf chj_mongodb_4.0.4.tar.gz
2、相关目录建立
#建立base目录 mkdir /chj/data/mongodb/chj_db #把mongodb二进制文件移动到base目录下的bin文件夹 mv chj_mongodb_4.0.4/bin /chj/data/mongodb/chj_db/bin #建立认证文件目录 mkdir /chj/data/mongodb/chj_db/auth #建立配置文件目录 mkdir /chj/data/mongodb/chj_db/conf #建立config server的data和日志目录 mkdir /chj/data/mongodb/chj_db/config/data -p mkdir /chj/data/mongodb/chj_db/config/log #建立mongos的日志目录 mkdir /chj/data/mongodb/chj_db/mongos/log -p #建立数据节点data和日志目录 mkdir /chj/data/mongodb/chj_db/shard1/data -p mkdir /chj/data/mongodb/chj_db/shard1/log
3、相关配置文件编写
a、mongos的配置文件编写
vim /chj/data/mongodb/chj_db/conf/mongos.conf systemlog: destination: file logappend: true path: /chj/data/mongodb/chj_db/mongos/log/mongos.log processmanagement: fork: true # fork and run in background pidfilepath: /chj/data/mongodb/chj_db/mongos/log/mongos.pid # location of pidfile timezoneinfo: /usr/share/zoneinfo net: port: 27000 bindipall: true maxincomingconnections: 1000 unixdomainsocket: enabled: true pathprefix: /chj/data/mongodb/chj_db/mongos/log filepermissions: 0700 security: keyfile: /chj/data/mongodb/chj_db/auth/keyfile.key # authorization: enabled #replication: sharding: configdb: repl_configsvr/172.21.244.101:27100,172.21.244.102:27100,172.21.244.94:27100
b、config server的配置文件编写
vim /chj/data/mongodb/chj_db/conf/config.conf systemlog: destination: file logappend: true path: /chj/data/mongodb/chj_db/config/log/congigsrv.log storage: dbpath: /chj/data/mongodb/chj_db/config/data journal: enabled: true wiredtiger: engineconfig: directoryforindexes: true processmanagement: fork: true # fork and run in background pidfilepath: /chj/data/mongodb/chj_db/config/log/configsrv.pid # location of pidfile timezoneinfo: /usr/share/zoneinfo net: port: 27100 bindip: 0.0.0.0 # enter 0.0.0.0,:: to bind to all ipv4 and ipv6 addresses or, alternatively, use the net.bindipall setting. #bindipall: true maxincomingconnections: 1000 unixdomainsocket: enabled: true pathprefix: /chj/data/mongodb/chj_db/config/data filepermissions: 0700 security: keyfile: /chj/data/mongodb/chj_db/auth/keyfile.key authorization: enabled replication: replsetname: repl_configsvr sharding: clusterrole: configsvr
c、存储节点的配置文件编写
vim /chj/data/mongodb/chj_db/conf/shard1.conf systemlog: destination: file logappend: true path: /chj/data/mongodb/chj_db/shard1/log/shard1.log storage: dbpath: /chj/data/mongodb/chj_db/shard1/data journal: enabled: true wiredtiger: engineconfig: directoryforindexes: true processmanagement: fork: true # fork and run in background pidfilepath: /chj/data/mongodb/chj_db/shard1/log/shard1.pid # location of pidfile timezoneinfo: /usr/share/zoneinfo net: port: 27101 bindip: 0.0.0.0 # enter 0.0.0.0,:: to bind to all ipv4 and ipv6 addresses or, alternatively, use the net.bindipall setting. #bindipall: true maxincomingconnections: 1000 unixdomainsocket: enabled: true pathprefix: /chj/data/mongodb/chj_db/shard1/data filepermissions: 0700 security: keyfile: /chj/data/mongodb/chj_db/auth/keyfile.key authorization: enabled replication: replsetname: shard1 sharding: clusterrole: shardsvr
4、生产key认证文件
echo "chj123456" >/chj/data/mongodb/chj_db/auth/keyfile.key #设置文件的权限为400,不然服务无法启动 chmod 400 /chj/data/mongodb/chj_db/auth/keyfile.key
三、集群初始化
1、启动 config server 服务
/chj/data/mongodb/chj_db/bin/mongod -f /chj/data/mongodb/chj_db/conf/config.conf
2、初始化config server集群
#登录其中一个config server节点 /chj/data/mongodb/chj_db/bin/mongo --port 27100 #配置集群 config = { _id:"repl_configsvr",members:[ {_id:0,host:"172.21.244.101:27100"}, {_id:1,host:"172.21.244.102:27100"}, {_id:2,host:"172.21.244.94:27100"}] } #初始化集群 rs.initiate(config) ps: 结果输出如下,说明集群初始化成功,可以通过rs.status()命令查看集群状态 { "ok" : 1, "$glestats" : { "lastoptime" : timestamp(1557538260, 1), "electionid" : objectid("000000000000000000000000") }, "lastcommittedoptime" : timestamp(0, 0) }
3、启动存储节点服务
/chj/data/mongodb/chj_db/bin/mongod -f /chj/data/mongodb/chj_db/conf/shard1.conf
4、初始化存储集群
#登录你希望是主节点的服务器 /chj/data/mongodb/chj_db/bin/mongo --port 27101 #配置集群 config = { _id:"shard1",members:[ {_id:0,host:"172.21.244.101:27101"}, {_id:1,host:"172.21.244.102:27101"},{_id:2,host:"172.21.244.94:27101",arbiteronly:true}] } #初始化集群 rs.initiate(config) ps: 结果输出如下,说明集群初始化成功,可以通过rs.status()命令查看集群状态 { "ok" : 1 }
5、添加存储集群的管理账号
登录主节点
/chj/data/mongodb/chj_db/bin/mongo --port 27101 use admin db.createuser( { user: "root", pwd: "123456", roles: [ { role: "root", db: "admin" } ] } )
6、启动mongos 服务
/chj/data/mongodb/chj_db/bin/mongos -f /chj/data/mongodb/chj_db/conf/mongos.conf
7、添加config server的管理账号
登录任意一个mongos节点
/chj/data/mongodb/chj_db/bin/mongo --port 27000 use admin db.createuser( { user: "root", pwd: "123456", roles: [ { role: "root", db: "admin" } ] } )
8、把存储节点添加到mongos
登录任意一个mongos节点(如果是在上一步的窗口,需要退出重新登录)
/chj/data/mongodb/chj_db/bin/mongo --port 27000 use admin db.auth('root','123456') #添加分片 sh.addshard('shard1/172.21.244.101:27101,172.21.244.102:27101,172.21.244.94:27101') #查看分片状态 sh.status()
四、交付业务方
1、建立应用账号
登录任意一个mongos节点 /chj/data/mongodb/chj_db/bin/mongo --port 27000 use admin db.auth('root','123456') #切到业务数据库 use chj_db #建立读写账号 db.createuser( { user: "chj_db_rw", pwd: "123456", roles: [ { role: "readwrite", db: "chj_db" }, { role: "dbowner", db: "chj_db" } ] } ) #建立只读账号(根据业务需求确认是否需要) db.createuser( { user: "chj_db_r", pwd: "123456", roles: [ { role: "read", db: "chj_db" } ] } )
2、交付开发人员信息
连接地址:172.21.244.101:27000,172.21.244.102:27000,172.21.244.94:27000 库名:chj_db 账号:chj_db_rw 密码:123456
五、数据库启用分片
如果后期业务量大,需要开启分片,配置如下
#指定需要分片的数据库 mongos> sh.enablesharding("chj_db") { "ok" : 1, "operationtime" : timestamp(1557546835, 3), "$clustertime" : { "clustertime" : timestamp(1557546835, 3), "signature" : { "hash" : bindata(0,"bkrrr8kxrr9j9udrdc/hurhld38="), "keyid" : numberlong("6689575940508352541") } } } #在chj_db数据库和users集合中创建了name和age为升序的片键 mongos> sh.shardcollection("chj_db.users",{name:1,age:1}) { "collectionsharded" : "chj_db.users", "collectionuuid" : uuid("59c0b99f-efff-4132-b489-f6c7e3d98f42"), "ok" : 1, "operationtime" : timestamp(1557546861, 12), "$clustertime" : { "clustertime" : timestamp(1557546861, 12), "signature" : { "hash" : bindata(0,"ubb1a/yodnmxwg5eahgnlckvzug="), "keyid" : numberlong("6689575940508352541") } } } #查看分片情况 mongos> sh.status() --- sharding status --- sharding version: { "_id" : 1, "mincompatibleversion" : 5, "currentversion" : 6, "clusterid" : objectid("5cd625e0da695346d740f749") } shards: { "_id" : "shard1", "host" : "shard1/172.21.244.101:27101,172.21.244.102:27101", "state" : 1 } active mongoses: "4.0.4-62-g7e345a7" : 3 autosplit: currently enabled: yes 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: { "_id" : "chj_db", "primary" : "shard1", "partitioned" : true, "version" : { "uuid" : uuid("82088bc7-7b98-4033-843d-7058d8d959f6"), "lastmod" : 1 } } chj_db.users shard key: { "name" : 1, "age" : 1 } unique: false balancing: true chunks: shard1 1 { "name" : { "$minkey" : 1 }, "age" : { "$minkey" : 1 } } -->> { "name" : { "$maxkey" : 1 }, "age" : { "$maxkey" : 1 } } on : shard1 timestamp(1, 0) { "_id" : "config", "primary" : "config", "partitioned" : true } config.system.sessions shard key: { "_id" : 1 } unique: false balancing: true chunks: shard1 1 { "_id" : { "$minkey" : 1 } } -->> { "_id" : { "$maxkey" : 1 } } on : shard1 timestamp(1, 0)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: PS如何把衣服的图案去掉?