mongodb 分片集群组件有3部分,
mongos 服务:是路由节点 应用程序跟分片数据节点连接的中间件,
config 服务(元数据):存储分片集的元数据 分片服务(数据节点,存放数据)元数据反映了分片群集内所有数据和组件的状态和组织。元数据包括每个分片上的块的列表以及定义块的范围。 实现方式副本集
shards 服务: 至少是2个复制集
- config 服务复制集配置(启用内部认证机制)
config file 如下
storage:
dbPath: /data/nosql/mongo/mongod/5030/data
journal:
enabled: true
directoryPerDB: true
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
systemLog:
destination: file
path: /data/nosql/mongo/mongod/5030/logs/mongod.log
logAppend: true
quiet: true
processManagement:
fork: true
pidFilePath: /data/nosql/mongo/mongod/5030/data/mongod.pid
operationProfiling:
slowOpThresholdMs: 1000
replication:
oplogSizeMB: 10240
replSetName: rsconf
security:
keyFile: /data/nosql/mongo/mongod/5030/keys/key
clusterAuthMode: keyFile
sharding:
clusterRole: configsvr
net:
port: 5030
其中下面是最主要的部分
replication:
oplogSizeMB: 10240
replSetName: rsconf
security:
keyFile: /data/nosql/mongo/mongod/5030/keys/key
clusterAuthMode: keyFile
sharding:
clusterRole: configsvr
在操作系统新建一个mognodb用户用于管理mongodb
groupadd mongodb
useradd -m -g mongodb mongodb
mkdir -p /data/nosql/mongo/mongod/5030/data
mkdir -p /data/nosql/mongo/mongod/5030/logs
mkdir -p /data/nosql/mongo/mongod/5030/data
mkdir -p /data/nosql/mongo/mongod/5030/keys
openssl rand -base64 756 > /data/nosql/mongo/mongod/5030/keys/key
chown -R mongodb:mongodb /data/nosql/mongo/mongod/5030/
chmod 400 /data/nosql/mongo/mongod/5030/keys/key
启动mongod (三台机器配置一样)
mongod -f configfile
重要的注意点 分片集群所有的内部验证文件 必须保持一样,即/data/nosql/mongo/mongod/5030/keys/key 内容保持一样
登录初始复制集
mongo --port 5030
rs.initiate(
{
_id: "rsconf",
configsvr: true,
members: [
{ _id : 0, host : "192.168.201.129:5030" },
{ _id : 1, host : "192.168.201.130:5030" },
{ _id : 2, host : "192.168.201.132:5030" }
]
}
)
在创建一个用户 并授予 userAdminAnyDatabase 权限
admin = db.getSiblingDB("admin")
admin.createUser(
{
user: "super",
pwd: "super123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
分片config 服务配置完毕
2、shards 服务配置
config file 如下
storage:
dbPath: /data/nosql/mongo/mongod/5000/data
journal:
enabled: true
directoryPerDB: true
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
systemLog:
destination: file
path: /data/nosql/mongo/mongod/5000/logs/mongod.log
logAppend: true
quiet: true
processManagement:
fork: true
pidFilePath: /data/nosql/mongo/mongod/5000/data/mongod.pid
operationProfiling:
slowOpThresholdMs: 1000
mode: slowOp
replication:
oplogSizeMB: 10240
replSetName: rs1s1
security:
keyFile: /data/nosql/mongo/mongod/5000/keys/key
clusterAuthMode: keyFile
sharding:
clusterRole: shardsvr
net:
port: 5000
其中下面部分是跟 config 服务是不一样的
sharding:
clusterRole: shardsvr
重点 /data/nosql/mongo/mongod/5000/keys/key 跟上面/data/nosql/mongo/mongod/5030/keys/key 的内容是一样的
添加系统用户mongodb 用于管理mognodb
groupadd mongodb
useradd -m -g mongodb mongodb
mkdir -p /data/nosql/mongo/mongod/5000/data
mkdir -p /data/nosql/mongo/mongod/5000/logs
mkdir -p /data/nosql/mongo/mongod/5000/data
mkdir -p /data/nosql/mongo/mongod/5000/keys
data/nosql/mongo/mongod/5000/keys/key
chown -R mongodb:mongodb /data/nosql/mongo/mongod/5000/
chmod 400 /data/nosql/mongo/mongod/5000/keys/key
启动mongod
mongod -f configfile (三台机器配置一样)
登录初始复制集
mongo --port 5000
rs.initiate(
{
_id: "rs1s1",
members: [
{ _id : 0, host : "192.168.201.145:5000" },
{ _id : 1, host : "192.168.201.146:5000" },
{ _id : 2, host : "192.168.201.147:5000" }
]
}
)
在创建一个用户 并授予 userAdminAnyDatabase 权限这个用户是单独给 分片数据复制集使用的
admin = db.getSiblingDB("admin")
admin.createUser(
{
user: "super",
pwd: "super123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
使用同样的方法 搭建起另一个数据复制集(我就不列出了)
连接mongos到集群
在mongos 服务器上 创建一个 配置文件 内容如下
systemLog:
destination: file
path: /data/nosql/mongo/mongos/logs/mongod.log
logAppend: true
quiet: true
processManagement:
fork: true
pidFilePath: /data/nosql/mongo/mongos/mongod.pid
security:
keyFile: /data/nosql/mongo/mongod/mongos/keys/key
sharding:
configDB: rsconf/192.168.201.129:5030,192.168.201.130:5030,192.168.201.132:5030
net:
port: 5080
重点注意:/data/nosql/mongo/mongod/mongos/keys/key 跟上面的内容是一样的
sharding:
configDB: rsconf/192.168.201.129:5030,192.168.201.130:5030,192.168.201.132:5030
中 rsconf 是 config 服务 复制集的名称 /后面 分别对应 复制集的ip 跟端口
启动 mongos 实例
mongos -f configfile
连接到mongos 实例
mongo --host localhost --port 5080
use admin
db.auth('super','super123') ### config 服务上的 用户
依次将单个分片副本集添加到集群
sh.addShard("rs1s2/192.168.201.161:5010,192.168.201.162:5010,192.168.201.163:5010")
sh.addShard("rs1s1/192.168.201.145:5000,192.168.201.146:5000,192.168.201.147:5000")
查看状态
sh.status()