文章目录
架构
搭建环境
mongodb版本:4.0.6
华为云服务器Centos7.5
ip | 角色 |
---|---|
192.168.1.13 | 主 |
192.168.1.109 | 从 |
192.168.1.159 | 监听者 |
下载安装
1. 下载rpm包
官网下载地址
- 服务端mongod:mongodb-org-server
- 客户端mongo:mongodb-org-shell
wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/RPMS/mongodb-org-server-4.0.6-1.el7.x86_64.rpm
wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/RPMS/mongodb-org-shell-4.0.6-1.el7.x86_64.rpm
2. 安装
rpm -ivh mongodb-org-server-4.0.6-1.el7.x86_64.rpm
rpm -ivh mongodb-org-shell-4.0.6-1.el7.x86_64.rpm
3. 检查安装成功
mongod -version
mongo -version
单机授权
1. 启动三台单机节点
修改配置,启动三台机器mongod服务端
#修改dbpath到指定目录
#修改bindid为0.0.0.0
vim /etc/mongod.conf
#启动mongod
mongod -f /etc/mongod.conf
修改后的配置文件
# mongod.conf
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Where and how to store data.
# 数据目录 分配给一个大磁盘 默认为/data/db
storage:
dbPath: /data/mongodb
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# 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
# 此处bindIp修改为0.0.0.0,否则无法通信
net:
port: 27017
bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
#security:
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
bindIp修改为0.0.0.0,否则无法通信!
2. 主节点单机授权用户
登录主节点(13)
#进入mongo命令行
mongo
#shell内输入
use admin;
db.createUser({user:"admin",pwd:"adminpassword",roles:[{role:"root",db:"admin"},{role:"userAdminAnyDatabase",db:"admin"}]});
admin用户必须单机节点插入!用于之后创建集群时的授权
因为配置集群时需要授权,但那时无法创建admin用户
集群部署
1. 配置密钥文件
主节点生成秘钥文件mongoKeyFile
#进入dbpath目录
cd /data/mongodb
openssl rand -base64 753 > mongoKeyFile
chmod 600 yourKeyFile
将该文件拷贝到其他两台服务器对应位置,实现文件授权
2. 修改配置文件
修改3个节点的配置文件为集群配置vim /etc/mongod.conf
security:
authorization: enabled
#指向秘钥文件
keyFile: /data/mongodb/mongoKeyFile
replication:
#oplogSize的大小,单位为M,建议空闲磁盘的5%
oplogSizeMB: 10240
#复制集的名称,需要记住
replSetName: myReplSet
3. 重启服务
重启
#关闭
mongod --shutdown -f /etc/mongod.conf
#启动
mongod -f /etc/mongod.conf
4. 主节点配置集群
主节点(13)登录mongo
mongo
# 使用admin
use admin;
# 鉴权
db.auth('admin','adminpassword');
# 配置集群的主从节点,_id为之前配置的复制集名
var cfg={_id:'myReplSet',members:[{_id:0,host:'192.168.1.13:27017'},{_id:1,host:'192.168.1.109:27017'}]}
# 初始化,成功返回1
rs.initiate(myReplSet);
# 添加arbiter节点
rs.addArb("192.168.1.159:27017");
# 查看集群状态,应该有3个节点
rs.status()
集群测试
主节点(13)登录mongo
此时mongo shell 显示为myReplSet:PRIMARY>
# 使用admin
use admin;
# 鉴权
db.auth('admin','adminpassword');
# 创建数据库
use test;
# 创建用户
db.createUser({user:"testadmin",pwd:"testpassword",roles:[{role:"dbOwner",db:"test"}]});
# 插入数据
db.testCol.insert({id:1,name:'monkey'});
登录从节点,查询是否有主库插入的数据
此时mongo shell 显示为myReplSet:SECONDARY>
# 使用test
use test;
# 鉴权
db.auth('testdba','testpassword');
# 允许读
rs.slaveOk();
# 查询
db.testCol.find();
如果数据同步到了从节点,则复制集搭建成功
Mongo常用命令CHEETSHEET
# mongod
mongod -version
mongod --shutdown -f /etc/mongod.conf
mongod -f /etc/mongod.conf
# mongo
mongo -version
mongo x.x.x.x:27017/admin -uadmin
# mongo shell
show dbs;
use test;
db.createUser({user:"testadmin",pwd:"testpassword",roles:[{role:"dbOwner",db:"test"}]});
db.auth('testadmin','testpassword');
db.testCol.insert({id:1,name:'monkey'});
db.testCol.find();