mongodb for dba · co je mongodb 10gen -> mongo nestrukturovaná (schema-less) nosql databáze...

20
MongoDB for DBA Petr Medonos, Lukáš Heřbolt

Upload: others

Post on 23-May-2020

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

MongoDB for DBAPetr Medonos, Lukáš Heřbolt

Page 2: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

O nás

Petr Medonos● 6 let v ETN● dohled nad přiváděním

projektů k životu● DBA, performance, security● EWA (ewa.etnetera.cz)● RHCE, M102

● Soyka (soyka.etnetera.cz)

Lukáš Heřbolt● ATSE @ GSS @ redhat

○ cluster○ storage ○ filesystem

● ~ 2 roky v ETN○ projekty○ HTTP balancing○ MongoDB○ pod vedením PMe

● ~ 2 roky na DCGI, FEE, CTU

Page 3: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

Obsah● co je MongoDB?

● JSON a BSON

● instalace a konfigurace

● provoz

● bezpečnost a zálohování

● HA (Replikace, Sharding)

Page 4: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

Co je MongoDB● 10gen -> mongo

● nestrukturovaná (schema-less) noSQL databáze

● databáze, kolekce, dokument

● JSON (BSON)

● žurnály

● atomické operace nad jedním záznamem

● nativní replikace, sharding

Page 5: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

JSON● JavaScript Object Notation{“data types”:{

“document”: {},

“array”: [“element1”, “element2”, “element3”],

“bool”: <true|false>,

“number”: 13798465,

“string”: “Hello Word”,

“null”: null

}

}

Page 6: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

{ “a”: 4, “b”: “XYZ”}

JSON 2 BSONlength of document

32 bitstype: int32 8 bits

A \0 432 bits

type: str 8 bits

B \0 XYZ\0 0length of string

416 bits

SERVER

BSON

CLIENT

DOCUMENT{a: 3,b:{c:4},d:[5,6,7]}

QUERY

RESPONSE (BSON)

APPLICATION

MONGODBDRIVER

Page 7: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

Instalace● Balíčky:

http://www.mongodb.org/downloads● MacPorts, Homebrew, FreeBSD, ArchLinux, Debian,

Fedora, CentOS, Gentoo

Page 8: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

Konfigurace/etc/mongo.confport: 27017http-api: port + 1000

default 28017rest=false

objcheck since 2.4 trueoplogsize ~ 5% FS sizereplSet=<name>slowms=100ms

Page 9: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

Mongo shell● DB admin

○ system.users○ administrátorský účet○ --setParameter enableLocalhostAuthBypass=0

● DB local○ data pro replikaci○ specifická data pro danou instanci○ kolekce:

■ startup_log■ oplog.rs■ system.replset

Page 10: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

CRUD> db.<collection>.find()> db.<collection>.findOne()> db.<collection>.findAndModify()> db.<collection>.insert()> db.<collection>.update()> db.<collection>.remove()> db.getLastError()

Page 11: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

Indexy● B-tree, hash, text, geospatial, TTL, unique, ...● single, compound, multikey● covering indexes● background/foreground

db.collection.ensureIndex({ orderDate: 1 })

db.collection.ensureIndex( { a: 1 },

{ background: true } )

Page 12: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

Provoz MongoDB> db.currentOp()> db.killOp(<opid>)> db.<collection>.findOne().explain()> db.<collection>.find().hint({date:1})> db.setProfilingLevel(1,100) > db.system.profile.find({op:"update"}).pretty()

> mongostat> mongotop

Page 13: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

Bezpečnost● uživatelé jsou uložení v konkrétní databázi● kolekce system.users● role:

○ read, readWrite, userAdmin, dbAdmin, clusterAdmin○ any

db.addUser( { user: "<username>", pwd: "<password>", roles: [ "userAdminAnyDatabase" ] } )

Page 14: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

Bezpečnost v RS

openssl rand -base64 60 > keyfile

mongodb --dbpath data --auth --replSet z --keyfile keyfile

Page 15: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

Replikace● Master

○ v replikasetu vždy jeden○ read/write operace

● Slave○ volí nového mastera, pokud k tomu nastane situace○ read only○ hidden, delayed

● Arbiter○ pouze pro volbu nového masteru○ bez dat○ od verze ~2.4.5 nereplikuje system.users collection

Různé uzly můžou mít různou velikost dat na disku

Page 16: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

Replikace● až 12 uzlů v RS

○ maximálně 7 volí○ asynchronní (cluster-wide commit)○ “row-based”

● maximální počet operací v RS○ 4,294,967,295/s○ optime

■ 64bit number ■ higher 32 bits time (unix since epoch)■ lower 32 bits is operation index within 1 second

Page 17: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

Sharding

Page 18: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

Sharding● chunk (64MB, --chunkSize)

● shared key

● range-based vs. hash-based partitioning

● operace:

○ split

○ balancing (migrate)

Page 19: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

Zálohování

● mongodump/mongorestore○ replicaset oplog / oplogreplay○ celé databáze nebo konkretní kolekce

● mongoexport/mongoimport○ export/import CSV,TSV,JSON

● snapshots○ db.fsyncLock○ <snapshot/copy db files>○ db.fsyncUnlock

Page 20: MongoDB for DBA · Co je MongoDB 10gen -> mongo nestrukturovaná (schema-less) noSQL databáze databáze, kolekce, dokument JSON (BSON) žurnály

Díky za pozornost!

Q&A