EQVPS
DashibodiAnza

Jinsi ya kusakinisha Redis kwenye VPS: kikomo cha kumbukumbu, kuhifadhi kwenye diski na nenosiri lisilopotea

Sakinisha Redis kwenye Ubuntu 24.04, weka kikomo cha kumbukumbu yake ili isichukue seva nzima, washa faili ya AOF bila kufuta data yako, na weka nenosiri linalobaki baada ya kuwasha upya. Hatua mbili kati ya hizi zina mitego ambayo sisi wenyewe tuliingia kwenye seva yetu ya majaribio.

Redis huweka data kwenye kumbukumbu na hujibu ndani ya takriban milisekunde moja, ndiyo maana iko nyuma ya programu nyingi kama cache, foleni au hifadhi ya vipindi. Kusakinisha ni amri moja. Kazi halisi iko kwenye mipangilio ya chaguo-msingi: hakuna kikomo cha kumbukumbu, picha za hali zinaweza kupoteza maandishi ya karibuni, na kuna makosa mawili rahisi yanayofuta data yako kimyakimya au kuzima nenosiri lako. Mwongozo huu unashughulikia yote kwenye Ubuntu 24.04. Tuliendesha kila hatua kwenye picha yetu; takwimu zimetoka kwenye seva ya Micro (2 vCPU, 2 GB).

Unahitaji mtumiaji mwenye sudo. Mwongozo wa kusanidi Ubuntu humtengeneza.

1. Sakinisha

sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping

Usakinishaji ulichukua sekunde 13 na ukatupa Redis 7.0.15. Huanza mara moja na kila inapowashwa, hujibu PONG na husikiliza kwenye seva yenyewe tu: 127.0.0.1:6379 na [::1]:6379, ikiwa na protected-mode yes. Bila data ilitumia MB 13.5 za RAM.

Kumbukumbu ya matukio tayari ilikuwa na onyo:

WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.

Redis huhifadhi kwenye diski kutoka nakala yake inayotengenezwa kwa fork, na kwa mpangilio wa chaguo-msingi wa kernel fork hiyo inaweza kushindwa kumbukumbu ikiwa finyu. Rekebisha mara moja:

echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server

Baada ya kuwasha upya, onyo liliondoka.

2. Weka kikomo cha kumbukumbu

Tangu mwanzo maxmemory ni 0, yaani hakuna kikomo, na sera ni noeviction. Redis itaendelea kuchukua RAM hadi seva iishiwe. Weka dari na uamue kitakachotokea ikifikiwa:

redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE

Tulijaribu sera zote mbili kwa kikomo cha MB 64 na maandishi 400,000:

  • noeviction (chaguo-msingi): kumbukumbu ilisimama MB 63 na maandishi mapya yalishindwa kwa OOM command not allowed when used memory > 'maxmemory'. Inafaa kwa foleni au chochote usichoweza kukipoteza.
  • allkeys-lru: Redis ilitupa funguo zilizokaa muda mrefu bila kutumika, 48,606 kwa jumla, na kila andiko lilipita. Inafaa kwa cache.

CONFIG REWRITE huhifadhi mipangilio inayotumika kwenye /etc/redis/redis.conf, ili ibaki baada ya kuwasha upya. Pia huongeza mstari unaohitaji kuujua kabla ya hatua ya 4.

3. Chagua jinsi ya kuhifadhi kwenye diski

Kwa chaguo-msingi Redis huandika picha ya hali (/var/lib/redis/dump.rdb) baada ya badiliko 1 ndani ya saa moja, 100 ndani ya dakika tano au 10,000 ndani ya dakika moja. Tulijaribu njia tatu za kuisimamisha:

Jinsi Redis ilivyosimamaPicha za hali tu (chaguo-msingi)Na faili ya AOF
systemctl restartHakuna kilichopotea: huhifadhi inapozimwaHakuna kilichopotea
Imeuawa kwa kill -9Ufunguo wa baada ya picha ya mwisho ulipoteaUfunguo ulioandikwa sekunde 2 kabla ulikuwepo

Katika hali zote mbili, systemd iliwasha Redis tena yenyewe ndani ya sekunde chache.

Ikiwa Redis ina data ambayo ungeikosa, washa faili ya AOF (append-only file). Hurekodi kila andiko na kuliweka kwenye diski mara moja kila sekunde. Fanya hivyo kwenye seva inayoendelea kufanya kazi, si kwa kuhariri faili:

redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_

Tulijaribu njia nyingine kwanza, na ikatugharimu data yetu. Tulibadilisha appendonly no kuwa appendonly yes kwenye redis.conf na kuwasha upya. Redis iliwaka na AOF tupu na haikupakia chochote kutoka kwenye picha ya hali, kwa hiyo funguo zote zilizokuwepo zilipotea. Ilipozimwa baadaye, iliandika pia maudhui yake mapya, bila funguo za zamani, juu ya dump.rdb. CONFIG SET huepusha hili: Redis huandika AOF kwanza kutoka data iliyo kwenye kumbukumbu. Baada ya kuwasha upya, funguo zetu zote zilikuwepo.

Ikiwa Redis ni cache tupu inayoweza kuanza bila kitu, fanya kinyume na uzime uhifadhi kwa redis-cli CONFIG SET save "".

4. Weka nenosiri

Huu ndio mtego wa pili. Baada ya CONFIG REWRITE yoyote, Redis 7 huongeza mstari huu mwishoni mwa redis.conf:

user default on nopass ~* &* +@all

Maana yake ni "mtumiaji wa chaguo-msingi hahitaji nenosiri". Kisha tuliongeza requirepass juu zaidi kwenye faili na kuwasha upya. Redis iliendelea kujibu PONG bila nenosiri, kwa sababu mstari wa user unaishinda. Badala yake weka nenosiri kupitia Redis yenyewe:

REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE

Hifadhi nenosiri mahali salama. Sasa Redis inalihifadhi kama hash ya SHA-256 kwenye mstari uleule wa user default. Baada ya kuwasha upya, redis-cli ping ilijibu NOAUTH Authentication required. na nenosiri pekee ndilo lililofanya kazi. Mpe redis-cli kupitia kigeu REDISCLI_AUTH. Ukitumia -a linaonekana kwenye orodha ya michakato, na redis-cli hukuonya. Kwenye programu yako liweke kwenye anwani ya Redis: redis://:PASSWORD@127.0.0.1:6379/0.

5. Kuifikia kutoka kompyuta yako

Acha Redis kwenye 127.0.0.1 na utumie handaki la SSH. Tumia mlango wa SSH wa seva yako; kwenye vifurushi vya NAT huo ndio mlango wako binafsi:

ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22

Wakati linaendelea, redis-cli -p 6380 na zana za kompyuta yako huzungumza na Redis iliyo kwenye seva. Hakuna kipya kinachofunguliwa kwa intaneti. Kwa mwongozo wa funguo za SSH, handaki huingia bila nenosiri.

Ina kasi gani

Kwenye seva ya majaribio ya Micro, redis-benchmark na wateja 50 ilitoa:

JaribioMaombi kwa sekundeUcheleweshaji wa kati
SET30,3031.0 ms
GET35,1490.9 ms
SET, amri 16 kwa kila safari ya kwenda na kurudi272,1092.4 ms
GET, amri 16 kwa kila safari ya kwenda na kurudi414,9381.3 ms

Kwa cache au foleni ya kazi ya programu ya wavuti, hii ni zaidi sana ya unachohitaji. Kasi ya ziada inatokana na kutuma amri kwa makundi (pipelining).

Kifurushi gani

Redis inahitaji RAM kwa data yako na kidogo sana kingine. Nano (2 vCPU, 1 GB, $3/mwezi) huendesha Redis kando ya programu ndogo kwa maxmemory 256mb. Micro (2 GB, $5/mwezi) huacha nafasi kwa cache kubwa zaidi pamoja na programu. Ikiwa kitu kingine lazima kiunganishe moja kwa moja na Redis, chukua IPv4 yako mwenyewe (kuanzia Nano-IP kwa $8/mwezi) na uruhusu anwani hiyo pekee kwenye firewall. Vifurushi vyote viko kwenye ukurasa wa VPS, na malipo ni kwa USDT, USDC au ETH kwenye mitandao ya Base, Ethereum au Polygon.

Maswali

Redis inahitaji RAM kiasi gani?

Redis yenyewe ni ndogo sana: MB 13.5 mara tu baada ya kusakinishwa kwenye seva yetu. Inachohitaji ni nafasi ya data yako, kwa sababu data hukaa kwenye kumbukumbu. Weka maxmemory kwa kiasi ambacho seva inaweza kutoa, kwa mfano MB 256 kwenye seva ya GB 1, na uchague kitakachotokea ikijaa.

Redis au Valkey?

Valkey ni fork ya Redis iliyoanzia Redis 7.2 na inatumia itifaki ileile, kwa hiyo wateja wengi hufanya kazi na zote mbili. Ubuntu 24.04 ina Redis 7.0.15 pekee. Debian 13 ina Redis 8.0 na Valkey 8.1, na Debian 12 hupata Valkey 8.0 kutoka backports. Hatua za mwongozo huu zinafaa kwa zote mbili.

Kwa nini Redis hupoteza data baada ya hitilafu?

Kwa chaguo-msingi Redis huhifadhi picha ya hali kwenye diski kila baada ya dakika chache, kulingana na idadi ya funguo zilizobadilika. Tulipoua mchakato, ufunguo ulioandikwa baada ya picha ya mwisho ulikuwa umepotea. Washa faili ya AOF inayoandika kila sekunde, na hitilafu itakugharimu angalau takriban sekunde moja ya maandishi tu.

Niliongeza requirepass kwenye redis.conf, kwa nini Redis bado inapokea amri bila nenosiri?

Huenda kwa sababu CONFIG REWRITE iliendeshwa wakati fulani. Katika Redis 7 huongeza mstari user default on nopass ~* &* +@all mwishoni mwa redis.conf, na mstari huo hubatilisha requirepass iliyoandikwa juu yake. Weka nenosiri kwa CONFIG SET requirepass kisha CONFIG REWRITE, na Redis italihifadhi kwenye mstari huo.

Naweza kufungua mlango 6379 kwa intaneti?

Usifungue. Milango ya Redis iliyo wazi huchanganuliwa muda wote na ni njia ya kawaida ya kuingia kwenye seva. Unganisha na Redis kutoka kompyuta yako kupitia handaki la SSH, au iweke kwenye seva ileile na programu inayoitumia.

Maoni

Bado hakuna maoni. Kuwa wa kwanza.

Acha maoni

Maoni yanakaguliwa kabla ya kuonekana.