mongo分片集群部署

时间:2021-05-10 08:42:50

测试环境192.168.56.101-213

前期准备:

openssl rand -base64 756 > /home/software/mongodb/mongodbkey

chmod  600 /home/software/mongodb/mongodbkey

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinx/config

setenforce 0

systemctl stop firewalld

systemctl disable firewalld

 

tar  -zxvf mongodb-linux-x86_64-rhel70-4.0.7.tgz

mv mongodb-linux-x86_64-rhel70-4.0.7  mongodb

cd /home/software/mongodb

mkdir conf mongos config-server shard1 shard2 shard3

mkdir mongos/{log,data}

mkdir shard1/{log,data}

mkdir shard2/{log,data}

mkdir shard3/{log,data}

mkdir config-server/{log,data}

 

 

环境变量设置,如下

cat /etc/profile.d/mongodb.sh

# 内容

export MONGODB_HOME=/home/software/mongodb4

export PATH=$MONGODB_HOME/bin:$PATH

# 使立即生效

source /etc/profile.d/mongodb.sh

 

mongodb的启动顺序是,先启动配置服务器,在启动分片,最后启动mongos

 

 

安全关闭mongodb方法一

kill -2 `ps -ef | grep mongod| awk 'NR==1 {print $2}'`

安全关闭mongodb方法二

/home/software/mongodb4/bin/mongo -host 127.0.0.1 -port 30000

> use admin;                     --使用管理员数据库

> db.shutdownServer();           --安全关闭MongoDB

 

配置服务器是一个普通的mongod进程,所以只需要新开一个实例即可。配置服务器必须开启1个或则3个,开启2个则会报错:

 

 

 主机ip及服务

192.168.56.101:configsvr服务,shard1服务,shard2服务,shard3服务,mongos服务

192.168.56.102:configsvr服务,shard1服务,shard2服务,shard3服务,mongos服务

192.168.56.102:configsvr服务,shard1服务,shard2服务,shard3服务,mongos服务

分布:每个机子起3个shard实例,从shard1到shard3的端口号为27001 , 27002 , 27003

           每个机子都有config实例,端口号21000

           每个机子都有mongs实例,端口号27017 

三台服务器目录机构一样,mongo的配置文件在/home/software/mongodb/conf目录下

配置文件基本三台机子通用,但是初始化的时候要注意ip及端口是否正确

 

-------------config-server.conf的配置文件-----------

systemLog:

  destination: file

  logAppend: true

  path: /home/software/mongodb/config-server/log/congigsrv.log

 

storage:

  dbPath: /home/software/mongodb/config-server/data

  journal:

    enabled: true

  wiredTiger:

    engineConfig:

      directoryForIndexes: true

 

processManagement:

  fork: true  # fork and run in background

  pidFilePath: /home/software/mongodb/config-server/log/configsrv.pid  # location of pidfile

  

 

net:

  port: 21000

  #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: 65535

  unixDomainSocket:

    enabled: true

    ##pathPrefix: /tmp/mongod1

    filePermissions: 0700

 

security:

  keyFile: /home/software/mongodb/mongodbkey

  authorization: enabled

 

replication:

  replSetName: configs

sharding:

  clusterRole: configsvr

  

3台都启动:mongod -f /home/software/mongodb/conf/config-server.conf

--------------初始化configsrv副本集群 -------------

mongo --port 21000

 

rs.initiate(

... {

...     _id: "configs",

...     version: 1,

...   protocolVersion: 1,

...   writeConcernMajorityJournalDefault: true,

...   configsvr: true,

...   members: [

...     {

...       _id: 0,

...       host: "192.168.56.101:21000",

...       arbiterOnly: false,

...       buildIndexes: true,

...       hidden: false,

...       priority: 66,

...       tags: {

...         BigBoss: "YES"

...       },

...       slaveDelay: 0,

...       votes: 1

...     },

...     {

...       _id: 1,

...     host: "192.168.56.102:21000",

...     arbiterOnly: false,

...       buildIndexes: true,

...       hidden: false,

...       priority: 55,

...       tags: {

...         BigBoss: "NO"

...      },

...       slaveDelay: 0,

...       votes: 1

...     },

...     {

...       _id: 2,

...       host: "192.168.56.103:21000",

...       arbiterOnly: false,

...       buildIndexes: true,

...       hidden: false,

...       priority: 33,

...       tags: {

...         BigBoss: "YES"

...       },

...       slaveDelay: 0,

...       votes: 1

...     }

...   ],

...   settings: {

...     chainingAllowed : true,

...   }

... }

... )

 

 

----------shard1的配置文件------

systemLog:

  destination: file

  logAppend: true

  path: /home/software/mongodb/shard1/log/shard1.log

 

storage:

  dbPath: /home/software/mongodb/shard1/data

  journal:

    enabled: true

  wiredTiger:

    engineConfig:

      directoryForIndexes: true     

 

processManagement:

  fork: true  # fork and run in background

  pidFilePath:  /home/software/mongodb/config-server/log/configsrv.pid  # location of pidfile

  ##timeZoneInfo: /usr/share/zoneinfo

 

net:

  port: 27001

  #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: 65535

  unixDomainSocket:

    enabled: true

    ##pathPrefix: /tmp/mongod1

    filePermissions: 0700

 

security:

  keyFile: /home/software/mongodb/mongodbkey

  authorization: enabled

 

replication:

  replSetName: shard1

sharding:

  clusterRole: shardsvr

 

 

3台启动:mongod -f /home/software/mongodb/conf/shard1.conf

mongo --port 27001

初始化shard1副本集

rs.initiate(

... {

...   _id: "shard1",

...   version: 1,

...   protocolVersion: 1,

...   writeConcernMajorityJournalDefault: true,

...   members: [

...     {

...       _id: 0,

...       host: "192.168.56.101:27001",

...       arbiterOnly: false,

...       buildIndexes: true,

...       hidden: false,

...       priority: 66,

...       tags: {

...         BigBoss: "YES"

...       },

...       slaveDelay: 0,

...       votes: 1

...     },

...     {

...       _id: 1,

...       host: "192.168.56.102:27001",

...       arbiterOnly: false,

...       buildIndexes: true,

...       hidden: false,

...       priority: 55,

...       tags: {

...         BigBoss: "NO"

...       },

...       slaveDelay: 0,

...       votes: 1

...     },

...     {

...       _id: 2,

...       host: "192.168.56.103:27001",

...       arbiterOnly: false,

...       buildIndexes: true,

...       hidden: false,

...       priority: 33,

...       tags: {

...         BigBoss: "NO"

...       },

...       slaveDelay: 0,

...       votes: 1

...     }

...   ],

...   settings: {

...     chainingAllowed : true,

...   }

... }

... )

 

 

------------------------shard2的配置文件---------------

systemLog:

  destination: file

  logAppend: true

  path: /home/software/mongodb/shard2/log/shard2.log

 

storage:

  dbPath: /home/software/mongodb/shard2/data

  journal:

    enabled: true

  wiredTiger:

    engineConfig:

      directoryForIndexes: true     

 

processManagement:

  fork: true  # fork and run in background

  pidFilePath:  /home/software/mongodb/config-server/log/configsrv.pid  # location of pidfile

  ##timeZoneInfo: /usr/share/zoneinfo

 

net:

  port: 27002

  #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: 65535

  unixDomainSocket:

    enabled: true

    ##pathPrefix: /tmp/mongod1

    filePermissions: 0700

 

security:

  keyFile: /home/software/mongodb/mongodbkey

  authorization: enabled

 

replication:

  replSetName: shard2

sharding:

  clusterRole: shardsvr

 

 

3台启动:mongod -f /home/software/mongodb/conf/shard2.conf

mongo --port 27002

初始化shard2副本集

 rs.initiate(

{

  _id: "shard2",

  version: 1,

  protocolVersion: 1,

  writeConcernMajorityJournalDefault: true,

  members: [

    {

      _id: 0,

      host: "192.168.56.101:27002",

      arbiterOnly: false,

      buildIndexes: true,

      hidden: false,

      priority: 66,

      tags: {

        BigBoss: "YES"

      },

      slaveDelay: 0,

      votes: 1

    },

    {

      _id: 1,

      host: "192.168.56.102:27002",

      arbiterOnly: false,

      buildIndexes: true,

      hidden: false,

      priority: 55,

      tags: {

        BigBoss: "NO"

      },

      slaveDelay: 0,

      votes: 1

    },

    {

      _id: 2,

      host: "192.168.56.103:27002",

      arbiterOnly: false,

      buildIndexes: true,

      hidden: false,

      priority: 33,

      tags: {

        BigBoss: "NO"

      },

      slaveDelay: 0,

      votes: 1

    }

  ],

  settings: {

    chainingAllowed : true,

  }

}

)

 

-------------------shard3的配置文件----------

systemLog:

  destination: file

  logAppend: true

  path: /home/software/mongodb/shard3/log/shard3.log

 

storage:

  dbPath: /home/software/mongodb/shard3/data

  journal:

    enabled: true

  wiredTiger:

    engineConfig:

      directoryForIndexes: true     

 

processManagement:

  fork: true  # fork and run in background

  pidFilePath:  /home/software/mongodb/config-server/log/configsrv.pid  # location of pidfile

  ##timeZoneInfo: /usr/share/zoneinfo

 

net:

  port: 27003

  #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: 65535

  unixDomainSocket:

    enabled: true

    ##pathPrefix: /tmp/mongod1

    filePermissions: 0700

 

security:

  keyFile: /home/software/mongodb/mongodbkey

  authorization: enabled

 

replication:

  replSetName: shard3

sharding:

  clusterRole: shardsvr

  

3台启动:mongod -f /home/software/mongodb/conf/shard3.conf

mongo --port 27003

初始化shard3副本集

rs.initiate(

{

  _id: "shard3",

  version: 1,

  protocolVersion: 1,

  writeConcernMajorityJournalDefault: true,

  members: [

    {

      _id: 0,

      host: "192.168.56.101:27003",

      arbiterOnly: false,

      buildIndexes: true,

      hidden: false,

      priority: 66,

      tags: {

        BigBoss: "YES"

      },

      slaveDelay: 0,

      votes: 1

    },

    {

      _id: 1,

      host: "192.168.56.102:27003",

      arbiterOnly: false,

      buildIndexes: true,

      hidden: false,

      priority: 55,

      tags: {

        BigBoss: "NO"

      },

      slaveDelay: 0,

      votes: 1

    },

    {

      _id: 2,

      host: "192.168.56.103:27003",

      arbiterOnly: false,

      buildIndexes: true,

      hidden: false,

      priority: 33,

      tags: {

        BigBoss: "NO"

      },

      slaveDelay: 0,

      votes: 1

    }

  ],

  settings: {

    chainingAllowed : true,

  }

}

)

 

 

-----------配置Route------

创建mongos配置文件如下:

systemLog:

  destination: file

  logAppend: true

  path: /home/software/mongodb/mongos/log/mongos.log

 

processManagement:

  fork: true  # fork and run in background

  pidFilePath: /home/software/mongodb/mongos/log/mongos.pid # location of pidfile

  #timeZoneInfo: /usr/share/zoneinfo

 

net:

  bindIpAll: true

  maxIncomingConnections: 500

  unixDomainSocket:

    enabled: true

    #pathPrefix: /tmp

    filePermissions: 0700

 

security:

  keyFile: /home/software/mongodb/mongodbkey

#  authorization: enabled

 

#replication:

 

sharding:

  configDB: configs/192.168.56.101:21000,192.168.56.102:21000,192.168.56.103:21000

  

启动mongos并设置一个连接的账号密码

#启动

mongos -f /home/software/mongodb/conf/mongos.conf

#连接

mongo

 

#设置管理员账号密码

use admin

db.createUser(

{

    user: "root",

    pwd: "123456",

    roles: [ { role: "__system", db: "admin" } ]

  }

)

 

重连至mongodb

mongo -uroot -p123456  --authenticationDatabase admin

 

#添加分片主机至集群中

 

sh.addShard("shard1/192.168.56.101:27001,192.168.56.102:27001,192.168.56.103:27001");

sh.addShard("shard2/192.168.56.101:27002,192.168.56.102:27002,192.168.56.103:27002");

sh.addShard("shard3/192.168.56.101:27003,192.168.56.102:27003,192.168.56.103:27003");

 

 

 

#查看状态

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()