Instalace a konfigurace Redis
Díky omezením, na které jsem ve Windows Azure narazil přišla na přetřes myšlenka instalace vlastního Redis serveru místo existující služby.
Windows Azure má několik omezení a u Redis se jednalo o maximální počet povolených spojení, který zůstává na výchozí hodnotě konfigurace Redisu. U aplikace, ve které plánujete mít až 500 000 aktivních uživatelů je hodnota 10 000 alarmující a určitě je několikrát překročena.
V hlavě už mě napadaly zběsilé představy, jak bude Redis dělen mezi skupiny uživatelů po 50 000 a jak vše bude krásně pokryto supportem a SLA. Když se však spočte cena C1 ve Standardu s 1GB paměti, dostáváme se na částku přes 2000 Kč za jednu instanci. Při 10 instancích se již pohybujeme na nemalých penězích a v tu chvíli leti podobné řešení ze stolu a přichází jiné - vlastní servery s replikací. A1 instance ve Standardu vychází na 1100 Kč, pro zajištění dostupnosti počítáme se dvěmi instancemi. Ve výsledku máme k dispozici Redis o velikosti 1,5GB a SLA 99,95% za zhruba stejné peníze jako nás stála původní instance C1. Návrhy šly stranou, neboť bylo nutné vše nejprve otestovat, než bude nasazeno do produkce.
Základem byl image Ubuntu Server 14.04 LTS s podporou do 17.04.2019, který umožňuje z repozitáře doinstalovat old stable 2.8. V administraci ENDPOINTS daného virtuálu pak přidáme porty pro SSH a Redis. Jak jsem již naznačil, snahou bylo vyhnout se jakémukoli kompilování, tedy Redis byl instalován z balíku pomocí:
apt-get install redis-server
Samotná konfigurace byla po nastudování několika tutoriálů velmi jednoduchá. V souboru /etc/redis/redis.conf je potřeba změnit několik věcí:
vim /etc/redis/redis.conf
V defaultní konfiguraci naslouchá Redis pouze na localhostu což lze změnit úpravou řádku:
bind 127.0.0.1
za
bind <ipadresa>
Dále je potřeba přidat heslo pro základní authentizaci pomocí hesla. Většinou se dočtete, že máte odkomentovat řádek requirepass, ale ten se jaksi v ubuntu verzi nenachází. Není tedy nic jednoduššího než jej doplnit nad řádek s masterauth:
requirepass <tajneheslo>
Optimalizace si necháme na později, tedy server po uložení souboru restartujeme
/etc/init.d/redis-server restart
Dalším krokem je nastavení Slave serveru pro replikaci. Instalace a úpravy probíhají stejně jako na master serveru. Krom výše upravených řádků je třeba provést specifikaci master serveru:
slaveof <masterip> <masterport>
Dále je potřeba nastavit heslo:
masterauth <master-password>
Redis server opět restartujeme. Výsledkem je nainstalovaná replikace Redisu s výchozí konfigurací. Další postup definuje úpravy maximálního počtu uživatelů:
maxclients 100000
A maximální povolené paměti tak, aby nedocházelo k nežádoucímo swapování apod.
maxmemory 1073741824
Testování nám pak ukáže čísla v závilosti na konfiguraci a vytížení serveru:
SET: 210084.03 requests per second
GET: 197628.47 requests per second