NoSQL
2023-12-11 17:55:07 0 举报
AI智能生成
登录查看完整内容
Mongodb
作者其他创作
大纲/内容
产品介绍
在vi /etc/rc.local最后添加如下代码if test -f /sys/kernel/mm/transparent_hugepage/enabled; thenecho never > /sys/kernel/mm/transparent_hugepage/enabledfiif test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defragfi cat /sys/kernel/mm/transparent_hugepage/enabledalways madvise [never] cat /sys/kernel/mm/transparent_hugepage/defragalways madvise [never]https://docs.mongodb.com/manual/tutorial/transparent-huge-pages/
关闭THD
mv mongo** /usr/local/mongodb
export PATH=/usr/local/mongodb/bin:$PATH
解压安装并配置环境变量
安装
useradd mongodpasswd mongod
创建所需用户和组
mkdir -p /mongodb/confmkdir -p /mongodb/logmkdir -p /mongodb/data
创建mongodb所需目录结构
chown -R mongod:mongod /mongodb
修改权限
su - mongod vi .bash_profileexport PATH=/usr/local/mongodb/bin:$PATHsource .bash_profile
切换用户并设置环境变量(上面做过)
环境准备
启动的时候会初始化数据库、
su - mongodmongod --dbpath=/mongodb/data --logpath=/mongodb/log/mongodb.log --port=27017 --logappend --fork
启动数据库并初始化数据
mongo
登录mongodb
vim /mongodb/conf/mongo.conflogpath=/mongodb/log/mongodb.logdbpath=/mongodb/dataport=27017logappend=truefork=true
--系统日志有关systemLog:destination: filepath: \"/mongodb/log/mongodb.log\" --日志位置logAppend: true --日志以追加模式记录--数据存储有关storage:journal:enabled: truedbPath: \"/mongodb/data\
例子:vim /mongodb/conf/mongo.confsystemLog: destination: file path: \"/mongodb/log/mongodb.log\" logAppend: truestorage: journal: enabled: true dbPath: \"/mongodb/data/\
普通=或yaml
使用配置文件
关闭mongodbmongod -f /mongodb/conf/mongo.conf --shutdown使用配置文件启动mongodbmongod -f /mongodb/conf/mongo.conf
关闭Mongodb
注意事项
use admindb.createUser({user: \"root\
创建用户
说明
security:authorization: enabled
用户的验证功能
mongo -uroot -proot123 adminmongo -uroot -proot123 10.0.51/admin
登录
use admindb.system.users.find().pretty()
查看用户
子主题
基本语法
用户基本管理
help、db.help()、sh.help()、rs.help()、db.version()、db、db.getName()、show dbs、use admin、db.stats()、db.getMongo()
use test、db.createCollection('a')、db.c.insert({username:\"mongodb\"})、db.c.find()、db.log.renameCollection(\"log1\")
db.dropDatabase()、、db.t1.drop()
基本命令
db.t1.insert({id:1})
db.<集合>.insertOne(<JSON对象>)
db.fruit.insertMany([{name: \"apple\
for(i=0;i<20;i++){ db.log.insert({\"uid\
insert
db.log.find( { \"uid\" : 16 } )
单条件
db.log.find( { \"uid\
db.log.find( { $and : [ {\"uid\" : \"5\
db.log.find( { $or: [{\"uid\
多条件
find
a = 1 {a: 1}a <>1 {a: {$ne: 1}}a > 1 {a: {$gt: 1}}a >= 1 {a: {$gte: 1}}a < 1 {a: {$lt: 1}}a <= 1 {a: {$lte: 1}}
查询条件对照表
查询逻辑对照表
● $lt: 存在并小于● $lte: 存在并小于等于● $gt: 存在并大于● $gte: 存在并大于等于● $ne: 不存在或存在但不等于● $in: 存在并在指定数组中● $nin: 不存在或不在指定数组中● $or: 匹配两个或多个条件中的一个● $and: 匹配全部条件
db.fruit.insertOne({name: \"apple\
db.fruit.find( { \"from.country\" : \"China\" } )
使用 find 搜索子文档
db.fruit.insert([{ \"name\" : \"Apple\
查看单个条件:db.fruit.find({color: \"red\"})
查询多个条件:db.fruit.find({$or: [{color: \"red\
使用 find 搜索数组
db.movies.insertOne( {\"title\" : \"Raiders of the Lost Ark\
// 查找城市是 Rome 的记录db.movies.find({\"filming_locations.city\": \"Rome\"})
使用 find 搜索数组中的对象
db.getCollection('movies').find({\"filming_locations.city\": \"Rome\
db.movies.insertOne( {\"title\" : \"11111\
db.getCollection('movies').find({\"filming_locations\": {$elemMatch:{\"city\":\"bj\
在数组中搜索子对象的多个字段时,如果使用 $elemMatch,它表示必须是同一个子对象满足多个条件。
控制 find 返回的字段
remove 命令需要配合查询条件使用;● 匹配查询条件的的文档会被删除;● 指定一个空文档条件会删除所有文档;● 以下示例:db.testcol.remove( { a : 1 } ) // 删除a 等于1的记录db.testcol.remove( { a : { $lt : 5 } } ) // 删除a 小于5的记录db.testcol.remove( { } ) // 删除所有记录db.testcol.remove() //报错
使用 remove 删除文档
使用 update 更新文档
● 使用 updateOne 表示无论条件匹配多少条记录,始终只更新第一条;● 使用 updateMany 表示条件匹配多少条就更新多少条;● updateOne/updateMany 方法要求更新条件部分必须具有以下之一,否则将报错:• $set/$unset• $push/$pushAll/$pop• $pull/$pullAll• $addToSet● // 报错db.fruit.updateOne({name: \"apple\
● $push: 增加一个对象到数组底部● $pushAll: 增加多个对象到数组底部● $pop: 从数组底部删除一个对象● $pull: 如果匹配指定的值,从数组中删除相应的对象● $pullAll: 如果匹配任意的值,从数据中删除相应的对象● $addToSet: 如果不存在则增加一个值到数组
使用 update 更新数组
● 使用 db.<集合>.drop() 来删除一个集合● 集合中的全部文档都会被删除● 集合相关的索引也会被删除db.colToBeDropped.drop()
使用 drop 删除集合
● 使用 db.dropDatabase() 来删除数据库● 数据库相应文件也会被删除,磁盘空间将被释放use tempDBdb.dropDatabase()show collections // No collectionsshow dbs // The db is gone
使用 dropDatabase 删除数据库
CURD
在 Python 中使用 MongoDB 之前必须先安装用于访问数据库的驱动程序:wget -O /etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repowget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repoyum install -y python3pip3 install pymongo在 python 交互模式下导入 pymongo,检查驱动是否已正确安装:import pymongopymongo.version
安装 Python MongoDB 驱动程序
确定 MongoDB 连接串使用驱动连接到 MongoDB 集群只需要指定 MongoDB 连接字符串即可。其基本格式可以参考文档: Connection String URI Format 最简单的形式是mongodb://数据库服务器主机地址:端口号如:mongodb://127.0.0.1:27017● 初始化数据库连接from pymongo import MongoClienturi = \"mongodb://root:root123@10.0.0.51:27017\"client = MongoClient(uri)client
创建连接
初始化数据库和集合db = client[\"eshop\"]user_coll = db[\"users\"]插入一条新的用户数据new_user = {\"username\": \"nina\
数据库操作:插入数据
通过python操作mongodb
1 复制集的作用
PSS、PSA、一个典型的复制集由3个以上具有投票权的节点组成,包括:• 一个主节点(PRIMARY):接受写入操作和选举时投票• 两个(或多个)从节点(SECONDARY):复制主节点上的新数据和选举时投票• Arbiter(投票节点)
典型复制集结构
当一个修改操作,无论是插入、更新或删除,到达主节点时,它对数据的操作将被记录下来(经过一些必要的转换),这些记录称为 oplog。从节点通过在主节点上打开一个 tailable 游标不断获取新进入主节点的 oplog,并在自己的数据上回放,以此保持跟主节点的数据一致。
数据是如何复制的
具有投票权的节点之间两两互相发送心跳;● 当5次心跳未收到时判断为节点失联;● 如果失联的是主节点,从节点会发起选举,选出新的主节点;● 如果失联的是从节点则不会产生新的选举;● 选举基于 RAFT 一致性算法实现,选举成功的必要条件是大多数投票节点存活;
通过选举完成故障恢复
整个集群必须有大多数节点存活;被选举为主节点的节点必须:• 能够与多数节点建立连接• 具有较新的 oplog• 具有较高的优先级(如果有配置)
影响选举的因素
复制集节点有以下常见的选配项:• 是否具有投票权(v 参数):有则参与投票;• 优先级(priority 参数):优先级越高的节点越优先成为主节点。优先级为0的节点无法成为主节点;• 隐藏(hidden 参数):复制数据,但对应用不可见。隐藏节点可以具有投票仅,但优先级必须为0;• 延迟(slaveDelay 参数):复制 n 秒之前的数据,保持与主节点的时间差。
常见选项
● 关于硬件:• 因为正常的复制集节点都有可能成为主节点,它们的地位是一样的,因此硬件配置上必须一致;• 为了保证节点不会同时宕机,各节点使用的硬件必须具有独立性。● 关于软件:• 复制集各节点软件版本必须一致,以避免出现不可预知的问题。● 增加节点不会增加系统写性能!
复制集注意事项
MongoDB RS(Replica Set)复制集
mkdir -p /mongodb/28017/conf /mongodb/28017/data /mongodb/28017/logmkdir -p /mongodb/28018/conf /mongodb/28018/data /mongodb/28018/logmkdir -p /mongodb/28019/conf /mongodb/28019/data /mongodb/28019/logmkdir -p /mongodb/28020/conf /mongodb/28020/data /mongodb/28020/log
创建目录和配日志文件
\\cp /mongodb/28017/conf/mongod.conf /mongodb/28018/conf/\\cp /mongodb/28017/conf/mongod.conf /mongodb/28019/conf/\\cp /mongodb/28017/conf/mongod.conf /mongodb/28020/conf/sed 's#28017#28018#g' /mongodb/28018/conf/mongod.conf -ised 's#28017#28019#g' /mongodb/28019/conf/mongod.conf -ised 's#28017#28020#g' /mongodb/28020/conf/mongod.conf -i
配置文件
mongod -f /mongodb/28017/conf/mongod.confmongod -f /mongodb/28018/conf/mongod.confmongod -f /mongodb/28019/conf/mongod.confmongod -f /mongodb/28020/conf/mongod.conf
启动
配置复制集
my_repl:PRIMARY> db.movies.insert([ { \"title\" : \"Jaws\
my_repl:SECONDARY> db.movies.find().pretty();注:在mongodb复制集当中,默认从库不允许读写。rs.slaveOk(); 打开从库的读功能db.movies.find().pretty();
复制集测试:
(1)查看复制集状态: arbiteronly hidden priority slaveDelay votesrs.status(); //查看整体复制集状态 rs.isMaster(); // 查看当前是否是主节点 (2)添加删除节点 在线去添加节点,删除节点rs.add(\"10.0.0.1:28020\"); // 新增从节点 rs.addArb(\"10.0.0.1:28020\"); // 新增仲裁节点 rs.remove(\"10.0.0.1:28020\"); // 删除一个节点 (3)特殊从节点的配置 • 优先级(priority 参数:0-1000): 优先级越高的节点越优先成为主节点。 优先级为0的节点无法成为主节点; • 隐藏(hidden 参数):复制数据,但对应用不可见。隐藏节点可以具有投票仅,但优先级必须为 0; • 延迟(slaveDelay 参数):复制 n 秒之前的数据,保持与主节点的时间差。 配置延时节点(一般延时节点也配置成hidden) 【1】这个是顺序列的号 从0开始数cfg=rs.conf() cfg.members[1].priority=0 cfg.members[1].slaveDelay=120 cfg.members[1].hidden=true cfg.members[2].votes=0rs.reconfig(cfg) 重新加载下配置改回来: cfg=rs.conf() cfg.members[2].priority=1 cfg.members[2].slaveDelay=0 cfg.members[2].hidden=0 cfg.members[2].votes=0 rs.reconfig(cfg) 配置成功后,通过以下命令查询配置后的属性 rs.conf();
复制集管理操作
--查看副本集的配置信息 admin> rs.config() --查看副本集各成员的状态 admin> rs.status() --副本集角色切换(不要人为顺便操作,有风险) 主节点切换admin> rs.stepDown() 注: admin> rs.freeze(300) //锁定从,使其不会转变成主库 freeze()和stepDown单位都是秒。 --设置副本节点可读:在副本节点执行 admin> rs.slaveOk() eg: admin> use app switched to db appapp> db.createCollection('a') { \"ok\
副本集其他操作命令
Replcation Set配置过程详解
单机 20%
高可用复制集 70%
分片集群 横向扩展 10%
常见架构
MongoDB高级分片不是针对逻辑层拆分,再底层的存储层拆分。最多支持1024个分片
• 数据容量日益增大,访问性能日渐降低,怎么破?• 新品上线异常火爆,如何支撑更多的并发用户?• 单库已有 10TB 数据,恢复需要1-2天,如何加速?• 地理分布数据
为什么使用分片集群
•银行交易单表内10亿笔资料•超负荷运转
如何解决以上问题
• Mongos 路由节点提供集群单一入口转发应用端请求选择合适数据节点进行读写合并多个数据节点的返回无状态建议至少2个• Config Servers配置节点提供集群元数据存储分片数据分布的映射• Shards 数据节点以复制集为单位横向扩展最大1024分片分片之间数据不重复所有分片在一起才可完整工作
分片架构介绍Mongodb sharding cluster【MSC】
• 应用全透明,无特殊处理• 数据自动均衡• 动态扩容,无须下线• 提供三种分片方式
MongoDB 分片集群特点
• 基于范围 chunk 每个单元优点 范围查询性能好 优化读缺点 往一个分片生成好多chunk 单元写,空闲时触发blance再往其他分片挪数据。数据分布不均匀 容易有写热点• 基于 Hash crc32优点 数据分布均匀 有利于写的优化 存储打的很散 适用于日志,物联网高并发写入场景缺点 范围查效率低 适合于点查 • 基于 zone / tag优点 基于DNS 路由到mongodb上 选择最近的服务器
分片集群数据分布方式
10个实例:38017-38026 (1)configserver: 集群的源数据 节点信息 拓扑 数据分布 分片策略 怎样分的 那个分片上的chunk有哪些数据3台构成的复制集(1主两从,不支持arbiter)38018-38020 (2)shard节点: PSSsh1:38021-23 (1主两从,其中一个节点为arbiter,复制集名字sh1)sh2:38024-26 (1主两从,其中一个节点为arbiter,复制集名字sh2)(3)mongos 38017
分片规划
从下往上搭建 先做shard config 再mongodbs
sharding分片配置高点,尤其内存高点 最好64c256g
======================================完成shard节点配置===================================
mkdir -p /mongodb/38021/conf /mongodb/38021/log /mongodb/38021/datamkdir -p /mongodb/38022/conf /mongodb/38022/log /mongodb/38022/datamkdir -p /mongodb/38023/conf /mongodb/38023/log /mongodb/38023/datamkdir -p /mongodb/38024/conf /mongodb/38024/log /mongodb/38024/datamkdir -p /mongodb/38025/conf /mongodb/38025/log /mongodb/38025/datamkdir -p /mongodb/38026/conf /mongodb/38026/log /mongodb/38026/data
创建目录
cp /mongodb/38024/conf/mongodb.conf /mongodb/38025/conf/ cp /mongodb/38024/conf/mongodb.conf /mongodb/38026/conf/ sed 's#38024#38025#g' /mongodb/38025/conf/mongodb.conf -i sed 's#38024#38026#g' /mongodb/38026/conf/mongodb.conf -i
从节点的配置文件
mongod -f /mongodb/38021/conf/mongodb.confmongod -f /mongodb/38022/conf/mongodb.confmongod -f /mongodb/38023/conf/mongodb.confmongod -f /mongodb/38024/conf/mongodb.confmongod -f /mongodb/38025/conf/mongodb.confmongod -f /mongodb/38026/conf/mongodb.conf
所有节点,并搭建复制集
第一个分片集的第一个节点【这里是PSA的】
第二个分片集的第一个节点【这里是PSA的】
连接每个分片组的第一个节点A 【生产中建议PSS】
======================================以上完成shard节点配置===================================
shard复制集配置
======================================完成config节点配置===================================
configserver 并不用高配,标准的8c16g就行
mkdir -p /mongodb/38018/conf /mongodb/38018/log /mongodb/38018/datamkdir -p /mongodb/38019/conf /mongodb/38019/log /mongodb/38019/datamkdir -p /mongodb/38020/conf /mongodb/38020/log /mongodb/38020/data
目录创建
修改配置文件
cp /mongodb/38018/conf/mongodb.conf /mongodb/38019/conf/cp /mongodb/38018/conf/mongodb.conf /mongodb/38020/conf/sed 's#38018#38019#g' /mongodb/38019/conf/mongodb.conf -ised 's#38018#38020#g' /mongodb/38020/conf/mongodb.conf -i
配置另外俩个config配置文件
mongod -f /mongodb/38018/conf/mongodb.confmongod -f /mongodb/38019/conf/mongodb.confmongod -f /mongodb/38020/conf/mongodb.conf
启动节点
注:configserver 可以是一个节点,官方建议复制集。configserver不能有arbiter。新版本中,要求必须是复制集。注:mongodb 3.4之后,虽然要求config server为replica set,但是不支持arbiter
配置config复制集
======================================以上完成configserver节点配置==================================
config节点配置
======================================以上完成mongos节点配置==================================
mkdir -p /mongodb/38017/conf /mongodb/38017/log
mongos -f /mongodb/38017/conf/mongos.conf
启动mongos
=================mongos和configserver通了=但=configserver没和分片连通,不认识分片============================
连接到其中一个mongos(10.0.0.51),做以下配置(1)连接到mongs的admin数据库# su - mongod$ mongo 10.0.0.51:38017/admin(2)添加分片db.runCommand( { addshard :\
分片集群操作
==============================定制分片==(Range、Hash、Zone)======================================
chunk介绍 写数据时会生成64M的chunk,每个chunk都会有min、max的值,是一个全局有序的key-value map,满了会触发split(分裂),分裂成2个chunk,每个一般数据,不断做分裂。业务不忙了,发现数据不均匀,会触发balancer,不繁忙的情况下会按个数或容量均衡到其他分片。
hash会提前预算,预生成每个分片上的chunk,数据会均匀分布到各个分片 。俩个节点同时插入数据
##RANGE分片配置及测试 test库下的vast大表进行手工分片 登录到1、激活数据库分片功能 mongo --port 38017 adminadmin> ( { enablesharding : \"数据库名称\" } ) eg: admin> db.runCommand( { enablesharding : \"test\" } ) 2、指定分片建对集合分片 登录到mongoseg:范围片键 --创建索引 use test > db.vast.ensureIndex( { id: 1 } ) --开启分片 > use admin > db.runCommand( { shardcollection : \"test.vast\
使用分片集群
对test库下的vast大表进行hash创建哈希索引(1)对于test开启分片功能mongo --port 38017 adminuse adminadmin> db.runCommand( { enablesharding : \"test\" } )(2)对于test库下的vast表建立hash索引use testtest> db.vast.ensureIndex( { id: \"hashed\" } )(3)开启分片use adminadmin > sh.shardCollection( \"test.vast\
Hash分片例子
6、删除分片节点(谨慎) 自动会均衡数据 动态扩容(1)确认blance是否在工作sh.getBalancerState()(2)删除shard2节点(谨慎)mongos> db.runCommand( { removeShard: \"shard2\" } )注意:删除操作一定会立即触发blancer。
删除分片
7、balancer操作介绍:mongos的一个重要功能,自动巡查所有shard节点上的chunk的情况,自动做chunk迁移。什么时候工作?1、自动运行,会检测系统不繁忙的时候做迁移2、在做节点删除的时候,立即开始迁移工作3、balancer只能在预设定的时间窗口内运行有需要时可以关闭和开启blancer(备份的时候)mongos> sh.stopBalancer()mongos> sh.startBalancer()8、自定义 自动平衡进行的时间段 【生产中一定要设置】https://docs.mongodb.com/manual/tutorial/manage-sharded-clusterbalancer/#schedule-the-balancing-window// connect to mongos mongo --port 38017 use configsh.setBalancerState( true )db.settings.update({ _id : \"balancer\
balancer操作
mongos配置
分片集群搭建及扩容
• 关于数据:数据量不超过3TB,尽可能保持在2TB一个片;• 关于索引:常用索引必须容纳进内存;• 按照以上标准初步确定分片后,还需要考虑业务压力,随着压力增大,CPU、RAM、磁盘中的任何一项出现瓶颈时,都可以通过添加更多分片来解决。
分片的基本标准
条件 分片个数B : 工作集大小 / 单服务器内存容量 400GB / (256G * 0.6) = 3A : 所需存储总量 / 单服务器可挂载容量 8TB / 2TB = 4C : 并发量总数 / (单服务器并发量 * 0.7) 30000 / (9000*0.7) = 6D: 额外开销 ?
如何粗略判断需要多少分片
考虑分片的分布:• 是否需要跨机房分布分片?• 是否需要容灾?• 高可用的要求如何?
额外的考量
影响片键效率的主要因素:• 取值基数(Cardinality);• 取值分布;• 分散写,集中读;• 被尽可能多的业务场景用到;• 避免单调递增或递减的片键;
1
选择基数大的片键
对于分布不均匀的片键:• 造成某些块的数据量急剧增大• 这些块压力随之增大• 数据均衡以 chunk 为单位,所以系统无能为力 • 例如:存储一个学校的师生数据,以年龄(假设年龄范围为15~65岁)作为片键,那么:• 15<=年龄<=65,且只为整数• 大部分人的年龄范围为15~18岁(学生) • 15、16、17、18四个 chunk 的数据量、访问压力远大于其他 chunk结论:取值分布应尽可能均匀
选择分布均匀的片键
jumpbo chunk 自动拆不了需要手工去拆1).首先关闭Balancermongos>sh.stopBalancer()2).查询特大块mongos>use configmongos>db.chunks.find({jumbo:true})3).拆分特大块mongos>sh.splitAt(\"db.collection\
jumpbo chunk更改
通过一个例子来看片键选择
• mongos 与 config 通常消耗很少的资源,可以选择低规格虚拟机;• 资源的重点在于 shard 服务器:• 需要足以容纳热数据索引的内存;• 正确创建索引后 CPU 通常不会成为瓶颈,除非涉及非常多的计算;• 磁盘尽量选用 SSD;实际测试是最好的检验,来看你的资源配置是否完备。另外,即使项目初期已经具备了足够的资源,仍然需要考虑在合适的时候扩展。建议监控各项资源使用情况,无论哪一项达到60%以上,则开始考虑扩展。• 扩展需要新的资源,申请新资源需要时间;• 扩展后数据需要均衡,均衡需要时间。应保证新数据入库速度慢于均衡速度• 均衡需要资源,如果资源即将或已经耗尽,均衡也是会很低效的。
如何规划硬件
片键类似于索引
分片集群设计
# 10.0.0.51primary:10.0.0.51:10001s1 :10.0.0.51:10002# 10.0.0.52:10001s2 :10.0.0.52:10003 : 10.0.0.52:10004s3 :10.0.53:10005
规划
su - mongodmkdir -p /mongodb/10001/conf /mongodb/10001/data /mongodb/10001/logmkdir -p /mongodb/10002/conf /mongodb/10002/data /mongodb/10002/log
创建配置文件
01地准备实例
\\cp /mongodb/10001/conf/mongod.conf /mongodb/10002/conf/sed 's#10001#10002#g' /mongodb/10002/conf/mongod.conf -imongod -f /mongodb/10001/conf/mongod.confmongod -f /mongodb/10002/conf/mongod.conf
01地俩台的配置文件
su - mongodmkdir -p /mongodb/10003/conf /mongodb/10003/data /mongodb/10003/logmkdir -p /mongodb/10004/conf /mongodb/10004/data /mongodb/10004/log
\\cp /mongodb/10003/conf/mongod.conf /mongodb/10004/conf/sed 's#10003#10004#g' /mongodb/10004/conf/mongod.conf -imongod -f /mongodb/10003/conf/mongod.confmongod -f /mongodb/10004/conf/mongod.conf
02地俩台配置文件
su - mongodmkdir -p /mongodb/10005/conf /mongodb/10005/data /mongodb/10005/log
mongod -f /mongodb/10005/conf/mongod.conf
03地配置文件
03地一台配置文件
连接主节点加载其他节点
*显示为primary rs.status() 有id为01234 5个节点信息
查看当前几个主几个从,配置的是1主4从
cfg = rs.conf()cfg.members[1].priority = 20 主库的本地另一个机器上,优先级最高cfg.members[2].priority = 10 外地02一个机器上,优先级10cfg.members[3].priority = 10 外地02一个机器上,优先级10rs.reconfig(cfg) 查看优先级配置 还有一个外地机器不设优先级,默认为1
优先级配置,以后切换主库能切换到想要的主库机器上
openssl rand -base64 756 > /mongodb/10001/conf/keyfile
生成ket_file
cp -a /mongodb/10001/conf/keyfile /mongodb/10002/confchmod 600 /mongodb/10001/conf/keyfile /mongodb/10002/conf/keyfilescp /mongodb/10001/conf/keyfile 10.0.0.52:/mongodb/10003/confscp /mongodb/10001/conf/keyfile 10.0.0.52:/mongodb/10004/confscp /mongodb/10001/conf/keyfile 10.0.53:/mongodb/10005/conf
拷贝到其他节点
chmod 600 /mongodb/10003/conf/keyfile /mongodb/10004/conf/keyfilechmod 600 /mongodb/10005/conf/keyfile
授权,防止其他普通用户的读写
01上cat >> /mongodb/10001/conf/mongod.conf<<EOFsecurity:keyFile: /mongodb/10001/conf/keyfileEOFcat >>/mongodb/10002/conf/mongod.conf<<EOFsecurity:keyFile: /mongodb/10002/conf/keyfileEOF 02上cat >> /mongodb/10003/conf/mongod.conf <<EOFsecurity:keyFile: /mongodb/10003/conf/keyfileEOFcat >> /mongodb/10004/conf/mongod.conf <<EOFsecurity:keyFile: /mongodb/10004/conf/keyfileEOF 03上cat >> /mongodb/10005/conf/mongod.conf <<EOFsecurity:keyFile: /mongodb/10005/conf/keyfileEOF
每个节点开启验证【包含了加密连接】
SSL加密方式
复制集安全加固【跨网络因素】
use admindb.shutdownServer()
****从库先开始停,arbit也要停,事务要回滚
搭建之前就应该修改好配置文件【要不然需要重启】
mongod -f /mongodb/1000*/conf/mongod.conf
启动5个节点
mongo --port 10001
登录主库
添加用户
启动所有节点,在主节点添加用户:
su - mongodmkdir -p /mongodb/20001/conf /mongodb/20001/data /mongodb/20001/logmkdir -p /mongodb/20002/conf /mongodb/20002/data /mongodb/20002/logmkdir -p /mongodb/20003/conf /mongodb/20003/data /mongodb/20003/log
\\cp /mongodb/20001/conf/mongod.conf /mongodb/20002/conf/\\cp /mongodb/20001/conf/mongod.conf /mongodb/20003/conf/sed 's#20001#20002#g' /mongodb/20002/conf/mongod.conf -ised 's#20001#20003#g' /mongodb/20003/conf/mongod.conf -i单独改一下外地的从节点配置文件
其他配置文件修改
=========================================01-==================================
=========================================02-==================================
shard节点配置------跨地域分片【01本地1主1从和02从+02本地1主1从和01从】
configserver配置
01地 2001
02地 2001
俩地配置复制集群
configserver机器上配置【模拟的是51节点上】
01地 2001配置复制集群
A地配置
B地配置
一般配置俩
db.runCommand( { addshard :\
任意一个mongos就行
sh.status()
查看集群信息
连接分片节点
sh.addShardTag(\"CN_sh\
添加Tag来标识分片
||*激活库的分片功能【上面笔记记载】
||*设置分片键
sh.addTagRange(\"zonedb.vast\
zonedb.vast(order_id,order_name) 1-500 shard000 501-最大值shard01
==|设置分片策略[可以基于地域分片]
分片定制
高级集群设计:多地域Zone分片
mongoexport/mongoimport 导入/导出的是JSON格式或者CSV格式,mongodump/mongorestore导入/导出的是BSON(二进制)格式。
备份工具
应用场景:mongoexport/mongoimport:json csv1、异构平台迁移 mysql <---> mongodb 比较慢2、同平台,跨大版本:mongodb 2 ----> mongodb 3mongodump/mongorestore日常备份恢复时使用.
应用场景
备份
备份恢复
准备物理机及数据库实例
高级集群设计:两地三中心
分片集群机制及原理
MongoDB高级运维
Mongodb
NoSQL
0 条评论
回复 删除
下一页