Sibilia octopress blog

notes on memory.

Репликация дисков по сети с помощью DRBD

| Comments

В этой статье я рассмотрю установку и настройку распределённой файловой системы с использованием DRBD. Данное решение может применяться для ряда задач в кластерах высокой доступности (High Availability). Для начала, разъясним понятие DRBD: DRBD

DRBD (от англ. Distributed Replicated Block Device — «Распределённое Копируемое Блочное Устройство») — это блочное устройство, обеспечивающее синхронизацию (RAID1) между локальным блочным устройством и удалённым.

Установка и настройка кластера Pacemaker

| Comments

Pacemaker Pacemaker

Для построения кластеров high availability (высокой доступности) я в своей работе использую Pacemaker. Он себя хорошо зарекомендовал на многих проектах, очень гибкий, динамически развивается. Здесь я приведу краткую инструкцию себе на память по его установке и начальной настройке. Я не претендую на полноту изложения, за этим лучше идти в официальную документацию, благо она неплохо написана. Используемый дистрибутив CentOS 6. Пример будет описан на двух однотипных серверах.

SSH трюки

| Comments

Проксирование соединения

Допустим у вас есть необходимость подключаться к удалённому серверу host-end, к которому прямого доступа нет, и есть ssh доступ к серверу host-forw, с которого есть доступ к host-end. Тогда для удобства можно настроить проксирование ssh соединения. В результате, вместо последвательного подключения к host-forw -> host-end, можно будет подключаться сразу к host-end и соединение будет проксироваться через host-forw автоматически. Для этого, нужно дбавить в конфиг ssh (~/.ssh/config):

1
2
3
4
5
6
7
8
ForwardAgent yes
Host host-end
    HostName host-end
    Port 22
    User admin
    ProxyCommand ssh admin@host-forw nc %h %p
    Compression yes
    ForwardX11 no

Из примера видно, что можно все необходимые параметры прописать, а их кстати немало (man ssh_config). Теперь для подключения достаточно набрать:

1
ssh host-end

Просмотр сетевого трафика с удалённого сервера

На удалённом сервере зачастую есть сетевой сниффер tcpdump. Но снимать трафик на нём, затем переносить на свой комп для анализа в wireshark неудобно, намного проще направить поток с tcpdump сразу себе в wireshark:

1
ssh root@host-end -i eth0 -w - 'port !22' | wireshark -k -i -

Копирование файлов с удалённого сервера на другой, через локальный комп

Необходимо перекинуть файлы с одного сервера на другой, но они друг друга не видят. Тогда можем перекинуть с локального, котой их обоих видит:

1
ssh root@host1 "tar -cf - /dir-copy" | ssh root@host2 "tar -xf - /dir-past/"

Запуск локального скрипта на удалённом сервере

1
ssh -T user@host < script.sh

NTP - синхронизация времени

| Comments

Настроить синхронизацию времени в CentOS не сложно. Для этого нам понадобится NTP. Устанавливаем его:

1
yum install ntp

Далее разрешаем демону ntpd устанавливать аппаратное время. Для этого в файле /etc/sysconfig/ntpd прописываем строку SYNC_HWCLOCK=yes :

1
echo SYNC_HWCLOCK=yes >> /etc/sysconfig/ntpd

Запускаем демон ntpd и добавляем в автозагрузку:

1
2
3
/etc/init.d/ntpd start
chkconfig ntpd on
chkconfig --list ntpd

Через некоторое время можно проверить статус синхронизации:

1
2
3
4
# ntpstat
synchronised to NTP server (86.57.151.12) at stratum 5 
   time correct to within 570 ms
   polling server every 64 s

Синхронизация файлов с помощью Lsyncd и Unison

| Comments

Для быстрой синхронизации файлов между двумя серверами, когда изменения могут появиться на любом из них, прекрасно подходит связка из lsyncd и unison.

Lsyncd - это демон который слушает дерево каталогов и выполняет синхронизацию при событии (inotify или fsevents) на нём. Синхронизировать он может с помощью rsync или любым другим способом, который можно прописать у него в настройках в виде скрипта на Lua.

Unison позволяет синхронизировать файлы между серверами (или локально два различных каталога). В отличие от rsync он позволяет синхронизировать файлы одновременно в обе стороны. В качестве транспорта при синхронизации может быть использован ssh. Пример буду приводить для CentOS/RedHat, для .deb систем отличия в мелочах. Начнём с установки:

Установка Crm Shell в Pacemaker

| Comments

В начале марта в проекте Pacemaker произошли некоторые изменения, в частности был вырезан crm shell начиная с версии pacemaker-1.1.7.

Since late-April, the crm shell is no longer included in the Pacemaker source tree. This change was made at the author’s request as it is now maintained as a separate project.

Перенаправление Http

| Comments

Возникла необходимость по наступлению определённого события временно перенаправлять http соединения на другой порт, где слушает nginx с заглушкой. Это легко можно сделать с помошью парочки правил в iptables. Приведу несколько основных моментов из bash скрипта. Нам нужны две таблицы в новой цепочке: “nat” для непосредственно перенаправления и “filter” для сброса активных сессий. Фильтровать активные сессии необходимо потому, что в таблицу “nat”, цепочки PREROUTING, поподают лишь tcp соединения с состоянием NEW. Активные tcp соединения живут примерно 2-3 минуты. Если это не критично, то можно обойтись без их фильтрации. Для этого просто не добавляем все правила в которых указана таблица “filter”. Для начала создадим новую цепочку. Это удобно тем что её можно очистить полностью, когда необходимо вернуть всё к изначальному состоянию.

1
2
iptables -t nat -N HTTP_REDIR
iptables -t filter -N HTTP_REDIR

Установка и настройка Munin

| Comments

Munin - Это мощная клиент-серверная система мониторинга параметров серверов. Главный сервер munin запускается по cron и опрашивает munin-node сервера собирая с них данные и рисует красивые и наглядные графики. На munin-node серверах демон при подключении главного сервера запускает скрипты плагинов из /etc/munin/plugins/. Плагинов в стандартной установке большое количество. Можно написать и свои.

Решение некоторых проблем в DRBD

| Comments

Рассмотрю кратко решение проблем в DRBD Diskless и Split-brain.

DRBD Diskless

При выходе из строя дискового массива и его восстановления можно получить следующую ситуацию в drbd:

# drbd-overview
2:r2 Connected Secondary/Primary Diskless/UpToDate C r----

Для решения этой проблемы необходимо сбросить мета данные:

На активной ноде необходимо отмонтировать раздел. Затем на неактивной ноде отключаем ресурс:

# drbdadm down r2

Создаем заново блок мета-данных:

# drbdadm create-md r2
 ...
New drbd meta data block successfully created.