部署
mongodb安装就不多介绍了。可以参考:https://blog.csdn.net/Chenftli/article/details/105228130
安装完成后我们需要启动三个mongod的服务来做为复制集的三个节点,我们可以直接打开cmd,使用mongod来根据不同的配置启动服务。例如:参考如下四张图,由于我安装的磁盘足够存放mongodb的数据,所以我将数据放在data文件中,三个节点的配置文件放在config文件中,三个节点mongod的服务日志放在log中。
分别将三个节点的数据放在data的db1、db2、db3中。
分别将三个节点的mongod日志放在log的db1、db2、db3中。
再分别把配置文件放到config中的db1、db2、db3中。
mongod.cfg文件可以在bin目录下拷贝过来。
下面为mongod.cfg的配置内容, 三个配置文件的不同在于dbPath、systemLog的path、net的port的分别改成对应的内容,参数的意义在下面注释中。
# mongod.conf
# Where and how to store data.
storage:
# dbPath为当前节点数据存储的路径
dbPath: D:\Program Files\MongoDB\Server\4.2\data\db1
# journal的enabled为是否开启日志
journal:
enabled: true
# 这部分的配置很重要,直接影响到内存的占用,cacheSizeGB为当前节点的
# monggo服务需要占用服务器内存的大小,cacheSizeGB大小的配置请查看
# 下面泪的部分
wiredTiger:
engineConfig:
cacheSizeGB: 5
# mongod日志文件的配置,mongodb服务出现问题可以查看此日志
systemLog:
destination: file
logAppend: true
path: D:\Program Files\MongoDB\Server\4.2\log\db1\mongod.log
# network interfaces,port为此mongo节点的开放的端口,
# bindIp为开放访问的Ip,0.0.0.0意思是任意Ip地址都可访问,
# 这就涉及到权限问题,你也可以只设置需要访问此mongo节点的ip
net:
port: 27017
bindIp: 0.0.0.0
# 安全配置的权限认证开启
security:
authorization: enabled
# 如果节点在不同的服务器上开启了认证,则需要使用keyfile去认证,并在下面路径的目录中创建rs0.key文件
keyFile: D:\Program Files\MongoDB\Server\4.2\keyfile\rs0.key
# 复制集配置,replSetName所属
replication:
replSetName: rs0
更多配置内容请参考官方文档:http://docs.mongodb.org/manual/reference/configuration-options/
使用如下命令来逐个启动mongod服务(注意修改配置文件路径以及服务名,分成三个cmd窗口启动)
mongod --config "D:\Program Files\MongoDB\Server\4.2\config\db1\mongod.cfg" --serviceName "MongoDB1" --serviceDisplayName "MongoDB1" --install
使用下面命令进入一个mongo的服务:
mongo -p 27017
执行下面命令将mongo的三个服务节点挂载到rs0的复制集下
config = {
"_id" : "rs0",
"members": [
{ "_id" : 0, "host" : "127.0.0.1:27017" },
{ "_id" : 1, "host" : "127.0.0.1:27018" },
{ "_id" : 2, "host" : "127.0.0.1:27019" }
]
}
rs.initiate(config)
此时一个复制集部署完成。
总结:
三个复制集的节点可以部署到不同的服务器上,步骤差不多,可能需要你关注防火墙是否开启,如果开启,要在入站规则配置端口开放。
还有如果开启了认证机制,不同节点需要在配置中的security:中添加下面一行配置:
keyFile: D:\Program Files\MongoDB\Server\4.2\keyfile\rs0.key
泪:
我的坑:线上的服务器是单节点mongo,想要改成复制集,但只有一台服务器,所以我要把三个mongodb服务部署在同一台服务器,由于之前的mongo有50多G的数据,改成复制集后,数据同步时把服务器内存撑爆。
原因:由于没有设置mongo的缓存cacheSizeGB的值,默认会使用服务器内存的60%,原来一个mongo服务, 现在三个mongo服务,三个节点在同步数据是产生大量缓存,内存得不到释放,会将服务器的内存撑满。
根据服务器内存大小,以及mongo服务占用多少内存资源,设置合理的值,
一般会设置cacheSizeGB*0.6 = mongo服务占用多少内存
其他问题:
下面问题是在设置仲裁节点时出现的
"errmsg" : "This node, 127.0.0.1:27017, with id MemberId(0) is not electable under the new configura
此问题的原因是:仲裁不能和初始化在同一台服务器,所以如果要设置仲裁节点则需要将一个Mongo的服务节点放到另外的服务器上,并将此节点在初始化时候的服务器上设置为仲裁节点。