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 生成秘钥文件
- 实例1 :用于存数据
- 在配置文件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()