
Maanta, helitaanka sare ee adeegyada ayaa loo baahan yahay had iyo jeer iyo meel kasta, ma aha oo kaliya mashaariicda qaaliga ah. Goobo aan si ku-meel-gaar ah loo heli karin oo leh fariinta "Waan ka xunahay, dayactirku waa socdaa" weli waa la helayaa, laakiin badanaa waxay keenaan dhoola cadeyn. Aynu ku darno noloshan daruuraha, goorta aad bilaabayso server dheeraad ah waxaad u baahan tahay hal wac oo API ah, uma baahnid inaad ka fikirto hawlgalka "hardware". Oo hadda ma jiraan wax cudur daar ah oo sababta nidaamka muhiimka ah aan loo dhisin si la isku halleyn karo iyadoo la adeegsanayo tignoolajiyada kutlada iyo dib-u-celinta.
Waxaan kuu sheegi doonaa xalalka aan tixgelinnay si aan u hubinno isku halaynta xogta macluumaadka ee adeegyadayada iyo waxa aan u nimid. Oo lagu daray demo leh gunaanad fog.
Dhaxalka Dhismaha Sare ee Helitaanka Sare
Tani xitaa si fiican ayaa loo arkaa marka la eego horumarinta hababka kala duwan ee ilaha furan. Xalalka dhaxalka ah ayaa lagu qasbay inay ku daraan tignoolajiyada la heli karo ee sare iyadoo dalabku uu kordhay. Tayadoodana way kala duwanaayeen. Xalalka jiilka soo socdaa waxay dhigayaan helitaan sare oo xudunta u ah qaabdhismeedkooda. Tusaale ahaan, MongoDB waxay meel dhigtaa kooxaynta sidii kiis adeegsigeeda aasaasiga ah. Kooxda ayaa miisaankeedu siman yahay, taas oo ah faa'iido tartan adag oo DBMS ah.
Aan ku soo laabano PostgreSQL. Tani waa mid ka mid ah mashaariicda ugu da'da weyn ee caanka ah ee furan, sii dayntii ugu horeysay ee taas oo dhacday sannadkii 95aad ee qarnigii la soo dhaafay. Muddo dheer, kooxda mashruucu ma tixgelin in helitaanka sare ay tahay dhibaato u baahan in wax laga qabto nidaamka. Sidaa darteed, tignoolajiyada ku-noqoshada ee abuurista nuqullada xogta waxay noqotay mid la dhisay oo keliya nooca 8.2 ee 2006, laakiin waxay ahayd mid ku salaysan faylka (Log shipping). Sannadkii 2010, nooca 9.0 wuxuu soo bandhigay ku celcelinta qulqulka, waana saldhigga abuurista kooxo badan oo kala duwan. Tani, dhab ahaantii, aad ayay ula yaabban tahay dadka barta PostgreSQL ka dib Enterprise SQL ama NoSQL casriga ah - xalka caadiga ah ee bulshada ayaa si fudud u ah lammaane-koobi ah oo leh isku celcelin isku mid ah ama isku mid ah. Isla mar ahaantaana, kaydka, beddelka sayidku waxaa lagu sameeyaa gacanta, iyo arrinta beddelka macaamiisha ayaa sidoo kale la soo jeediyay in si madaxbannaan loo xalliyo.
Sida aan go'aansanay in aan u samayno PostgreSQL la isku halayn karo iyo waxa aan u dooranay tan
Si kastaba ha ahaatee, PostgreSQL ma noqon lahayd mid caan ah haddii aysan jirin tiro badan oo mashruucyo ah iyo qalab kuwaas oo gacan ka geysanaya dhisidda xal khalad ah oo aan u baahnayn feejignaan joogto ah. Daruurtii (MCS) hal adeeg oo PostgreSQL ah iyo lammaane-koobiyeed oo leh ku celcelin aan caadi ahayn ayaa jiray tan iyo markii la bilaabay DBaaS.
Dabcan, waxaan rabnay inaan u fududeyno qof walba oo aan u dhigno rakibaadda PostgreSQL oo u adeegi karta saldhigga adeegyada aadka loo heli karo, iyada oo aan si joogto ah loola socon oo loo toosin habeenkii si loo beddelo. Qaybtan waxaa ku jira xalal hore oo la xaqiijiyay iyo jiil adeegyo cusub oo adeegsada horumarkii ugu dambeeyay.
Maanta, dhibaatada helitaanka sare kuma nasato dib-u-celinta (taasi iyada oo aan la sheegin), laakiin marka la isku raacsan yahay - algorithm doorashada Hogaamiyaha. Inta badan, shilalka waaweyni ma dhacaan sababtoo ah server-yada la'aanta, laakiin sababtoo ah dhibaatooyinka la isku raacsan yahay: hoggaamiye cusub lama dooran, laba hoggaamiye ayaa ka soo muuqday xarumaha xogta kala duwan, iwm. Tusaale - shil ka dhacay kooxda Github MySQL - way qoreen .
Saldhigga xisaabeed ee arrintan waa mid aad u daran. Dhinac, waxaa jira , kaas oo ku soo rogaya xaddidaadyo aragtiyeed fursadaha dhismaha xalalka HA, dhinaca kale, algorithms xisaab ahaan la xaqiijiyay si loo go'aamiyo la isku raacsan yahay, sida и . Sidan oo kale, waxaa jira DCS aad loo jecel yahay (nidaamyada la isku raacsan yahay ee baahsanaanta) - Zookeeper, iwm, Qunsulka. Sidaa darteed, haddii nidaamka go'aan-qaadashadu uu ku shaqeeyo nooc ka mid ah algorithm, oo si madax-bannaan u qoran, waa inaad ula dhaqantaa si taxadar leh. Ka dib markii aan falanqeynay tiro badan oo nidaamyo ah, waxaan dejinay Patroni, oo ah nidaamka il furan oo inta badan uu sameeyay Zalando.
Digression-lyrical ahaan, waxaan dhihi doonaa waxaan sidoo kale tixgelinnay xalal badan oo sayidyo ah, taas oo ah, kooxo si siman loo qiyaasi karo duubista. Si kastaba ha ahaatee, laba sababood oo waaweyn dartood waxay go'aansadeen in aanay abuurin koox caynkaas ah. Marka hore, xalalka noocan oo kale ah waxay leeyihiin kakanaanta sare iyo, sidaas awgeed, baylahdo badan. Way adkaan doontaa in la sameeyo xal deggan dhammaan kiisaska. Marka labaad, kiiskan PostgreSQL wuxuu joojinayaa inuu ahaado saafi ah (dhalad ah), shaqooyinka qaarkood lama heli doono, codsiyada qaarna waxaa laga yaabaa inay leeyihiin cayayaan qarsoon inta lagu jiro hawlgalka.
Batrooni
Haddaba sidee buu Patroni u shaqeeyaa? Horumariyayaashu dib uma cusboonaysiin giraangiraha waxayna soo jeediyeen in la isticmaalo mid ka mid ah xalalka DCS ee la xaqiijiyay. Dhammaan arrimaha la xidhiidha isku xidhka qaabaynta, doorashada hogaamiyaha iyo kooramka isaga ayaa loo daayey. Waxaan u doorannay iwm.
Marka xigta, Patroni wuxuu wax ka qabtaa codsiga saxda ah ee dhammaan goobaha ku yaal PostgreSQL iyo goobaha ku celcelinta, iyo sidoo kale fulinta amarada wareejinta iyo fashilka (taas oo ah, beddelka joogtada ah iyo degdegga ah ee sayidkiisa). Gaar ahaan daruuraha MCS, waxaad ku abuuri kartaa koox ah sayid, nuqul la mid ah iyo hal ama in ka badan nuqullo asynchronous ah. Joogitaanka nuqul isku mid ah ayaa hubinaya badbaadada xogta ugu yaraan 2 server, waana nuqulkan kan noqon doona "musharraxa sare" ee ugu weyn.
Mar haddii etcd lagu rakibay isla server-yada, tirada lagu taliyey ee adeegayaasha waa 3 ama 5 si loo helo kooramka ugu fiican. Kutlada caynkaas ahi waxay si siman u cabbirtaa akhriska (waxaan ka qoray wax ku saabsan cabbiridda qoraalka kor). Si kastaba ha ahaatee, la soco in nuqullada asynchronous-ku ay u nugul yihiin dib u dhac, gaar ahaan marka ay saaran yihiin rarka sare.
Isticmaalka nuqullada akhriska ah ee noocaas ah (sugitaan kulul) waxay xaq u leedahay ka warbixinta ama hawlaha falanqaynta waxayna yaraynaysaa culayska saaran server-ka.
Haddii aad rabto in aad adigu samayso koox caynkaas ah, waxaad u baahan doontaa:
- diyaari 3 ama in ka badan oo adeegayaal ah, habee ciwaanka IP-ga iyo xeerarka dab-damiska dhexdooda;
- ku rakib xirmooyinka iwmd, Patroni, adeegyada PostgreSQL;
- habaynta kooxda iwm;
- u habeeyo adeega ilaaliyaha si uu ula shaqeeyo PostgreSQL.
Taasi waa, guud ahaan, waxaad u baahan tahay inaad si sax ah u diyaariso darsin faylal qaabeyn ah oo aadan qalad ku sameyn meel kasta. Tani waa inaad si xaqiiqo ah u isticmaashaa qalabka maaraynta qaabeynta, sida macquulka ah, tusaale ahaan. Si kastaba ha ahaatee, weli ma jiro dheellitir TCP oo aad loo heli karo. Samaynta waa shaqo gooni ah.
Kuwa u baahan koox diyaarsan, laakiin ma rabaan in ay ku dhejiyaan waxaas oo dhan, waxaan isku daynay inaan fududeyno nolosha oo aan samaynay koox diyaarsan oo ku taal Patroni daruurteena, waxaad ku tijaabin kartaa bilaash. Marka laga soo tago kooxda lafteeda, waxaanu samaynay:
- dheellitirka TCP; dekedo kala duwan waxay had iyo jeer tilmaamaysaa sayidkii hadda jira, nuqul isku mid ah ama isku mid ah, siday u kala horreeyaan;
- API si loogu beddelo Patroni master-ka firfircoon.
Waxaa laga heli karaa MCS Cloud API iyo console-ka shabakadda.
Demo
Si loo tijaabiyo awoodaha kutlada PostgreSQL ee daruuraha MCS, aan aragno sida codsiga tooska ah uu u dhaqmo haddii ay jiraan dhibaatooyin DBMS ah.
Hoos waxaa ku yaal koodka codsiga kaas oo geli doona dhacdooyinka macmalka ah oo u sheegi doona shaashadda. Haddii ay dhacdo khaladaad, way ka warbixin doontaa tan waxayna sii wadi doontaa shaqadeeda wareeg ah ilaa aan ka joojino isku dhafka Ctrl + C.
from __future__ import print_function
from datetime import datetime
from random import randint
from time import sleep
import psycopg2
def main():
try:
connection = psycopg2.connect(user = "admin",
password = "P@ssw0rd",
host = "89.208.87.38",
port = "5432",
database = "myproddb")
cursor = connection.cursor()
cursor.execute("SELECT version();")
record = cursor.fetchone()
print("Connection opened to", record[0])
cursor.execute(
"INSERT INTO log VALUES ({});".format(randint(1, 10000)))
connection.commit()
cursor.execute("SELECT COUNT(event_id) from log;")
record = cursor.fetchone()
print("Logged a value, overall count: {}".format(record[0]))
except Exception as error:
print ("Error while connecting to PostgreSQL", error)
finally:
if connection:
cursor.close()
connection.close()
print("Connection closed")
if __name__ == '__main__':
try:
while True:
try:
print(datetime.now())
main()
sleep(3)
except Exception as e:
print("Caught error:n", e)
sleep(1)
except KeyboardInterrupt:
print("exit")
Codsigu wuxuu u baahan yahay PostgreSQL inuu shaqeeyo. Aan ku abuurno kutlada daruuraha MCS anagoo adeegsanayna API-ga. Terminalka caadiga ah, halkaas oo doorsoomiyaha OS_TOKEN uu ka kooban yahay calaamad gelitaanka API-ga (waxaa lagu heli karaa amarka arrinta furashada), waxaan ku qori doonaa amarrada soo socda:
Samee koox:
cat <<EОF > pgc10.json
{"cluster":{"name":"postgres10","allow_remote_access":true,"datastore":{"type":"postgresql","version":"10"},"databases":[{"name":"myproddb"}],"users":[{"databases":[{"name":"myproddb"}],"name":"admin","password":"P@ssw0rd"}],"instances":[{"key_name":"shared","availability_zone":"DP1","flavorRef":"d659fa16-c7fb-42cf-8a5e-9bcbe80a7538","nics":[{"net-id":"b91eafed-12b1-4a46-b000-3984c7e01599"}],"volume":{"size":50,"type":"DP1"}},{"key_name":"shared","availability_zone":"DP1","flavorRef":"d659fa16-c7fb-42cf-8a5e-9bcbe80a7538","nics":[{"net-id":"b91eafed-12b1-4a46-b000-3984c7e01599"}],"volume":{"size":50,"type":"DP1"}},{"key_name":"shared","availability_zone":"DP1","flavorRef":"d659fa16-c7fb-42cf-8a5e-9bcbe80a7538","nics":[{"net-id":"b91eafed-12b1-4a46-b000-3984c7e01599"}],"volume":{"size":50,"type":"DP1"}}]}}
EOF
curl -s -H "X-Auth-Token: $OS_TOKEN"
-H 'Accept: application/json'
-H 'Content-Type: application/json'
-d @pgc10.json https://infra.mail.ru:8779/v1.0/ce2a41bbd1434013b85bdf0ba07c770f/clusters

Marka kooxdu u wareegto heerka ACTIVE, dhammaan goobuhu waxay heli doonaan qiimayaasha hadda - kooxdu waa diyaar.
Gudaha GUI:

Aan isku dayno inaan isku xirno oo aan abuurno miis:
psql -h 89.208.87.38 -U admin -d myproddb
Password for user admin:
psql (11.1, server 10.7)
Type "help" for help.
myproddb=> CREATE TABLE log (event_id integer NOT NULL);
CREATE TABLE
myproddb=> INSERT INTO log VALUES (1),(2),(3);
INSERT 0 3
myproddb=> SELECT * FROM log;
event_id
----------
1
2
3
(3 rows)
myproddb=>

Codsiga waxaan ku tusi doonaa habaynta hadda ee ku xidhida PostgreSQL. Waxaan qeexi doonaa ciwaanka dheelitiriyaha TCP, si meesha looga saaro baahida loo qabo in gacanta loogu beddelo ciwaanka sare. Aan bilowno. Sida aad arki karto, dhacdooyinka si guul leh ayaa loo galiyay kaydka xogta.

Wareegtada sare ee la qorsheeyay
Hadda aan tijaabino hawlgalka codsigayaga inta lagu jiro beddelka sare ee la qorsheeyay:

Waxaan la soconaa codsiga Waxaan aragnaa in codsigu runtii go'ay, laakiin kaliya waxay qaadataa dhowr ilbiriqsi, kiiskan gaarka ah, ugu badnaan 9.

Shil baabuur
Hadda aan isku dayno inaan ka dhigno shilka mashiinka farsamada, sayidkii hadda. Waxaad si fudud u damin kartaa mishiinka farsamada gacanta ee Horizon interface, laakiin tani waxay noqon kartaa xidhid joogto ah. Beddelka noocan oo kale ah waxaa habayn doona dhammaan adeegyada, oo uu ku jiro Patroni.
Waxaan u baahanahay xidhidh aan la saadaalin karin Sidaa darteed, waxaan ka codsaday maamulayaasheena inay xiraan mashiinka farsamada - sayidkii hadda - si aan caadi ahayn oo ujeeddooyin imtixaan ah.

Isla markaana, codsigayagu wuu sii shaqaynayey. Dabiiciga ah, beddelka degdegga ah ee sayidku ma noqon karo mid aan la dareemin.
2019-03-29 10:45:56.071234
Connection opened to PostgreSQL 10.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
Logged a value, overall count: 453
Connection closed
2019-03-29 10:45:59.205463
Connection opened to PostgreSQL 10.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
Logged a value, overall count: 454
Connection closed
2019-03-29 10:46:02.661440
Error while connecting to PostgreSQL server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Caught error:
local variable 'connection' referenced before assignment
……………………………………………………….. - здесь какое-то количество ошибок
2019-03-29 10:46:30.930445
Error while connecting to PostgreSQL server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Caught error:
local variable 'connection' referenced before assignment
2019-03-29 10:46:31.954399
Connection opened to PostgreSQL 10.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
Logged a value, overall count: 455
Connection closed
2019-03-29 10:46:35.409800
Connection opened to PostgreSQL 10.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit
Logged a value, overall count: 456
Connection closed
^Cexit
Sida aad arki karto, codsigu wuxuu awooday inuu shaqadiisa ku sii wato wax ka yar 30 ilbiriqsi. Haa, tiro cayiman oo isticmaalayaasha adeegga ah ayaa heli doona wakhti ay ku ogaadaan dhibaatooyinka. Si kastaba ha ahaatee, tani waa guuldarro culus oo server ah; tani marar badan ma dhacdo. Xaaladdan oo kale, qofka (maamulaha) way adag tahay in uu helo wakhti uu si dhakhso ah uga falceliyo, ilaa uu ku fadhiyo console-ka diyaarka ah ee qoraalka beddelka ah.
gunaanad
Waxay ila tahay in kooxdan oo kale ay faa'iido weyn u tahay maamulayaasha. Dhab ahaantii, burburka halista ah iyo guul-darrooyinka server-yada xogta ma noqon doonaan kuwo la dareemo codsiga iyo, si waafaqsan, isticmaalaha. Uma baahnid inaad si degdeg ah wax u hagaajiso oo aad u beddesho habayn ku meel gaar ah, adeegayaal, iwm. Oo haddii xalkan oo kale loo isticmaalo adeeg diyaarsan oo daruur ah, markaa uma baahnid inaad waqti lumiso diyaarinteeda. Waxaa suurtogal ah in la sameeyo wax ka sii xiiso badan.
Source: www.habr.com
