1.NoSQL-lesson14-MongoDB核心技术-运维篇
逻辑结构
Mongodb 逻辑结构 MySQL逻辑结构
库database 库
集合(collection) 表
文档(document) 数据行
选择之所以称为为选择,肯定是痛苦的!
------>oldguo
安装部署
1.系统准备
(1)redhat或centos6.x以上系统
(2)系统开发报完整
(3)IP地址和hosts文件解析正常
(5)关闭大页内存机制
##############################################
root用户下
在 /etc/rc.local文件最后添加如下代码:
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
2.mongodb安装
创建用户和组
useradd mongod
passwd mongod
创建mongodb目录
mkdir -p /mongodb/{conf,log,data}
tar xf mongodb-linux-x86_64-rhel70-4.2.7.tgz
cp -r mongodb-linux-x86_64-rhel70-4.2.7/bin/ /mongodb
# 设置目录结构权限
chown -R mongod. /mongodb
设置环境变量
su - mongod
vi .bash_profile
export PATH=/mongodb/bin:$PATH source .bash_profile
启动mongodb
mongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork
登录mongodb
mongo
使用配置文件
YAML模式 NOTE:
YAML does not support tab characters for indentation: use spaces instead. --系统日志有关
systemLog:
destination: file
path: "/mongodb/log/mongodb.log" --日志位置
logAppend: true --日志以追加模式记录 --数据存储有关
storage:
journal:
enabled: true
dbPath: "/mongodb/data" --数据路径的位置 -- 进程控制
processManagement:
fork: true --后台守护进程
pidFilePath: <string> --pid文件的位置,一般不用配置,可以去掉这行,自动生成到data中 --网络配置有关
net:
bindIp: <ip> -- 监听地址
port: <port> -- 端口号,默认不配置端口号,是27017
-- 安全验证有关配置
security:
authorization: enabled --是否打开用户名密码验证 ------------------以下是复制集与分片集群有关---------------------- replication:
oplogSizeMB: <NUM>
replSetName: "<REPSETNAME>"
secondaryIndexPrefetch: "all" sharding:
clusterRole: <string>
archiveMovedChunks: <boolean> ---for mongos only
replication:
localPingThresholdMs: <int> sharding:
configDB: <string>
---
++++++++++++++++++++++
YAML例子
cat > /mongodb/conf/mongo.conf <<EOF
systemLog:
destination: file
path: "/mongodb/log/mongodb.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/mongodb/data/"
processManagement:
fork: true
net:
port: 27017
bindIp: 192.169.0.11,127.0.0.1
EOF 重启mongodb
mongod -f /mongodb/conf/mongo.conf --shutdown
mongod -f /mongodb/conf/mongo.conf
[root@db01 ~]# cat > /etc/systemd/system/mongod.service <<EOF
[Unit]
Description=mongodb
After=network.target remote-fs.target nss-lookup.target
[Service]
User=mongod
Type=forking
ExecStart=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/mongodb/bin/mongod --config /mongodb/conf/mongo.conf --shutdown
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF [root@db01 ~]# systemctl restart mongod
[root@db01 ~]# systemctl stop mongod
[root@db01 ~]# systemctl start mongod
test:登录时默认存在的库
管理MongoDB有关的系统库
admin库:系统预留库,MongoDB系统管理库
local库:本地预留库,存储关键日志
config库:MongoDB配置信息库 show database/show dbs
show tables/show collection
use admin
db/select database()
db.[TAB][TAB]
db.oldboy.[TAB][TAB]
db.oldboy.help()
rs.[TAB][TAB]
rs.help()
sh.[TAB][TAB]
sh.help()
mongo | mysql |
库 | 库 |
集合 | 表 |
文档 | 数据行 |
进入test表并且丢弃(删除)
>use test
>db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }
集合的操作:
>use app
>db.createCollection('a')
{ "ok" : 1 }
app> db.createCollection('b')
方法2:当插入一个文档的时候,一个集合就会自动创建。 在oldboy库中添加(增加/创建)数据
use oldboy
db.test.insert({name:"shenzhen"})
db.stu.insert({id:100,name:"luohu",age:20,gender:"it"})
查看库中的文档
show tables;
继续创建
db.stu.insert({id:102,name:"list"})
db.stu.insert({a:"b",c:"d"})
db.stu.insert({a:1,c:2})
查看stu文档中的数据
> db.stu.find()
{ "_id" : ObjectId("5ed10863d6b2b3443565354e"), "id" : 101, "name" : "guanzhou", "age" : 20, "genber" : "m" }
文档的操作:
数据录入:
#for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new
Date()})}
for (i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()})} 查询数据行数:
>db.log.count()
全表查询 log:
>db.log.find()
设置每页显示50条记录:
>DBQuery.shellBatchSize=50;
按照条件查询:
>db.log.find({uid:999})
以标准的json格式显示数据:
>db.log.find({uid:999}).pretty()
{
"_id" : ObjectId("5cc516e60d13144c89dead33"),
"uid" : 999,
"name" : "mongodb",
"age" : 6,
"date" : ISODate("2019-04-28T02:58:46.109Z")
} 删除集合中所有记录:
>use app
app> db.log.remove({})
查看 集合存储信息:
app> db.log.totalSize() //集合中索引+数据压缩存储之后的大小
use admin
db.createUser
{
user: "<name>",
pwd: "<cleartext password>",
roles: [
{ role: "<role>",
db: "<database>" } | "<role>",
...
]
} 基本语法说明:
user:用户名
pwd:密码
roles:
role:角色名
db:作用对象
role: root, readWrite,read
验证数据库:
mongo -u oldboy -p 192.168.0.10/oldboy
用户管理例子:
创建超级管理员: 管理所有数据库(必须use admin再去创建)
$ mongo
use admin
db.createUser(
{
user: "root",
pwd: "root123",
roles: [ { role: "root", db: "admin" } ]
}
) 验证用户:
> db.auth('root','root123')
1
security:
authorization: enabled
mongod -f /mongodb/conf/mongo.conf --shutdown
mongod -f /mongodb/conf/mongo.conf
登录验证
mongo -uroot -proot123 admin
mongo -uroot -proot123 192.168.0.10/admin
mongo -uroot -proot123 192.168.0.10/oldboy 或者
mongo
use admin
db.auth('root','root123')
查看用户
use admin
db.system.users.find().pretty()
创建普通用户
在oldbiy库下创建
use oldboy
db.createUser(
{
user: "app01",
pwd: "app01",
roles: [ { role: "readWrite" , db: "oldboy" }]
}
) 验证:
mongo -uapp1 -papp1 app
查询mongodb中的用户信息
mongo -uroot -proot123 192.168.0.10/admin
db.system.users.find().pretty()
删除用户
db.createUser({user: "app02",pwd: "app02",roles: [ { role: "readWrite" , db: "oldboy1" } ]})
mongo -uroot -proot123 10.0.0.53/admin
use oldboy1
db.dropUser("app02")
用户管理注意事项
1.建用户要有验证库,管理员admin,普通用户是要管理的库
2.登录时,注意验证库
mongo -uapp01 -papp01 192.168.0.10:27017/oldboy
3.重点参数
net:
port: 27017
bindIp: 192.168.0.10.127.0.0.1
security:
authorization: enabled
28017、28018、28019、28020
创建多个目录
su - mongod
mkdir -p /mongodb/28017/{conf,log,data}
mkdir -p /mongodb/28018/{conf,log,data}
mkdir -p /mongodb/28019/{conf,log,data}
mkdir -p /mongodb/28020/{conf,log,data}
创建多个配置文件
touch /mongodb/28017/conf/mongo.conf
touch /mongodb/28018/conf/mongo.conf
touch /mongodb/28019/conf/mongo.conf
touch /mongodb/28020/conf/mongo.conf
配置文件详细内容
cat > /mongodb/28017/conf/mongo.conf <<EOF
systemLog:
destination: file
path: /mongodb/28017/log/mongodb.log
logAppend: true
storage:
journal:
enabled: true
dbPath: /mongodb/28017/data
directoryPerDB: true
#engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
processManagement:
fork: true
net:
bindIp: 192.168.0.10,127.0.0.1
port: 28017
replication:
oplogSizeMB: 2048
replSetName: my_repl
EOF 拷贝文件,并修改端口:
\cp /mongodb/28017/conf/mongo.conf /mongodb/28018/conf/
\cp /mongodb/28017/conf/mongo.conf /mongodb/28019/conf/
\cp /mongodb/28017/conf/mongo.conf /mongodb/28020/conf/ sed 's#28017#28018#g' /mongodb/28018/conf/mongo.conf -i
sed 's#28017#28019#g' /mongodb/28019/conf/mongo.conf -i
sed 's#28017#28020#g' /mongodb/28020/conf/mongo.conf -i
启动多个实例备用
mongod -f /mongodb/28017/conf/mongo.conf
mongod -f /mongodb/28018/conf/mongo.conf
mongod -f /mongodb/28019/conf/mongo.conf
mongod -f /mongodb/28020/conf/mongo.conf
netstat -nutlp|grep 280
ps -ef|grep mongo
1主2从,从库普通从库
登录到28017实例,也将这个实例作为主节点
mongo --port 28017 admin
定义个变量名(config)可以自定义, 组名"my_repl"需要和配置文件中一致, 成员有3个实例
> config = {_id: 'my_repl', members: [
{_id: 0, host: '192.168.0.10:28017'},
{_id: 1, host: '192.168.0.10:28018'},
{_id: 2, host: '192.168.0.10:28019'}]
}
构建集群(初始化)
> rs.initiate(config)
查询复制集状态
> rs.status();
mongo -port 28017 admin
config = {_id: 'my_repl', members: [
{_id: 0, host: '192.168.0.10:28017'},
{_id: 1, host: '192.168.0.10:28018'},
{_id: 2, host: '192.168.0.10:28019',"arbiterOnly":true}]
}
rs.initiate(config)
复制集群管理操作
查看复制集状态
rs.status(); //查看整体复制集状态
rs.isMaster(); //查看当前是否主节点
rs.conf(); //查看复制集配置信息
添加删除节点
rs.remove("ip:port"); // 删除一个节点
rs.add("ip:port"); // 新增从节点
rs.addArb("ip:port"); // 新增仲裁节点
例子:
添加 arbiter节点
1、连接到主节点
[mongod@db03 ~]$ mongo --port 28018 admin
2、添加仲裁节点
> rs.addArb("192.168.0.10:28020")
3、查看节点状态
> rs.isMaster()
{
"hosts" : [
"192.168.0.10:28017",
"192.168.0.10:28018",
"192.168.0.10:28019"
],
"arbiters" : [
"192.168.0.10:28020"
], rs.remove("ip:port"); // 删除一个节点
例子:
> rs.remove("192.168.0.10:28019");
{ "ok" : 1 }
> rs.isMaster()
rs.add("ip:port"); // 新增从节点
例子:
> rs.add("192.168.0.10:28019")
{ "ok" : 1 }
> rs.isMaster()
特殊从节点
arbiter节点: 主要负责选主过程中的投票,但是不存储任何数据,页不提供任何服务
hidden节点: 隐藏节点,不参与选主,也不对外提供服务
delay节点: 延时节点,数据落后于主库一段时间,因为数据是延时的,也不应该提供服务或参与选主,所以通常会配合hidden(隐藏)
一般情况下将delay+hidden一起配置使用
rs.conf(); 可以查看集群配置信息包括节点id
cfg=rs.conf()
cfg.members[4].priority=0
cfg.members[4].hidden=true
cfg.members[4].slaveDelay=120
rs.reconfig(cfg) 取消以上配置
cfg=rs.conf()
cfg.members[4].priority=1
cfg.members[4].hidden=false
cfg.members[4].slaveDelay=0
rs.reconfig(cfg)
配置成功后,通过以下命令查询配置后的属性
rs.conf();
查看副本集的配置信息
admin> rs.conf()
查看副本集各成员的状态
admin> rs.status()
++++++++++++++++++++++++++++++++++++++++++++++++
--副本集角色切换(不要人为随便操作)
admin> rs.stepDown()
注:
admin> rs.freeze(300) //锁定从,使其不会转变成主库
freeze()和stepDown单位都是秒。
+++++++++++++++++++++++++++++++++++++++++++++
设置副本节点可读:在副本节点执行
admin> rs.slaveOk()
eg:
admin> use app
switched to db app
app> db.createCollection('a')
{ "ok" : 0, "errmsg" : "not master", "code" : 10107 } 查看副本节点(监控主从延时)
admin> rs.printSlaveReplicationInfo()
source: 192.168.1.22:27017
syncedTo: Thu May 26 2016 10:28:56 GMT+0800 (CST)
0 secs (0 hrs) behind the primary OPlog日志(备份恢复章节)
1.NoSQL-lesson14-MongoDB核心技术-运维篇的更多相关文章
- Flume实战案例运维篇
Flume实战案例运维篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Flume概述 1>.什么是Flume Flume是一个分布式.可靠.高可用的海量日志聚合系统,支 ...
- MongoDB 常用运维实践总结
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 一.MongoDB 集群简介 MongoDB是一个基于分布式文件存储的数据库,其目的在于为WE ...
- python自动化运维篇
1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...
- 【mongoDB运维篇④】Shard 分片集群
简述 为何要分片 减少单机请求数,降低单机负载,提高总负载 减少单机的存储空间,提高总存空间. 常见的mongodb sharding 服务器架构 要构建一个 MongoDB Sharding Clu ...
- 【mongoDB运维篇②】备份与恢复(导入与导出)
导入/导出可以操作的是本地的mongodb服务器,也可以是远程的服务器 所以,都有如下通用选项: -h host 主机 --port port 端口 -u username 用户名 -p passwd ...
- 【mongoDB运维篇①】用户管理
3.0版本以前 在mongodb3.0版本以前中,有一个admin数据库, 牵涉到服务器配置层面的操作,需要先切换到admin数据库.即 use admin , 相当于进入超级用户管理模式,mongo ...
- 【mongoDB运维篇③】replication set复制集
介绍 replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性,总结下来有以下好处: 数据备份与恢复 读写分离 MongoDB 复制集的结构以及基本概念 正如上图所示,Mon ...
- MongoDB日常运维操作命令小结
总所周知,MongoDB是一个NoSQL非数据库系统,即一个数据库可以包含多个集合(Collection),每个集合对应于关系数据库中的表:而每个集合中可以存储一组由列标识的记录,列是可以自由定义的, ...
- MongoDB七-运维技术
复制来自:http://www.cnblogs.com/huangxincheng/archive/2012/03/08/2384571.html 这一篇我们以管理员的视角来看mongodb,作为一名 ...
- MongoDB安全运维
0×00 MongoDB权限介绍 1.MongoDB安装时不添加任何参数,默认是没有权限验证的,登录的用户可以对数据库任意操作而且可以远程访问数据库,需以–auth参数启动. 2.在刚安装完毕的时候M ...
随机推荐
- 每日一题 力扣 1377 https://leetcode.cn/problems/frog-position-after-t-seconds/
力扣 1377 https://leetcode.cn/problems/frog-position-after-t-seconds/ 这道题目用dp去做,构建邻接矩阵,做的时候需要注意题目条件,如果 ...
- CodeTON Round 5 (Div. 1 + Div. 2, Rated, Prizes!) A-E
比赛链接 A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; bool solve() { i ...
- [爬虫]1.2.1 HTML标签和属性
HTML(HyperText Markup Language)是一种用于创建网页的标记语言.HTML文档由一系列的HTML标签构成,每个标签都有自己的意义和用途.HTML标签通常成对出现,由一个开始标 ...
- css美化
编辑网页文本 span标签:能让某几个字凸显出来结构:span{color:red:} <span>123<span> 字体样式:一般设置两个字体.如果浏览器第一个字体不 ...
- redis集群:MASTER aborted replication with an error: NOAUTH Authentication required.
发现个问题:redis集群所在服务器,磁盘空间很快就被占满,使用 "du -sh *"查看每个文件夹的大小,发现redis集群三个从节点的日志文件占用空间很大. 下面记录问题排查及 ...
- Dokcer学习之旅(2)——Dockerfile基础应用
什么是Dockerfile? 从docker commit 的学习中,我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本, ...
- Linux字符界面安装更新VMware Tools
注:yeesn为我自己的用户名,实际操作中改用自己的用户名 1.切换到虚拟光驱目录 cd /media/yeesn/VMware Tools 2.复制压缩包到桌面 cp VMwareTools-xxx ...
- Python生成30万条Excel 测试数据
使用Python生成30万条Excel 测试数据 from openpyxl import Workbook from concurrent.futures import ThreadPoolExec ...
- KIOPTRIX: LEVEL 1.1 (#2) 常规命令注入+内核提权
0×02 Vulnhub靶机渗透总结之 KIOPTRIX: LEVEL 1.1 (#2) 系列专栏:Vulnhub靶机渗透系列 欢迎大佬:点赞️收藏关注 首发时间: 2023年8月20日 如有错误 还 ...
- 微信小程序上传文件操作示范
社会实践心得体会格式要求 提交的心得体会应为word文档,且图文并茂,全文段前.段后0,1.5倍行距. 题目:自拟,方正小标宋简体,小二号,加粗,居中. 个人信息:题目下方,宋体,小四号,加粗,居中, ...