Масштабирование Carbonio
При использовании почтовых систем в условиях постоянно растущего количества пользователей администратор инфраструктуры рано или поздно столкнется с необходимостью ее масштабирования. Carbonio позволяет администраторам осуществлять не только вертикальное, но и горизонтальное масштабирование, то есть помимо увеличения ресурсов самих серверов, добавлять в инфраструктуры новые узлы, которые, как правило, автоматически берут на себя часть полезной нагрузки. В данной статье мы расскажем о том, как добавлять к уже существующей инфраструктуре Carbonio новые узлы, способные выполнять те или иные функции.
Данная инструкция подойдет как пользователям коммерческой версии Carbonio, так и частично пользователям бесплатной Carbonio Community Edition.
Типовая операция по добавлению нового узла в инфраструктуру представляет из себя добавление репозиториев Carbonio, установку необходимых для работы и автонастройки пакетов, запуск настройки carbonio-bootstrap, а также добавление сервера в Carbonio Mesh при помощи команд service-discover setup-wizard и pending-setups.
Детально разберем каждый из вариантов добавления новых серверов в инфраструктуру Carbonio.
Добавление инфраструктурного сервера
В основе Carbonio находится СУБД PostgreSQL, к которой через PGPool2 от почтового сервера через специальные коннекторы постоянно идут запросы. Сервер, на котором установлены PGPool2 и коннекторы называется инфраструктурным. Его отключение может привести к полной неработоспособности всей почтовой системы и для того, чтобы этого не произошло, администратор может добавить дополнительный инфраструктурный сервер, который возьмет на себя всю нагрузку в случае отказа первого, обеспечив непрерывность доступности сервиса.
Для добавления инфраструктурной ноды потребуется добавить репозитории Carbonio и установить пакеты c PGPool2 и коннекторами.
apt install pgpool2 service-discover-agent carbonio-files-db carbonio-mailbox-db carbonio-docs-connector-db carbonio-tasks-db
Замените содержимое файла настроек PGPool данными, аналогичными тем, что вводились на изначальном инфраструктурном сервере.
echo "backend_clustering_mode = 'raw'
port = 5432
backend_hostname0 = 'PG_hostname'
backend_port0 = 5433
backend_flag0 = 'DISALLOW_TO_FAILOVER'
num_init_children = 32
max_pool=8
reserved_connections=1" > /etc/pgpool2/pgpool.conf
Замените 'PG_hostname' на имя хоста сервера, на котором находится ваша СУБД PostgreSQL.
Включите и перезагрузите PGPool2
systemctl enable --now pgpool2
systemctl restart pgpool2.service
После этого выполните первоначальную настройку carbonio-bootstrap, а также выполните команды service-discover setup-wizard и pending-setups -a и введите пароль Carbonio Mesh.
По выполнении всех этих действий у вас появится готовый к использованию инфраструктурный сервер Carbonio.
Добавление сервера LDAP Read-Only Replica
Доступную только для чтения реплику LDAP обычно добавляют на уже существующие Appserver-ноды. Это делается для того, чтобы запросы к LDAP на чтение, которые осуществляет Mailboxd в ходе своей работы, ходили в рамках одного сервера. Это позволяет им выполняться гораздо быстрее и не создавать нагрузку на сеть.
Для ее добавления потребуется добавить репозитории Carbonio и установить пакеты c Carbonio LDAP и агентом Carbonio Mesh.
apt install carbonio-directory-server service-discover-agent
При добавлении первой реплики LDAP потребуется выполнить ряд команд на уже существующем LDAP-сервере, а именно включить режим реплицирования и получить список паролей из LDAP.
/opt/zextras/libexec/zmldapenablereplica
zmlocalconfig -s zimbra_ldap_password
zmlocalconfig -s ldap_replication_password
zmlocalconfig -s ldap_postfix_password
zmlocalconfig -s ldap_amavis_password
zmlocalconfig -s ldap_nginx_password
Отметим, что по умолчанию все пароли из списка одинаковые, поэтому если вы их не меняли вручную, как правило достаточно получить только один пароль.
После выполнения этих действий на добавленном сервере проведите первоначальную настройку carbonio-bootstrap, где укажите имя хоста основного сервера LDAP, а также полученные на основном LDAP пароли. После этого выполните команды service-discover setup-wizard и pending-setups -a и введите пароль Carbonio Mesh. По выполнении всех действий в Carbonio появится LDAP Read-Only Replica.
Протестировать ее работу можно запустив на сервере LDAP Replica команду /opt/zextras/libexec/zmreplchk. В ее выводе будет содержаться статус реплики. В случае, если статус будет In Sync, всё работает корректно.
Добавление сервера LDAP Multi-Master
LDAP-Replica способна снизить нагрузку на основной сервер LDAP, однако неспособна функционировать самостоятельно. Как результат, в случае выхода из строя основного LDAP-сервера, работать перестанет и LDAP Replica. Для того, чтобы система оставалась работоспособной даже в случае выхода из строя сервера LDAP, требуется превратить ее в LDAP Multi-Master.
Для этого нужно установить ноду LDAP Replica по инструкции выше, а затем добавить ее имя хоста, в список LDAP-серверов, к которым узлы инфраструктуры будут обращаться с запросами.
Делается это при помощи команды zmlocalconfig -e ldap_url=«ldap://ldap1.company.ru ldap2.company.ru». Порядок указания LDAP-серверов имеет значение. Он определяет то, к какому из них сервер будет обращаться в первую очередь, а к какому только в случае, если первый не ответит.
Поэтому для балансировки нагрузки рекомендуется для каждого сервера в инфраструктуре прописать свой порядок LDAP-серверов. Например, для части серверов указать ldap_url=«ldap://ldap1.company.ru ldap2.company.ru», а для части ldap_url=«ldap://ldap2.company.ru ldap1.company.ru».
Допускается добавление неограниченного числа узлов LDAP Multi-master. В таком случае имя хоста каждого из них должно быть указано в параметре ldap_url каждого из серверов инфраструктуры.
Добавление сервера MTA
Дополнительный сервер Postfix, способный принимать и отправлять письма, а также проверять почту на спам и вирусы, следует добавлять в случаях, когда требуется обеспечить прием и отправку писем в случае выхода из строя сервера МТА, в случае, когда один сервер не справляется с нагрузкой, а также в случаях, когда требуется разграничить функциональность MTA-серверов. Например, сделать так, чтобы один из них работал только на прием почты, а другой только на отправку.
Для ее добавления потребуется добавить репозитории Carbonio и установить пакеты c Carbonio MTA и агентом Carbonio Mesh.
apt install service-discover-agent carbonio-mta
После этого выполните первоначальную настройку carbonio-bootstrap, а также выполните команды service-discover setup-wizard и pending-setups -a и введите пароль Carbonio Mesh. После завершения этих действий вы получите сервер MTA, способный отправлять письма.
Для того, чтобы добавленный сервер MTA мог не только отправлять письма, но и получать их, на него должна указывать MX-запись в DNS. Для нескольких MTA можно использовать балансировщик нагрузки, который будет распределять письма по разным серверам MTA.
Для того, чтобы запретить добавленному серверу MTA отправлять письма, и сключите сервис carbonio-mta-sidecar.service из числа запускаемых автоматически, удалите файл /etc/zextras/service-discover/carbonio-mta.hcl и перезапустите службу service-discover
systemctl mask carbonio-mta-sidecar.service
rm /etc/zextras/service-discover/carbonio-mta.hcl
service service-discover restart
Добавление сервера Proxy
Дополнительный Proxy-сервер, который является точкой входа для пользователей, добавляют в систему для того, чтобы снять нагрузку с основного, а также для того, чтобы в случае выхода из строя одного сервера, пользователи могли входить в систему с использованием другого.
Для добавления дополнительного сервера Proxy потребуется добавить репозитории Carbonio и установить пакеты cвязанные с Carbonio Proxy
apt install service-discover-agent carbonio-proxy carbonio-webui carbonio-files-ui carbonio-chats-ui carbonio-admin-ui carbonio-admin-console-ui carbonio-tasks-ui
После этого выполните первоначальную настройку carbonio-bootstrap, а также выполните команды service-discover setup-wizard и pending-setups -a и введите пароль Carbonio Mesh.
Настройте memcached-сервер при помощи следующих команд, выполненных от имени пользователя zextras:
carbonio prov ms $(zmhostname) zimbraMemcachedBindAddress $(hostname -i)
zmmemcachedctl restart
zmproxyctl restart
Поскольку сервер memcached не поддерживает аутентификацию, убедитесь, что порт 11211, по которому идут обращения к нему, доступен только из внутренней сети
Отметим, что для того, чтобы использовать одновременно оба сервера Proxy, перед ними должен быть установлен балансировщик нагрузки.
Добавление сервера Mailstore
Дополнительные Mailstore-серверы добавляют для того, чтобы распределить нагрузку между ними. Поскольку они не являются взаимозаменяемыми, выход из строя одного mailstore-сервера приводит к тому, что сервис становится недоступным для всех учетных записей, которые находились на нем.
Для добавления дополнительного сервера Mailstore потребуется добавить репозитории Carbonio и установить пакеты cвязанные с Carbonio Mailstore
apt install service-discover-agent carbonio-appserver carbonio-advanced carbonio-user-management carbonio-zal
После этого выполните первоначальную настройку carbonio-bootstrap, а также выполните команды service-discover setup-wizard и pending-setups -a и введите пароль Carbonio Mesh.
Сразу после этого дополнительный сервер Mailstore будет доступен для использования.
Добавление сервера Files
Дополнительные серверы Carbonio Files устанавливаются для того, чтобы обеспечить функционирование данного сервиса в случае выхода из строя основного сервера, а также для распределения нагрузки между серверами.
Для добавления дополнительного сервера Files потребуется добавить репозитории Carbonio и установить пакеты cвязанные с Carbonio Files
apt install service-discover-agent carbonio-files
После этого выполните первоначальную настройку carbonio-bootstrap, а также выполните команды service-discover setup-wizard и pending-setups -a и введите пароль Carbonio Mesh.
Сразу после этого в вашей системе появится дополнительный сервер Carbonio Mesh.
Добавление сервера Preview
Дополнительные серверы Carbonio Preview добавляют для того, чтобы обеспечить отказоустойчивость данного сервиса. Для добавления дополнительного сервера Preview потребуется добавить репозитории Carbonio и установить пакеты cвязанные с Carbonio Preview
apt install service-discover-agent carbonio-preview
После этого выполните первоначальную настройку carbonio-bootstrap, а также выполните команды service-discover setup-wizard и pending-setups -a и введите пароль Carbonio Mesh.
Также отредактируйте файл /etc/carbonio/preview/config.ini и укажите в нем путь к серверу memcached, отредактировав строки
nginx_lookup_server_full_path_urls = https://10.0.1.50:7072
memcached_server_full_path_urls = 10.0.1.51:11211
В первой строке укажите ip-адрес любого сервера Mailstore и обязательно используйте протокол https. Во второй строке укажите ip-адрес любого сервера Proxy. Используйте разные IP-адреса на разных серверах Carbonio Preview для повышения устойчивости системы.
Добавление сервера Docs
Дополнительные серверы Carbonio Docs добавляют для того, чтобы обеспечить отказоустойчивость сервиса, а в случае с коммерческой версией Carbonio еще и для того, чтобы повысить количество пользователей, которые могут одновременно работать с различными документами.
Для добавления дополнительного сервера Docs потребуется добавить репозитории Carbonio и установить пакеты cвязанные с Carbonio Docs.
apt install service-discover-agent carbonio-docs-connector carbonio-docs-editor
После этого выполните первоначальную настройку carbonio-bootstrap, а также выполните команды service-discover setup-wizard и pending-setups -a и введите пароль Carbonio Mesh.
Сразу после этого в вашей системе появится дополнительный сервер Carbonio Docs
Добавление сервера Tasks
Дополнительные серверы Carbonio Tasks добавляют для того, чтобы обеспечить отказоустойчивость сервиса. Для добавления дополнительного сервера Docs потребуется добавить репозитории Carbonio и установить пакеты cвязанные с Carbonio Docs.
apt install service-discover-agent carbonio-tasks
После этого выполните первоначальную настройку carbonio-bootstrap, а также выполните команды service-discover setup-wizard и pending-setups -a и введите пароль Carbonio Mesh.
Сразу после этого в вашей системе появится дополнительный сервер Carbonio Tasks
Добавление сервера Carbonio Mesh
Ранее во всех добавляемых узлах мы устанавливали пакет service-discover-agent, который коммуницирует с сервером Carbonio, объединяющим узлы Carbonio в единую инфраструктуру Carbonio Mesh. Серверы Carbonio Mesh также могут быть добавлены в инфраструктуру для обеспечения отказоустойчивости службы service-discover.
Для добавления дополнительного сервера Carbonio Mesh потребуется добавить репозитории Carbonio и установить пакет, связанный с Carbonio Mesh Server.
apt install service-discover-server
После этого выполните первоначальную настройку carbonio-bootstrap и перенесите любым удобным способом с уже существующего сервера Carbonio Mesh на новый файл /etc/zextras/service-discover/cluster-credentials.tar.gpg. Сделать это можно при помощи scp, либо просто скопировать содержимое файла в новый, не забыв указать в качестве его владельца root: root.
Выполните команды service-discover setup-wizard и pending-setups -a и введите пароль Carbonio Mesh. Сразу после этого в вашей системе появится дополнительный сервер Carbonio Mesh
Вертикальное масштабирование серверов
Масштабировать инфраструктуру Carbonio можно не только за счет наращивания количества узлов, но и за счет увеличения характеристик конкретных нод. Как правило для этого достаточно простого добавления vCPU и RAM.
Однако в случае с узлом Mailstore простого добавления оперативной памяти недостаточно. Причина в параметрах innodb_buffer_pool_size и mailboxd_java_heap_size, значение которых автоматически задается при установке Carbonio. Оба они составляют 25% от объема оперативной памяти на момент инсталляции и при увеличении ОЗУ автоматически не изменяются.
Поэтому если вы изначально установили сервер Mailstore на машину с 4096 мегабайтами оперативной памяти, их значения составят
mailboxd_java_heap_size=1024
innodb_buffer_pool_size=1073741824
После увеличения оперативной памяти до 8 гигабайтов, эти значения потребуется увеличить вдвое, а при увеличении до 16 Гб, соответственно, вдвое.
Найти параметр mailboxd_java_heap_size можно в файле /opt/zextras/conf/localconfig.xml, а innodb_buffer_pool_size в /opt/zextras/conf/my.cnf. Не забудьте сделать резервные копии этих файлов перед внесением в них изменений.
По вопросам тестирования, приобретения, предоставления лицензии и консультаций обращаться на почту sales@svzcloud.ru к эксклюзивному партнеру Zextras.