当前位置: 首页 > 工具软件 > Arbiter > 使用案例 >

MongoDB配置副本集(含Arbiter)

公西飞鸾
2023-12-01

MongoDB配置副本集(含Arbiter)

集群模式为:一主一副一仲裁

安装依赖

yum install net-snmp lsof -y

yum install net-snmp -y

配置数据节点

在每一台要配置数据节点的机器上均要操作,这里配置两台机器

创建存放进程ID(PID)的文件夹

mkdir -p /var/run/mongodb/

创建存储节点数据和log文件的文件夹

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存储的不是应用程序的数据,而是副本集的配置数据

创建存放进程ID(PID)的文件夹

mkdir -p /var/run/mongodb/

创建存储Arbiter数据和log文件的文件夹

mkdir -p /mongodb/arbiter/data

mkdir -p /mongodb/arbiter/log

编辑Arbiter的配置文件

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节点的配置方式

配置In-Memory节点的方式,与配置一般节点的方式仅有少量差异

配置时可以设置”内存使用空间“的大小,默认大小为”50%的物理内存-1GB“;

而dbpath的路径仅会保存一些诊断数据及元数据

建立保存诊断(Diagnostic)数据及元数据的文件夹

madir -p /mongodb/in-memoryNode

设置启动文件中storage的属性值

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

# 检查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
 类似资料: