mongodb 集群shard_MongoDB分片集群部署详解

一、环境说明

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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的:(mongodb,集群shard)