您好,登錄后才能下訂單哦!
一、環境說明
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)
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。