Centos 7.5 1804 MongoDB 4.0.1 shard分片主機: shard1: IP:192.168.1.1 shard2: IP:192.168.1.2 shard2: IP:192.168.1.3 #三臺主機分別啓動三個mongod實例: mongod1: 端口: 27017 mongod2: 端口: 27018 mongod2: 端口: 27019 configsrv主機: IP:192.168.1.4 mongod1: 端口: 27019 mongod2: 端口: 37018 mongod2: 端口: 47019 Route主機: 192.168.1.5 mongods: 端口: 27017
cat << EOF > /etc/yum.repos.d/mongodb.repo [mongodb-org-4.0] name=MongoDB 4.0 Repository baseurl=https://mirrors.aliyun.com/mongodb/yum/redhat/\$releasever/mongodb-org/4.0/\$basearch/ gpgcheck=0 enabled=1 EOF yum install -y mongodb-org mkdir -p /var/run/mongodb mkdir -p /data/mongod{1..3} mkdir -p /etc/mongo mkdir -p /tmp/mongod{1..3} chown -R mongod.mongod /data chown -R mongod.mongod /var/run/mongodb chown -R mongod.mongod /tmp/mongod{1..3}
#在192.168.1.1主機執行 openssl rand -base64 756 > /etc/mongo/mongo.key chown -R mongod.mongod /etc/mongo chmod -R 600 /etc/mongo scp -r /etc/mongo 192.168.1.2:/etc/ scp -r /etc/mongo 192.168.1.3:/etc/ scp -r /etc/mongo 192.168.1.4:/etc/ scp -r /etc/mongo 192.168.1.5:/etc/
#configsvr1的配置文件 cat << EOF > /etc/mongo/configsvc1.conf systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod1.log storage: dbPath: /data/mongod1 journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: true processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod1.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo net: port: 27019 #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: 500 unixDomainSocket: enabled: true pathPrefix: /tmp/mongod1 filePermissions: 0700 security: keyFile: /etc/mongo/mongo.key authorization: enabled replication: replSetName: BigBoss sharding: clusterRole: configsvr EOF #configsvr2的配置文件 cat << EOF > /etc/mongo/configsvc2.conf systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod2.log storage: dbPath: /data/mongod2 journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: true processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod2.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo net: port: 37019 #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: 500 unixDomainSocket: enabled: true pathPrefix: /tmp/mongod2 filePermissions: 0700 security: keyFile: /etc/mongo/mongo.key authorization: enabled replication: replSetName: BigBoss sharding: clusterRole: configsvr EOF #configsvr3的配置文件 cat << EOF > /etc/mongo/configsvc3.conf systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod3.log storage: dbPath: /data/mongod3 journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: true processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod3.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo net: port: 47019 #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: 500 unixDomainSocket: enabled: true pathPrefix: /tmp/mongod3 filePermissions: 0700 security: keyFile: /etc/mongo/mongo.key authorization: enabled replication: replSetName: BigBoss sharding: clusterRole: configsvr EOF
mongod -f /etc/mongo/configsvc1.conf mongod -f /etc/mongo/configsvc2.conf mongod -f /etc/mongo/configsvc3.conf
mongo --port 27019 rs.initiate( { _id: "BigBoss", version: 1, protocolVersion: 1, writeConcernMajorityJournalDefault: true, configsvr: true, members: [ { _id: 0, host: "192.168.1.4:27019", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 66, tags: { BigBoss: "YES" }, slaveDelay: 0, votes: 1 }, { _id: 1, host: "192.168.1.4:37019", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 55, tags: { BigBoss: "NO" }, slaveDelay: 0, votes: 1 }, { _id: 2, host: "192.168.1.4:47019", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 33, tags: { BigBoss: "NO" }, slaveDelay: 0, votes: 1 } ], settings: { chainingAllowed : true, } } ) #查看副本集狀態 rs.status()
#mongod1.conf配置文件: cat << EOF > /etc/mongo/mongod1.conf systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod1.log storage: dbPath: /data/mongod1 journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: true processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod1.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo net: port: 27017 #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: 500 unixDomainSocket: enabled: true pathPrefix: /tmp/mongod1 filePermissions: 0700 security: keyFile: /etc/mongo/mongo.key authorization: enabled replication: replSetName: shard1 sharding: clusterRole: shardsvr EOF #mongod2.conf配置文件: cat << EOF > /etc/mongo/mongod2.conf systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod2.log storage: dbPath: /data/mongod2 journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: true processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod2.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo net: port: 27018 #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: 500 unixDomainSocket: enabled: true pathPrefix: /tmp/mongod2 filePermissions: 0700 security: keyFile: /etc/mongo/mongo.key authorization: enabled replication: replSetName: shard1 sharding: clusterRole: shardsvr EOF #mongod3.conf配置文件: cat << EOF > /etc/mongo/mongod3.conf systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod3.log storage: dbPath: /data/mongod3 journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: true processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod3.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo net: port: 27019 #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: 500 unixDomainSocket: enabled: true pathPrefix: /tmp/mongod3 filePermissions: 0700 security: keyFile: /etc/mongo/mongo.key authorization: enabled replication: replSetName: shard1 sharding: clusterRole: shardsvr EOF
mongod -f /etc/mongo/mongod1.conf mongod -f /etc/mongo/mongod2.conf mongod -f /etc/mongo/mongod3.conf
mongo rs.initiate( { _id: "shard1", version: 1, protocolVersion: 1, writeConcernMajorityJournalDefault: true, members: [ { _id: 0, host: "192.168.1.1:27017", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 66, tags: { BigBoss: "YES" }, slaveDelay: 0, votes: 1 }, { _id: 1, host: "192.168.1.1:27018", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 55, tags: { BigBoss: "NO" }, slaveDelay: 0, votes: 1 }, { _id: 2, host: "192.168.1.1:27019", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 33, tags: { BigBoss: "NO" }, slaveDelay: 0, votes: 1 } ], settings: { chainingAllowed : true, } } ) #查看副本集狀態 rs.status()
#mongod1.conf配置文件: cat << EOF > /etc/mongo/mongod1.conf systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod1.log storage: dbPath: /data/mongod1 journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: true processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod1.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo net: port: 27017 #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: 500 unixDomainSocket: enabled: true pathPrefix: /tmp/mongod1 filePermissions: 0700 security: keyFile: /etc/mongo/mongo.key authorization: enabled replication: replSetName: shard2 sharding: clusterRole: shardsvr EOF #mongod2.conf配置文件: cat << EOF > /etc/mongo/mongod2.conf systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod2.log storage: dbPath: /data/mongod2 journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: true processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod2.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo net: port: 27018 #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: 500 unixDomainSocket: enabled: true pathPrefix: /tmp/mongod2 filePermissions: 0700 security: keyFile: /etc/mongo/mongo.key authorization: enabled replication: replSetName: shard2 sharding: clusterRole: shardsvr EOF #mongod3.conf配置文件: cat << EOF > /etc/mongo/mongod3.conf systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod3.log storage: dbPath: /data/mongod3 journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: true processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod3.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo net: port: 27019 #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: 500 unixDomainSocket: enabled: true pathPrefix: /tmp/mongod3 filePermissions: 0700 security: keyFile: /etc/mongo/mongo.key authorization: enabled replication: replSetName: shard2 sharding: clusterRole: shardsvr EOF
mongod -f /etc/mongo/mongod1.conf mongod -f /etc/mongo/mongod2.conf mongod -f /etc/mongo/mongod3.conf
mongo rs.initiate( { _id: "shard2", version: 1, protocolVersion: 1, writeConcernMajorityJournalDefault: true, members: [ { _id: 0, host: "192.168.1.2:27017", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 66, tags: { BigBoss: "YES" }, slaveDelay: 0, votes: 1 }, { _id: 1, host: "192.168.1.2:27018", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 55, tags: { BigBoss: "NO" }, slaveDelay: 0, votes: 1 }, { _id: 2, host: "192.168.1.2:27019", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 33, tags: { BigBoss: "NO" }, slaveDelay: 0, votes: 1 } ], settings: { chainingAllowed : true, } } ) #查看shard2副本集狀態 rs.status()
#mongod1.conf配置文件: cat << EOF > /etc/mongo/mongod1.conf systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod1.log storage: dbPath: /data/mongod1 journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: true processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod1.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo net: port: 27017 #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: 500 unixDomainSocket: enabled: true pathPrefix: /tmp/mongod1 filePermissions: 0700 security: keyFile: /etc/mongo/mongo.key authorization: enabled replication: replSetName: shard3 sharding: clusterRole: shardsvr EOF #mongod2.conf配置文件: cat << EOF > /etc/mongo/mongod2.conf systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod2.log storage: dbPath: /data/mongod2 journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: true processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod2.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo net: port: 27018 #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: 500 unixDomainSocket: enabled: true pathPrefix: /tmp/mongod2 filePermissions: 0700 security: keyFile: /etc/mongo/mongo.key authorization: enabled replication: replSetName: shard3 sharding: clusterRole: shardsvr EOF #mongod3.conf配置文件: cat << EOF > /etc/mongo/mongod3.conf systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod3.log storage: dbPath: /data/mongod3 journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: true processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod3.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo net: port: 27019 #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: 500 unixDomainSocket: enabled: true pathPrefix: /tmp/mongod3 filePermissions: 0700 security: keyFile: /etc/mongo/mongo.key authorization: enabled replication: replSetName: shard3 sharding: clusterRole: shardsvr EOF
mongod -f /etc/mongo/mongod1.conf mongod -f /etc/mongo/mongod2.conf mongod -f /etc/mongo/mongod3.conf
mongo rs.initiate( { _id: "shard3", version: 1, protocolVersion: 1, writeConcernMajorityJournalDefault: true, members: [ { _id: 0, host: "192.168.1.3:27017", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 66, tags: { BigBoss: "YES" }, slaveDelay: 0, votes: 1 }, { _id: 1, host: "192.168.1.3:27018", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 55, tags: { BigBoss: "NO" }, slaveDelay: 0, votes: 1 }, { _id: 2, host: "192.168.1.3:27019", arbiterOnly: false, buildIndexes: true, hidden: false, priority: 33, tags: { BigBoss: "NO" }, slaveDelay: 0, votes: 1 } ], settings: { chainingAllowed : true, } } ) #查看shard3副本集狀態 rs.status()
#route是無狀態的,在任何一臺主機啓動都行,只要可以鏈接至configsrv便可 cat << EOF > /etc/mongo/route.conf systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo net: bindIpAll: true maxIncomingConnections: 500 unixDomainSocket: enabled: true pathPrefix: /tmp filePermissions: 0700 security: keyFile: /etc/mongo/mongo.key # authorization: enabled #replication: sharding: configDB: BigBoss/192.168.1.4:27019,192.168.1.4:37019,192.168.1.4:47019 EOF
#啓動 mongos -f /etc/mongo/route.conf #鏈接 mongo #設置管理員帳號密碼 use admin db.createUser( { user: "root", pwd: "123456", roles: [ { role: "__system", db: "admin" } ] } ) exit
mongo -uroot -p123456 --authenticationDatabase admin #添加分片主機至集羣中 sh.addShard("shard1/192.168.1.1:27017,192.168.1.1:27018,192.168.1.1:27019") sh.addShard("shard2/192.168.1.2:27017,192.168.1.2:27018,192.168.1.2:27019") sh.addShard("shard3/192.168.1.3:27017,192.168.1.3:27018,192.168.1.3:27019") #查看狀態 sh.status() ####爲了展現出效果,修改一下默認的chunksize大小,這裏修改成1M #默認的chunksize大小爲64M,示例修改命令以下: #use config #db.settings.save( { _id:"chunksize", value: <sizeInMB> } ) use config db.settings.save( { _id:"chunksize", value: 1 } ) #爲test數據庫開啓分片 #選擇一個片鍵age並指定一個集合mycoll對其進行分片 sh.enableSharding("test") sh.shardCollection("test.mycoll", {"age": 1}) #測試分片,寫入數據到數據庫中 use test for (i = 1; i <= 10000; i++) db.mycoll.insert({age:(i%100), name:"bigboss_user"+i, address:i+", Some Road, Zhengzhou, Henan", country:"China", course:"cousre"+"(i%12)"}) #寫入完成以後就能夠查看分片信息了 sh.status()