Ana içeriğe geç

RabbitMQ ve Redis kümesini bağlama

Giriş​

Önemli

Bu kılavuz yalnızca ONLYOFFICE Docs Enterprise Edition ve Developer Edition için geçerlidir.

ONLYOFFICE Docs'u bir RabbitMQ kümesine ve bir Redis Cluster'a bağlamak için bu kılavuzu kullanın. ONLYOFFICE Docs'un kendisini küme olarak çalıştırmak için ONLYOFFICE Docs'u Kubernetes'te kurma kılavuzunu izleyin.

not

ONLYOFFICE Docs Community Edition Redis kullanmaz. 9.4.0 sürümünden itibaren RabbitMQ da kullanmaz.

Yapılandırmayı düzenleme​

Aşağıdaki ayarlar local.json dosyasında yapılır:

  • Linux için: /etc/onlyoffice/documentserver/local.json
  • Windows için: %ProgramFiles%\ONLYOFFICE\DocumentServer\config\local.json

Parametreleri dosyanın mevcut bölümlerine ekleyin, ardından ONLYOFFICE Docs hizmetlerini yeniden başlatın.

RabbitMQ kümesini bağlama​

ONLYOFFICE Docs tek bir RabbitMQ URL'sine bağlanır. rabbitmq.url parametresi tek bir dize alır; aracı (broker) URL'lerinin listesi desteklenmez. RabbitMQ kümesini tek bir uç nokta üzerinden erişilebilir hale getirin:

  • yüksek erişilebilir bir adrese (keepalived veya VRRP) sahip bir TCP yük dengeleyici, örneğin HAProxy;
  • çalışan düğümlere çözümlenen bir DNS adı.

Bu uç noktayı local.json dosyasında belirtin:

{
"rabbitmq": {
"url": "amqp://<user>:<password>@rabbitmq.example.com:5672"
}
}

Docker için aynı URL'yi AMQP_URI ortam değişkeninde iletin.

Bir RabbitMQ düğümü devre dışı kaldığında ONLYOFFICE Docs otomatik olarak yeniden bağlanır. Klasik kuyruklarda, kuyruğa sahip olan düğüm yeniden başladığında mesajları tüketmeye yeniden başlar.

Heartbeat​

ONLYOFFICE Docs TCP keepalive'ı etkinleştirir ve kopan bağlantıları algılamak için RabbitMQ'nun önerdiği AMQP heartbeat zaman aşımını (varsayılan olarak 60 saniye) kullanır. RabbitMQ yük dengeleyicisinin boşta kalma zaman aşımını heartbeat zaman aşımından daha uzun ayarlayın. Farklı bir zaman aşımı istemek için rabbitmq.url içinde heartbeat değerini saniye cinsinden ayarlayın:

{
"rabbitmq": {
"url": "amqp://<user>:<password>@rabbitmq.example.com:5672?heartbeat=30"
}
}

Quorum kuyrukları​

Varsayılan olarak ONLYOFFICE Docs klasik kuyruklar kullanır. RabbitMQ'nun küme düğümleri arasında çoğalttığı quorum kuyruklarına geçebilirsiniz. Dört kuyruk için x-queue-type değerini quorum olarak ayarlayın:

{
"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"}}}
}
}

queuepubsub kuyruğunu klasik bırakın: bu, quorum kuyruklarının izin vermediği, özel (exclusive) ve otomatik silinen bir kuyruktur.

Quorum kuyrukları RabbitMQ 4.0 ile 4.2 arasında iki öncelik düzeyini, RabbitMQ 4.3 ve sonrasında ise 32 düzeyi destekler. Önceki sürümler öncelikleri desteklemez, bu nedenle dönüştürme görevleri artık önceliklendirilmez.

uyarı

RabbitMQ mevcut bir kuyruğun türünü değiştiremez. ONLYOFFICE Docs'u yeni ayarlarla yeniden başlatmadan önce durdurun ve ds.converttask6, ds.convertresponse, ds.convertdead ve ds.delayed kuyruklarını silin ya da bu kuyrukların name parametrelerinde yeni adlar belirleyin. Bunu bir bakım penceresinde yapın: silinen kuyruklarda kalan mesajlar kaybolur.

Redis Cluster'ı bağlama​

ONLYOFFICE Docs, içerdiği iki Redis istemcisiyle de Redis Cluster'ı destekler: node-redis (varsayılan) ve ioredis. Küme düğümlerini local.json dosyasının services.CoAuthoring.redis bölümünde belirtin.

node-redis için optionsCluster kullanın:

{
"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>"}
}
}
}
}
}

ioredis için iooptionsClusterNodes ve iooptionsClusterOptions kullanın:

{
"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 yalnızca 0 numaralı veritabanını destekler.

Düğüm adreslerini eşleme​

Küme düğümleri istemciye kendi adreslerini bildirir. ONLYOFFICE Docs bu adreslere ulaşamazsa, örneğin NAT veya Docker ağları nedeniyle, günlüklerde MOVED ... veya Cannot read properties of undefined (reading 'master') gibi hatalar görünür.

Bildirilen her adresi ONLYOFFICE Docs'un ulaşabileceği bir adresle eşleyin. node-redis için optionsCluster bölümüne nodeAddressMap ekleyin:

"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}
}
}

ioredis için iooptionsClusterOptions bölümüne natMap ekleyin:

"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}
}
}

Kurulumu kontrol etme​

Adım 3 ve 4 için en az üç RabbitMQ düğümüne çoğaltılan quorum kuyrukları ve her ana düğüm için bir replikaya sahip bir Redis Cluster gerekir.

  1. ONLYOFFICE Docs'u yeniden başlatın ve DocService günlüğünü kontrol edin; Linux'ta bu /var/log/onlyoffice/documentserver/docservice/out.log dosyasıdır.
    • RabbitMQ bağlantı hataları, deneme numarası ve bir sonraki denemeye kalan süreyle birlikte [AMQP] connect error olarak günlüğe kaydedilir.
    • Redis hataları redisClient içerir.
  2. Bir belgeyi iki tarayıcıda açın ve birlikte düzenleyin.
  3. Belge açıkken bir RabbitMQ düğümünü durdurun. Düzenlemenin devam ettiğini ve belgeyi kapattıktan sonra kaydedildiğini kontrol edin.
  4. RabbitMQ düğümünü yeniden başlatın, ardından testi bir Redis ana düğümüyle tekrarlayın. Testten sonra Redis düğümünü yeniden başlatın.