我正在参加「掘金·启航计划」
mongodb扩容、收缩、仲裁节点
1.mongodb扩容
1.1.增加mongo节点
1.安装配置新节点
[root@mongodb-1 ~]# mkdir -p /data1/mongodb_cluster/mongodb_29010/{conf,logs,pid,data}
[root@mongodb-1 ~]# cp /data1/mongodb_cluster/mongodb_29017/conf/mongo_29017.conf /data1/mongodb_cluster/mongodb_29010/conf/mongo_29010.conf
[root@mongodb-1 ~]# sed -i 's/29017/29010/' /data1/mongodb_cluster/mongodb_29010/conf/mongo_29010.conf
2.启动新节点
[root@mongodb-1 ~]# cd /data1/mongodb_cluster/
[root@mongodb-1 /data1/mongodb_cluster]# ./mongodb/bin/mongod -f /data1/mongodb_cluster/mongodb_29010/conf/mongo_29010.conf
about to fork child process, waiting until server is ready for connections.
forked process: 16064
child process started successfully, parent exiting
3.查看进程
[root@mongodb-1 /data1/mongodb_cluster]# ps -ef | grep mongo
root 16064 1 2 15:48 ? 00:00:00 ./mongodb/bin/mongod -f /data1/mongodb_cluster/mongodb_29010/conf/mongo_29010.conf
root 16448 65070 0 15:48 pts/1 00:00:00 grep --color=auto mongo
root 103563 1 1 14:42 ? 00:00:50 ./mongodb/bin/mongod -f /data1/mongodb_cluster/mongodb_29018/conf/mongo_29018.conf
root 127287 1 1 15:19 ? 00:00:19 ./mongodb/bin/mongod -f /data1/mongodb_cluster/mongodb_29017/conf/mongo_29017.conf
root 128235 1 1 15:20 ? 00:00:19 ./mongodb/bin/mongod -f /data1/mongodb_cluster/mongodb_29019/conf/mongo_29019.conf
4.登入29010新节点
[root@mongodb-1 /data1/mongodb_cluster]# ./mongodb/bin/mongo mongodb-1:29010
1.2.添加到我们db01集群中
1.登入到(PRIMARY)主节点
[root@mongodb-1 /data1/mongodb_cluster]# ./mongodb/bin/mongo mongodb-1:29017
2.进入admin
dba01:PRIMARY> use admin
switched to db admin
3.添加新节点
dba01:PRIMARY> rs.add("mongodb-1:29010")
{
"ok" : 1,
"operationTime" : Timestamp(1663228254, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1663228254, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
[root@mongodb-1 /data1/mongodb_cluster]# ./mongodb/bin/mongo mongodb-1:29017
dba01:PRIMARY> rs.conf()
1.3.登入新节点查看数据
[root@mongodb-1 /data1/mongodb_cluster]# ./mongodb/bin/mongo mongodb-1:29010
dba01:SECONDARY> db.test1.find()
{ "_id" : ObjectId("6322bb1ef6c8bbebaffe6a6d"), "desk" : "plastic", "qty" : 73, "size" : { "h" : 75, "w" : 60, "colour" : "blue" }, "status" : "B" }
{ "_id" : ObjectId("6322bb1ef6c8bbebaffe6a6e"), "desk" : "glass", "qty" : 98, "size" : { "h" : 43, "w" : 50, "colour" : "orange" }, "status" : "A" }
{ "_id" : ObjectId("6322bb1ef6c8bbebaffe6a6c"), "desk" : "stone", "qty" : 58, "size" : { "h" : 80, "w" : 80, "colour" : "green" }, "status" : "C" }
2.收缩节点
2.1.收缩29010节点
[root@mongodb-1 /data1/mongodb_cluster]# ./mongodb/bin/mongo mongodb-1:29017
dba01:PRIMARY> rs.remove("mongodb-1:29010")
{
"ok" : 1,
"operationTime" : Timestamp(1663228529, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1663228529, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
查看29010节点的状态
[root@mongodb-1 /data1/mongodb_cluster]# ./mongodb/bin/mongo mongodb-1:29010
dba01:SECONDARY>
dba01:SECONDARY>
2022-09-15T15:55:31.435+0800 I NETWORK [js] DBClientConnection failed to receive message from mongodb-1:29010 - HostUnreachable: Connection closed by peer
2022-09-15T15:55:31.438+0800 I NETWORK [js] trying reconnect to mongodb-1:29010 failed
2022-09-15T15:55:31.496+0800 I NETWORK [js] reconnect mongodb-1:29010 ok
dba01:OTHER>
OTHER:不在集群内或已被集群移除
2.2.停掉29010节点
因为启动也会占用资源
[root@mongodb-1 /data1/mongodb_cluster]# ./mongodb/bin/mongod -f /data1/mongodb_cluster/mongodb_29010/conf/mongo_29010.conf --shutdown
killing process with pid: 16064
[root@mongodb-1 /data1/mongodb_cluster]# ./mongodb/bin/mongo mongodb-1:29010
MongoDB shell version v4.0.14
connecting to: mongodb://mongodb-1:29010/test?gssapiServiceName=mongodb
2022-09-15T15:58:01.528+0800 E QUERY [js] Error: couldn't connect to server mongodb-1:29010, connection attemptfailed: SocketException: Error connecting to mongodb-1:29010 (192.168.146.138:29010) :: caused by :: Connection refused :
connect@src/mongo/shell/mongo.js:344:17
@(connect):2:6
exception: connect failed
3.仲裁节点
3.1.增加仲裁节点
[root@mongodb-1 /data1/mongodb_cluster]# rm -rf /data1/mongodb_cluster/mongodb_29010/*
[root@mongodb-1 /data1/mongodb_cluster]# mkdir -p /data1/mongodb_cluster/mongodb_29010/{conf,logs,pid,data}
[root@mongodb-1 /data1/mongodb_cluster]# cp /data1/mongodb_cluster/mongodb_29017/conf/mongo_29017.conf /data1/mongodb_cluster/mongodb_29010/conf/mongo_29010.conf
[root@mongodb-1 /data1/mongodb_cluster]# sed -i 's/29017/29010/' /data1/mongodb_cluster/mongodb_29010/conf/mongo_29010.conf
[root@mongodb-1 /data1/mongodb_cluster]# ./mongodb/bin/mongod -f /data1/mongodb_cluster/mongodb_29010/conf/mongo_29010.conf
about to fork child process, waiting until server is ready for connections.
forked process: 26206
child process started successfully, parent exiting
[root@mongodb-1 /data1/mongodb_cluster]# ./mongodb/bin/mongo mongodb-1:29010
3.2.加入仲裁节点
[root@mongodb-1 /data1/mongodb_cluster]# ./mongodb/bin/mongo mongodb-1:29017
dba01:PRIMARY> rs.addArb("mongodb-1:29010")
{
"ok" : 1,
"operationTime" : Timestamp(1663229130, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1663229130, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
3.3.为什么需要仲裁节点
仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。 这里虽然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别。我开始也不相信必须要有仲裁节点,但是自己也试过没仲裁节点的话,主 节点挂了备节点还是备节点