Rreth Replica Set
Parakushtet
Dizenjoni grupin Replica
Udhëzimet e vendosjes
konkluzioni
Që nga konceptimi i tij në 2009, MongoDB ka udhëhequr industrinë NoSQL. Një nga konceptet thelbësore të MongoDB është Replica Set, kështu që përpara se të punojmë me të, së pari le të rishikojmë konceptin.
Rreth Replica Set
Modeli më i thjeshtë i komunikimit i përdorur në replikimin e bazave të të dhënave është arkitektura Master-Slave. Siç sugjeron edhe emri i tij, ky model ka 2 role të cilat shpërndahen në një master unik dhe shumë skllav, roli i masterit është të përpunojë operacionet e leximit dhe të shkrimit të kryera nga klientët dhe skllevërit trajtohen si një kopje e masterit.
Avantazhi më i rëndësishëm i këtij modeli është se performanca e masterit nuk rrezikohet nga operacionet rezervë, operacionet rezervë bëhen në mënyrë asinkrone dhe kjo mund të bëhet një problem serioz kur një nyje master dështon. Nyjet slave lexohen vetëm dhe ato duhet të promovohen manualisht në nyjen kryesore, kështu që në këtë kohë ekziston mundësia e humbjes së të dhënave.
Një opsion për të zgjidhur problemin e disponueshmërisë është të kesh më shumë se një master në arkitekturë, por kjo mund të çojë në një problem tjetër në konsistencën e të dhënave midis atyre instancave dhe kompleksitetin e shtuar të konfigurimit.
Tani duke pasur parasysh kontekstin, ne mund të paraqesim teknologjinë Replica Set të MongoDB. Replica Set është emri i arkitekturës Master-Slave që ka dështim automatik, kështu që në momentin që një primarynyje master (i cili tani është emërtuar ) nuk funksionon siç duhet, një electionnxitje do dhe një nyje e re parësore do të zgjidhet nga skllevërit e mbetur ( referuar tani si secondaries).
Nyja primare
Nyja kryesore është e vetmja që kryen operacione shkrimi, si parazgjedhje operacionet e leximit trajtohen gjithashtu nga primar, por kjo sjellje mund të ndryshohet më vonë.
Operacionet regjistrohen në oplog( regjistrin e operacioneve), më pas nyjet dytësore përditësojnë përmbajtjen e tyre në mënyrë asinkrone bazuar në përmbajtjen eoplog
Shënim: oplogështë një koleksion i kufizuar, kjo do të thotë se koleksioni ka një kufi, me local.oplog.rsju mund të kontrolloni përmbajtjen e këtij koleksioni brenda një guaskë mongo në çdo anëtar grupi.
Nyja dytësore
Përveçse janë ata që bëjnë një kopje rezervë të duhur të bazës së të dhënave, një nyje dytësore ka këto role:
- Mund të pranojë operacionet e leximit nëse është e nevojshme.
- Mund të shkaktojë zgjedhje nëse një nyje primare dështon.
- Mund të votojë në zgjedhje.
- Mund të bëhet primar i ri nëse është e nevojshme.
Falë këtyre karakteristikave mund të kemi lloje të ndryshme të nyjeve dytësore:
- Prioriteti 0 : Këto nyje nuk mund të bëhen a
primarydhe nuk mund të shkaktojnë zgjedhje, megjithatë ato mund të votojnë në zgjedhje, të kenë një kopje të plotë dhe mund të pranojnë operacione leximi. Këto mund të jenë të dobishme në vendosjen e shumë qendrave të të dhënave.
- Fshehur : Këta janë
Priority 0anëtarë, por për më tepër ata nuk mund të përpunojnë operacionet e leximit. Ata mund të votojnë nëse është e nevojshme. Detyrat e preferuara për këta anëtarë janë raportimi dhe kopjet rezervë.
- E vonuar : Këto nyje janë përgjegjëse për "të dhënat historike" duke u vonuar me një njësi në kohë. Një anëtar i vonuar duhet të jetë një
priority 0nyje, dhe rekomandohet që ata të jenë hiddengjithashtu një anëtar.
Parakushtet
- Disponueshmëria për të ekzekutuar një minimum prej 3 shembujsh të Ubuntu 16.04 x64 me të njëjtën madhësi serveri.
Dizenjoni grupin Replica
Përpara vendosjes së një infrastrukture është e rëndësishme ta dizajnoni atë dhe ka pika që duhen marrë parasysh në këtë dizajn.
Zgjedhja e numrit të anëtarëve
Mbani në mend se numri minimal i elementeve për të ndërtuar një grup Replica është 3. Ju mund të përzieni të tre llojet e nyjeve me një minimum prej një nyje primare dhe një dytësore.
Në këtë udhëzues ne po vendosim 3 anëtarë, një primar dhe dy sekondar standard.
Shënim: Rekomandohet që të ketë një numër maksimal prej 7 anëtarësh me të drejtë vote me një përzierje arbitrash dhe anëtarësh dytësorë.
Zgjidhni një emër
Emri është vetëm për referencë, por ju po e përdorni atë në konfigurimin e grupit. Mbani në mend se mund të keni më shumë se një set Replica në mjedisin tuaj të prodhimit, ndaj mos e neglizhoni emrin e setit tuaj.
Ky tutorial inkurajon përdoruesin të zgjedhë emrin e grupit.
Shpërndarja e anëtarëve në qendra të ndryshme të të dhënave
Ky udhëzues sugjeron të vendoset në të njëjtën qendër të dhënash në mënyrë që të shmangni problemet e komunikimit.
Shënim: Në rast të vendosjes në qendra të ndryshme të të dhënave, rekomandohet të mbështillni nyjet tuaja me një VPN
Udhëzimet e vendosjes
Hapi 1: Vendosni nyjet minimale për infrastrukturën tuaj
Hapni 3 nyje të Ubuntu 16.04 x64; në të njëjtin rajon nga portali i klientit tuaj, nëse është e mundur. Mos harroni t'i emërtoni ato në përputhje me llojin e projektit me të cilin keni të bëni dhe sigurohuni që të keni të njëjtën madhësi të serverit në të gjitha këto nyje.
Pasi të keni vendosur 3 nyjet tuaja, do të duhet të jeni të sigurt që çdo nyje mund të flasë me pjesën tjetër. Ju duhet të ssh në dy nyje dhe të arrini tek të tjerët duke përdorur ping -c 4 EXAMPLE_IP. Ndryshoni EXAMPLE_IPnë IP-të aktuale të nyjeve tuaja.
Këtu mund të shihni një shembull të komunikimit të suksesshëm midis dy nyjeve.
root@foo_node:~# ping -c 4 EXAMPLE_IP
PING EXAMPLE_IP (EXAMPLE_IP) 56(84) bytes of data.
64 bytes from EXAMPLE_IP: icmp_seq=1 ttl=59 time=0.594 ms
64 bytes from EXAMPLE_IP: icmp_seq=2 ttl=59 time=0.640 ms
64 bytes from EXAMPLE_IP: icmp_seq=3 ttl=59 time=0.477 ms
64 bytes from EXAMPLE_IP: icmp_seq=4 ttl=59 time=0.551 ms
--- EXAMPLE_IP ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3021ms
rtt min/avg/max/mdev = 0.477/0.565/0.640/0.064 ms
Hapi 2: Instaloni MongoDB në secilën nyje të infrastrukturës suaj
Në përgjithësi mund të përdorni paketën MongoDB të Ubuntu, por është më mirë të përdorni repon zyrtare të komunitetit sepse është gjithmonë i përditësuar. Kjo repo përmban këto paketa:
- mongodb-org , paketa grupore që mbështjell katër komponentët.
- mongodb-org-server , ky përmban
mongoddaemon (procesi kryesor që trajton kërkesat për të dhëna).
- mongodb-org-mongos , kjo përmban
mongosdaemon (shërbim rrugëtimi për vendosjet e përbashkëta).
- mongodb-org-shell , kjo është
mongo shellndërfaqja JavaScript.
- mongodb-org-tools , disa mjete për aktivitetet e administrimit.
Vazhdoni me instalimin e paketave.
Importoni çelësin publik në sistemin e menaxhimit të paketave.
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
Krijo skedarin e listës për MongoDB '/etc/apt/sources.list.d/mongodb-org-3.4.list'.
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
Përditësoni bazën e të dhënave të paketës.
sudo apt-get update
Instaloni metapaketën MongoDB.
sudo apt-get install -y mongodb-org
Filloni shërbimin MongoDB.
sudo service mongod start
Tani mund ta hapni mongo shellnë çdo sesion bash. Për ta bërë këtë, duhet të përdorni mongokomandën. Do të përshëndeteni nga diçka e ngjashme me këtë.
MongoDB shell version v3.4.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.7
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
*Some extra logs are cut by the way*
>
Mos harroni të mbyllni shërbimin me sudo service mongod stop, sepse më vonë do të fillojmë mongodpërsëri me disa parametra. Përsëriteni këtë proces në të 3 nyjet e grupit.
Hapi 3: Konfiguro skedarin kyç të hyrjes
Përdorimi i një skedari kyç detyron dy koncepte në administrimin e Replica Set. E para është Internal Authentication. Si parazgjedhje mund të filloni një mongo shellsesion pa përdorur një përdorues dhe ky sesion do të ketë kontrollin e plotë të bazës së të dhënave, por kur përdorni një skedar kyç për vërtetim mongo shellsesioni juaj arrin një gjendje të quajtur localhost exception. Kjo gjendje ju lejon të krijoni vetëm përdoruesin e administratorit dhe grupin Replica. Koncepti i dytë është Role-Based Access Control, ose me fjalë të tjera autorizimi. Kjo zbatohet për të qeverisur nivelet administrative në grupin Replica.
Krijoni skedarin tuaj kyç
Skedari kyç është fjalëkalimi për t'u përdorur në grup, ky fjalëkalim duhet të jetë i njëjtë në të gjithë anëtarët e grupit. Për të rritur sigurinë, është e rëndësishme të përdorni një çelës të rastësishëm me mjetin e zgjedhur.
Përmbajtja duhet të jetë nga 6 deri në 1064 karaktere. Gjithashtu duhet të vendosni read onlylejen për skedarin kyç.
chmod 400 PATH_OF_YOUR_KEYFILE
Vendosni skedarin kyç në secilin anëtar të grupit
Tani kopjoni skedarin tuaj kyç në çdo anëtar të grupit, ju lutemi përdorni një dosje të qëndrueshme për referencë në të ardhmen dhe mos e ruani atë në një medium të lëvizshëm.
Përdorni gjithashtu një dosje për skedarin që mongodmund të hyjë.
Zbatoni duke përdorur skedarin kyç në grupin Replica
Në këtë hap duhet të fillojmë mongod daemon në çdo anëtar të grupit . Ekzistojnë dy mënyra për të filluar mongodprocesin: duke përdorur një skedar konfigurimi ose duke përdorur linjën e komandës. Të dyja janë metoda mjaft të lehta, por vetëm për thjeshtësi, ky tutorial përdor versionin e linjës së komandës.
Konfigurimi i linjës së komandës
Përdorni emrin që keni zgjedhur më parë në këtë komandë.
mongod --keyFile PATH_OF_YOUR_KEYFILE --replSet "YOUR_SET_NAME"
Si parazgjedhje mongodnuk funksionon si një demon. Ju do të duhet të përdorni --forkparametrin ose të përdorni për upstartta ekzekutuar plotësisht atë si një demon. Në këtë tutorial, ne nuk inkurajojmë ekzekutimin mongodsi një demon, kështu që ju mund të shihni regjistrat në terminalin tuaj direkt.
Shënim: Shkruani me kujdes emrin e grupit Replica sepse pasi të krijohet nuk mund ta ndryshoni atë.
Hapi 4: Lidhu me ndërfaqen localhost nga një prej anëtarëve të grupit
Shënim: Nëse ekzekutoni mongodsi një proces jo-daemon, atëherë do t'ju duhet të hapni një lidhje tjetër ssh për të vazhduar punën.
Duhet të përdorni mongokomandën për të hapur mongo shell. Kjo mund të bëhet në çdo pjesë të grupit.
Në këtë moment jemi në një gjendje të quajtur localhost exception. Kur përdoret një skedar kyç për konfigurimin e mongodprocesit, ju jeni të detyruar të krijoni një administrator të bazës së të dhënave përpara se të mund të aplikoni operacionet e leximit-shkrimit, por ne do ta shqyrtojmë atë më vonë.
Hapi 5: Fillimi i grupit Replica
Kjo është një pjesë delikate, ne po përdorim komandën rs.initiate()brenda mongo shellnga Hapi 4. Para se të përdorim këtë komandë le ta shqyrtojmë atë.
rs.initiate(
{
_id : <replicaSetName>,
members: [
{ _id : 0, host : "example1.net:27017" },
{ _id : 1, host : "example2.net:27017" },
{ _id : 2, host : "example3.net:27017" }
]
}
)
Fusha e parë _idështë një varg dhe duhet të përputhet me --replSetatë që është kaluar më parë në mongod. Gjithashtu, çdo vlerë e hostduhet të jetë ose ip ose emri i domenit të secilit anëtar të grupit Replica. Mos harroni të shtoni portin që shembulli i mongos po përdor në secilin anëtar.
Tani është koha për të ekzekutuar komandën me të dhënat tuaja në të, kjo do të shkaktojë një election, pastaj një primar do të zgjidhet automatikisht.
Këtu duhet të keni parasysh se kursori juaj i guaskës ka ndryshuar në YOUR_SET_NAME:PRIMARY>ose YOUR_SET_NAME:SECONDARY. Kjo do të thotë që krijimi i një grupi ishte një sukses.
Për të vazhduar punën ju duhet të gjeni primary, nëse sigurisht që nuk jeni në të. Përdorni rs.status()komandën për të shfaqur informacionin e grupit Replica dhe gjeni vendndodhjen primary. Ju jeni duke kërkuar për pronën "stateStr" : "PRIMARY".
Hapi 6: Krijimi i administratorit
Pasi të keni gjetur primary, futni mongo shelldhe ekzekutoni komandën tjetër duke përdorur të dhënat tuaja.
admin = db.getSiblingDB("admin")
admin.createUser(
{
user: "YOUR_USER",
pwd: "YOU_PASSWORD",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
admin = db.getSiblingDB("admin")Pjesa na lejon të shkruani në adminnga një bazë të dhënash të ndryshme. Kjo krijon një pseudonim të quajtur admin, kështu që ne mund të ekzekutojmë komanda duke e përdorur në vend të tij.
Nëse operacioni është i suksesshëm, do të merrni një njoftim se përdoruesi është shtuar.
Successfully added user: {
"user" : "YOUR_USER",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
Në këtë pikë, ne kemi vetëm një administrator për të gjithë serverët, por të kesh një set Replica na detyron të kemi një përdorues me clusterAdminrolin. Ne do të krijojmë një përdorues tjetër me vetëm atë rol për të ndarë shqetësimet.
Hapi 7: Autentifikimi si administrues
Ne kemi arritur kufirin e localhost exception, prandaj duhet të ndryshojmë vërtetimin në përdoruesin e krijuar një hap më parë.
Ju mund të ndryshoni përdoruesit brenda mongo shellme sa vijon.
db.getSiblingDB("admin").auth("YOUR_ADMIN", "YOUR_PASSWORD" )
Nëse nuk jeni lidhur tashmë me mongo shellkomandën, përdorni këtë komandë.
mongo -u "YOUR_ADMIN" -p "YOUR_PASSWORD" --authenticationDatabase "admin"
Do të njoftoheni për ndryshimin e një përdoruesi dhe mund të shkoni në hapin tjetër.
Hapi 8: Krijimi i masterit të grupit
clusterAdminRoli i jep përdoruesit kontrollin e plotë të vendosur Replica. Krijimi i tij është po aq i lehtë sa krijimi i përdoruesit të administratorit.
db.getSiblingDB("admin").createUser(
{
"user" : "YOUR_USER",
"pwd" : "YOUR_PASSWORD",
roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]
}
)
Vini re se këtë herë roli është ndryshuar nëclusterAdmin .
Hapi 9: Futja e të dhënave në grupin Replica
Në këtë moment kemi 2 përdorues admin: një që ka kontroll të plotë mbi serverin dhe një tjetër që ka akses në detyrat administrative në nivelin e setit Replica. Megjithatë, na mungon një përdorues që ka akses për të "përdorur" një bazë të dhënash, kështu që ne do ta krijojmë atë përdorues tani.
admin = db.getSiblingDB("admin")
admin.createUser(
{
user: "YOUR_USER",
pwd: "YOUR_PASSWORD",
roles: [ { role: "userAdminAnyDatabase", db: "cars" } ]
}
)
Vini re këtë herë ne po ndryshojmë dbpjesën, aty po vendosim bazën e të dhënave të aksesueshme për përdoruesin, në këtë rast po përdorim një bazë të dhënash me emrin cars.
Baza e të dhënave nuk është krijuar ende. Për ta bërë këtë, do t'ju duhet të shkruani disa komanda për ta krijuar atë në mënyrë implicite. Kaloni në carsbazën e të dhënave.
use cars
Do të merrni një njoftim: switched to db cars.
Baza e të dhënave ende nuk është krijuar, për ta bërë këtë duhet të shkruani diçka në të. Ne po përdorim shembullin e mëposhtëm.
db.models.insert({ make: "Dodge", model: "Viper", year: 2010 })
Këtë herë do të njoftoheni me WriteResult({ "nInserted" : 1 }).
Nëse dëshironi, mund t'i rikuperoni të gjitha objektet në bazën e të dhënave, me find()metodën:
db.models.find()
{ "_id" : ObjectId("59acd8b55334882863541ff4"), "make" : "Dodge", "model" : "Viper", "year" : 2010 }
Vini re se _iddo të jetë e ndryshme në daljen tuaj, por të dhënat e tjera duhet të jenë të njëjta. Duke pasur kohë të mjaftueshme, këto të dhëna do t'u përsëriten anëtarëve të tjerë.
konkluzioni
Krijimi i një grupi kopjesh mund të jetë sfidues në fillim, sepse ka shumë informacione për t'u kuptuar, por sapo të keni idenë pas tij, mund ta vendosni në një erë të lehtë, kështu që mos u dorëzoni nëse nuk mund ta kuptoni herën e parë. Mbani në mend se grupi Replica është i rëndësishëm në administrimin e MongoDB sepse hap mundësinë për të shtuar veçori të avancuara si Load Balancing.