# MongoDB 复制集部署
PS: Mongodb 至少需要三个节点才能保障正常切换 以下举例架构为 1主2从
其中仲裁节点对性能没有要求可以在任意机器部署
如需备份可以搭建一个延迟节点(不参与选举)
节点数量建议为奇数
# 安装
主、从三台机器执行如下流程安装
# 下载
mongodb 4.0.20 版本稳定版地址
mongodb 版本 中位数偶数代表稳定版 奇数代表开发版
添加 ropo
vi /etc/yum.repos.d/mongodb-org-4.0.repo
内容
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
# 安装
sudo yum install -y mongodb-org
如果不允许使用上面的yum源安装,那么就使用本地 rpm 包进行安装,执行 yum本地安装
验证安装
mongod -version
配置开机启动
systemctl enable mongod.service
# 系统环境基础配置
# Linux 配置 NUMA (如果支持)
在非统一内存访问(NUMA)的系统上运行MongoDB有可能会造成一系列运维问题,包括一段时间内的低效性能以及高的系统进程使用。
见 NUMA 配置
如果安装了 numactl, 可以修改mongod.service以使用 numactl 启动MongoDB
vi /usr/lib/systemd/system/mongod.service
找到 ExecStart=/usr/bin/mongod $OPTIONS 修改为 ExecStart=/usr/bin/numactl --interleave=all /usr/bin/mongod $OPTIONS
# Linux Kernel 和 File Systems
当在Linux上运行MongoDB时,您应该使用Linux内核版本2.6.36或更高版本,使用XFS或EXT4文件系统。 推荐使用XFS
- 如果使用XFS文件系统,至少使用Linux内核的2.6.25版本。
- 在Red Hat Enterprise Linux和ContOS上,至少使用Linux内核的2.6.18-194版本
设置 vm.swappiness = 1
查看当前配置
cat /proc/sys/vm/swappiness
修改配置
vi /etc/sysctl.conf
修改为:
vm.swappiness = 1
设置 net.ipv4.tcp_keepalive_time
vi /etc/sysctl.conf
设置为:
net.ipv4.tcp_keepalive_time = 300
# 目录约定
系统服务目录
/usr/lib/systemd/system/mongod.service
配置目录
/etc/mongod.conf
keyfile
/etc/mongodb.key
日志
目录 /var/log/mongodb/ 日志文件 mongod.log
数据目录
/data/mongo
# Mongodb主节点配置
以下IP 端口 请填写实际环境中的
# 一、建立Mongodb数据存放目录
mkdir /data/mongo
chown -R mongod:mongod /data/mongo
# 二、配置
# 创建复制集key
TIP
注意: 主节点运行以下命令
openssl rand -base64 512 > /etc/mongodb.key
chmod 600 /etc/mongodb.key
chown -R mongod:mongod /etc/mongodb.key
# 修改 MongoDB配置文件
vi /etc/mongod.conf
文件内容:
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Where and how to store data.
storage:
dbPath: /data/mongo
journal:
enabled: true
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIpAll: true
security:
authorization: enabled
keyFile: /etc/mongodb.key
# 复制集
replication:
oplogSizeMB: 10240
replSetName: ec_rs_1
# 三、 运行
# 配置开机启动
systemctl enable mongod
# 启动
systemctl start mongod
# Mongodb从节点配置
# 一、建立Mongodb数据存放目录
mkdir /data/mongo
chown -R mongod:mongod /data/mongo
# 二、创建配置文件
# COPY复制集key
ps: copy主节点的
/etc/mongodb.key到/etc目录
执行:
chmod 600 /etc/mongodb.key
chown -R mongod:mongod /etc/mongodb.key
# 创建MongoDB配置文件
vi /etc/mongod.conf
文件内容:
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Where and how to store data.
storage:
dbPath: /data/mongo
journal:
enabled: true
# how the process runs
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
# network interfaces
net:
port: 27017
bindIpAll: true
security:
authorization: enabled
keyFile: /etc/mongodb.key
# 复制集
replication:
oplogSizeMB: 10240
replSetName: ec_rs_1
# 三、 运行
# 配置开机启动
systemctl enable mongod
# 启动
systemctl start mongod
# 复制集配置
TIP
进入主节点进行配置
连接进入主节点
mongo
进入 admin 数据库
use admin
复制集初始化
config={"_id":"ec_rs_1",
"members":[
{"_id":0,"host":"<实际IP>:27017","priority":1},
{"_id":1,"host":"<从节点IP1>:27017","priority":1},
{"_id":2,"host":"<从节点IP2>:27017","priority":1},
]
}
rs.initiate(config)
创建管理员用户
db.getSiblingDB("admin").createUser({
user: 'admin',
pwd: 'Smart',
roles: [
{ "role": "userAdminAnyDatabase", db: "admin" },
{ "role": "clusterAdmin", "db": "admin" },
{ "role": "dbAdminAnyDatabase", "db": "admin" },
{ "role": "root", db: "admin" }
]
});
认证
db.auth('用户名','密码')
db.auth('admin','Smart')
查看复制集状态
rs.status()
# 运维命令
注册到开机启动
systemctl enable mongod.service
启动
systemctl start mongod.service
关闭
systemctl stop mongod.service
重启
systemctl restart mongod.service