Unity 6.3
0 онлайн 42 гостей 3 в системе
Вход

Зеркало нескольких экземпляров ускорителя Unity

Вы можете настроить несколько экземпляров Unity Accelerator для зеркального отображения одних и тех же кэшированных данных. Вы можете пожелать иметь два зеркальных сервера кэша, работающих в одной и той же сети для высокой доступности. Например, если один из них выходит из строя, имеет сбой оборудования или нуждается в обслуживании по какой-либо причине, другой сервер может компенсировать. Вы также можете зеркально отображать серверы кэша, которые удалены друг от друга, например, главный офис может отображать свои данные в филиале, предоставляя копии своих кэшированных данных для использования в филиале также.

Функции зеркалирования предоставляют только возможности исходящих данных, также известные как push, или forwarding. Вы можете push или forward на несколько серверов кэша, или даже цепь их. Например, A отправляет на B, с B отправляет на C, и даже C отправляет обратно на A. Вам не нужно беспокоиться о круговых цепочках, потому что элементы имеют метку времени, так что получающий сервер кэша игнорирует любые входящие элементы, которые не являются более новыми, чем то, что он уже имеет.

Пример зеркала

В следующем примере сервер A имеет ip:port из 1.1.1.1:1111, а сервер B — 2.2.2.2:2222. Оба сервера не имеют данных, с которых можно было бы начать, поэтому следующая команда помещает элемент в A и отмечает, что его нет в B:

$ echo test1 | unity-accelerator cache put 1.1.1.1:1111 namespace1 key1
$ unity-accelerator cache get 1.1.1.1:1111 namespace1 key1
test1
$ unity-accelerator cache get 2.2.2.2:2222 namespace1 key1
key not found

Следующая команда настраивает A на пересылку на B. Это изменяет конфигурацию A, так что входите в машину, на которой работает ускоритель A, выключите ускоритель и выполните следующее:

# Shutdown Accelerator A
$ cd <directory where unity-accelerator.cfg is>
$ unity-accelerator config set ProtobufForwardPuts protobuf:2.2.2.2:2222
# Start Accelerator A back up

Теперь вы можете поместить другой элемент в кэш А и увидеть, как он пересылается Б:

$ echo test2 | unity-accelerator cache put 1.1.1.1:1111 namespace2 key2
$ unity-accelerator cache get 1.1.1.1:1111 namespace2 key2
test2
$ unity-accelerator cache get 2.2.2.2:2222 namespace2 key2
key not found
# It will take up to a minute before the forwarding occurs, due to how the algorithm works with batching, etc. But within a minute or two you should see...
$ unity-accelerator cache get 2.2.2.2:2222 namespace2 key2
test2

Однако это касается только новых данных: любые новые элементы, помещенные в ускоритель А, будут перенаправлены в ускоритель B.. Это не касается существующих данных. В этом примере первый элемент все еще не в ускорителе B..

$ unity-accelerator cache get 2.2.2.2:2222 namespace1 key1
key not found

Чтобы покрыть этот случай, и в случаях, когда вы просто хотите перенаправить все данные один раз (что полезно при переходе с одного ускорителя на новый), вы можете использовать инструмент командной строки «push»:

$ unity-accelerator cache push 1.1.1.1:1111 2.2.2.2:2222
{"msg":"push completed", "destination":"2.2.2.2:2222", "namespaces":2, "keys":2, "bytes":12, "supercededs":1, "errors":0, "elapsed":"44.054078ms"}
$ unity-accelerator cache get 2.2.2.2:2222 namespace1 key1
test1

Push-инструмент отправляет запрос первому ускорителю и говорит ему отправить все свои данные второму ускорителю. Когда это сделано, первый ускоритель возвращает ответ «push completed» с подробностями о том, что было сделано.

Существуют дополнительные, расширенные параметры конфигурации, которые вы можете изучить, запустив unity-accelerator config help | less и найдя Forward. Вы можете указать одновременность пересылки, размер очереди, обработку ошибок и т.д.

Также обратите внимание, что вы можете изменить значения конфигурации для MaintenanceStart и MaintenanceDuration каждого зеркального ускорителя, чтобы они не все выключались для обслуживания в одно и то же время.

Дополнительные ресурсы