Carbonio Mesh - это инфраструктурный модуль почтового сервера Carbonio, позволяющий обеспечить связность, отказоустойчивость и возможность мониторинга различных сервисов Carbonio и интеграцию их с Carbonio LDAP. В данной статье мы расскажем о том, из чего состоит система Carbonio Mesh, а также о том, как обеспечить эффективное взаимодействие с ней.
Данная статья подходит как для пользователей коммерческой версии Carbonio, так и для пользователей Carbonio Community Edition.
Carbonio Mesh - обязательный элемент Carbonio, который устанавливается и настраивается на каждом узле в процессе инсталляции почтового сервера и обеспечивает процесс автоматического обнаружения и настройки связности различных сервисов с почтовым сервером Carbonio.
Carbonio Mesh может быть установлен в двух вариантах - сервер и агент. Разница в них заключается в том, что агент не может работать без активных серверов, а активный сервер может продолжать работу в случае потери связи с агентами Carbonio Mesh.
Общение между серверами и агентами Carbonio Mesh происходят на основе учетных данных, файл с которыми хранится на каждом сервере Carbonio Mesh в пути /etc/zextras/service-discover/cluster-credentials.tar.gpg.
В случае, если этот файл попадет в руки киберзлоумшленников, в опасности окажется весь почтовый сервер Carbonio. Именно поэтому устанавливать сервера Carbonio Mesh рекомендуется на узлы, которые недоступны из публичных сетей. Например на сервер LDAP или узел с базами данных PostgreSQL.
Помимо учетных данных, в Carbonio Mesh используется собственная система выпуска сертификатов, а также секретный ключ, который используется для автонастройки Carbonio Mesh и сервисов на добавляемых узлах инфраструктуры. Секретный ключ задается при установке первого сервера Carbonio Mesh, а затем хранится в открытом виде в файле /var/lib/service-discover/password. Файл доступен для просмотра только root-пользователю.
В случае, если учетные данные всё же оказались скомпрометированы, можно создать новые. Для этого получите список всех серверов service-discover при помощи команды carbonio prov getAllServers service-discover и введите команду wget http://127.0.0.1:8500/v1/status/leader -qO -, чтобы убедиться в том, что вы находитесь на лидирующем сервере. Даже если вы установили несколько серверов Carbonio Mesh, лидирующим будет только один. В случае, если IP-адрес в выводе команды совпадет с адресом узла, на котором вы находитесь, все в порядке. В случае, если это не так, перейдите на тот сервер Carbonio Mesh, чей адрес указан.
Находясь на лидирующем сервере, введите команду consul acl bootstrap. В ее выводе будет содержаться значение, нужное для сброса токена. Например, Failed ACL bootstrapping: Unexpected response code: 403 (Permission denied: ACL bootstrap no longer allowed (reset index: 908))
Зная это значение, запишем его в соответствующий файл sudo -u service-discover bash -c "echo 908 > /var/lib/service-discover/data/acl-bootstrap-reset". Остановим службы Carbonio Mesh systemctl stop service-discover и удалим файлы с настройками и выпущенные ранее сертификаты.
rm /etc/zextras/service-discover/config.json
rm /etc/zextras/service-discover/main.json
rm /var/lib/service-discover/*.pem
После этого надо задать новый секретный ключ при помощи команды
service-discover setup LEADER_IP --first-instance --password=S3cr3T
Заменив в ней LEADER_IP на IP-адрес лидирующего сервера, а S3cr3T на ваш сложный пароль.
После этого работа лидирующего сервера с новыми учетными данными будет восстановлена и можно будет перенастроить остальные узлы Carbonio Mesh для работы с обновленным сервером.
Для мониторинга сервисов может использоваться графический интерфейс Carbonio Mesh. В целях безопасности веб-интерфейс Carbonio Mesh принимает на порте 8500 подключения только с localhost, поэтому для доступа к нему необходимо пробросить ssh-туннель при помощи команды вида
ssh -N -f -L 8400:localhost:8500 root@IP
Замените IP в команде на используемый вами. Также может потребоваться включить доступ с паролем по SSH для root-пользователя.
После проброса SSH-туннеля, веб-интерфейс Carbonio Mesh можно будет открыть в браузере по адресу http://localhost:8400/
Доступ в него осуществляется без указания каких-либо учетных данных. На главной странице отображается список доступных сервисов и их статус.
Помимо основного списка сервисов можно просматривать различные детали о каждом из них.
Веб-интерфейс Carbonio Mesh позволяет наглядно просматривать структуру кластера и выявлять проблемные участки.
Управлять Carbonio Mesh также можно в командной строке. Для этого используются команды HashiCorp Consul, лежащего в основе Carbonio Mesh.
Например для получения различных списков составляющих частей Carbonio Mesh используется команда вида consul catalog. К примеру, для просмотра сервисов, запущенных на основной ноде, нужно получить список нод, а затем получить список сервисов, указав наименование нужной ноды. Делается это при помощи команд
consul catalog nodes
consul catalog services -node b9bb7ab4
Для получения списка серверов и агентов, которые входят в состав Carbonio Mesh, используйте команду consul members.
Для удаления узлов из списка, например в случае смены IP-адреса, используйте команду consul force-leave server-mail-carbonio-local
Для удаления отдельных сервисов используйте команду вида consul services deregister -id=carbonio-docs-connector.
Для перезагрузки Carbonio Mesh используется команда consul reload, а для просмотра логов, journalctl -u service-discover.
Таким образом, Carbonio Mesh является гибким решением, позволяющим автоматически объединять различные сервисы на разных серверах в единый кластер, чтобы пользователи могли удобно пользоваться ими прямо из веб-клиента Carbonio