Mongodb4.4.13集群安装实战
浏览量:171
1、环境规划


2、创建目录
mkdir -p /data/mongodb/{data,logs,apps,run}
mkdir -p /data/mongodb/data/shard{1,2,3}
mkdir -p /data/mongodb/data/config
mkdir -p /data/mongodb/conf
mkdir -p /tmp/mongodb/configsvr
mkdir -p /tmp/mongodb/shard1
mkdir -p /tmp/mongodb/shard2
mkdir -p /tmp/mongodb/shard3
mkdir -p /tmp/mongodb/mongos3、创建Keyfile Security
$ openssl rand -base64 756 > /data/mongodb/conf/mongodb.key $ chmod 400 /data/mongodb/conf/mongodb.key $ scp -r /data/mongodb/conf/mongodb.key nodeIP:/data/mongodb/conf/
4、创建配置文件
tee /data/mongodb/conf/configsvr.yml <<-'EOF' systemLog: destination: "file" logAppend: true path: "/data/mongodb/logs/configsvr.log" storage: dbPath: "/data/mongodb/data/config" journal: enabled: true engine: "wiredTiger" wiredTiger: engineConfig: directoryForIndexes: true cacheSizeGB: 2 processManagement: fork: true pidFilePath: "/data/mongodb/run/configsvr.pid" timeZoneInfo: "/usr/share/zoneinfo" net: port: 27019 bindIp: "::,0.0.0.0" maxIncomingConnections: 5000 unixDomainSocket: enabled: true pathPrefix: "/tmp/mongodb/configsvr" filePermissions: 0700 setParameter: enableLocalhostAuthBypass: true security: clusterAuthMode: "keyFile" keyFile: "/data/mongodb/conf/mongodb.key" authorization: "enabled" replication: replSetName: "replCluster" sharding: clusterRole: "configsvr" EOF
创建shard配置文件
tee /data/mongodb/conf/shard1.yml <<-'EOF' systemLog: destination: "file" logAppend: true path: "/data/mongodb/logs/shard1.log" storage: dbPath: "/data/mongodb/data/shard1" journal: enabled: true engine: "wiredTiger" wiredTiger: engineConfig: directoryForIndexes: true cacheSizeGB: 2 processManagement: fork: true pidFilePath: "/data/mongodb/run/shard1.pid" timeZoneInfo: "/usr/share/zoneinfo" net: port: 29017 bindIp: "::,0.0.0.0" maxIncomingConnections: 5000 unixDomainSocket: enabled: true pathPrefix: "/tmp/mongodb/shard1" filePermissions: 0700 setParameter: enableLocalhostAuthBypass: true security: clusterAuthMode: "keyFile" keyFile: "/data/mongodb/conf/mongodb.key" authorization: "enabled" replication: replSetName: "shard1" sharding: clusterRole: "shardsvr" EOF
tee /data/mongodb/conf/shard2.yml <<-'EOF' systemLog: destination: "file" logAppend: true path: "/data/mongodb/logs/shard2.log" storage: dbPath: "/data/mongodb/data/shard2" journal: enabled: true engine: "wiredTiger" wiredTiger: engineConfig: directoryForIndexes: true cacheSizeGB: 2 processManagement: fork: true pidFilePath: "/data/mongodb/run/shard2.pid" timeZoneInfo: "/usr/share/zoneinfo" net: port: 29018 bindIp: "::,0.0.0.0" maxIncomingConnections: 5000 unixDomainSocket: enabled: true pathPrefix: "/tmp/mongodb/shard2" filePermissions: 0700 setParameter: enableLocalhostAuthBypass: true security: clusterAuthMode: "keyFile" keyFile: "/data/mongodb/conf/mongodb.key" authorization: "enabled" replication: replSetName: "shard2" sharding: clusterRole: "shardsvr" EOF
tee /data/mongodb/conf/shard3.yml <<-'EOF' systemLog: destination: "file" logAppend: true path: "/data/mongodb/logs/shard3.log" storage: dbPath: "/data/mongodb/data/shard3" journal: enabled: true engine: "wiredTiger" wiredTiger: engineConfig: directoryForIndexes: true cacheSizeGB: 2 processManagement: fork: true pidFilePath: "/data/mongodb/run/shard3.pid" timeZoneInfo: "/usr/share/zoneinfo" net: port: 29019 bindIp: "::,0.0.0.0" maxIncomingConnections: 5000 unixDomainSocket: enabled: true pathPrefix: "/tmp/mongodb/shard3" filePermissions: 0700 setParameter: enableLocalhostAuthBypass: true security: clusterAuthMode: "keyFile" keyFile: "/data/mongodb/conf/mongodb.key" authorization: "enabled" replication: replSetName: "shard3" sharding: clusterRole: "shardsvr" EOF
创建mongos.yml
tee /data/mongodb/conf/mongos.yml <<-'EOF' systemLog: destination: "file" logAppend: true path: "/data/mongodb/logs/mongos.log" processManagement: fork: true pidFilePath: "/data/mongodb/run/mongos.pid" timeZoneInfo: "/usr/share/zoneinfo" net: port: 27017 bindIp: "::,0.0.0.0" maxIncomingConnections: 5000 unixDomainSocket: enabled: true pathPrefix: "/tmp/mongodb/mongos" filePermissions: 0700 setParameter: enableLocalhostAuthBypass: true security: clusterAuthMode: "keyFile" keyFile: "/data/mongodb/conf/mongodb.key" replication: localPingThresholdMs: 15 sharding: # 出处的replCluster与configsvr.yml中replication.replSetName配置的名称保持一致 configDB: "replCluster/192.168.137.5:27019,192.168.137.6:27019,192.168.137.7:27019" EOF
5、启动和初始化相关服务
$ cd /data/mongodb/
$ mongod --config ./conf/configsvr.yml
$ mongo localhost:27019
rs.initiate({_id: "replCluster", configsvr: true, members: [{_id: 0, host: "192.168.137.5:27019"},{_id: 1,host: "192.168.137.6:27019"},{_id: 2,host: "192.168.137.7:27019"}]})
rs.status()
$ mongod --config ./conf/shard1.yml
$ mongo localhost:29017
rs.initiate({_id:"shard1",members:[{_id: 0, host: "192.168.137.5:29017"},{_id: 1,host: "192.168.137.6:29017"},{_id: 2,host: "192.168.137.7:29017"}]})
rs.status()
$ mongod --config ./conf/shard2.yml
$ mongo localhost:29018
rs.initiate({_id:"shard2",members:[{_id: 0, host: "192.168.137.5:29018"},{_id: 1,host: "192.168.137.6:29018"},{_id: 2,host: "192.168.137.7:29018"}]})
rs.status()
$ mongod --config ./conf/shard3.yml
$ mongo localhost:29019
rs.initiate({_id:"shard3",members:[{_id: 0, host: "192.168.137.5:29019"},{_id: 1,host: "192.168.137.6:29019"},{_id: 2,host: "192.168.137.7:29019"}]})
rs.status()6、启动和初始化mongos
$ mongos --config ./conf/mongos.yml
$ mongo localhost:27017
MongoDB shell version v4.4.13
connecting to: mongodb://localhost:27017/test?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("2a4f50a7-29bf-40c0-8ffc-8c81074f31be") }
MongoDB server version: 4.4.13
mongos> admin = db.getSiblingDB("admin");
admin
#Create the user administrator.
mongos> admin.createUser({user:"admin",pwd:passwordPrompt(),roles:[{role:"userAdminAnyDatabase",db:"admin"}]});
Enter password:
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
#Authenticate as the user administrator.
mongos> db.getSiblingDB("admin").auth("admin", passwordPrompt());
Enter password:
1
#Create Administrative User for Cluster Management
mongos> db.getSiblingDB("admin").createUser({"user":"root","pwd":passwordPrompt(),roles:[{"role":"clusterAdmin","db":"admin"}]});
Enter password:
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "clusterAdmin",
"db" : "admin"
}
]
}7、添加分片到集群
注意:以下都必须以集群管理员登录进行操作
$ mongo --host 192.168.137.5 --port 27017 -u "root" -p --authenticationDatabase "admin"
MongoDB shell version v4.4.13
Enter password:
connecting to: mongodb://192.168.137.5:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("7fa077ee-5ba8-4256-8e78-dc6a4fb9fc01") }
MongoDB server version: 4.4.13
---
The server generated these startup warnings when booting:
2022-04-19T14:54:46.540+08:00: You are running this process as the root user, which is not recommended
---
mongos> sh.addShard("shard1/192.168.137.5:29017,192.168.137.6:29017,192.168.137.7:29017");
{
"shardAdded" : "shard1",
"ok" : 1,
"operationTime" : Timestamp(1650351575, 3),
"$clusterTime" : {
"clusterTime" : Timestamp(1650351576, 1),
"signature" : {
"hash" : BinData(0,"0Isi8A729Q65bpG72CaNNcwC8jE="),
"keyId" : NumberLong("7088204486748930069")
}
}
}
mongos> sh.addShard("shard2/192.168.137.5:29018,192.168.137.6:29018,192.168.137.7:29018");
{
"shardAdded" : "shard2",
"ok" : 1,
"operationTime" : Timestamp(1650351587, 3),
"$clusterTime" : {
"clusterTime" : Timestamp(1650351587, 3),
"signature" : {
"hash" : BinData(0,"LIfpd7Oic2+9l7Dfw/14HEV41i0="),
"keyId" : NumberLong("7088204486748930069")
}
}
}
mongos> sh.addShard("shard3/192.168.137.5:29019,192.168.137.6:29019,192.168.137.7:29019");
{
"shardAdded" : "shard3",
"ok" : 1,
"operationTime" : Timestamp(1650351593, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1650351593, 2),
"signature" : {
"hash" : BinData(0,"t2mrOOeL3gvshZRb6kMmdSOagTA="),
"keyId" : NumberLong("7088204486748930069")
}
}
}
mongos> sh.status();
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("625e5c6dde34df14051f52b9")
}
shards:
{ "_id" : "shard1", "host" : "shard1/192.168.137.5:29017,192.168.137.6:29017,192.168.137.7:29017", "state" : 1 }
{ "_id" : "shard2", "host" : "shard2/192.168.137.5:29018,192.168.137.6:29018,192.168.137.7:29018", "state" : 1 }
{ "_id" : "shard3", "host" : "shard3/192.168.137.5:29019,192.168.137.6:29019,192.168.137.7:29019", "state" : 1 }
active mongoses:
"4.4.13" : 1
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" : "config", "primary" : "config", "partitioned" : true }8、创建test库并授权和enableShard
mongos> use test
switched to db test
#Enable Sharding for a Database
mongos> sh.enableSharding("test");
{
"ok" : 1,
"operationTime" : Timestamp(1650351729, 4),
"$clusterTime" : {
"clusterTime" : Timestamp(1650351729, 4),
"signature" : {
"hash" : BinData(0,"dxCD31CPgO4e22gX3rrHg5LV2/c="),
"keyId" : NumberLong("7088204486748930069")
}
}
}
#Shard a Collection
mongos> sh.shardCollection("test.user",{"id":1});
{
"collectionsharded" : "test.user",
"collectionUUID" : UUID("d283f69d-1ba0-491a-a4f9-8d9088016830"),
"ok" : 1,
"operationTime" : Timestamp(1650351740, 5),
"$clusterTime" : {
"clusterTime" : Timestamp(1650351740, 5),
"signature" : {
"hash" : BinData(0,"e+etCFvF35U8eINVOD7RXAjnX8M="),
"keyId" : NumberLong("7088204486748930069")
}
}
}
mongo --host 192.168.137.5 --port 27017 -u "admin" -p --authenticationDatabase "admin"
MongoDB shell version v4.4.13
Enter password:
connecting to: mongodb://192.168.137.5:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("87083031-dc97-4420-95d4-03469bf86411") }
MongoDB server version: 4.4.13
mongos> use admin
switched to db admin
mongos>
mongos>
mongos>
#根据自己的需求在创建普通用户(不建议创建root权限的用户操作数据库,此处为了操作方便),例如,read或者readWrite权限的用户
mongos> db.getSiblingDB("admin").createUser({"user":"metameeting","pwd":password,roles:[{"role":"readWrite","db":"test"}]});
Enter password:
Successfully added user: {
"user" : "metameeting",
"roles" : [
{
"role" : "readWrite",
"db" : "test"
}
]
}9、测试用户写入和查询数据
mongo --host 192.168.137.5 --port 27017 -u "metameeting" -p --authenticationDatabase "admin"
MongoDB shell version v4.4.13
Enter password:
connecting to: mongodb://192.168.137.5:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("551e3b7a-4678-40ed-9cc4-c18a521b6f26") }
MongoDB server version: 4.4.13
mongos> use test
switched to db test
mongos> db.test.insert({"test1":"meta1"})
WriteResult({ "nInserted" : 1 })
mongos> db.test.find()
{ "_id" : ObjectId("625e5f7aadd84bbc8eb36730"), "test1" : "meta1" }10、启动脚本
tee /data/mongodb/cluster.sh <<-'EOF'
#!/bin/bash
hosts=( 192.168.137.5 192.168.137.6 192.168.137.7 )
mongo_start(){
source ~/.bashrc
pre_mongod=`ps -ef | grep mongod | grep -v grep`
pre_mongos=`ps -ef | grep mongos | grep -v grep`
if [[ !$pre_mongod ]] && [[ !$pre_mongos ]]; then
for host in ${hosts[@]}
do
echo "******** $host configsvr start... ********"
ssh $host mongod --config /data/mongodb/conf/configsvr.yml
done
sleep 2
for host in ${hosts[@]}
do
echo "********** $host shard start... **********"
ssh $host mongod --config /data/mongodb/conf/shard1.yml
ssh $host mongod --config /data/mongodb/conf/shard2.yml
ssh $host mongod --config /data/mongodb/conf/shard3.yml
done
sleep 2
for host in ${hosts[@]}
do
echo "********** $host mongos start... **********"
ssh $host mongos --config /data/mongodb/conf/mongos.yml
done
else
echo "check whether the process has stopped!"
fi
}
mongo_stop(){
source ~/.bashrc
for host in ${hosts[@]}
do
echo "************ $host mongos stop... ***********"
ssh $host "cat /data/mongodb/run/mongos.pid | xargs kill -15"
done
sleep 3
for host in ${hosts[@]}
do
echo "************ $host shard stop... ************"
ssh $host "cat /data/mongodb/run/shard1.pid | xargs kill -15"
ssh $host "cat /data/mongodb/run/shard2.pid | xargs kill -15"
ssh $host "cat /data/mongodb/run/shard3.pid | xargs kill -15"
done
sleep 3
for host in ${hosts[@]}
do
echo "********** $host configsvr stop... **********"
ssh $host "cat /data/mongodb/run/configsvr.pid | xargs kill -15"
done
}
mongo_status(){
source ~/.bashrc
for host in ${hosts[@]}
do
echo "*************** $host status ***************"
ssh $host ps -ef | grep mongo* | grep -v grep
done
}
case $1 in
start)
echo "************** start mongodb ***************"
mongo_start
echo "************** start finish ****************"
;;
stop)
echo "************** stop mongodb ****************"
mongo_stop
echo "*************** stop finish ****************"
;;
status)
echo "*********** mongodb-4.4.13 status **********"
mongo_status
;;
*)
echo "************* illegal argument *************"
esac
EOF11、修改密码
./mongo --host xxx --port 27107 -u "admin" -p --authenticationDatabase "admin"
> use admin
> db.changeUserPassword('user','newpassword');
> db.auth('user','newpassword');
神回复
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。