Povezivanje RabbitMQ i Redis klastera
Uvod
Ovaj vodič važi samo za ONLYOFFICE Docs Enterprise Edition i Developer Edition.
Koristite ovaj vodič da biste povezali ONLYOFFICE Docs sa RabbitMQ klasterom i Redis Cluster-om. Da biste sam ONLYOFFICE Docs pokrenuli kao klaster, pratite uputstvo ONLYOFFICE Docs za Kubernetes.
ONLYOFFICE Docs Community Edition ne koristi Redis. Počevši od verzije 9.4.0, ne koristi ni RabbitMQ.
Uređivanje konfiguracije
Podešavanja u nastavku se unose u fajl local.json:
- Za Linux:
/etc/onlyoffice/documentserver/local.json - Za Windows:
%ProgramFiles%\ONLYOFFICE\DocumentServer\config\local.json
Dodajte parametre u postojeće odeljke fajla, a zatim ponovo pokrenite ONLYOFFICE Docs servise.
Povezivanje RabbitMQ klastera
ONLYOFFICE Docs se povezuje na jedan RabbitMQ URL. Parametar rabbitmq.url prihvata jedan string; lista URL-ova brokera nije podržana. Učinite RabbitMQ klaster dostupnim preko jedne krajnje tačke:
- TCP load balancer, na primer HAProxy, sa visoko dostupnom adresom (keepalived ili VRRP);
- DNS ime koje se razrešava u adrese aktivnih čvorova.
Navedite ovu krajnju tačku u local.json:
{
"rabbitmq": {
"url": "amqp://<user>:<password>@rabbitmq.example.com:5672"
}
}
Za Docker prosledite isti URL u promenljivoj okruženja AMQP_URI.
Kada RabbitMQ čvor prestane da radi, ONLYOFFICE Docs se automatski ponovo povezuje. Kod klasičnih redova, preuzimanje poruka se nastavlja kada se čvor koji je vlasnik reda ponovo pokrene.
Heartbeat
ONLYOFFICE Docs uključuje TCP keepalive i koristi vremensko ograničenje za AMQP heartbeat koje predlaže RabbitMQ, podrazumevano 60 sekundi, da bi otkrio prekinute veze. Podesite vremensko ograničenje neaktivnosti RabbitMQ load balancer-a na vrednost veću od vremenskog ograničenja heartbeat-a. Da biste zatražili drugo vremensko ograničenje, podesite heartbeat u sekundama u rabbitmq.url:
{
"rabbitmq": {
"url": "amqp://<user>:<password>@rabbitmq.example.com:5672?heartbeat=30"
}
}
Quorum redovi
Podrazumevano, ONLYOFFICE Docs koristi klasične redove. Možete preći na quorum redove, koje RabbitMQ replicira na čvorove klastera. Postavite x-queue-type na quorum za četiri reda:
{
"rabbitmq": {
"queueconverttask": {"options": {"arguments": {"x-queue-type": "quorum"}}},
"queueconvertresponse": {"options": {"arguments": {"x-queue-type": "quorum"}}},
"queueconvertdead": {"options": {"arguments": {"x-queue-type": "quorum"}}},
"queuedelayed": {"options": {"arguments": {"x-queue-type": "quorum"}}}
}
}
Ostavite queuepubsub kao klasičan red: to je ekskluzivni red sa automatskim brisanjem, što quorum redovi ne dozvoljavaju.
Quorum redovi podržavaju dva nivoa prioriteta u RabbitMQ verzijama od 4.0 do 4.2 i 32 nivoa počevši od RabbitMQ 4.3. Ranije verzije ne podržavaju prioritete, pa zadaci konverzije više nemaju prioritet.
RabbitMQ ne može da promeni tip postojećeg reda. Pre ponovnog pokretanja ONLYOFFICE Docs sa novim podešavanjima, zaustavite ga i obrišite redove ds.converttask6, ds.convertresponse, ds.convertdead i ds.delayed ili postavite nove nazive u parametrima name ovih redova. Uradite to tokom perioda održavanja: poruke preostale u obrisanim redovima biće izgubljene.
Povezivanje Redis Cluster-a
ONLYOFFICE Docs podržava Redis Cluster sa oba Redis klijenta koja sadrži, node-redis (podrazumevano) i ioredis. Navedite čvorove klastera u odeljku services.CoAuthoring.redis fajla local.json.
Za node-redis koristite optionsCluster:
{
"services": {
"CoAuthoring": {
"redis": {
"name": "redis",
"optionsCluster": {
"rootNodes": [
{"url": "redis://192.168.0.150:7000"},
{"url": "redis://192.168.0.150:7001"},
{"url": "redis://192.168.0.150:7002"}
],
"defaults": {"username": "default", "password": "<password>"}
}
}
}
}
}
Za ioredis koristite iooptionsClusterNodes i iooptionsClusterOptions:
{
"services": {
"CoAuthoring": {
"redis": {
"name": "ioredis",
"iooptionsClusterNodes": [
{"host": "192.168.0.150", "port": 7000},
{"host": "192.168.0.150", "port": 7001},
{"host": "192.168.0.150", "port": 7002}
],
"iooptionsClusterOptions": {"redisOptions": {"password": "<password>"}}
}
}
}
}
Redis Cluster podržava samo bazu podataka 0.
Mapiranje adresa čvorova
Čvorovi klastera saopštavaju klijentu svoje adrese. Ako ONLYOFFICE Docs ne može da pristupi ovim adresama, na primer zbog NAT-a ili Docker mreža, u logovima se pojavljuju greške kao što su MOVED ... ili Cannot read properties of undefined (reading 'master').
Mapirajte svaku objavljenu adresu na adresu kojoj ONLYOFFICE Docs može da pristupi. Za node-redis dodajte nodeAddressMap u optionsCluster:
"optionsCluster": {
"rootNodes": [{"url": "redis://redis1.example.com:7000"}],
"nodeAddressMap": {
"10.0.0.5:7000": {"host": "redis1.example.com", "port": 7000},
"10.0.0.6:7000": {"host": "redis2.example.com", "port": 7000},
"10.0.0.7:7000": {"host": "redis3.example.com", "port": 7000}
}
}
Za ioredis dodajte natMap u iooptionsClusterOptions:
"iooptionsClusterOptions": {
"natMap": {
"10.0.0.5:7000": {"host": "redis1.example.com", "port": 7000},
"10.0.0.6:7000": {"host": "redis2.example.com", "port": 7000},
"10.0.0.7:7000": {"host": "redis3.example.com", "port": 7000}
}
}
Provera podešavanja
Koraci 3 i 4 zahtevaju quorum redove replicirane na najmanje tri RabbitMQ čvora i Redis Cluster sa replikom za svaki master čvor.
- Ponovo pokrenite ONLYOFFICE Docs i proverite DocService log,
/var/log/onlyoffice/documentserver/docservice/out.logna Linux-u.- Greške povezivanja sa RabbitMQ-om beleže se kao
[AMQP] connect error, sa brojem pokušaja i vremenom do sledećeg pokušaja. - Redis greške sadrže
redisClient.
- Greške povezivanja sa RabbitMQ-om beleže se kao
- Otvorite dokument u dva pregledača i uređujte ga zajedno.
- Dok je dokument otvoren, zaustavite jedan RabbitMQ čvor. Proverite da li se uređivanje nastavlja i da li se dokument čuva nakon što ga zatvorite.
- Ponovo pokrenite RabbitMQ čvor, a zatim ponovite test sa jednim Redis master čvorom. Ponovo pokrenite Redis čvor nakon testa.