# 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

最后更新于: 11/9/2020, 11:13:44 AM