本文共 17032 字,大约阅读时间需要 56 分钟。
Centos 7.5 1804MongoDB 4.0.1shard分片主机: shard1: IP:192.168.1.1 shard2: IP:192.168.1.2 shard2: IP:192.168.1.3 #三台主机分别启动三个mongod实例: mongod1: 端口: 27017 mongod2: 端口: 27018 mongod2: 端口: 27019configsrv主机: IP:192.168.1.4 mongod1: 端口: 27019 mongod2: 端口: 37018 mongod2: 端口: 47019Route主机: 192.168.1.5 mongods: 端口: 27017
cat << EOF > /etc/yum.repos.d/mongodb.repo[mongodb-org-4.0]name=MongoDB 4.0 Repositorybaseurl=https://mirrors.aliyun.com/mongodb/yum/redhat/\$releasever/mongodb-org/4.0/\$basearch/gpgcheck=0enabled=1EOFyum install -y mongodb-orgmkdir -p /var/run/mongodbmkdir -p /data/mongod{1..3}mkdir -p /etc/mongomkdir -p /tmp/mongod{1..3}chown -R mongod.mongod /datachown -R mongod.mongod /var/run/mongodbchown -R mongod.mongod /tmp/mongod{1..3}
#在192.168.1.1主机执行openssl rand -base64 756 > /etc/mongo/mongo.keychown -R mongod.mongod /etc/mongochmod -R 600 /etc/mongoscp -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.confsystemLog: destination: file logAppend: true path: /var/log/mongodb/mongod1.logstorage: dbPath: /data/mongod1 journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: trueprocessManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod1.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfonet: 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: 0700security: keyFile: /etc/mongo/mongo.key authorization: enabledreplication: replSetName: BigBosssharding: clusterRole: configsvrEOF#configsvr2的配置文件cat << EOF > /etc/mongo/configsvc2.confsystemLog: destination: file logAppend: true path: /var/log/mongodb/mongod2.logstorage: dbPath: /data/mongod2 journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: trueprocessManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod2.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfonet: 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: 0700security: keyFile: /etc/mongo/mongo.key authorization: enabledreplication: replSetName: BigBosssharding: clusterRole: configsvrEOF#configsvr3的配置文件cat << EOF > /etc/mongo/configsvc3.confsystemLog: destination: file logAppend: true path: /var/log/mongodb/mongod3.logstorage: dbPath: /data/mongod3 journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: trueprocessManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod3.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfonet: 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: 0700security: keyFile: /etc/mongo/mongo.key authorization: enabledreplication: replSetName: BigBosssharding: clusterRole: configsvrEOF
mongod -f /etc/mongo/configsvc1.confmongod -f /etc/mongo/configsvc2.confmongod -f /etc/mongo/configsvc3.conf
mongo --port 27019rs.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.confsystemLog: destination: file logAppend: true path: /var/log/mongodb/mongod1.logstorage: 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/zoneinfonet: 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: 0700security: keyFile: /etc/mongo/mongo.key authorization: enabledreplication: replSetName: shard1sharding: clusterRole: shardsvrEOF#mongod2.conf配置文件:cat << EOF > /etc/mongo/mongod2.confsystemLog: destination: file logAppend: true path: /var/log/mongodb/mongod2.logstorage: 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/zoneinfonet: 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: 0700security: keyFile: /etc/mongo/mongo.key authorization: enabledreplication: replSetName: shard1sharding: clusterRole: shardsvrEOF#mongod3.conf配置文件:cat << EOF > /etc/mongo/mongod3.confsystemLog: destination: file logAppend: true path: /var/log/mongodb/mongod3.logstorage: 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/zoneinfonet: 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: 0700security: keyFile: /etc/mongo/mongo.key authorization: enabledreplication: replSetName: shard1sharding: clusterRole: shardsvrEOF
mongod -f /etc/mongo/mongod1.confmongod -f /etc/mongo/mongod2.confmongod -f /etc/mongo/mongod3.conf
mongors.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.confsystemLog: destination: file logAppend: true path: /var/log/mongodb/mongod1.logstorage: 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/zoneinfonet: 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: 0700security: keyFile: /etc/mongo/mongo.key authorization: enabledreplication: replSetName: shard2sharding: clusterRole: shardsvrEOF#mongod2.conf配置文件:cat << EOF > /etc/mongo/mongod2.confsystemLog: destination: file logAppend: true path: /var/log/mongodb/mongod2.logstorage: 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/zoneinfonet: 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: 0700security: keyFile: /etc/mongo/mongo.key authorization: enabledreplication: replSetName: shard2sharding: clusterRole: shardsvrEOF#mongod3.conf配置文件:cat << EOF > /etc/mongo/mongod3.confsystemLog: destination: file logAppend: true path: /var/log/mongodb/mongod3.logstorage: 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/zoneinfonet: 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: 0700security: keyFile: /etc/mongo/mongo.key authorization: enabledreplication: replSetName: shard2sharding: clusterRole: shardsvrEOF
mongod -f /etc/mongo/mongod1.confmongod -f /etc/mongo/mongod2.confmongod -f /etc/mongo/mongod3.conf
mongors.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.confsystemLog: destination: file logAppend: true path: /var/log/mongodb/mongod1.logstorage: 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/zoneinfonet: 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: 0700security: keyFile: /etc/mongo/mongo.key authorization: enabledreplication: replSetName: shard3sharding: clusterRole: shardsvrEOF#mongod2.conf配置文件:cat << EOF > /etc/mongo/mongod2.confsystemLog: destination: file logAppend: true path: /var/log/mongodb/mongod2.logstorage: 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/zoneinfonet: 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: 0700security: keyFile: /etc/mongo/mongo.key authorization: enabledreplication: replSetName: shard3sharding: clusterRole: shardsvrEOF#mongod3.conf配置文件:cat << EOF > /etc/mongo/mongod3.confsystemLog: destination: file logAppend: true path: /var/log/mongodb/mongod3.logstorage: 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/zoneinfonet: 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: 0700security: keyFile: /etc/mongo/mongo.key authorization: enabledreplication: replSetName: shard3sharding: clusterRole: shardsvrEOF
mongod -f /etc/mongo/mongod1.confmongod -f /etc/mongo/mongod2.confmongod -f /etc/mongo/mongod3.conf
mongors.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.confsystemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.logprocessManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfonet: bindIpAll: true maxIncomingConnections: 500 unixDomainSocket: enabled: true pathPrefix: /tmp filePermissions: 0700security: 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:47019EOF
#启动mongos -f /etc/mongo/route.conf#连接mongo#设置管理员账号密码use admindb.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:} )use configdb.settings.save( { _id:"chunksize", value: 1 } )#为test数据库开启分片#选择一个片键age并指定一个集合mycoll对其进行分片sh.enableSharding("test")sh.shardCollection("test.mycoll", {"age": 1})#测试分片,写入数据到数据库中use testfor (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()
转载于:https://blog.51cto.com/bigboss/2160311