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 ...
随机推荐
- Vue 先初始化子组件再初始化父组件的方法(自定义父子组件mounted执行顺序)
写在前面: 本篇内容内容主要讲述了,在使用 Konva 进行开发过程中遇到的一些问题.(既然是组件加载顺序,主要牵扯到的就是,父子组件的关系,父子组件的生命周期) 众所周知,Vue中父子组件生命周期的 ...
- 零基础实现Java直播(二):实现流程
一.前提条件 在实现Java直播前,请确保: 已在项目中集成 ZEGO Express SDK,详情请参考 快速开始 - 集成. 已在 ZEGO 控制台 创建项目,并申请有效的 AppID 和 App ...
- PNG结构
参考此博客 PNG的文件头总是固定的八个字节 89 50 4E 47 0D 0A 1A 0A 数据块长度13 00 00 00 0D 文件头数据块标识IDCH 49 48 44 52 13位数据块(I ...
- 2023年icpc大学生程序设计竞赛-nhr
icpc的省赛是在洛阳举办,第一次出省,还是两天,第一次离开郑州去别的城市比赛,心情更多的是激动,非常感谢老师给了这次机会,第一天20号,打完热身赛之后回寝室,和队友一起看了一下去年省赛的题,感觉还是 ...
- [SCOI2005] 栅栏【题解】
简要题意 木材店老板给出一个整数 \(m\) 和 \(m\) 个木板的长度.老板给出的木板可以随意无损耗切割. 约翰给出一个整数 \(n\) 和所需要的 \(n\) 个木板的长度. 求约翰能得到最多木 ...
- Linux 设置 VI 快捷键 -- 在多个打开的文件中切换
场景 部署完一系列服务后,想要查看所有服务的 catelina.out 日志: vi $(find /data/http | grep catalina.out | grep -v bak) 这个命令 ...
- 如何在 Ubuntu 20.04 上安装 KVM
如何在 Ubuntu 20.04 上安装 KVM 遇到两个问题: 没有创建 /etc/qemu/bridge.conf 文件 ERROR internal error: /usr/lib/qemu/q ...
- 关于vue的一些使用总结
了解响应式原理后对代码的一点小重构 在操作一个响应式变量的时候,可能会多次去取这个响应式变量的值,这就意味着会多次执行依赖收集中的get,可以用一个局部变量缓存下来,这样只需要一次get操作. // ...
- 2023-7-27WPF的ContextMenu的传参绑定方式
WPF的ContextMenu的绑定方式 [作者]长生 ContextMenu为何不能正常绑定 在wpf中ContextMenu和ToolTip一样都是弹出层,与VisualTree已经分离了,只不过 ...
- Unity UGUI的Outline(描边)组件的介绍及使用
Unity UGUI的Outline(描边)组件的介绍及使用 1. 什么是Outline(描边)组件? Outline(描边)组件是Unity UGUI中的一种特效组件,用于给UI元素添加描边效果.通 ...