博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB分片集群搭建
阅读量:6224 次
发布时间:2019-06-21

本文共 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

一、准备工作

  • 在所有节点安装mongodb-4 并创建相关文件夹
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}
  • 生成key并复制至所有主机
#在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/

MongoDB分片集群搭建

二、配置configsvr

  • 在configsvr主机(IP:192.168.1.4)操作
  • 生成三个configsvr的配置文件:
#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:
mongod -f /etc/mongo/configsvc1.confmongod -f /etc/mongo/configsvc2.confmongod -f /etc/mongo/configsvc3.conf

MongoDB分片集群搭建

  • 初始化configsrv副本集群:
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()

MongoDB分片集群搭建


三、配置shard1副本集:

  • 在shard1主机(IP:192.168.1.1)操作
  • 生成三个mongod的配置文件:
#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:
mongod -f /etc/mongo/mongod1.confmongod -f /etc/mongo/mongod2.confmongod -f /etc/mongo/mongod3.conf
  • 初始化shard1副本集
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()

MongoDB分片集群搭建


四、配置shard2副本集:

  • 在shard2主机(IP:192.168.1.2)操作
  • 生成三个mongod的配置文件:
#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:
mongod -f /etc/mongo/mongod1.confmongod -f /etc/mongo/mongod2.confmongod -f /etc/mongo/mongod3.conf
  • 初始化shard2副本集
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()

MongoDB分片集群搭建


五、配置shard1副本集

  • 在shard1主机(IP:192.168.1.1)操作
  • 生成三个mongod的配置文件:
#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:
mongod -f /etc/mongo/mongod1.confmongod -f /etc/mongo/mongod2.confmongod -f /etc/mongo/mongod3.conf
  • 初始化shard3副本集
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()

MongoDB分片集群搭建

六、配置Route

  • 创建mongos配置文件:
#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并设置一个连接的账号密码
#启动mongos -f /etc/mongo/route.conf#连接mongo#设置管理员账号密码use admindb.createUser({    user: "root",    pwd: "123456",    roles: [ { role: "__system", db: "admin" } ]  })exit

MongoDB分片集群搭建

  • 重连至mongodb
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()

MongoDB分片集群搭建

MongoDB分片集群搭建
MongoDB分片集群搭建
MongoDB分片集群搭建
MongoDB分片集群搭建

MongoDB分片集群搭建

转载于:https://blog.51cto.com/bigboss/2160311

你可能感兴趣的文章
Kali-linux Arpspoof工具
查看>>
PDF文档页面如何重新排版?
查看>>
基于http协议使用protobuf进行前后端交互
查看>>
bash腳本編程之三 条件判断及算数运算
查看>>
php cookie
查看>>
linux下redis安装
查看>>
弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言
查看>>
JavaScript 数据类型
查看>>
量子通信和大数据最有市场突破前景
查看>>
StringBuilder用法小结
查看>>
对‘初学者应该选择哪种编程语言’的回答——计算机达人成长之路(38)
查看>>
如何申请开通微信多客服功能
查看>>
Sr_C++_Engineer_(LBS_Engine@Global Map Dept.)
查看>>
非监督学习算法:异常检测
查看>>
jquery的checkbox,radio,select等方法总结
查看>>
Linux coredump
查看>>
Ubuntu 10.04安装水晶(Mercury)无线网卡驱动
查看>>
Myeclipes快捷键
查看>>
我的友情链接
查看>>
ToRPC:一个双向RPC的Python实现
查看>>