===== Изменение хостнеймов в кластере PMG =====
Представим ситуацию, когда в рабочем кластере //Proxmox Mail Gateway// - нам необходимо поменять имена хостов. К примеру, такая потребность может возникнуть, если нам требуется поменять //HELO//.
Теоретически, мы можем поменять в файле ///var/lib/pmg/templates/main.cf.in// опцию //smtp_helo_name// таким образом, чтобы она принимала значение такое же, как и опция //SMTPD Banner//, доступная в GUI PMG:
smtpd_banner = [% pmg.mail.banner %]
smtp_helo_name = [% pmg.mail.banner %]
Однако, данные конфигурации синхронизируются во всем кластере, а если нам необходимо //HELO//, отличное для каждого хоста - следует менять именно имя хоста.
Отредактировать имя необходимо в следующих файлах (и перезагрузиться):
/etc/hostname
/etc/hosts
reboot
:!: Имена нод кластера, прописанных в данных файлах, должны разрешаться для каждого сервера. Т.е. один сервер должен правильным образом разрешать собственный hostname и hostname другого сервера, и наоборот.
Примерно вот так без привлечения внешних //DNS// (содержимое файла /etc/hosts):
127.0.0.1 localhost.localdomain localhost
192.168.1.1 mail1.arasaka.local mail1
192.168.1.2 mail2.arasaka.local mail2
==== Решение возможных проблем ====
После поочередной перезагрузки нод в кластере одна из нод долго висит в статусе //syncing//? Время заняться траблшутингом!
В первую очередь можно попробовать вручную отдать команду синхронизации на нодах и посмотреть - нет ли ошибок.
pmgcm sync
pmgcm status
Если здесь всё ОК, но кластер продолжает висеть в статусе //syncing//, стоит почитать системный журнал на предмет возможных проблем с //pmgmirror// и //pmgtunnel//.
journalctl -u pmgmirror -u pmgtunnel --since today
//pmgmirror// в этой связке занимается репликацией баз на все ноды кластера. \\
//pmgtunnel// туннелирует подключения к //Postgres// на другой ноде кластера.
После изменения имени нод я обнаружил такую ошибку, связанную с работой //pmgtunnel//:
database sync 'pmg_server' failed - DBI connect('dbname=Proxmox_ruledb;host=/run/pmgtunnel;port=2;','root',...) failed: connection to server o>
Is the server running locally and accepting connections on that socket? at /usr/share/perl5/PMG/DBTools.pm line 66
tunnel finished 3212 10.10.111.198
pmgtunnel[673]: restarting crashed tunnel 3306 192.168.1.1
Можно проверить статус pmgtunnel командой:
pmgtunnel status
ОК, видим статус //running//. Не очень информативно.
Самое время попробовать остановить //pmgtunnel// и запустить заново в режиме //debug//.
pmgtunnel stop
pmgtunnel start --debug
Через несколько секунд видим кое-что интересное:
Host key verification failed
Вполне вероятно, наш сервер после смены имени не доверяет соседу при подключении по //ssh//.
Попробуем сделать обновление отпечатков.
pmgcm update-fingerprints
Посе чего получаем ошибку:
TASK ERROR: 500 update fingerprints failed: unable to get remote node fingerprint from 'xxxxxxx': command 'ssh -l root -o 'BatchMode=yes' -o 'HostKeyAlias=pmg2' 111.222.333.444 'openssl x509 -noout -fingerprint -sha256 -in /etc/pmg/pmg-api.pem'' failed: exit code 255
Почему бы не выполнить команду вручную и не посмотреть её output глазами?
ssh -l root -o 'BatchMode=yes' -o 'HostKeyAlias=pmg2' 111.222.333.444 'openssl x509 -noout -fingerprint -sha256 -in /etc/pmg/pmg-api.pem'
Тем более, что есть шанс увидеть нечто знакомое:
Host key verification failed
Теперь самое простое решение - это попробовать с одного сервера //PMG// установить подключение по //SSH// на второй сервер. Оно должно пройти без всяких паролей потому что //PMG// сам устанавливает нужные ключи. Просто подключаемся и //подтверждаем// запрос доверия:
ssh pmg_address
Если запрос мы подтвердили и подключение устанавливается нормально - время снова проверить проблемный //pmgtunnel//:
pmgtunnel stop
pmgtunnel start --debug
{{tag>Proxmox PMG Unix Debian Mail}}