Redis Sentinel-High Availability: Everything you need to know from DEV to PROD: Complete Guide
mitä termi ”Redis” oikeastaan tarkoittaa?
se tarkoittaa Etäsanakirjapalvelinta.
Alright! On olemassa paljon erilaisia Redis artikkeleita siellä, mutta halusin jakaa kokemukseni Kehittäjä Redis luomalla ”all in one proper article” kattaa olennaisin ja tärkeä tavaraa, joka on tarpeen ja hyödyllistä kehittäjä tai devops insinööri rakentaa erittäin saatavilla Redis cluster kanssa Sentinel.
so let ’ s get started…
Redis, joka on avoin lähdekoodi memory data structure Storessa, on erittäin suosittu valinta kehittäjien keskuudessa, joita käytetään välimuistitarkoituksiin, viestien välittäjänä ja myös pääasiassa NoSQL-Avainarvotietokantana eri käyttötapauksiin.
tässä viestissä aion erityisesti keskustella ja demota Redistä sekä Master / Slave-replikaatiosta, korkeasta saatavuudesta (Redis Sentinel), automaattisesta vikaantumisesta, joistakin tuotantotason optimointivihjeistä ja valvontanäkökohdista. Lisäksi, yhdessä näiden aiheiden aion mainita kysymyksiä ja virheitä, jotka kohtasin täytäntöönpanon aikana Redis Sentinel Ubuntu. Seuraavassa näytetään käyttöjärjestelmän versio ja Redis version tiedot.
OS version: Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-119-generic x86_64)
Redis Version: 4.0.9
lisäksi haluan korostaa, että Redis-dokumentaatio on hyvin informatiivinen ja se on ”the go to place”, jos tarvitset lisäselvityksiä Redis-dokumentaatiosta.
siirrytään Redis basicsiin; Redis on muistitietokanta, joka tarkoittaa yksinkertaisesti sitä, että Redis toimii RAM-muistilla. Sinun täytyy myös tietää, että Redis tukee useita tietorakenteita, kuten merkkijonoja, viivoja, luetteloita, sarjoja, lajiteltuja sarjoja, joissa on kantakyselyjä, bittikarttoja. Lisäksi se tukee myös atomitoimintoja, kuten merkkijonoon liittämistä, arvon lisäämistä hajautuksessa, elementin työntämistä luetteloon ja niin edelleen.
No, aloitetaan Redis High Availability-ohjelmalla.
Redis sentinel on Redisin tarjoama korkean saatavuuden ratkaisu. Jos Redis-klusterissa ilmenee vika, Sentinel tunnistaa automaattisesti vikakohdan ja palauttaa klusterin vakaaseen tilaan ilman ihmisen väliintuloa.
mitä Redis Sentinelin sisällä todella tapahtuu ?
Sentinel tarkastaa aina Redis-klusterin isäntä-ja ORJATAPAUKSET tarkistaen, toimivatko ne odotetulla tavalla. Jos sentinel havaitsee vian tietyn klusterin PÄÄSOLMUSSA, Sentinel aloittaa vikaantumisprosessin. Tämän seurauksena Sentinel valitsee orjan instanssin ja ylentää sen isännäksi. Lopulta muut jäljellä olevat SLAVE-instanssit konfiguroidaan automaattisesti uudelleen käyttämään uutta MASTER-instanssia.
Sentinel toimii konfiguraatiotoimittajana tai auktoriteettilähteenä asiakkaiden palveluhavainnoille.
mitä se tarkoittaa ? Yksinkertaisesti, sovellusasiakkaat yhteyden Sentinels ja Sentinels antaa uusimman Redis MASTER osoite heille.
lisäksi Sentinel on vankka hajautettu järjestelmä, jossa useiden sentinelien on suostuttava siihen, että tiettyä mestaria ei enää ole saatavilla. Sitten vain vikaantumisprosessi käynnistää Valitse Uusi pääsolmu. Tämä sentinel-sopimus tehdään päätösvaltaisuuden mukaan.
mikä on päätösvaltaisuus ?
päätösvaltaisuusarvo on niiden vartiomiesten lukumäärä, joiden on sovittava siitä, ettei mestaria ole tavoitettavissa. Päätösvaltaisuutta käytetään kuitenkin vain epäonnistumisen toteamiseen. Jotta epäonnistuminen todella toteutuisi, yksi vartijoista on valittava johtajaksi epäonnistumista varten ja valtuutettava jatkamaan. Tämä tapahtuu vain Sentinelin prosessien enemmistön äänillä.
Let ’ s get our hands dirty with Redis Sentinel.
pidämme kiinni perusasetuksesta, jossa on 3 palvelimen instanssia.
katso yllä oleva kaavio, joka kuvaa 3 server instance perusasetukset. Ensinnäkin varmista, että Ubuntu-instanssisi ovat ajan tasalla asiaankuuluvien build-riippuvuuksien kanssa. Joskus saatat tarvita myös jemallocia. Seuraavassa näytetään vaiheet asentaa Redis palvelimen instanssit.
sudo apt-get update
sudo apt-get install build-essential tcl
sudo apt-get install libjemalloc-dev (Optional)curl -O http://download.redis.io/redis-stable.tar.gz
tar xzvf redis-stable.tar.gz
cd redis-stable
make
make test
sudo make install
nyt redis hakemistossa sinun pitäisi pystyä näkemään molemmat redis.conf ja sentinel.conf-asetustiedostot.
ennen kuin suoritamme Redis tehdään joitakin välttämättömiä perus kokoonpanot ylös ja ajaa Redis klusterin. Seuraavassa on tämän asennuksen IP-osoitteet.
10.52.209.46 (Initial Master Node)
10.52.209.47 (Initial Slave Node)
10.52.209.49 (Initial Slave Node)
Redis-palvelimen oletusportti on 6379 ja Sentinelin 26379. Siksi varmista, että avaat nämä portti käyttäen,
sudo ufw allow 6379
sudo ufw allow 26379
Redis-kokoonpanot (molemmat Redis.conf ja sentinel.conf) yllä palvelimet tulee konfiguroida seuraavasti.
perusasetusten edellä kokoonpanot riittää, mutta tuotannon taso harkitse vinkkejä mainittu jälkimmäisessä osassa tätä viestiä. Ainoa ero Redissä.conf tiedostoja 3 palvelimet on, että kaikki orjat on oltava seuraavat config. 10.52.209.46 on Master IP-osoite.
slaveof 10.52.209.46 6379
slaveof käskee Redis clusteria tekemään tästä palvelinilmaisusta tietyn pääsolmun (10.52.209.46) SLAVE-ilmentymän.
sentinelissä.conf, jälkeen config ilmoittaa Sentinels aloittaa klusterin seuranta seuraavat alkuasetukset. Tämän jälkeen tämä asetusasetus saattaa päivittyä automaattisesti vastaavasti.
sentinel monitor mymaster 10.52.209.46 6379 2
(This tells sentinel to monitor the master node. And the last argument which is 2 is the quorum value)
edelleen, sentinel.conf sisältää seuraavat config arvot samoin.
sentinel down-after-milliseconds mymaster 5000
(Means server will unresponsive for 5 seconds before being classified as +down and consequently activating a +vote to elect a new master node.)sentinel failover-timeout mymaster 10000
(Specifies the failover timeout in milliseconds.)
Okie Dokie! Tehdään uusiksi.
on monia tapoja ajaa uudelleen. Tässä demossa noudatan käskyjä.
(Go to src folder.)
cd src/ && redis-server ../redis.conf &
cd src/ && redis-server ../sentinel.conf — sentinel &(Or else you can simply use cd utils && ./install_server.sh.)
tämän jälkeen voit tarkistaa Redis-prosessit komennolla ps-ef | grep redis. Jokaisen palvelimen esiintymän tulisi suorittaa sekä Uudelleenaloittamisprosessi että Sentinel-prosessi. Jos kaikki menee suunnitelma, pitäisi olla 2 prosessit käynnissä seuraavasti.
Yhdistä nyt Redis-asiakasohjelmaan jollakin seuraavista komennoista ja testaa, toimiiko Redis hyvin.
redis-cli ping
or
redis-cli -h IP_Address pingYou should get a output of PONG.
mahtava! Nyt sinulla on Redis toiminnassa. Keskitytään isäntä-orja-replikaatioon.
isäntä/orja replikaatio
nyt jos rastit uudelleen.log (joka sijaitsee paikassa, jonka määrittelimme redis.conf) kunkin tapauksissa, voit saada nähdä isäntä — orja synkronointi occured.
Mestarisolmu-redis.loki
Slave node-redis.loki
Toistotilanteen tarkastaminen
voit tarkistaa replikointitietoja info replikointi komento Redis CLI samoin. Rooliattribuutin alla mainitaan, onko kyseinen solmu isäntä vai Orja (keltainen laatikko).lisäksi Mestarisolmussa se näyttää kaikkien kytkettyjen orjien tiedot. (vihreä laatikko)
nyt tutkitaan, mikä sentinel.lokimerkintä. (joka sijaitsee paikassa, jonka määrittelimme sentinelissä.conf)
Lisäksi, jos tarkistat vartijan.conf tiedosto, saat nähdä, että conf tiedosto päivitetään automaattisesti uusimmat configs, mukaan lukien sentinel tunnettu-slave ja sentinel tunnettu-sentinel arvot.
siistiä! Nyt luodaan näytteen arvo kaikissa solmuissa.
127.0.0.1:6739> set demokey "Amila"
kuten näette yllä olevassa kaaviossa, orjia luetaan vain siten voit vain kirjoittaa tietoja Master. Koska Redis toistuu asynkronisesti kaikkien jäljellä olevien orjien kanssa, voit hakea syötetyn arvon mistä tahansa Redis-orjista käyttäen samaa annettua avainta. Lisäksi via,KEYS*
voit luetella kaikki syötetyt näppäimet. Yllä kaavio kuvaa selvästi, mitä juuri puhuimme.
nyt katsotaan, miten Redis Sentinel Automatic Failover toimii.
Redis Sentinel Automatic Failover
Okiee! Simuloidaan automaattinen vikatilanne. Jotta voidaan simuloida vikatilannetta, voit yksinkertaisesti pysäyttää Redis-palvelimen tai tappaa Redis-prosessin PÄÄILMOITUKSESSA. Jopa sinä voit nukkua uudelleen. Voit valita mitä haluat.
kill -9 <process id>
or
redis-cli -p 6379 DEBUG sleep 30
or
redis-cli -p 6379 DEBUG SEGFAULT
kuten yllä olevassa kaaviossa on esitetty, vikaantumisskenaariossa, jos pääsolmu epäonnistuu, 2 jäljellä olevaa Sentineliä määrittää vikaantumisen, ja jos molemmat suostuvat (koska päätösvaltaisuusarvo on 2), valitaan uusi päällikkö noista 2 jäljellä olevasta solmusta.
Seuraavassa esitetään tämän vikaantumisskenaarion tukin häntä.
uudelleen.orjien solmujen loki.
vartija.loki Orja solmuja
nyt tarkistetaan replikaation tila info replikaatio komennolla.
tukkipyrstön tarkentaminen,
jokainen Sentinel havaitsee, että mestari on alhaalla
+sdown
tapahtumalla. (+sdown tarkoittaa, että määritelty instanssi on nyt subjektiivisesti alaspäin tilassa.)+ Uusi-epookki tarkoittaa, että nykyinen epookki päivitettiin.
+sdown
tapahtuma eskaloituu myöhemmin+odown
: ään, mikä tarkoittaa, että useat vartijat ovat yhtä mieltä siitä, ettei mestaria ole tavoitettavissa. (+odown tarkoittaa, että määritelty instanssi on nyt objektiivisesti alaspäin tilassa.)Sentinels +äänestä Sentineliä, joka aloittaa ensimmäisen epäonnistumisyrityksen.
epäonnistuminen tapahtuu.
edelleen, seuraavat nousujohteiset keikat.
nousukas uudelleen
description "Redis Server"start on runlevel
stop on runlevel script
echo $$ > /var/run/redis.pid
su - amila -c "cd /home/amila/redis-stable/src/; redis-server ../redis.conf"
end scriptpost-stop script
rm -f /var/run/redis.pid
end script
nousukas Sentineliin
description "Redis Sentinel Server"start on runlevel
stop on runlevel script
echo $$ > /var/run/redis.pid
su - amila -c "cd /home/amila/redis-stable/src/; redis-server ../sentinel.conf --sentinel"
end scriptpost-stop script
rm -f /var/run/redis.pid
end script
onnea! Siinä se on. Näin Redis hoitaa korkean käytettävyyden ja automaattisen vikaantumisen. Nyt on vilkaista joitakin mielenkiintoisia Redis tosiasiat ennen hyppäämme optimoimalla vinkkejä ja temppuja.
mielenkiintoisia faktoja Redistä.
Redis pystyy käsittelemään jopa 2 32 avainta, ja sitä testattiin käytännössä käsittelemään vähintään 250 miljoonaa avainta per instanssi.
tyhjä instanssi käyttää ~ 3MB muistia.
1 miljoona pientä avainta – > Merkkijonoarvoparit käyttävät ~ 85MB muistia.
1 miljoonaa avainta – > Hash-arvo, joka edustaa kohdetta, jossa on 5 kenttää, käyttää ~ 160 MB muistia.
Redis on yksikierteinen. Miten voin hyödyntää useita CPU / ydintä?
ei ole kovin usein, että suorittimesta tulee Redisin kanssa pullonkaula, sillä yleensä Redis on joko muistiin tai verkkoon sidottu. Jos näin on, Redis-esiintymien horisontaalinen tai vertikaalinen skaalaus auttaa vähentämään suorittimeen liittyviä pullonkauloja.
Redis on muistissa oleva, mutta pysyvä levytietokanta.
uudelleen pysyvyys – >RDB : point-in-time-tilannekuvia tietokokonaisuudestasi tietyin väliajoin. (Tietojen varmuuskopiointi) / AOF : kirjaa jokaisen palvelimen vastaanottaman kirjoitusoperaation. (Kestävämpi)
jos käytät Javaa, voit käyttää Jedis-ohjelmaa, joka on java-asiakasohjelma, yhdistämään Java-sovelluksesi Redis-sovellukseen. Huomautus: Jedis käyttää Apache Commons poolia yhteyksien yhdistämiseen (GenericObjectPool).
A single Jedis instance is not threadsafe!
näiden ongelmien välttämiseksi kannattaa käyttää jedispoolia, joka on verkkoyhteyksien threadsafe-allas. Oletusyhteyden maksimikoko on 8.
nyt keskitytään ongelmiin/virheisiin, joita saatat saada, ja tuotannon suorituskyvyn optimointiin vinkkejä ja temppuja Redis.
asioita/virhe, että saatat saada & tuotannon suorituskyvyn optimoimalla vinkkejä ja temppuja
ensinnäkin uudelleen.conf ja sentinel.conf, kaikki configit ovat järjestyksessä, joten älä sotke järjestystä. Muuten saat config virheitä kuten seuraavat.
*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 98
>>> 'sentinel down-after-milliseconds mymaster 5000'
No such master with specified name.
turvallisuusnäkökulmasta, Aseta salasana, jolla tunnistaudut isännän ja orjien kanssa. Tätä varten voit helposti muuttaa redis.conf ja sentinel.conf vastaavasti seuraavat config arvo.
In sentinel.conf
sentinel auth-pass <master-name> <password>In redis.conf
masterauth <master-password>
TCP-backlog-asetus (maksimiyhteydet) on 511. Voit asettaa tämän arvon vastaavasti (ottaen huomioon palvelinmäärityksen) seuraavilla toimenpiteillä.
sudo nano /etc/rc.local
Add this:
sysctl -w net.core.somaxconn=65535When you reboot the next time, the new setting will be to allow 65535 connections instead of 128 as before. When you add the line to rc.local make sure it's before the exit 0.
joitakin varoituksia, joihin saatat törmätä uudelleen.loki voi olla,
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.You can add this via following command as well as using a cat command you can makesure whether the value is set properly.echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
cat /etc/sysctl.conf
saatat joutua poistamaan THP tai läpinäkyvä valtava sivu.
WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.Fixsudo nano /etc/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
Unix-pistorasian käyttäminen TCP-portin 6379 sijasta edistää myös Redis-suorituskyvyn vahvistamista.
tämän saavuttamiseksi, redis.conf on muutettava seuraavaan asetukseen.
unixsocket /var/run/redis.sock
unixsocketperm 777# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.
port 0
lisäksi käyttötapauksesta riippuen voit määrittää myös Redis persistence-vaihtoehdon.
halutessasi voit poistaa pysyvyyden kokonaan käytöstä, jos haluat tietojesi vain olevan olemassa niin kauan kuin palvelin on käynnissä. Huomautus: voit poistaa RDB pysyvyys kommentoimalla pois kaikki ”tallenna” rivit redis.conf seuraavasti.
Comment out these 3 values in redis.conf
save 900 1
save 300 10
save 60 10000rdbcompression no
rdbchecksum no
AoF persistance (lisää vain tiedosto) on oletusarvoisesti poistettu käytöstä redis-järjestelmässä.conf.
appendonly no
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Monitoring Redis
monitoroinnin näkökulmasta Redis: n seuraamiseen on useita välineitä. NewRelic tarjoaa etukäteen valmiuksia seurata ja analysoida Redis mukaan lukien ”eniten aikaa kulutetaan db operations” , ”operations by Through” , ”operations by query time” ja jne.
lisätietoja uudesta Relic Redis on mainittu täällä. Lisäksi, Redis-stat on myös hyvä opensource Redis seurantaväline.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
AWS ElasticCache
AWS tarjoaa myös ”ElastiCache”-nimisen muistikätköpilvipalvelun, jonka mukana tulee myös Redis. Se voidaan määritellä tehokkaaksi helppokäyttöiseksi pilvipalveluksi, joka purkaa suurimman osan manuaalisista kokoonpanoista ja hallinnollisista tehtävistä.
ElastiCache on verkkopalvelu, joka helpottaa hajautetun muistin välimuistin käynnistämistä, hallintaa ja skaalaamista pilvessä.
mielenkiintoista, se alukset upea lisäominaisuuksia, kuten klusterin tilassa sharding muutamalla klikkauksella, Multi-AZ Auto-Failover, salaus levossa, salaus in-transit, tuoda RDB tiedosto S3, ota automaattiset varmuuskopiot ja paljon muuta.
tyylikkäin ominaisuus AWS ElastichCache on, että, se tarjoaa kattavan seurannan kojelauta oman Redis klusterin mukaan lukien seuranta näkökohtia, kuten CPU / Muistin käyttö (Swap ja Freeable muisti), yhteyden määrä, kohteen määrä, häädöt, merkkijono;avain;Hash-pohjainen komento määrä, replikointi lag Ja paljon muuta.
no … se on aika paljon tämän postauksen!
kuten tämän postauksen alussa mainitsin, Redis-artikkeleita on paljon, mutta halusin luoda ”all in one proper articlen”, joka kattaa olennaisimmat faktat ja vinkit, joita kehittäjä tai devops-insinööri tarvitsee rakentaakseen erittäin saatavilla olevan Redis-klusterin Sentinelin avulla.
ennen tämän postauksen viimeistelyä yksi mielenkiintoisista artikkeleista, jonka löysin, oli miten Flickr toteutti Redis Sentinelin. Tarkista myös tämä viesti.
selvä. Joten kiitos paljon lukea tämän artikkelin ja odotan keksiä toinen mielenkiintoinen artikkeli pian, jakaa kokemukseni Kehittäjä. Siihen asti, Kippis! ja hyvää koodausta!