replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThreshold = 10 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplier = 10 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplier = 1 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 600 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 10 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThreshold = 600 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThreshold = 10 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplier = 10 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplier = 1 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 600 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 10 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThreshold = 600 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThreshold = 10 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplier = 10 replicationRetryMinMultiplierIntervalThreshold = 1 replicationRetryMaxMultiplierIntervalThreshold = 600 replicationRetryMinMultiplierIntervalThreshold = 10 replicationRetryMaxMultiplierIntervalThreshold = 600 replicationRetryMinMultiplierIntervalThreshold = 10 replicationRetryMaxMultiplierIntervalThreshold = 600 replicationRetryMinMultiplierIntervalThreshold = 600 replicationRetryMaxMultiplierIntervalThreshold = 10 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 10 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThreshold = 600 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 10 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplier = 10 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 600 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThreshold = 10 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThreshold = bk00 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 10 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 600 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 10 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThreshold = 600 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 10 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThreshold = 10 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 600 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 10 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThreshold = 600 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThreshold = 600 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 10 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThreshold = 600 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThreshold = 10 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 10 replicationRetryMaxMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThreshold = 600 replicationRetryMinMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierIntervalThresholdMultiplierInterval = 10 replicationRetryMaxMultiplierIntervalThreshold = 600
Документ описывает, как настроить несколько серверов Gerrit master с использованием общих серверных компонентов: общего базового хранилища данных и общих репозиториев Git.С использованием нескольких серверов Gerrit master можно снизить нагрузку на сервер, позволяя пользователям обращаться к серверу, который имеет больше свободных ресурсов. Также можно обеспечить более высокую доступность, перенаправляя обслуживание на любой из оставшихся мастеров при отказе одного из мастеров.
Запуск многосерверной конфигурации по умолчанию сложен и, в зависимости от конфигурации и доступного внешнего оборудования и программного обеспечения, можно настроить многосерверную конфигурацию с различными уровнями обслуживания. Поддерживаемые варианты конфигурации описаны ниже.
Одноузлова многосерверная конфигурация обычно состоит в том, чтобы указывать все мастера на одну и ту же копию репозиториев Git через общую файловую систему.
Запуск каждого мастера на отдельном физическом хосте обеспечивает улучшение балансирования нагрузки. Общая файловая система, такая как NFS, вероятно, является лучшим вариантом для этой конфигурации, хотя любая поддерживаемая JGit общая файловая система будет работать.
Чтобы обеспечить общий доступ к репозиториям Git, инициализируйте экземпляры Gerrit следующим образом:
$ java -jar {path/}gerrit.war init -d <site1>
# ...
*** Git Repositories
***
Location of Git repositories [git]: /path/to/nfs/git
# выберите любое расположение на сетевой общедоступной файловой системе для расположения репозиториев Git.
# ЗАМЕЧАНИЕ: расположение репозиториев Git должно быть общим для всех серверов.
# Если вы используете значение по умолчанию, [git], то репозиторий будет расположен на этом сервере в 'site1/git'.
# Рекомендуется избегать значения по умолчанию и указывать полный путь к репозиторию Git,
# даже если он находится на этом сервере.
# Полный путь затем можно использовать при настройке других серверов.
# ...
$ java -jar {path/}gerrit.war init -d <site2>
# ...
*** Git Repositories
***## Сопоставление баз данныхВсе серверы должны использовать одну и ту же базу данных, чтобы обеспечить доступ пользователей к одному и тому же набору данных.
Поэтому следует использовать PostgreSQL или MySQL в качестве базы данных.
По умолчанию встроенный H2 не может быть использован, так как несколько серверов не могут подключаться к одной и той же базе данных H2 в режиме встраивания.Чтобы сопоставить базу данных, инициализируйте экземпляры Gerrit следующим образом:
```bash
$ java -jar {path/}gerrit.war init -d <site1>
# ...
*** SQL Database
***
Тип сервера базы данных [H2/?]:
# выберите любой тип сервера, кроме "H2" для базы данных
# выберите параметры базы данных, имя пользователя и пароль в соответствии с вашей конфигурацией
# ...
$ java -jar {path/}gerrit.war init -d <site2>
# ...
*** SQL Database
***
Тип сервера базы данных [H2/?]:
# выберите те же параметры, что и для первого экземпляра для SQL базы данных,
# так как мы хотим, чтобы все экземпляры использовали одну и ту же базу данных.
# ...
Gerrit использует кэши для ускорения доступа к данным. Каждый сервер использует свой собственный локальный кэш, что означает, что данные в этих кэшах не разделяются между серверами. Хотя несогласованные кэши между серверами не приведут к проблемам с согласованностью данных на уровне базы данных или git (то есть они не повредят ваши данные), они могут привести к множеству проблем, с которыми сталкиваются пользователи.В общем, пользовательские проблемы приводят к неприятному пользовательскому опыту, например, новые проекты, созданные на одном сервере, не отображаются на других серверах. Однако в некоторых случаях проблемы с согласованностью кэша могут рассматриваться как имеющие безопасные последствия. Например, есть значительная задержка перед тем, как изменение членства группы на одном сервере отобразится на других серверах. Эта задержка может привести к применению устаревших прав доступа к определенным пользователям.Некоторые кэши, которые стоит отметить:
Простейшим решением для обеспечения согласованности кэша является отключение кэшей, чтобы каждый сервер был вынужден получать актуальные данные из базы данных и репозиториев на каждом запросе.
Очевидно, что этот подход имеет влияние на производительность мастер-серверов и должен использоваться только в том случае, если ваша выгода от использования нескольких мастер-серверов превышает потерю производительности.
Чтобы отключить кэши, добавьте следующие строки в конфигурационный файл каждого сервера, <site>/etc/gerrit.config
:
[cache "accounts"]
memoryLimit = 0
diskLimit = 0
[cache "projects"]
memoryLimit = 0
diskLimit = 0
[cache "groups_members"]
memoryLimit = 0
diskLimit = 0
[cache "sshkeys"]
memoryLimit = 0
diskLimit = 0
Перезапустите все серверы для применения изменений в конфигурации.
$ ./<site1>/bin/gerrit.sh restart
$ ./<site2>/bin/gerrit.sh restart
Кэши веб-сессий являются авторитетными, и сессии не хранятся нигде ещё. Поэтому с обычным Gerrit невозможно поделиться веб-сессиями между мастерами.### Несообщающиеся веб-сессии
Так как веб-сессия идентифицируется с помощью имени хоста, можно просто иметь разные сессии для каждого мастера. С такой конфигурацией, вход или выход с одного мастера не повлияет на пользователя с других мастеров. Мастера будут выглядеть как разные сайты для пользователей (но данные на сервере будут одинаковыми). Натурально, без совместных веб-сессий, автоматическое балансирование нагрузки или переключение на другой сервер не будет доступно.
Несообщающиеся веб-сессии не предоставляют идеального решения; пользователям придется вручную переключаться между серверами для балансировки нагрузки или переключения. В большинстве случаев это не обеспечивает очень удовлетворительный пользовательский опыт, однако, есть случаи, когда такое решение все еще обеспечивает общее улучшение по сравнению с использованием одного мастера.Один из способов улучшить опыт — указать каждого пользователя на отдельный мастер и попытаться распределить пользователей равномерно по серверам. Это может работать хорошо, когда есть естественное разделение пользователей: например, разделить пользователей из удаленного сайта или пользователей автоматизации на свой собственный сервер. Такие разделения могут происходить без решения multi-master в любом случае в многих ситуациях с использованием независимых мастеров. Отсутствие альтернативы может заставить задуматься, является ли подход с несообщающимися веб-сессиями улучшением по сравнению с независимыми мастерами. См. обоснование для других причин, почему вы можете захотеть использовать эту конфигурацию.## HTTP-доступ
Каждый сервер должен прослушивать разные комбинации ip:port для HTTP. Чтобы балансировать нагрузку или переключать пользователей на разные мастера, они должны быть распределены по мастерам.
Если веб-сессии не разделяются между мастерами, для каждого мастера должны использоваться разные URL-адреса хостов, а балансировка нагрузки и переключение на случай отказа должны выполняться вручную. Использование разных URL-адресов хостов распределит пользователей в зависимости от того, какой изначальный URL они выбрали для доступа к мастеру. Повторные доступы будут осуществляться к тому же мастеру.
Хотя использование отдельных URL-адресов хостов не обеспечивает отличного пользовательского опыта HTTP, см. [мотивацию] для того, почему вы можете захотеть сделать это в отсутствие других решений.
$ java -jar {path/}gerrit.war init -d <site1>
# ...
*** HTTP Daemon
***
Listen on address [*]: server1
Listen on port [8080]: port1
$ java -jar {path/}gerrit.war init -d <site2>
# ...
*** HTTP Daemon
***
Listen on address [*]: server2
Listen on port [8080]: port2
# выберите другую комбинацию <ip>:<port> для HTTP
демонов, отличную от той, которую использует первый экземпляр (если этот экземпляр находится на другом сервере, вы все равно можете использовать значения по умолчанию)
# ...
```### Одни и те же URL-адреса хостов и балансировка нагрузки
ЗАМЕЧАНИЕ: Сначала необходимо настроить разделяемые веб-сессии.
Доступ к мастерам на разных серверах с использованием одного и того же URL-адреса хоста требует использования балансировщика нагрузки.
Подключаясь к мастерам через балансировщик нагрузки, пользователи будут видеть только один хост (хост балансировщика),
и, следовательно, будут иметь только одну сессию. Любой стандартный балансировщик нагрузки может быть использован.
Фронтенд-адрес HTTP балансировщика нагрузки должен быть отличен от адреса любого мастера.
Настройте бэкенд балансировщика нагрузки с адресами HTTP всех мастеров.
Чтобы мастера направляли клиентов для подключения к адресу HTTP балансировщика нагрузки,
добавьте следующие строки в конфигурацию каждого мастера, `<site>/etc/gerrit.config`:
```ini
[gerrit]
canonicalWebUrl = http[s]://<ip>:<port>
# адрес HTTP балансировщика нагрузки
Перезапустите все серверы для применения изменений в конфигурации.
Пример настройки с использованием HAProxy приведен ниже:
global
daemon
pidfile /var/run/haproxy.pid
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
```frontend http-in
bind <ip>:<http_port>
# ЗАМЕЧАНИЕ: пользователи должны подключаться по протоколу http к
<ip>:<http_port>, который должен совпадать с параметром
gerrit.canonicalWebUrl в файлах конфигурации 'gerrit.config'
default_backend http-servers
```backend http-servers
server сервер1 <server1_ip>:<server1_http_port>
server сервер2 <server2_ip>:<server2_http_port>```
См. [Использование HAProxy] для информации о том, как запустить и остановить HAProxy.
## SSH Доступ
Как и для HTTP, каждый сервер должен прослушивать разные IP:порт комбинации для SSH.
```bash
$ java -jar {path/}gerrit.war init -d <site1>
# ...
*** SSH Демон ***
Прослушивание адреса [*]: server1
Прослушивание порта [29418]: port1
$ java -jar {path/}gerrit.war init -d <site2>
# ...
*** SSH Демон ***
Прослушивание адреса [*]: server2
Прослушивание порта [29418]: port2
# выберите другую <ip>:<port> комбинацию для SSH демонов, чем использует первая инстанция (если эта инстанция находится на другом сервере, вы все равно можете использовать стандартные значения)
# ...
Чтобы предотвратить появление пользовательских предупреждений безопасности при подключении через SSH, все мастера должны использовать одинаковый ssh-rsa ключ хоста, копируя ‘/etc/ssh_host_rsa_key’ и ‘/etc/ssh_host_rsa_key.pub’ с одного мастера на остальные.
Чтобы балансировать нагрузку или переключаться на другие мастера, мастера должны быть распределены по разным серверам. Однако, поскольку SSH сессии не сохраняются между подключениями, любой стандартный SSH балансировщик нагрузки может быть использован для распределения SSH подключений по доступным мастерам.
Настройте бэкенд балансировщика нагрузки с SSH адресами всех мастеров.
Чтобы мастера направляли клиентов подключаться к адресу SSH балансировщика нагрузки,
добавьте следующие строки в конфигурацию каждого мастера, `<site>/etc/gerrit.config`:
[sshd] advertisedAddress = : # адрес SSH балансировщика нагрузки
Перезапустите все серверы для применения изменений в конфигурации.Пример файла конфигурации <haproxy_config> для HAProxy:
global daemon pidfile /var/run/haproxy.pid
defaults mode tcp retries 3 timeout connect 5000ms timeout client 50000ms timeout server 50000ms
frontend ssh-in bind :<ssh_port>
default_backend ssh-servers
backend ssh-servers
опция redispatch
сервер server1 <server1_ip>:<server1_ssh_port> check
сервер server2 <server2_ip>:<server2_ssh_port> check
См. Использование HAProxy для информации о том, как запускать и останавливать HAProxy.
Разное настройка URL-адресов полезна, если вы в основном заботитесь о балансировке нагрузки SSH-трафика и не беспокоитесь о том, какой HTTP-мастер ваши пользователи используют. HTTP-трафик Gerrit обычно очень легок по сравнению с SSH-трафиком Gerrit (если только не используется git через HTTP). Это может быть использовано как простой путь для обновления рабочих станций, позволяя им быть использованными как мастера для SSH-данных. Это также полезно для балансировки нагрузки анонимного git HTTP-трафика, так как он не требует сессии. Если вы выбрали использовать многомастерную конфигурацию только для SSH, вы хотите установить ваш URL-адрес по умолчанию на указание единого HTTP-мастера, чтобы сообщения о загрузке изменений, созданные каждым мастером, указывали на правильный HTTP-URL.
Для получения дополнительной информации перейдите на haproxy.1wt.eu
Проверьте, является ли конфигурационный файл HAProxy валидным:
$ sudo haproxy -f <haproxy_config> -c
Запустите HAProxy:
$ sudo haproxy -f <haproxy_config>
HAProxy можно остановить с помощью sudo kill <haproxy_pid>
.
PID HAProxy можно найти с помощью ps -e | grep haproxy
.
Если вы используете пример конфигурационного файла, PID также можно найти в /var/run/haproxy.pid
.
Чтобы перезагрузить новую конфигурацию с минимальным влиянием на сервис и без разрыва существующих сессий, выполните:
$ sudo haproxy -f haproxy.cfg -sf <haproxy_pid>
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )