🏡作者主页:点击!
🐧Linux基础知识(初学):点击!
🐧Linux高级管理防护和群集专栏:点击!
🔐Linux中firewalld防火墙:点击!
⏰️创作时间:2024年7月19日14点10分
🀄️文章质量:96分
目录
前期准备
1.关闭防火墙和SELinux
2.安装所需组件
3.配置主机名和hosts文件
4.上传并解压安装包
5.配置MongoDB环境变量
安装和配置MongoDB
1.初始化MongoDB配置文件
2.配置MongoDB服务
3.启动MongoDB服务
配置MongoDB主从集群
1.初始化集群
2..创建测试数据
3.测试数据同步
4.高可用性测试
欢迎来到本次关于MongoDB安装与集群配置的教程!在本文中,我们将详细介绍如何在Linux环境下安装并配置MongoDB,从基本环境的准备到集群的搭建与测试。本文将帮助您理解并掌握MongoDB的部署和管理,为您构建高性能、高可用性的数据库系统提供坚实的基础。
前期准备
四台服务器
主服务器 192.168.192.100 master
从服务器1 192.168.192.111 slave1
从服务器2 192.168.192.112 slave2
仲裁 192.168.192.113 arbiter
1.关闭防火墙和SELinux
systemctl stop firewalld
setenforce 0
2.安装所需组件
yum groupinstall -y 'Development Tools'
yum install -y lrzsz
3.配置主机名和hosts文件
vim /etc/hosts
192.168.192.100 master
192.168.192.111 slave1
192.168.192.112 slave2
192.168.192.113 arbiter
分别在每台主机上修改主机名:
hostnamectl set-hostname master &&
hostnamectl set-hostname slave01 &&
hostnamectl set-hostname salve02 &&
hostnamectl set-hostname arbiter &&
4.上传并解压安装包
将MongoDB安装包上传到每台服务器,然后查看上传是否成功:
[root@arbiter ~]# ls
mongodb-linux-x86_64-rhel70-5.0.0.tgz
全选会话后执行以下命令:
[root@arbiter ~]# tar -zxf mongodb-linux-x86_64-rhel70-5.0.0.tgz
[root@arbiter ~]# mv mongodb-linux-x86_64-rhel70-5.0.0 /usr/local/mongodb
[root@arbiter ~]# ls -d /usr/local/mongodb
5.配置MongoDB环境变量
vim /etc/profile
在文件末尾加入
export PATH=$PATH:/usr/local/mongodb/bin
加载新的环境变量:
source /etc/profile
echo $PATH
安装和配置MongoDB
1.初始化MongoDB配置文件
创建数据和日志目录:
mkdir -p /data/mongodb/{db,log}
ls /data/mongodb/
添加MongoDB用户并赋权:
useradd -M -s /sbin/nologin mongo
chown -R mongo:mongo /data/mongodb/
编辑MongoDB配置文件:
vim /etc/mongodb.conf
添加以下内容:
bind_ip=0.0.0.0
dbpath=/data/mongodb/db
logpath=/data/mongodb/log/mongodb.log
port=27017
logappend=true
fork=true
noauth=true
replSet=rs0
2.配置MongoDB服务
创建systemd服务文件:
vim /etc/systemd/system/mongodb.service
添加以下内容:
Unit
Description=mongodb
After=network.service
Service
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod -f /etc/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
Install
WantedBy=multi-user.target
3.启动MongoDB服务
systemctl daemon-reload
systemctl start mongodb
systemctl status mongodb
查看进程是否正常启动:
netstat -nultp | grep mongod
配置MongoDB主从集群
1.初始化集群
连接主服务器并进入MongoDB:
mongo
> rs.initiate({
... _id: "rs0",
... members: [
... { _id: 0, host: "192.168.192.100:27017", priority: 9 },
... { _id: 1, host: "192.168.192.111:27017", priority: 1 },
... { _id: 2, host: "192.168.192.112:27017", priority: 1 },
... { _id: 3, host: "192.168.192.113:27017", arbiterOnly: true }
... ]
... })
{ "ok" : 1 }
查看集群状态:
rs0:SECONDARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2024-07-19T03:52:10.055Z"),
"myState" : 1,
"term" : NumberLong(1),
"syncSourceHost" : "",
"syncSourceId" : -1,
"heartbeatIntervalMillis" : NumberLong(2000),
"majorityVoteCount" : 3,
"writeMajorityCount" : 3,
"votingMembersCount" : 4,
"writableVotingMembersCount" : 3,
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1721361128, 1),
"t" : NumberLong(1)
},
"lastCommittedWallTime" : ISODate("2024-07-19T03:52:08.355Z"),
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1721361128, 1),
"t" : NumberLong(1)
},
"appliedOpTime" : {
"ts" : Timestamp(1721361128, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1721361128, 1),
"t" : NumberLong(1)
},
"lastAppliedWallTime" : ISODate("2024-07-19T03:52:08.355Z"),
"lastDurableWallTime" : ISODate("2024-07-19T03:52:08.355Z")
},
"lastStableRecoveryTimestamp" : Timestamp(1721361088, 1),
"electionCandidateMetrics" : {
"lastElectionReason" : "electionTimeout",
"lastElectionDate" : ISODate("2024-07-19T03:50:28.285Z"),
"electionTerm" : NumberLong(1),
"lastCommittedOpTimeAtElection" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"lastSeenOpTimeAtElection" : {
"ts" : Timestamp(1721361017, 1),
"t" : NumberLong(-1)
},
"numVotesNeeded" : 3,
"priorityAtElection" : 9,
"electionTimeoutMillis" : NumberLong(10000),
"numCatchUpOps" : NumberLong(0),
"newTermStartDate" : ISODate("2024-07-19T03:50:28.327Z"),
"wMajorityWriteAvailabilityDate" : ISODate("2024-07-19T03:50:29.130Z")
},
"members" : [
{
"_id" : 0,
"name" : "192.168.192.100:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 471,
"optime" : {
"ts" : Timestamp(1721361128, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2024-07-19T03:52:08Z"),
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1721361028, 1),
"electionDate" : ISODate("2024-07-19T03:50:28Z"),
"configVersion" : 1,
"configTerm" : 1,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 1,
"name" : "192.168.192.111:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 112,
"optime" : {
"ts" : Timestamp(1721361128, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1721361128, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2024-07-19T03:52:08Z"),
"optimeDurableDate" : ISODate("2024-07-19T03:52:08Z"),
"lastHeartbeat" : ISODate("2024-07-19T03:52:08.370Z"),
"lastHeartbeatRecv" : ISODate("2024-07-19T03:52:09.388Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "192.168.192.100:27017",
"syncSourceId" : 0,
"infoMessage" : "",
"configVersion" : 1,
"configTerm" : 1
},
{
"_id" : 2,
"name" : "192.168.192.112:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 112,
"optime" : {
"ts" : Timestamp(1721361128, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1721361128, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2024-07-19T03:52:08Z"),
"optimeDurableDate" : ISODate("2024-07-19T03:52:08Z"),
"lastHeartbeat" : ISODate("2024-07-19T03:52:08.370Z"),
"lastHeartbeatRecv" : ISODate("2024-07-19T03:52:09.388Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "192.168.192.100:27017",
"syncSourceId" : 0,
"infoMessage" : "",
"configVersion" : 1,
"configTerm" : 1
},
{
"_id" : 3,
"name" : "192.168.192.113:27017",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 112,
"lastHeartbeat" : ISODate("2024-07-19T03:52:08.370Z"),
"lastHeartbeatRecv" : ISODate("2024-07-19T03:52:08.409Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : 1,
"configTerm" : 1
}
],
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1721361128, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1721361128, 1)
}
查看完毕 确认无误之后
2..创建测试数据
rs0:PRIMARY> db.user.insert({name:"cyz",age:18})
rs0:PRIMARY> db.user.insert([
... {name: "azh", age: 18},
... {name: "fxpc", age: 18}
... ])
rs0:PRIMARY> db.user.find()
插入完成之后查看
rs0:PRIMARY> db.user.find()
{ "_id" : ObjectId("6699e30501eafbe7021d515c"), "name" : "cyz", "age" : 18 }
{ "_id" : ObjectId("6699e34e01eafbe7021d515d"), "name" : "azh", "age" : 18 }
{ "_id" : ObjectId("6699e34e01eafbe7021d515e"), "name" : "fxpc", "age" : 18 }
3.测试数据同步
在从服务器上查看同步数据:
mongo
> db.user.find()
rs0:SECONDARY> db.getMongo().setSecondaryOk()
rs0:SECONDARY> db.user.find()
{ "_id" : ObjectId("6699e30501eafbe7021d515c"), "name" : "cyz", "age" : 18 }
{ "_id" : ObjectId("6699e34e01eafbe7021d515e"), "name" : "fxpc", "age" : 18 }
{ "_id" : ObjectId("6699e34e01eafbe7021d515d"), "name" : "azh", "age" : 18 }
db.getMongo().setSecondaryOk()
命令允许从属节点处理只读查询请求。这样可以有效地分担主节点的查询压力,提高数据库的整体性能和响应速度。
另外一台从服务器也是一样
输入这条命令即可实现同步
4.高可用性测试
关闭主服务器MongoDB服务:
systemctl stop mongodb
在从服务器上查看新的主服务器:
rs.status()
stateStr" : "(not reachable/healthy)"
表示该实例的当前状态不可达或不健康。
not reachable:实例无法被连接或访问,可能由于网络问题、实例宕机或配置错误等原因导致。
healthy:实例的健康状况不佳,可能存在资源不足、性能问题或其他内部错误。
多查看几次 因为需要时间来转移
这时候你就会发现
返回'原Master'
开启
systemctl start mongodb
netstat -nultp | grep mongod
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 13530/mongod
再次进行查看
当他开启的时候 又变为主
到此实验结束,
总结
通过本次教程,您学会了如何在Linux系统上安装和配置MongoDB,并成功搭建了一个包含主从复制和仲裁节点的集群系统,最后,通过初始化集群、插入测试数据以及进行高可用性测试,您深入了解了MongoDB集群的运行机制和数据同步过程。这些步骤不仅提高了您对MongoDB的理解,也为您在实际项目中部署高可用性数据库集群打下了良好基础。
成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"
"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"
神秘泣男子