LINUX.ORG.RU

Сообщения Grotesque

 

corosync/pacemaker и lxc

sup лор! Есть одна тян кластер:

  • OS: Debian 11 (И debian 10 тоже)
  • Kernel: 5.10.0-15-amd64
  • Env: resource-agents 1:4.7.0-1~bpo10+1, pacemaker 2.0.5-2, corosync 3.1.2-2, lxc 1:4.0.6-2

добавляю новый lxc-контейнер в кластер

lxc-start -n front-2.fr
pcs resource create front-2.fr ocf:heartbeat:lxc config=/mnt/cluster_volumes/lxc2/front-2.fr/config container=front-2.fr
всё норм, всё работает, потом через пять минут хочу удалить всё это дело, пишу
pcs resource remove front-2.fr --force
и получаю ошибку и последующий фенсинг с миграцией
lxc(front-2.fr)[2103391]: ERROR: LXC container name not set!
Если верить /usr/lib/ocf/resource.d/heartbeat/lxc ошибка эта возникает из-за того, что переменная OCF_RESKEY_container пустая/не задана или просто не передаётся скрипту.

Собсно возникает это только на кластерах с большими аптаймами. Например после фенсинга и ребута можно сколько угодно добавлять/удалять ресурсы и всё будет работать как часы до какого-то определённого момента. Вряд ли кто-то с этим сталкивался (я один такой счастливчик) но мб кто-то сможет дать совет как это дальше можно дебажить?

 , , , ,

Grotesque
()

Нет коннективности в сети

Сап лор! Чёт туплю с сетью. Есть вот такой хост

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
1122: eth0@if1123: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 2a:9c:86:dd:fc:00 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.16.241/24 brd 192.168.16.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.16.242/24 brd 192.168.16.255 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet 192.168.16.243/24 brd 192.168.16.255 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::289c:86ff:fedd:fc00/64 scope link 
       valid_lft forever preferred_lft forever

default via 192.168.16.44 dev eth0 
192.168.0.0/18 via 192.168.16.44 dev eth0 
192.168.16.0/24 dev eth0 proto kernel scope link src 192.168.16.241 

Иптаблес пустые, рулов нет. Если пингать эти 3 адреса из 192.168.16.0/24 - отвечают, если пингать их из любой другой сети, отвечает только первый по порядку (в данном случае это 192.168.16.241/24), то есть если поменять 192.168.16.241/24 и, например, 192.168.16.243/24 местами, будет отвечать 243. В дампе видны только входящие icmp, как будто он их игнорит

10:57:06.315089 IP 192.168.49.19 > 192.168.16.242: ICMP echo request, id 46353, seq 15, length 64
10:57:07.335131 IP 192.168.49.19 > 192.168.16.242: ICMP echo request, id 46353, seq 16, length 64
10:57:08.359158 IP 192.168.49.19 > 192.168.16.242: ICMP echo request, id 46353, seq 17, length 64

В каком месте я натупил?)

 ,

Grotesque
()

pacemaker + drbd = split brain

Снова нужен совет от сильного комунити ЛОРа. Существует нищебродский кластер ынтерпрайз сегмента из 2-ух серверов (+ qdevice) где установлены corosync 3.0.1 , Pacemaker 2.0.1 и drbd 8.4.10. Созданы и объявлены в кластере 4 drbd ресурса в режиме primary/secondary и FS на них с точками монтирования. Вобщем-то вроде бы на первый взгляд всё работает. Как проверяем? Убеждаемся что все эти ресурсы находятся на node1 и затем просто пишем reboot или с любыми флагами (--force, --halt и т.п.), можем вообще через ipmi сделать shutdown warn/cold или даже power cycle, что происходит в этом случае? Грубо говоря, кластер на node2 видит что отвалилась node1, перетаскивает на себя drbd, говорит им что они теперь primary и монтирует. После того как появляется node1, кластер на ней синхронизирует drbd ресурсы как secondary и всё продолжает работать и-де-ально-но и рад бы я тут поставить точку, чтоб вы просто порадовались за меня, ан нет, увы. В общем как бы я не пробовал разломать кластер - он всегда выживает за исключением одного кейса: ip l s bond0 down на одной ноде. Что происходит? Нода теряет кворум, та живая, что осталась видит это, видит свой кворум, поднимает у себя все drbd и stonith посылает на ту, что без сети fence reboot, разумеется та нода ребутается и… зачем-то поднимает все drbd как primary из-за чего случается split brain. Тут вопрос скорее в том, чтоб мне какие-то сильные HA admins объяснили - почему оно так делает? Чем это состояние отличается от того же reboot --force или power cycle? Можно ли как-то избежать этого, или у pacemaker это архитектурно задумано так?

( читать дальше... )

 , , ,

Grotesque
()

pacemaker systemd resource

Категорически приветствую! Есть кластер состоящий из 2 серверов с ubuntu 20 (Pacemaker 2.0.3, corosync 3.0.3) + qdevice, но это вобщем-то не важно. Хочу создать ресурс systemd, на обоих нодах создаю юнит dummy.service

[Unit]
Description=Dummy

[Service]
Restart=on-failure
StartLimitInterval=20
StartLimitBurst=5
TimeoutStartSec=0
RestartSec=5
Environment="HOME=/root"
SyslogIdentifier=dummy
ExecStart=/usr/local/sbin/dummy.sh

[Install]
WantedBy=multi-user.target

сам /usr/local/sbin/dummy.sh:

#!/bin/bash

CNT=0
while true; do
  let CNT++
  echo "hello world $CNT"
  sleep 5
done

Пытаемся объявить ресурс pcs resource create dummy.service systemd:dummy op monitor interval="10s" timeout="15s"

И спустя пару секунд одна нода убивает вторую и она уходит в ребут. Почему так происходит? Судя по логам, он буквально чем за секунду пытается запустить 2 раза сервис, решает что он «Timed Out», при этом сервис работает, так как он успевает написать в лог «hello world 1», после чего отстреливает ноду.

Собсно вопрос всё тот же: что я делаю не так?

( читать дальше... )

 , ,

Grotesque
()

libvirt guest: запретить смену IP

Категорически приветствую! Есть сервер с centos 7 где установлен libvirt и существуют 2 бриджа br0 (192.168.0.1/24) и br1 (8.8.8.8/24). При создании гостей интерфейсы последних просто добавляются в бридж и внутри устанавливается адрес. Так вот вопрос: А как запретить менять/удалять/добавлять адреса? Если, допустим, я создам какой-нить virbr средствами libvirt со встроенным его dhcp и при загрузке машина будет получать адрес оттуда, его ж всё равно можно будет руками сменить? И как в этом случае быть с машинами, где нужен только внешний адрес (Без NAT’a во всех его проявлениях) из br1 ?

 , ,

Grotesque
()

systemd-nspawn не подвезли ещё cgroupfs?

Категорически приветствую! А не подскажите, в 2к20 не завезли случайно в systemd-nspawn что-то наподобие lxcfs, в частности, чтоб внутри контейнера видеть uptime, free и иже с ними контейнера, а не хоста? Никак не могу нагуглировать.

 ,

Grotesque
()

Какая-то особенность UDP, никак не могу разобрать

Существует некий centos6 openvz контейнер с демоном каждую секунду генерящим 100500 строк syslog и отправляющих его на удалённый хост через rsyslog по upd. Этот контейнер находится на centos 6 сервере. На этом сервере помимо всего прочего есть openvpn до другого аналогичного сервера с контейнером в котором есть rsyslogd который принимает все эти логи.

[ovz CT syslog transmitter] -> [OVZ host1] -> (openvpn) -> INTERNET -> (openvpn) -> [OVZ host2] -> [ovz CT receiver]

Иногда, очень редко, флапает линк между [OVZ host1] и свичём, и каким-то магическим образом с рандомных контейнеров перестают приходить логи на [ovz CT receiver]. На всём пути [ovz CT syslog transmitter] -> [OVZ host1] -> (openvpn) syslog трафик я в дампе вижу, а дальше уже нет. Странность в том, что если перезапустить rsyslog на [ovz CT syslog transmitter], или правило в iptables добавить на несколько секунд дропающее всё исходящее на порт 514, или conntrack почистить на [OVZ host1] - всё внезапно начинает работать. Собсно хотелось бы поинтересоваться у комрадов, а что это за магия? Что-то где-то кэшируется? Как это предотвращать?

 , , ,

Grotesque
()

ovirt 4.2 и его сети

Приветствую, ЛОР!

Пытаясь проникнуться темой с ovirt, поставил последний (ovirt-engine (без --deploy)) на сервер в hetzner и этот же сервер добавил через вебу как хост кластера, после чего он отвалился с концами. Всё это из-за того, что ovirt пытается создать ovirtmgmt бридж куда суёт единственный сетевой интерфейс. Ну да ладно, я его с горем как-то оживил, прибил конфиги гвоздями (chattr) и больше он не суётся в конфигурацию сети. Вопрос, собсно, в другом. У меня на этом хосте есть куча сетей/бриджей/интерфейсов (dummy) и иже с ними. Как сделать, чтоб всё это было в вебе ovirt?

Вот сетевые интерфейсы

( host2 config )

Как видно тут есть br0 и br1 которые никак не относятся к enp0s3 и этого не нужно. Как мне объяснить это ovirt'у? Любая сеть, по мнению ovirt'а должна быть приаттачена к физическому интерфейсу, но мне этого не нужно. Я хочу чтоб при создании виртуалки из вебы были доступны br0 и br1 которые изолированы от физического интерфейса. Это вообще возможно?

 , ,

Grotesque
()

Маршрутизация через IPIP-туннель

Приветствую, ЛОР!

Есть банальная задача: Соединить два centos7 сервера ipip-туннелем и смаршрутизировать через него локальные сети друг друга, которые висят на bridge интерфейсах. Что-то пошло не так на этапе маршрутизации, и если с host1 с адреса туннеля доступны адреса br1 и br2 на host2, то с адресов br1 и br2 на host1 - уже нет. Под катом инфа сети и диагностика.

Карта сети (или что должно быть в итоге)

( host1 config )

( host2 config )

( host1 debug )

 , ,

Grotesque
()

Сборка модулей python 3 в centos 6

Всем привет! Подскажите пожалуйста, а есть ли какой-то дефолтный, простой и элегантный способ сборки модулей python3 в rpm для centos6 ? Нашёл только pyp2rpm но у меня с ним возникли проблемы ввиду того, что в centos 6 python 3 в epel называется python34 и все пакеты для него тоже, из-за этого получается что-то типа того:

error: Failed build dependencies:
	python3-devel is needed by python-python3-pika-0.9.14-1.el6.noarch
	python3dist(setuptools) is needed by python-python3-pika-0.9.14-1.el6.noarch
	python34dist(setuptools) is needed by python-python3-pika-0.9.14-1.el6.noarch

 , , ,

Grotesque
()

Наследование host-сети в docker контейнер

Привет гуру! Недавно начал разбираться с контенеризацией и докером. Вроде модно щас докеризировать всё что ни попадя, куда ни плюнь - контейнер с какой-то фигнёй.

Так вот значит столкнулся с интересным вопросом: А можно ли как-то создавать контейнеры с адресацией из сети host-машины и дополнительно накручивать туда до кучи адресов на lo-интерфейс? (Не путать с --net=host)

Поясняю: host имеет статический адрес на eth0 интерфейсе прописанный руками из общей сети серверов 192.168.0.2/24 , шлюз для него cisco с адресом 192.168.0.1/24 . Так же host имеет адрес 1.1.1.1/32 навешанный на lo-интерфейс до которого на шлюзе cisco прописан статичный маршрут.

Вопрос: Как мне построить контейнер на host имеющий адрес (без NAT) из сети этого хоста 192.168.0.3/24 да ещё и адрес внутрь контейнера на lo-интерфейс навешать 1.1.1.2/32 . Это вообще возможно, или я слишком много хочу?

Вот я даже рисунок нарисовал, чтоб было понятнее чего я хочу: https://imgur.com/a/6B1uH

 ,

Grotesque
()

Ошибка grub при переносе системы

Приветствую, знатоки!

Дано: - centos 6 установленный на raid1 на физический сервер.

/dev/md0 on / type ext4 (rw,commit=10)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/md4 on /home type ext4 (rw,noatime,commit=20,data=writeback,barrier=0,noacl,nouser_xattr)
/dev/md2 on /tmp type ext4 (rw,noatime,commit=20,data=writeback,barrier=0,noacl,nouser_xattr)
/dev/md5 on /usr type ext4 (rw,noatime,commit=10)
/dev/md3 on /var type ext4 (rw,noatime,commit=10)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
Задача: - «Скопировать» и перенести на virtualbox на один виртуальный диск, на один раздел.

Что для этого делаю:

  • Создаю stage4
  • Подготавливаю виртуальную машину и разбиваю виртуальный диск, mkfs.ext4 /dev/sda1
    Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x1ee5262b
    
    Device     Boot    Start      End  Sectors  Size Id Type
    /dev/sda1           2048 18876415 18874368    9G 83 Linux
    /dev/sda2       18876416 20971519  2095104 1023M 82 Linux swap / Solaris
    

  • Монтирую, распаковываю stage, чрутюсь
    mount -t proc proc /mnt/her/proc
    mount --rbind /sys /mnt/her/sys
    mount --make-rslave /mnt/her/sys
    mount --rbind /dev /mnt/her/dev
    mount --make-rslave /mnt/her/dev
    
    
    chroot /mnt/her /bin/bash
    source /etc/profile
    export PS1="(chroot) $PS1"
    

  • Пытаюсь поставить grub
    (chroot) [root@sysresccd /]# grub-install /dev/sda
    /dev/md0 does not have any corresponding BIOS drive.
    
    (chroot) [root@sysresccd /]# grub
    Probing devices to guess BIOS drives. This may take a long time.
    
    
        GNU GRUB  version 0.97  (640K lower / 3072K upper memory)
    
     [ Minimal BASH-like line editing is supported.  For the first word, TAB
       lists possible command completions.  Anywhere else TAB lists the possible
       completions of a device/filename.]
    grub> root (hd0,0)     
    root (hd0,0)     
     Filesystem type is ext2fs, partition type 0x83
    grub> setup (hd0)
    setup (hd0)
     Checking if "/boot/grub/stage1" exists... no
     Checking if "/grub/stage1" exists... no
    
    Error 14t: Filesystem compatibility error, cannot read whole file
    
    (chroot) [root@sysresccd /]# grub-install --recheck /dev/sda
    Probing devices to guess BIOS drives. This may take a long time.
    /dev/md0 does not have any corresponding BIOS drive.
    (chroot) [root@sysresccd /]# grub
    Probing devices to guess BIOS drives. This may take a long time.
    
    
        GNU GRUB  version 0.97  (640K lower / 3072K upper memory)
    
     [ Minimal BASH-like line editing is supported.  For the first word, TAB
       lists possible command completions.  Anywhere else TAB lists the possible
       completions of a device/filename.]
    grub> device (hd0) /dev/sda  
    device (hd0) /dev/sda
    grub> root (hd0,0)
    root (hd0,0)
     Filesystem type is ext2fs, partition type 0x83
    grub> setup (hd0)
    setup (hd0)
     Checking if "/boot/grub/stage1" exists... no
     Checking if "/grub/stage1" exists... no
    
    Error 14t: Filesystem compatibility error, cannot read whole file
    

Вопрос: Что я делаю не так?

 , ,

Grotesque
()

Centos 7 : Неправильно определяются сетевые интерфейсы

Приветствую! Есть centos7-minimal только установленная на виртуалку (virtualbox). Сначала у неё был один сетевой интерфейс eth0 который благополучно получал адрес по dhcp. Затем я добавил eth1 с типом «внутренняя сеть» и статичным адресом, и всё работало нормально в течении пары загрузок. НО потом внезапно у неё сорвало башню и она перепутала интерфейсы. Даже после удаления из виртуальной машины eth1 - она не подхватывает конфиги для eth0 . Например, в centos 6 это решалось удалением udev-правил, но тут, в centos 7, в /etc/udev/rules.d/ ничего нет. Как мне заставить её читать конфиги /etc/sysconfig/network-scripts/ifcfg-eth0 для eth0 и /etc/sysconfig/network-scripts/ifcfg-eth1 для eth1 соответственно?

 , ,

Grotesque
()

Ansible + ldap: организация доступа к серверному парку

Приветствую, гуру! Пытаясь внедрить ansible в свою инфраструктуру задался вопросом совмещения его с ldap.

Что дано:

  • ansible 2.0.0.2
  • Windows AD

Что хочу:

  • Костылём брать из AD группы серверов, группы пользователей, имена серверов и имена пользователей и на всём имеющемся сервером парке настроить и поддерживать доступы с помощью ansible. Сейчас этим занимается puppet.

Собственно вопрос: Как лучше объяснить ansible какие сервера у меня есть, в какие группы они входят, какие на них должны быть пользователи и в каких группах? Какие конфиги сформировать? Я пока не могу сообразить...

Вот пример того, что я забираю из AD:

( Массив servers вида группа_серверов, имя_сервера )

( Массив юзеров, их хэши паролей, шеллы, группы и прочих параметров )

 , , ,

Grotesque
()

debian 8.1 не стартует после вылета одного из дисков RAID 1

Здравствуйте! Накатил на asus rs-100 debian 8.1 minimal, при установке сделал программный raid 1 (mdadm) - всё прошло отлично, всё работает. После установки проинсталлил граб на оба диска (Диски, к слову, абсолютно идентичные и рабочие), ошибок при это не было:

grub-install /dev/sdb
grub-install /dev/sda
update-grub
Опять же всё замечательно, всё работает... до момента отключения одного любого из дисков. То есть, выключаем сервер, вытаскиваем sata-шлейф какого-нибудь диска и пробуем включить. Итог: Загружается граб, пытается загрузить систему но у него ничего не выходит:
Gave up waiting for root device. Common problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait long enough?)
- Check root= (did the system wait for the right device?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/disk/by-uuid/2c912b5b-43324-2367-a443f-4c324cf444 does not exist. Dropping to a shell!
BusyBox v1.13.3 (debian 8.1) built-in shell (ash)
Enter 'help' for a list of built-in commands.
Собственно вопрос: Возможно я не совсем понимаю зачем нужен RAID? Как заставить GRUB загружать систему с диска, оставшегося в RAID? Заранее спасибо!

 , ,

Grotesque
()

rsyslogd в centos7 и perl

Приветствую! Наткнулся на некую «особенность» то ли перла, то ли centos7, а то ли и rsyslog.

Дано:

  • Centos7 (Linux test 3.10.0-123.9.3.el7.x86_64 #1 SMP Thu Nov 6 15:06:03 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux)
  • Perl (This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi)
  • rsyslog (rsyslogd 7.4.7)

Хочу:

  • Просто повешать некий перловый скрипт в бесконечный цикл и передавать ему логи из rsyslog

Что сделано:

  • Дефолтно настроено всё (Система «из коробки»), своими кривыми руками не успел никуда ещё залезть.
  • В конфиг rsyslog добавлено:
    $ModLoad omprog           # Enables filter programs to futher analyze logs
    $ActionOMProgBinary                            /test.pl
    *.* :omprog:;RSYSLOG_TraditionalFileFormat
  • И написан, собсно, сам test.pl
    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    open (LOG , ">> /tmp/test") or die ("Can't open file :: $!\n");
    
    while (<>) { print LOG $_; }
    

Результат:

  • Запускается всё без ошибок, скрипт успешно демонизируется, но всё, что он пишет в /tmp/test это одну строку при рестарте rsyslog:
    Feb 24 14:50:16 test rsyslogd: [origin software="rsyslogd" swVersion="7.4.7" x-pid="19880" x-info="http://www.rsyslog.com"] exiting on signal 15.

Что предпринято в связи с этим до обращения на форум:

  • Я написал «скрипт» на bash
    #!/bin/bash
    
    while read LINE; do
        echo $LINE >> /tmp/testoutput
    done

    и, о чудо (!), он пишет в файл абсолютно всё, что пишет rsyslog в логи.

Вопрос:

  • Как это объяснить?
  • Как заставить perl так же писать _всё_ в файл, что пишет rsyslog в логи?

Если это глупый вопрос - извиняюсь, я не очень сильный программист :) Заранее спасибо!

 , ,

Grotesque
()

Удалённое выполнение команд [SSH]

Здравствуйте!
Есть необходимость скопировать архив по ssh с одного хоста на другой, посчитать md5 сначала на одном хосте, затем на другом и далее сравнить эти суммы на первом. Делаю bash скриптом так:

md1=`md5 -q ./*.7z`
echo $md1

ssh -t $user@$host 'dd of=/home/$user/$name < ./$name ; md2=`/usr/bin/md5sum  ./*7z`'
echo $md2
patebin: http://pastebin.com/uKji9xWX
Но хост2 не хочет отдавать в переменную md5 сумму. Пробовал сделать это по-разному, но никак не получается. Первый хост - freebsd, второй - linux.

 , ,

Grotesque
()

RSS подписка на новые темы