mongo复制集安装文档(内部认证+用户认证)

时间:2024-01-22 09:51:21

mongo复制集安装文档(内部认证+用户认证)

要求

  • 操作系统:Unbuntu Server 16.04
  • mongodb版本:3.6.9
  • 部署要求:复制集

0. 前提条件

  • 按要求安装完成操作系统,Unbuntu Server 16.04
  • 下载好mongo数据的tgz包,MongoDB 3.6.9下载地址

    1. 安装mongodb

    1.1 上传文件并解压

  • 上传安装文件mongodb-linux-x86_64-ubuntu1604-3.6.9.tgz到/tmp 文件夹下
  • 解压mongodb-linux-x86_64-ubuntu1604-3.6.9.tgz
#ubuntu 如果在其他目录下进行解压,可能会存在权限问题
sudo tar -xvf mongodb-linux-x86_64-ubuntu1604-3.6.9.tgz
  • 将解压出来的文件夹,剪切到/opt目录,并重命名为mongodb
#sudo 命令执行是需要输入登录密码
sudo mv mongodb-linux-x86_64-ubuntu1604-3.6.9 /opt/mongodb

1.1 创建mongodb用户

sudo useradd mongodb

1.2 mongodb配置文件

  • 实例配置文件,统一放在/etc/mongodb目录下
  • 复制集至少需要三个以上的实例,根据实际部署情况部署
  • 注意事项
    • 一个实例一个配置文件
    • 同一个服务器多个实例配置文件,注意修改端口、数据库文件存放目录、日志文件存放目录
    • 复制集下的所有节点配置一个集群名称
#在/etc下创建mongodb目录
sudo mkdir /etc/mongodb
#在/etc/mongodb创建mongo实例的配置文件
sudo vi /etc/mongodb/mongod.conf
#在配置文件中写入以下配置
==========================配置文件分割线=============================
# mongod.conf

storage:
  dbPath: /u01/mongodb
  journal:
    enabled: true
  directoryPerDB: true
  engine: wiredTiger
  wiredTiger:
    engineConfig:
      cacheSizeGB: 1
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: snappy

systemLog:
  destination: file
  logAppend: false 
  path: /var/log/mongodb/mongod.log

# network interfaces
net:
  port: 37017
  bindIp: 0.0.0.0

processManagement:
  timeZoneInfo: /usr/share/zoneinfo

security:
  authorization: enabled
  clusterAuthMode: keyFile
  keyFile: /etc/mongodb/faceai.key

replication:
  oplogSizeMB: 1024
  replSetName: faceai
==========================配置文件分割线=============================
# 配置说明
# mongodb3版本的配置文件以缩进的方式来表示层级。
storage.dbPath :数据库文件存放目录
systemLog.path :日志文件存放目录
net.port :实例监听端口 #同一台服务器的多个实例不能一样,注意修改
net.bindIp :端口监听当那些IP上,0.0.0.0表示全部IP
security :关于安全认证登录的
replication.replSetName :集群名称,统一个集群的每个实例保持一致

1.3 本次演示实例介绍

  • 实例规划
    • 实例1 :用于存数据
      • 配置文件:/etc/mongodb/mongod1.conf
      • 监听端口:37017
      • 数据目录:/u01/mongodb1
      • 日志目录:/var/log/mongodb1
    • 实例2:用于存数据
      • 配置文件:/etc/mongodb/mongod2.conf
      • 监听端口:38017
      • 数据目录:/u01/mongodb2
      • 日志目录:/var/log/mongodb2
    • 实例3:用于存仲裁
      • 配置文件:/etc/mongodb/mongod_arb.conf
      • 监听端口:39017
      • 数据目录:/u01/mongodb_arb
      • 日志目录:/var/log/mongodb_arb
      #由于权限问题,Ubuntu Server系统先切换到/tmp目录下
      cd /tmp
      #使用openssl生成秘钥文件
      sudo openssl rand -base64 102 > .faceai.key
      #将生成的文件剪切到 /etc/mongodb目录下
      sudo mv .faceai.key /etc/mongodb/
      #更改文件属主属组
      sudo chown mongodb.mongodb /etc/mongodb/.faceai.key
      #更改文件权限为600
      sudo chmod 600 .faceai.key

      1.4 生成秘钥文件

  • 在配置文件security.keyFile 指定的秘钥文件,需要手动生成
  • 秘钥文件的要求:
    • 内容:以base64编码集中中的字符进行编写,即字符串只能包含a-z、A-Z、+、/
    • 长度不能超过1000字节
    • 权限最多到600(如果权限太大,实例是无法启动的)
    • 如果是多台服务器,需要将生成的秘钥文件复制到其他服务器的/etc/mongodb/下

1.5 配置文件授权

#授权目录给mongodb用户
#1.配置文件目录授权
sudo
chown -R mongodb.mongodb /etc/mongodb

1.6 创建目录并授权

#创建数据库文件存放目录(这是shell命令行展开,意思就是在/u01下一次性创建3个目录)
sudo mkdir -p /u01/{mongodb1,mongodb2,mongodb_arb}
#创建日志文件存放目录
sudo mkdir -p /var/log/{mongodb1,mongodb2,mongodb_arb}
#1.数据库文件存放目录授权
sudo chown -R mongodb.mongodb /u01/{mongodb1,mongodb2,mongodb_arb}
#2.日志文件存放目录授权
sudo chown -R mongodb.mongodb /var/log/{mongodb1,mongodb2,mongodb_arb}

2 配置mongo启动文件

  • Ubuntu Server 16.04 采用的是与CentOS 7 一样的 systemctl 管理服务,使用上大同小异.
  • Ubuntu Server 16.04 的服务配置文件在 /lib/systemd/system目录下,只需要在此目录下创建mongodb的启动文件即可
  • 本次创建3个服务文件:(怎么创建不在详细解释,无非就是编辑文件,复制下面的模板,改下相关配置)
#创建配置文件 sudo  vi /lib/systemd/system/mongod1.service
/lib/systemd/system/mongod1.service
/lib/systemd/system/mongod2.service
/lib/systemd/system/mongod_arb.service
  • 配置文件模板,需要调整的地方就ExecStart 、PIDFile
    • ExecStart : 启动参数
    • PIDFile :进程文件
==========================配置文件分割线=============================
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual

[Service]
User=mongodb
Group=mongodb
ExecStart=/opt/mongodb/bin/mongod --config /etc/mongodb/mongod.conf
PIDFile=/var/run/mongodb/mongod.pid
# 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

==========================配置文件分割线=============================

3 启动mongo实例

#systemctl管理服务,如果配置新建或发生变化,启动前需要重新加载下配置文件
systemctl daemon-reload

#启动mongo实例
systemctl start mongod1
systemctl start mongod2
systemctl start mongod_arb

#停止mongo实例
systemctl stop mongod1
systemctl stop mongod2
systemctl stop mongod_arb

#查看mongo状态
systemctl status mongod1
systemctl status mongod2
systemctl status mongod_arb

#设置mongo开机自启
systemctl enable mongod1
systemctl enable mongod2
systemctl enable mongod_arb

#查看所有开机自启的服务
systemctl list-unit-files|grep enabled

4 初始化复制集

#链接mongo实例
/opt/mongodb/bin/mongo 127.0.0.1:37017
#集群初始化随便找一个节点(数据节点),host一定要写IP别写 localhost和127.0.0.1
#第一个 _id 是集群名称,与配置文件中的replication.replSetName一致
#第一个 _id 是集群列表的排序
#host是实例节点
rs.initiate({_id: 'faceai', members: [{_id: 0, host: '192.168.102.2:37017'}]})
#登录认证:在admin库下创建账号,账号和密码根据要求替换为生成环境要求的
use admin
db.createUser({user:"test",pwd:"123456", roles:[{role:"userAdminAnyDatabase",db:"admin"}]}); 
#登录
db.auth('test','123456')
#授权账号管理集群权限
db.grantRolesToUser("test", ["clusterAdmin"])
#向集群添加一个普通节点
rs.add('192.168.102.2:38017')
#向集群添加一个仲裁节点
rs.addArb('192.168.102.2:39017')
#查看集群状态
rs.status()

posted on 2018-12-06 17:18 自学情商 阅读(...) 评论(...) 编辑 收藏