MongoDB集群部署

安装部署

部署3分片的Mongo集群,下面是架构图,实际环境每个分片最好不要放在同一台机器,不同分片的主从也尽量分散,否则数据库压力大的时候磁盘会成为瓶颈,下面的安装示例仅为学习交流。

在这里插入图片描述

每个节点创建用户

groupadd mongo
useradd -g mongo mongo
echo "mongo"|passwd --stdin mongo

每个节点解压安装并配置环境变量

# tar -zxvf mongodb-linux-x86_64-rhel62-4.2.1.tgz 
mongodb-linux-x86_64-rhel62-4.2.1/THIRD-PARTY-NOTICES.gotools
mongodb-linux-x86_64-rhel62-4.2.1/README
mongodb-linux-x86_64-rhel62-4.2.1/THIRD-PARTY-NOTICES
mongodb-linux-x86_64-rhel62-4.2.1/MPL-2
mongodb-linux-x86_64-rhel62-4.2.1/LICENSE-Community.txt
mongodb-linux-x86_64-rhel62-4.2.1/bin/mongodump
mongodb-linux-x86_64-rhel62-4.2.1/bin/mongorestore
mongodb-linux-x86_64-rhel62-4.2.1/bin/mongoexport
mongodb-linux-x86_64-rhel62-4.2.1/bin/mongoimport
mongodb-linux-x86_64-rhel62-4.2.1/bin/mongostat
mongodb-linux-x86_64-rhel62-4.2.1/bin/mongotop
mongodb-linux-x86_64-rhel62-4.2.1/bin/bsondump
mongodb-linux-x86_64-rhel62-4.2.1/bin/mongofiles
mongodb-linux-x86_64-rhel62-4.2.1/bin/mongoreplay
mongodb-linux-x86_64-rhel62-4.2.1/bin/mongod
mongodb-linux-x86_64-rhel62-4.2.1/bin/mongos
mongodb-linux-x86_64-rhel62-4.2.1/bin/mongo
mongodb-linux-x86_64-rhel62-4.2.1/bin/install_compass
# vi /etc/profile
PATH=/usr/local/mongodb/bin/
# mv mongodb-linux-x86_64-rhel62-4.2.1 /usr/local/mongodb
# source /etc/profile
# mongod -version
db version v4.2.1
git version: edf6d45851c0b9ee15548f0f847df141764a317e
OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
allocator: tcmalloc
modules: none
build environment:
    distmod: rhel62
    distarch: x86_64
    target_arch: x86_64

每个节点创建目录

mkdir -p /mongodb/conf
mkdir -p /mongodb/mongos/log
mkdir -p /mongodb/config/data
mkdir -p /mongodb/config/log
mkdir -p /mongodb/shard1/data
mkdir -p /mongodb/shard1/log
mkdir -p /mongodb/shard2/data
mkdir -p /mongodb/shard2/log
mkdir -p /mongodb/shard3/data
mkdir -p /mongodb/shard3/log
chown -R mongo:mongo /mongodb
chmod -R 755 /mongodb

编辑配置文件

config配置文件

cat config.conf 
systemLog:
  destination: file
  path: /mongodb/config/log/configsrv.log
  logAppend: true
processManagement:
  fork: true
  pidFilePath: /mongodb/config/log/configsrv.pid
storage:
  dbPath: /mongodb/config/data
  journal:
    enabled: true
net:
  bindIp: localhost, 192.168.62.41
  port: 20011
security:
  keyFile: /mongodb/secret
  authorization: enabled
sharding:
  clusterRole: configsvr
replication:
  replSetName: configs

mongos配置文件

cat mongos.conf 
port=20012
configdb=configs/192.168.62.41:20011,192.168.64.42:20011,192.168.64.43:20011  ###不能出现空格,
logpath=/mongodb/mongos/log/mongos.log
fork=true
logappend=true
keyFile=/mongodb/secret
clusterAuthMode=keyFile
#authorization=enabled

shard1配置文件

cat shard1.conf 
systemLog:
  destination: file
  path: /mongodb/shard1/log/shard1.log
  logAppend: true
processManagement:
  fork: true
  pidFilePath: /mongodb/shard1/log/shard1.pid
storage:
  dbPath: /mongodb/shard1/data
  journal:
    enabled: true
net:
  bindIp: localhost, 192.168.62.41
  port: 20013
security:
  keyFile: /mongodb/secret
  authorization: enabled
sharding:
  clusterRole: shardsvr
replication:
  replSetName: shard1

shard2配置文件

cat shard2.conf 
systemLog:
  destination: file
  path: /mongodb/shard2/log/shard2.log
  logAppend: true
processManagement:
  fork: true
  pidFilePath: /mongodb/shard2/log/shard2.pid
storage:
  dbPath: /mongodb/shard2/data
  journal:
    enabled: true
net:
  bindIp: localhost, 192.168.62.41
  port: 20014
security:
  keyFile: /mongodb/secret
  authorization: enabled
sharding:
  clusterRole: shardsvr
replication:
  replSetName: shard2

shard3配置文件

cat shard3.conf 
systemLog:
  destination: file
  path: /mongodb/shard3/log/shard3.log
  logAppend: true
processManagement:
  fork: true
  pidFilePath: /mongodb/shard3/log/shard3.pid
storage:
  dbPath: /mongodb/shard3/data
  journal:
    enabled: true
net:
  bindIp: localhost, 192.168.62.41
  port: 20015
security:
  keyFile: /mongodb/secret
  authorization: enabled
sharding:
  clusterRole: shardsvr
replication:
  replSetName: shard3

传输配置文件到其其他节点

节点2

scp *.conf 192.168.62.41:`pwd`

sed -i 's/192.168.62.41/192.168.62.42/g' config.conf
sed -i 's/192.168.62.41/192.168.62.42/g' shard1.conf 
sed -i 's/192.168.62.41/192.168.62.42/g' shard2.conf 
sed -i 's/192.168.62.41/192.168.62.42/g' shard3.conf 

节点3

scp *.conf 192.168.62.41:`pwd`

sed -i 's/192.168.62.41/192.168.62.43/g' config.conf
sed -i 's/192.168.62.41/192.168.62.43/g' shard1.conf 
sed -i 's/192.168.62.41/192.168.62.43/g' shard2.conf 
sed -i 's/192.168.62.41/192.168.62.43/g' shard3.conf 

创建密码文件

创建密码文件并传输到其他节点

openssl rand -base64 666 > /mongodb/secret
chmod 400 /mongodb/secret 
scp /mongodb/secret 192.168.62.42:`pwd` 
scp /mongodb/secret 192.168.62.43:`pwd`

启动服务

三个节点启动服务

mongod -f /mongodb/conf/shard1.conf
mongod -f /mongodb/conf/shard2.conf
mongod -f /mongodb/conf/shard3.conf
mongod -f /mongodb/conf/config.conf

初始化副本集

config

节点1操作,初始化config

mongo --port 20011 //config server
use admin
rs.initiate({_id:"configs",members:[{ _id:0, host:"192.168.62.41:20011",priority:3},{ _id:1, host:" 192.168.62.42:20011",priority:2},{ _id:2, host:" 192.168.62.43:20011",priority:1}]})
rs.status()
{
        "set" : "configs",
        "date" : ISODate("2020-09-20T12:26:13.392Z"),
        "myState" : 2,
        "term" : NumberLong(0),
        "syncingTo" : "",
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "configsvr" : true,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "majorityVoteCount" : 2,
        "writeMajorityCount" : 2,
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(0, 0),
                        "t" : NumberLong(-1)
                },
                "lastCommittedWallTime" : ISODate("1970-01-01T00:00:00Z"),
                "appliedOpTime" : {
                        "ts" : Timestamp(1600604767, 1),
                        "t" : NumberLong(-1)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1600604767, 1),
                        "t" : NumberLong(-1)
                },
                "lastAppliedWallTime" : ISODate("2020-09-20T12:26:07.395Z"),
                "lastDurableWallTime" : ISODate("2020-09-20T12:26:07.395Z")
        },
        "lastStableRecoveryTimestamp" : Timestamp(0, 0),
        "lastStableCheckpointTimestamp" : Timestamp(0, 0),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.62.41:20011",
                        "ip" : "192.168.62.41",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 182294,
                        "optime" : {
                                "ts" : Timestamp(1600604767, 1),
                                "t" : NumberLong(-1)
                        },
                        "optimeDate" : ISODate("2020-09-20T12:26:07Z"),
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "could not find member to sync from",
                        "configVersion" : 1,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                },
                {
                        "_id" : 1,
                        "name" : "192.168.62.42:20011",
                        "ip" : "192.168.62.42",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 5,
                        "optime" : {
                                "ts" : Timestamp(1600604767, 1),
                                "t" : NumberLong(-1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1600604767, 1),
                                "t" : NumberLong(-1)
                        },
                        "optimeDate" : ISODate("2020-09-20T12:26:07Z"),
                        "optimeDurableDate" : ISODate("2020-09-20T12:26:07Z"),
                        "lastHeartbeat" : ISODate("2020-09-20T12:26:13.044Z"),
                        "lastHeartbeatRecv" : ISODate("2020-09-20T12:26:13.108Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "configVersion" : 1
                },
                {
                        "_id" : 2,
                        "name" : "192.168.62.43:20011",
                        "ip" : "192.168.62.43",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 5,
                        "optime" : {
                                "ts" : Timestamp(1600604767, 1),
                                "t" : NumberLong(-1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1600604767, 1),
                                "t" : NumberLong(-1)
                        },
                        "optimeDate" : ISODate("2020-09-20T12:26:07Z"),
                        "optimeDurableDate" : ISODate("2020-09-20T12:26:07Z"),
                        "lastHeartbeat" : ISODate("2020-09-20T12:26:13.044Z"),
                        "lastHeartbeatRecv" : ISODate("2020-09-20T12:26:13.055Z"),
                        "pingMs" : NumberLong(2),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "configVersion" : 1
                }
        ],
        "ok" : 1,
        "$gleStats" : {
                "lastOpTime" : Timestamp(1600604767, 1),
                "electionId" : ObjectId("000000000000000000000000")
        },
        "lastCommittedOpTime" : Timestamp(0, 0)
}

shard1

节点1操作,初始化shard1

mongo --port 20013

use admin 
rs.initiate({_id:"shard1",members:[{ _id:0, host:"192.168.62.41:20013",priority:3},{ _id:1, host:" 192.168.62.42:20013",priority:2},{ _id:2, host:" 192.168.62.43:20013",priority:1}]})
rs.status()
{
        "set" : "shard1",
        "date" : ISODate("2020-09-20T13:20:55.829Z"),
        "myState" : 2,
        "term" : NumberLong(0),
        "syncingTo" : "",
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "majorityVoteCount" : 2,
        "writeMajorityCount" : 2,
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(0, 0),
                        "t" : NumberLong(-1)
                },
                "lastCommittedWallTime" : ISODate("1970-01-01T00:00:00Z"),
                "appliedOpTime" : {
                        "ts" : Timestamp(1600608048, 1),
                        "t" : NumberLong(-1)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1600608048, 1),
                        "t" : NumberLong(-1)
                },
                "lastAppliedWallTime" : ISODate("2020-09-20T13:20:48.757Z"),
                "lastDurableWallTime" : ISODate("2020-09-20T13:20:48.757Z")
        },
        "lastStableRecoveryTimestamp" : Timestamp(0, 0),
        "lastStableCheckpointTimestamp" : Timestamp(0, 0),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.62.41:20013",
                        "ip" : "192.168.62.41",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 185608,
                        "optime" : {
                                "ts" : Timestamp(1600608048, 1),
                                "t" : NumberLong(-1)
                        },
                        "optimeDate" : ISODate("2020-09-20T13:20:48Z"),
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "could not find member to sync from",
                        "configVersion" : 1,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                },
                {
                        "_id" : 1,
                        "name" : "192.168.62.42:20013",
                        "ip" : "192.168.62.42",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 7,
                        "optime" : {
                                "ts" : Timestamp(1600608048, 1),
                                "t" : NumberLong(-1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1600608048, 1),
                                "t" : NumberLong(-1)
                        },
                        "optimeDate" : ISODate("2020-09-20T13:20:48Z"),
                        "optimeDurableDate" : ISODate("2020-09-20T13:20:48Z"),
                        "lastHeartbeat" : ISODate("2020-09-20T13:20:55.808Z"),
                        "lastHeartbeatRecv" : ISODate("2020-09-20T13:20:55.442Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "configVersion" : 1
                },
                {
                        "_id" : 2,
                        "name" : "192.168.62.43:20013",
                        "ip" : "192.168.62.43",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 7,
                        "optime" : {
                                "ts" : Timestamp(1600608048, 1),
                                "t" : NumberLong(-1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1600608048, 1),
                                "t" : NumberLong(-1)
                        },
                        "optimeDate" : ISODate("2020-09-20T13:20:48Z"),
                        "optimeDurableDate" : ISODate("2020-09-20T13:20:48Z"),
                        "lastHeartbeat" : ISODate("2020-09-20T13:20:55.827Z"),
                        "lastHeartbeatRecv" : ISODate("2020-09-20T13:20:55.427Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "configVersion" : 1
                }
        ],
        "ok" : 1
}

shard2

节点1操作,初始化shard2

mongo --port 20014 
rs.initiate({_id:"shard2",members:[{ _id:0, host:"192.168.62.41:20014",priority:3},{ _id:1, host:" 192.168.62.42:20014",priority:2},{ _id:2, host:" 192.168.62.43:20014",priority:1}]})
rs.status()
{
        "set" : "shard2",
        "date" : ISODate("2020-09-20T13:27:27.597Z"),
        "myState" : 2,
        "term" : NumberLong(0),
        "syncingTo" : "",
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "majorityVoteCount" : 2,
        "writeMajorityCount" : 2,
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(0, 0),
                        "t" : NumberLong(-1)
                },
                "lastCommittedWallTime" : ISODate("1970-01-01T00:00:00Z"),
                "appliedOpTime" : {
                        "ts" : Timestamp(1600608443, 1),
                        "t" : NumberLong(-1)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1600608443, 1),
                        "t" : NumberLong(-1)
                },
                "lastAppliedWallTime" : ISODate("2020-09-20T13:27:23.260Z"),
                "lastDurableWallTime" : ISODate("2020-09-20T13:27:23.260Z")
        },
        "lastStableRecoveryTimestamp" : Timestamp(0, 0),
        "lastStableCheckpointTimestamp" : Timestamp(0, 0),
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.62.41:20014",
                        "ip" : "192.168.62.41",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 185970,
                        "optime" : {
                                "ts" : Timestamp(1600608443, 1),
                                "t" : NumberLong(-1)
                        },
                        "optimeDate" : ISODate("2020-09-20T13:27:23Z"),
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "could not find member to sync from",
                        "configVersion" : 1,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                },
                {
                        "_id" : 1,
                        "name" : "192.168.62.42:20014",
                        "ip" : "192.168.62.42",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 4,
                        "optime" : {
                                "ts" : Timestamp(1600608443, 1),
                                "t" : NumberLong(-1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1600608443, 1),
                                "t" : NumberLong(-1)
                        },
                        "optimeDate" : ISODate("2020-09-20T13:27:23Z"),
                        "optimeDurableDate" : ISODate("2020-09-20T13:27:23Z"),
                        "lastHeartbeat" : ISODate("2020-09-20T13:27:27.353Z"),
                        "lastHeartbeatRecv" : ISODate("2020-09-20T13:27:27.583Z"),
                        "pingMs" : NumberLong(1),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "configVersion" : 1
                },
                {
                        "_id" : 2,
                        "name" : "192.168.62.43:20014",
                        "ip" : "192.168.62.43",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 4,
                        "optime" : {
                                "ts" : Timestamp(1600608443, 1),
                                "t" : NumberLong(-1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1600608443, 1),
                                "t" : NumberLong(-1)
                        },
                        "optimeDate" : ISODate("2020-09-20T13:27:23Z"),
                        "optimeDurableDate" : ISODate("2020-09-20T13:27:23Z"),
                        "lastHeartbeat" : ISODate("2020-09-20T13:27:27.344Z"),
                        "lastHeartbeatRecv" : ISODate("2020-09-20T13:27:27.579Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "configVersion" : 1
                }
        ],
        "ok" : 1
}

shard3

节点1操作,初始化shard3

mongo --port 20015
rs.initiate({_id:"shard3",members:[{ _id:0, host:"192.168.62.41:20015",priority:3},{ _id:1, host:" 192.168.62.42:20015",priority:2},{ _id:2, host:" 192.168.62.43:20015",priority:1}]})
rs.status()
{
        "set" : "shard3",
        "date" : ISODate("2020-09-20T13:32:02.252Z"),
        "myState" : 1,
        "term" : NumberLong(1),
        "syncingTo" : "",
        "syncSourceHost" : "",
        "syncSourceId" : -1,
        "heartbeatIntervalMillis" : NumberLong(2000),
        "majorityVoteCount" : 2,
        "writeMajorityCount" : 2,
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(1600608720, 1),
                        "t" : NumberLong(1)
                },
                "lastCommittedWallTime" : ISODate("2020-09-20T13:32:00.422Z"),
                "readConcernMajorityOpTime" : {
                        "ts" : Timestamp(1600608720, 1),
                        "t" : NumberLong(1)
                },
                "readConcernMajorityWallTime" : ISODate("2020-09-20T13:32:00.422Z"),
                "appliedOpTime" : {
                        "ts" : Timestamp(1600608720, 1),
                        "t" : NumberLong(1)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1600608720, 1),
                        "t" : NumberLong(1)
                },
                "lastAppliedWallTime" : ISODate("2020-09-20T13:32:00.422Z"),
                "lastDurableWallTime" : ISODate("2020-09-20T13:32:00.422Z")
        },
        "lastStableRecoveryTimestamp" : Timestamp(1600608700, 2),
        "lastStableCheckpointTimestamp" : Timestamp(1600608700, 2),
        "electionCandidateMetrics" : {
                "lastElectionReason" : "electionTimeout",
                "lastElectionDate" : ISODate("2020-09-20T13:31:39.945Z"),
                "termAtElection" : NumberLong(1),
                "lastCommittedOpTimeAtElection" : {
                        "ts" : Timestamp(0, 0),
                        "t" : NumberLong(-1)
                },
                "lastSeenOpTimeAtElection" : {
                        "ts" : Timestamp(1600608689, 1),
                        "t" : NumberLong(-1)
                },
                "numVotesNeeded" : 2,
                "priorityAtElection" : 3,
                "electionTimeoutMillis" : NumberLong(10000),
                "numCatchUpOps" : NumberLong(20015),
                "newTermStartDate" : ISODate("2020-09-20T13:31:40.420Z"),
                "wMajorityWriteAvailabilityDate" : ISODate("2020-09-20T13:31:41.340Z")
        },
        "members" : [
                {
                        "_id" : 0,
                        "name" : "192.168.62.41:20015",
                        "ip" : "192.168.62.41",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 186244,
                        "optime" : {
                                "ts" : Timestamp(1600608720, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2020-09-20T13:32:00Z"),
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "could not find member to sync from",
                        "electionTime" : Timestamp(1600608699, 1),
                        "electionDate" : ISODate("2020-09-20T13:31:39Z"),
                        "configVersion" : 1,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                },
                {
                        "_id" : 1,
                        "name" : "192.168.62.42:20015",
                        "ip" : "192.168.62.42",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 32,
                        "optime" : {
                                "ts" : Timestamp(1600608720, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1600608720, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2020-09-20T13:32:00Z"),
                        "optimeDurableDate" : ISODate("2020-09-20T13:32:00Z"),
                        "lastHeartbeat" : ISODate("2020-09-20T13:32:01.967Z"),
                        "lastHeartbeatRecv" : ISODate("2020-09-20T13:32:01.379Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "192.168.62.41:20015",
                        "syncSourceHost" : "192.168.62.41:20015",
                        "syncSourceId" : 0,
                        "infoMessage" : "",
                        "configVersion" : 1
                },
                {
                        "_id" : 2,
                        "name" : "192.168.62.43:20015",
                        "ip" : "192.168.62.43",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 32,
                        "optime" : {
                                "ts" : Timestamp(1600608720, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1600608720, 1),
                                "t" : NumberLong(1)
                        },
                        "optimeDate" : ISODate("2020-09-20T13:32:00Z"),
                        "optimeDurableDate" : ISODate("2020-09-20T13:32:00Z"),
                        "lastHeartbeat" : ISODate("2020-09-20T13:32:02.093Z"),
                        "lastHeartbeatRecv" : ISODate("2020-09-20T13:32:01.365Z"),
                        "pingMs" : NumberLong(0),
                        "lastHeartbeatMessage" : "",
                        "syncingTo" : "192.168.62.41:20015",
                        "syncSourceHost" : "192.168.62.41:20015",
                        "syncSourceId" : 0,
                        "infoMessage" : "",
                        "configVersion" : 1
                }
        ],
        "ok" : 1
}

启动mongos

所有节点启动mongos

mongos -f /mongodb/conf/mongos.conf

主节点创建管理员用户

config

mongo --port 20011
use admin
db.createUser({user:"admin",pwd:"admin",roles:[{role:"root",db:"admin"}]})

shard1

mongo --port 20013
use admin
db.createUser({user:"admin",pwd:"admin",roles:[{role:"root",db:"admin"}]})

shard2

mongo --port 20014
use admin
db.createUser({user:"admin",pwd:"admin",roles:[{role:"root",db:"admin"}]})

shard3

mongo --port 20015
use admin
db.createUser({user:"admin",pwd:"admin",roles:[{role:"root",db:"admin"}]})

建立数据库及操作用户

为某个数据库创建用户必须先use这个数据库,否则用户无法直接登录这个库

mongo --port 20012
use admin
mongos> use admin
switched to db admin
mongos> db.auth("admin","admin")
1
mongos> use test
switched to db test
mongos> db.createUser({user:"test",pwd:"test",roles:[{role:"readWrite",db:"test"}]})
Successfully added user: {
        "user" : "test",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "test"
                }
        ]
}

添加分片

shard1

db.runCommand({addshard:"shard1/192.168.62.41:20013,192.168.62.42:20013,192.168.62.43:20013"})
{
        "shardAdded" : "shard1",
        "ok" : 1,
        "operationTime" : Timestamp(1600612178, 6),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1600612178, 6),
                "signature" : {
                        "hash" : BinData(0,"21NENQGf/UNwgBiHRuLO/AuBcMU="),
                        "keyId" : NumberLong("6874545179626307614")
                }
        }
}

shard2

db.runCommand({addshard:"shard2/192.168.62.41:20014,192.168.62.42:20014,192.168.62.43:20014"})
{
        "shardAdded" : "shard2",
        "ok" : 1,
        "operationTime" : Timestamp(1600612221, 4),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1600612221, 4),
                "signature" : {
                        "hash" : BinData(0,"8jsEF1RSqvSlZQrN/WD9ajjgGlM="),
                        "keyId" : NumberLong("6874545179626307614")
                }
        }
}

shard3

db.runCommand({addshard:"shard3/192.168.62.41:20015,192.168.62.42:20015,192.168.62.43:20015"})
{
        "shardAdded" : "shard3",
        "ok" : 1,
        "operationTime" : Timestamp(1600612242, 4),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1600612242, 4),
                "signature" : {
                        "hash" : BinData(0,"16e+ePSYJ9Zpe+thLDU59ZZfGuI="),
                        "keyId" : NumberLong("6874545179626307614")
                }
        }
}

检查分片

use admin
switched to db admin
mongos> db.auth("admin","admin")
1
db.runCommand({listshards:1})
{
        "shards" : [
                {
                        "_id" : "shard1",
                        "host" : "shard1/192.168.62.41:20013,192.168.62.42:20013,192.168.62.43:20013",
                        "state" : 1
                },
                {
                        "_id" : "shard2",
                        "host" : "shard2/192.168.62.41:20014,192.168.62.42:20014,192.168.62.43:20014",
                        "state" : 1
                },
                {
                        "_id" : "shard3",
                        "host" : "shard3/192.168.62.41:20015,192.168.62.42:20015,192.168.62.43:20015",
                        "state" : 1
                }
        ],
        "ok" : 1,
        "operationTime" : Timestamp(1600612312, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1600612312, 1),
                "signature" : {
                        "hash" : BinData(0,"1m76Zzb45daZFKO3tnzjMsODK5s="),
                        "keyId" : NumberLong("6874545179626307614")
                }
        }
}

测试

指定test分片生效

db.runCommand({enablesharding:"test"});
{
        "ok" : 1,
        "operationTime" : Timestamp(1600612406, 5),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1600612406, 5),
                "signature" : {
                        "hash" : BinData(0,"9WN8so7e29EZou9bCM35IKz3HLE="),
                        "keyId" : NumberLong("6874545179626307614")
                }
        }
}

指定分片的集合和片建

集合testdb.table1以片建id按哈希分片

db.runCommand({shardcollection:"testdb.table1",key:{id:"hashed"}})
{
        "ok" : 0,
        "errmsg" : "database testdb not found",
        "code" : 26,
        "codeName" : "NamespaceNotFound",
        "operationTime" : Timestamp(1600612527, 4),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1600612527, 4),
                "signature" : {
                        "hash" : BinData(0,"bS6KhipblswYeHefmwRWuYRyEh8="),
                        "keyId" : NumberLong("6874545179626307614")
                }
        }
}

插入数据

use admin
db.auth("admin","admin")
use test
for(var i=1;i<600000;i++) db.table1.insert({name:"mongo",x:i})
db.getCollection('table1').createIndex({x:"hashed"},{background:true});

use admin
db.auth("admin","admin")
db.runCommand({enablesharding:"test"})
{
        "ok" : 1,
        "operationTime" : Timestamp(1600650070, 3),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1600650070, 3),
                "signature" : {
                        "hash" : BinData(0,"sxGAGmKnKxSjuaMynIUajXBexo0="),
                        "keyId" : NumberLong("6874545179626307614")
                }
        }
}


日常维护命令

db.runCommand({shardcollection:"test.table1",key:{x:"hashed"}})
db.printShardingStatus()
sh.status()
use test
show tables
db.table1.stats()
sh.startBalancer()
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于MongoDB集群部署,您可以按照以下步骤进行操作: 1. 安装MongoDB:在每个节点上安装MongoDB数据库,并确保所有节点上的版本一致。 2. 配置节点:为每个节点创建一个配置文件,其中包括节点的唯一标识符、IP地址、端口号等信息。您可以使用MongoDB的配置文件模板作为起点,并根据需要进行修改。 3. 启动节点:在每个节点上启动MongoDB实例。您可以使用命令行工具或配置文件来启动实例。确保每个节点的配置文件中指定了正确的节点角色(如Primary、Secondary或Arbiter)。 4. 设置复制集:在主节点上初始化复制集,并将所有其他节点添加为成员。通过运行命令`rs.initiate()`可以初始化复制集,然后使用`rs.add()`命令将其他节点添加到复制集中。 5. 配置Sharding:如果您计划使用MongoDB的分片功能,您需要设置和配置分片。这涉及到定义分片键、创建分片集合和启动分片服务等步骤。 6. 监控和管理:为了确保集群的正常运行,您可以使用MongoDB提供的工具来监控和管理集群。例如,MongoDB提供了MongoDB Ops Manager和MongoDB Cloud Manager等工具来帮助您监控性能、备份数据、进行故障恢复等操作。 这些是MongoDB集群部署的一般步骤,具体操作可能会因环境和需求而有所不同。在进行部署之前,请确保您已经详细了解了MongoDB集群的架构和配置要求,并采取适当的安全措施来保护您的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值