Сюрпризы от Erlang и Docker-compose

Преамбула

Есть такая интересная штука, как RabbitMQ. Написана на Erlang (это важно). В Docker запускается с пол-пинка, в кластер собирается тремя с половиной командами. Это если всё делать вручную по инструкции. Сразу скажу, корректные FQDN серверов и контейнеров — обязательное условие работоспособности.

Запускаем на первом сервере первую ноду будущего кластера:

docker run -dit -h docker-rabbitmq-01.domain.tld               \
           --name rabbit                                       \
           -p "4369:4369"                                      \
           -p "5671:5671"                                      \
           -p "15671:15671"                                    \
           -p "25672:25672"                                    \
           -p "35197:35197"                                    \
           -e "RABBITMQ_ERLANG_COOKIE=S0meL3ttersAndNumber5"   \
           -v rabbitmq_data:/var/lib/rabbitmq                  \
           -v /opt/ssl:/opt/ssl:ro                             \
           --restart unless-stopped                            \
           zimniy/rabbitmq:latest

Сразу определяем политику HA (запускаем также на первом сервере):

docker exec rabbit rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all", "ha-sync-mode": "automatic"}'

Запускаем на втором сервере вторую ноду будущего кластера:

docker run -dit -h docker-rabbitmq-02.domain.tld               \
           --name rabbit                                       \
           -p "4369:4369"                                      \
           -p "5671:5671"                                      \
           -p "15671:15671"                                    \
           -p "25672:25672"                                    \
           -p "35197:35197"                                    \
           -e "RABBITMQ_ERLANG_COOKIE=S0meL3ttersAndNumber5"   \
           -v rabbitmq_data:/var/lib/rabbitmq                  \
           -v /opt/ssl:/opt/ssl:ro                             \
           --restart unless-stopped                            \
           zimniy/rabbitmq:latest

Со второго сервера подключаем вторую ноду к первой:

docker exec rabbit rabbitmqctl stop_app
docker exec rabbit rabbitmqctl join_cluster rabbit@docker-rabbitmq-01.domain.tld
docker exec rabbit rabbitmqctl start_app

Всё, кластер собран и уже работает. Можно подключаться с учёткой guest:guest.

Фабула

Короче, теперь про то, какая гадость этот docker-compose…

Оказывается, у него есть два параметра: hostname и domainname.

И если задать только hostname как FQDN «docker-rabbitmq-01.domain.tld», то оно в контейнере обрезается до «docker-rabbitmq-01». Так что нужно обязательно задать ещё и domainname «domain.tld» иначе Erlang, на котором написан RabbitMQ, свой FQDN не определит и будет игнорировать попытки подключения.

В общем, используя docker-compose, нужно делать так:

docker-rabbitmq:
  image: zimniy/rabbitmq:latest
  container_name: rabbit
  hostname: docker-rabbitmq-01.domain.tld 
  domainname: domain.tld
  restart: unless-stopped
  ports:
    - "4369:4369"
    - "5671:5671"
    - "15671:15671"
    - "25672:25672"
    - "35197:35197"
  volumes:
    - "/opt/ssl:/opt/ssl:ro"
    - "rabbitmq_data:/var/lib/rabbitmq"

Внимание, hostname задать именно как FQDN.

И, для того, чтобы это выяснить, пришлось аж в исходники лезть…

Proxmox и надоедливое сообщение о подписке

Убирается двумя файлами.

Хук апта:
root@brain:~# cat /etc/apt/apt.conf.d/99upgradehook

DPkg::Post-Invoke {"/usr/local/sbin/pve-no-subscription-patcher";};

Исполнимый скрипт:
root@brain:~# cat /usr/local/sbin/pve-no-subscription-patcher

#!/bin/bash

SFILE=/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

cat "${SFILE}" | grep -qi "data.status !== 'Active'" || exit 0

logger -t pve-no-subscription-patcher -s "Patching Proxmox widget toolkit"
cp -f "${SFILE}" "/root/$(basename ${SFILE}).bak"
sed -i "${SFILE}" -e "s/data.status\ !==\ 'Active'/false/"

Samba AD + NTP vs Apparmor или «Синхронизируй это^Wвремя»

Преамбула: холивара «Apparmor vs Selinux» не будет. Ибо равноэскобарно для меня.

Фабула: Решил починить неработающую синхронизацию времени в домашнем домене (да, у меня дома домен). Read more «Samba AD + NTP vs Apparmor или «Синхронизируй это^Wвремя»»

Зачем бэкап? У нас же RAID © habrahabr

Схороню выдержки из понравившегося коммента про поддержку IT-систем:

  1. организационные проблемы аппаратными средствами не решаются © кто-то умный
  2. на технику приходиться 20% беды. Остальное — ручки шаловливые, головы буйные да начальники скаредные… © Парето & beerchaser

Сетевое хранилище — userspace. Потихоньку свожу в кучу заявленные раньше сервисы

От winbind пришлось отказаться по весьма прозаической причине — не нужен)) так как samba у нас локальная, то и синхронизацию пользовательской базы будем проводить так же локально, то есть скриптами.

За 10 минут накидал подмену для passwd и smbpasswd, которую достаточно закинуть в PATH раньше оригиналов, что означает (для Debian) /usr/local/bin

По тому же принципу нужно будет сделать подмены для adduser/useradd и deluser/userdel, но класть их придется уже в /usr/local/sbin, так как это команды суперпользователя (root).

Ну, и пока сделал экспорт шар для nfs без шифрования. Все равно сервер тестовый и живет на виртуальной машине.

И, пока не забыл, надо переделать стандартную разбивку разделов и добавить микроинсталляцию debian с ssh и debootstrap на третий по счету раздел, сдвинув swap и storage в логический раздел под номерами 5 и 6 соответственно. Мало ли…

Сетевое хранилище — необходимые (и не очень) сервисы

Попробую накидать себе план-список того, что нужно будет реализовать…

Какая у нас самая популярная десктопная OS в мире? Правильно, GNU/Linux^W Microsoft Шindoшs различных версий и модификаций, как бы не кипятились по этому поводу воинствующие линуксоиды. То есть, её поддержку нужно заложить обязательно (ну, я сам пользуюсь Windows, что, я себя буду ограничивать, что ли?), а это Samba, оно же «общие папки» или «сетевые папки» (у продвинутых юзеров — диски, те, которые в «Их компьютере» отображаются). Внезапно, Samba может не только папки по сети расшаривать, но мы к этому нюансу вернёмся позднее.

Что уметь WeDro ещё должно наше? Йода-мастер впечатления моём мозге неизгладимые оставил на…

Read more «Сетевое хранилище — необходимые (и не очень) сервисы»

Файловая помойка — она же WeDro, aka WD MyBook Live

Внезапно осознал, что заводская функциональность данного устройства лично для меня недостаточна, а фаршированность фирменными сервисами — избыточна. Что сделает цивилизованный человек? Правильно, купит другое устройство. Но, я же дремучий русский сисадмин, а мы не ищем лёгких путей… 🙂

Read more «Файловая помойка — она же WeDro, aka WD MyBook Live»