Ubuntu部署mongodb集群
安装依赖
228 apt install libcurl4-openssl-dev 229 apt install libcurl4-nss-dev 230 apt install libcurl4-gnutls-dev 231 apt install liblzma-dev 232 apt-get install build-essential
安装mongo
apt install mongodb-server
创建文件夹
mkdir -p /data/{mongodb27001/data/configdb,mongodb27001/data/sharddb,mongodb27001/conf,mongodb27001/run,mongodb27001/logs}
编辑配置文件
vim /data/mongodb27001/conf/mongod.conf
systemLog: destination: file logAppend: true path: /data/mongodb27001/logs/mongod.log storage: dbPath: /data/mongodb27001/data journal: enabled: true processManagement: fork: true # fork and run in background pidFilePath: /data/mongodb27001/run/mongod.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo net: port: 27001 bindIp: 0.0.0.0
配置 keyfile
openssl rand -base64 745 > /data/mongodb27001/conf/keyfile chmod 600 /data/mongodb27001/conf/keyfile
启动 MongoDB
mongod -f /data/mongodb27001/conf/mongod.conf
登录 MongoDB
mongo --port 27001
创建管理员账户
use admin db.createUser( { user: "root", pwd: "xxxxxx", roles: [ { role: "root",db:"admin" } ] } )
增加集群配置
vim /data/mongodb27001/conf/mongod.conf
systemLog: destination: file logAppend: true path: /data/mongodb27001/logs/mongod.log storage: dbPath: /data/mongodb27001/data journal: enabled: true processManagement: fork: true pidFilePath: /data/mongodb27001/run/mongod.pid timeZoneInfo: /usr/share/zoneinfo net: port: 27001 bindIp: 0.0.0.0 replication: oplogSizeMB: 4096 replSetName: mongo_repl security: authorization: enabled clusterAuthMode: keyFile keyFile: /data/mongodb27001/conf/keyfile
重启服务
登录 MongoDB
mongo --port 27001 -uroot -pxxxxxx admin
关闭 MongoDB
db.shutdownServer()
重新启动 MongoDB
mongod -f /data/mongodb27001/conf/mongod.conf
创建27002和27003配置文件
root@mongo:/data/mongodb27001/conf# cat ../../mongodb27002/conf/mongod.conf systemLog: destination: file logAppend: true path: /data/mongodb27002/logs/mongod.log storage: dbPath: /data/mongodb27002/data journal: enabled: true processManagement: fork: true pidFilePath: /data/mongodb27002/run/mongod.pid timeZoneInfo: /usr/share/zoneinfo net: port: 27002 bindIp: 0.0.0.0 replication: oplogSizeMB: 4096 replSetName: mongo_repl security: authorization: enabled clusterAuthMode: keyFile keyFile: /data/mongodb27002/conf/keyfile
27003
root@mongo:/data/mongodb27001/conf# cat ../../mongodb27003/conf/mongod.conf systemLog: destination: file logAppend: true path: /data/mongodb27003/logs/mongod.log storage: dbPath: /data/mongodb27003/data journal: enabled: true processManagement: fork: true pidFilePath: /data/mongodb27003/run/mongod.pid timeZoneInfo: /usr/share/zoneinfo net: port: 27003 bindIp: 0.0.0.0 replication: oplogSizeMB: 4096 replSetName: mongo_repl security: authorization: enabled clusterAuthMode: keyFile keyFile: /data/mongodb27003/conf/keyfile
将之前的keyfile复制到27002和27003
417 cp /data/mongodb27001/conf/keyfile /data/mongodb27002/conf/keyfile 418 cp /data/mongodb27001/conf/keyfile /data/mongodb27003/conf/keyfile
启动
mongod -f /data/mongodb27002/conf/mongod.conf
mongod -f /data/mongodb27003/conf/mongod.conf
在第一个节点上登录 MongoDB
mongo --port 27001 -uroot -pxxxxxx admin
执行下面命令增加集群配置
config={ _id:'mongo_repl', members:[ {_id: 0, host: '172.25.0.133:27001',priority:1}, {_id: 1, host: '172.25.0.133:27002',priority:1}, {_id: 2, host: '172.25.0.133:27003',arbiterOnly:true}, ] }
初始化配置
rs.initiate(config)
查看集群
rs.status()
完整命令
root@mongo:/data/mongodb27003/conf# mongo --port 27001 -uroot -ppasswd admin MongoDB shell version v3.6.8 connecting to: mongodb://127.0.0.1:27001/admin Implicit session: session { "id" : UUID("7b1211dc-5e73-4c00-8fcb-26b70aa4bd0f") } MongoDB server version: 3.6.8 Server has startup warnings: 2022-06-20T20:04:27.877+0800 I STORAGE [initandlisten] 2022-06-20T20:04:27.877+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine 2022-06-20T20:04:27.877+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem 2022-06-20T20:04:29.160+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended. 2022-06-20T20:04:29.160+0800 I CONTROL [initandlisten] > config={ ... _id:'mongo_repl', ... members:[ ... {_id: 0, host: '172.25.0.133:27001',priority:1}, ... {_id: 1, host: '172.25.0.133:27002',priority:1}, ... {_id: 2, host: '172.25.0.133:27003',arbiterOnly:true}, ... ] ... } { "_id" : "mongo_repl", "members" : [ { "_id" : 0, "host" : "172.25.0.133:27001", "priority" : 1 }, { "_id" : 1, "host" : "172.25.0.133:27002", "priority" : 1 }, { "_id" : 2, "host" : "172.25.0.133:27003", "arbiterOnly" : true } ] } > rs.initiate(config) { "ok" : 1 } mongo_repl:SECONDARY> rs.status() { "set" : "mongo_repl", "date" : ISODate("2022-06-20T12:09:40.355Z"), "myState" : 2, "term" : NumberLong(0), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "heartbeatIntervalMillis" : NumberLong(2000), "optimes" : { "lastCommittedOpTime" : { "ts" : Timestamp(0, 0), "t" : NumberLong(-1) }, "appliedOpTime" : { "ts" : Timestamp(1655726976, 1), "t" : NumberLong(-1) }, "durableOpTime" : { "ts" : Timestamp(1655726976, 1), "t" : NumberLong(-1) } }, "members" : [ { "_id" : 0, "name" : "172.25.0.133:27001", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 313, "optime" : { "ts" : Timestamp(1655726976, 1), "t" : NumberLong(-1) }, "optimeDate" : ISODate("2022-06-20T12:09:36Z"), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "could not find member to sync from", "configVersion" : 1, "self" : true, "lastHeartbeatMessage" : "" }, { "_id" : 1, "name" : "172.25.0.133:27002", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 3, "optime" : { "ts" : Timestamp(1655726976, 1), "t" : NumberLong(-1) }, "optimeDurable" : { "ts" : Timestamp(1655726976, 1), "t" : NumberLong(-1) }, "optimeDate" : ISODate("2022-06-20T12:09:36Z"), "optimeDurableDate" : ISODate("2022-06-20T12:09:36Z"), "lastHeartbeat" : ISODate("2022-06-20T12:09:40.071Z"), "lastHeartbeatRecv" : ISODate("2022-06-20T12:09:40.316Z"), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "", "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "", "configVersion" : 1 }, { "_id" : 2, "name" : "172.25.0.133:27003", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 3, "lastHeartbeat" : ISODate("2022-06-20T12:09:40.072Z"), "lastHeartbeatRecv" : ISODate("2022-06-20T12:09:38.606Z"), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "", "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "", "configVersion" : 1 } ], "ok" : 1 } mongo_repl:SECONDARY> quit()
越学越感到自己的无知
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)