环境:centos7 、 MongoDB 5
准备三台服务器(4核 16G)
10.200.1.77 、 10.200.1.78 、 10.200.1.79
开放 27017 端口
确保三台服务器所有端口可相互访问
1、安装MongoDB
创建/etc/yum.repos.d/mongodb-org-5.0.repo文件
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
yum安装
yum install -y mongodb-org
修改配置 vi /etc/mongod.conf
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /data/mongodb
journal:
enabled: true
# engine:
wiredTiger:
engineConfig:
cacheSizeGB: 1
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
# bindIp: 127.0.0.1
bindIpAll: true
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
#security:
# authorization: enabled
# keyFile: /etc/mongo/keyFilers0.key
#operationProfiling:
replication:
oplogSizeMB: 150
replSetName: tech-repl
## Enterprise-Only Options:
#auditLog:
#snmp:
注意!!!:
如果修改了数据目录,要进行以下操作
1)先给数据目录设置权限:
chown -R mongod:mongod <directory>
2)并关闭SELinux
查看是否开启:getenforce
setenforce 0
修改/etc/selinux/config文件SELINUX=disable
启动应用
service mongod start
如果启动失败,则编辑/usr/lib/systemd/system/mongod.service,注释掉 Type=forking,修改后执行systemctl daemon-reload
2、配置复制集
执行mongo --port 27017进入命令行,执行以下命令初始化
rs.initiate({
_id:'tech-repl',
members:[
{
_id:0,
host:'10.200.1.77:27017'
},
{
_id:1,
host:'10.200.1.78:27017'
},
{
_id:2,
host:'10.200.1.79:27017'
}
]
})
通过 rs.conf() 查看配置是否成功
至此,复制集部署完成,可通过 rs.status() 查看集群状态
3、连接使用
使用客户端进行连接
连接成功
创建数据后,三个节点均同步数据
4、测试
停止主节点服务,在10.200.1.78上执行
service mongod stop
主节点自动切换至其他节点
添加数据
重新启动10.200.1.78服务
service mongod start
10.200.1.78重新加入集群
且新增的数据同步至10.200.1.78
集群测试成功!!!
5、常用运维
官方文档地址:https://www.mongodb.com/docs/v5.0/administration/replica-set-deployment/
1)移除集合
tech-repl:PRIMARY> rs.remove("10.200.1.79:27017")
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1678155168, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1678155168, 1)
}
移除成功
2)添加集合
tech-repl:PRIMARY> rs.add( { host: "10.200.1.79:27017" } )
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1678155329, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1678155329, 1)
}
添加成功
3)重新添加新节点
先从集群中移除79,并停止79上的mongodb服务,删除数据目录下的文件
在77上执行
tech-repl:PRIMARY> rs.add( { host: "10.200.1.79:27017" } )
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1678156013, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1678156013, 1)
}
添加成功
4)修改节点信息
修改节点地址:
cfg = rs.conf()
cfg.members[0].host = "mongo2.example.net"
rs.reconfig(cfg)
修改节点优先级:
cfg = rs.conf()
cfg.members[0].priority = 0.5
cfg.members[1].priority = 2
cfg.members[2].priority = 2
rs.reconfig(cfg)
6、spring-boot接入
spring:
data:
mongodb:
uri: mongodb://10.200.1.77:27017,10.200.1.78:27017,10.200.1.79:27017/aaatest
auto-index-creation: false