集群模式为:一主一副一仲裁
安装依赖
yum install net-snmp lsof -y
yum install net-snmp -y
在每一台要配置数据节点的机器上均要操作,这里配置两台机器
mkdir -p /var/run/mongodb/
mkdir -p /mongodb/node/data
mkdir -p /mongodb/node/log
vim /etc/mongod_Node.conf
systemLog:
destination: file
logAppend: true
path: /mongodb/node/log/node.log
storage:
dbPath: /mongodb/node/data
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /var/run/mongodb/node.pid
timeZoneInfo: /usr/share/zoneinfo
net:
port: 27019
bindIp: 0.0.0.0
replication:
replSetName: repl_0
sharding:
clusterRole: shardsvr
/mongodb/mongodb-linux-x86_64-enterprise-rhel70-4.4.5/bin/mongod -f /etc/mongod_Node.conf
#开启端口
firewall-cmd --zone=public --add-port=27019/tcp --permanent
#重新载入
firewall-cmd --reload
#查看
firewall-cmd --query-port=27019/tcp
在每一台要配置Arviter的机器上均要操作,此处配置一台
Arbiter存储的不是应用程序的数据,而是副本集的配置数据
mkdir -p /var/run/mongodb/
mkdir -p /mongodb/arbiter/data
mkdir -p /mongodb/arbiter/log
vim /etc/mongod_Arbiter.conf
systemLog:
destination: file
logAppend: true
path: /mongodb/arbiter/log/arbiter.log
storage:
dbPath: /mongodb/arbiter/data
journal:
enabled: true
processManagement:
fork: true
pidFilePath: /var/run/mongodb/arbiter.pid
timeZoneInfo: /usr/share/zoneinfo
net:
port: 27020
bindIp: 0.0.0.0
replication:
replSetName: repl_0
sharding:
clusterRole: shardsvr
/mongodb/mongodb-linux-x86_64-enterprise-rhel70-4.4.5/bin/mongod -f /etc/mongod_Arbiter.conf
#开启端口
firewall-cmd --zone=public --add-port=27020/tcp --permanent
#重新载入
firewall-cmd --reload
#查看
firewall-cmd --query-port=27020/tcp
通常选择初始时欲成为Primary的节点
/mongodb/mongodb-linux-x86_64-enterprise-rhel70-4.4.5/bin/mongo --port 27019
use admin
rs.initiate({
_id:"repl_0",
members:[
{_id:0,host:"node1:27019"},
{_id:1,host:"node2:27019"},
{_id:2,host:"node3:27020",arbiterOnly:true}
]})
# 如果全部是node节点,使用以下配置
rs.initiate({
_id:"repl_0",
members:[
{_id:0,host:"node1:27019"},
{_id:1,host:"node2:27019"},
{_id:2,host:"node3:27019"}
]})
rs.conf()
rs.status()
In-Memory节点的数据会完全放置在内存中,仅有少量的元数据及诊断(Diagnostic)日志会存放在磁盘中。在读取数据时不会涉及磁盘I/O操作。
缺点:一旦服务关闭,数据就会丢失(包含权限信息)
若将In-memory节点设定成主节点,则可以怎家读写的效率。
但若在数据写入后还在同步到副本节点就发生宕机,则可能导致数据丢失。
若将In-memory设置为副本节点,则In-Memory节点重启后可以从其他节点上同步数据,以避免数据丢失所造成的损失。
如将In-Memory设为副本节点,则可通过"读写分离"来提高读写性能。
配置In-Memory节点的方式,与配置一般节点的方式仅有少量差异
配置时可以设置”内存使用空间“的大小,默认大小为”50%的物理内存-1GB“;
而dbpath的路径仅会保存一些诊断数据及元数据
madir -p /mongodb/in-memoryNode
storage:
engine: inMemory
dbPath: /mongodb/in-memoryNode
inMemory:
engineConfig:
inMemorySizeGB: 16000
如果电脑需要关机,一定要先正常关闭mongodb,否则容易出现集群启动不了的问题
/mongodb/mongodb-linux-x86_64-enterprise-rhel70-4.4.5/bin/mongo --port 27019
use admin
db.shutdownServer()
lsof -i:27019
kill pid
# 检查SELinux是否开启
/usr/sbin/sestatus -v
vim /etc/selinux/config
SELINUX=disabled
重启机器
reboot
编辑MongoDB服务文件(mongod.service)
vim /usr/lib/systemd/system/mongod.service
[Unit]
Description=mongodb
After=network.target
[Service]
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
ExecStart=/mongodb/mongodb-linux-x86_64-enterprise-rhel70-4.4.5/bin/mongod --config /etc/mongod_Node.conf
ExecStop=/mongodb/mongodb-linux-x86_64-enterprise-rhel70-4.4.5/bin/mongod --shutdown --config /etc/mongod_Node.conf
PIDFile=/var/run/mongodb/node.pid
PermissionsStartOnly=true
Type=forking
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
[Install]
WantedBy=multi-user.target
[Unit]
Description=mongodb
After=network.target
[Service]
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
ExecStart=/mongodb/mongodb-linux-x86_64-enterprise-rhel70-4.4.5/bin/mongod --config /etc/mongod_Arbiter.conf
ExecStop=/mongodb/mongodb-linux-x86_64-enterprise-rhel70-4.4.5/bin/mongod --shutdown --config /etc/mongod_Arbiter.conf
PIDFile=/var/run/mongodb/arbiter.pid
PermissionsStartOnly=true
Type=forking
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
[Install]
WantedBy=multi-user.target
设置mongod.service权限
chmod 754 /usr/lib/systemd/system/mongod.service
启动自启动服务
systemctl enable mongod.service
开启服务
systemctl start mongod.service
关闭自启动服务
systemctl disable mongod.service
查询服务状态
systemctl status mongod.service
停止服务
systemctl stop mongod.service