HA-Linux: да не упадет служба

HA-Linux: да не упадет служба

Данная статья описывает процесс настройки corosync+drbd для Ubuntu 16.04.1. Цель — получить высокодоступную кластерную среду для файлового хранилища с протоколом NFS. Для этого нам понадобится минимум два сервера с двумя сетевыми картами. Начнем.

Сеть

Интерфейс №1 — обычная локальная сеть, которую вы используйте
Интерфейс №2 — внутренняя сеть кластера, кроме узлов сети ни кого не должно там быть. Желательно делать прямое подключение между узлами, если воможно (т.е. без коммутаторов). Указывается только IP и NETMASK.
Моя внутренняя сеть выглядит так:
сервер №1 — test1, IP внутренней сети кластера 10.10.10.1
сервер №2 — test2, IP внутренней сети кластера 10.10.10.2
Обычная локальная сеть 192.168.0.X

Настройка ОС и подготовка служб

Установим всё необходимое
sudo apt-get update;sudo apt-get upgrade; sudo apt-get install corosync pacemaker ntp ntpdate nfs-kernel-server nfs-common drbd
В /etc/hosts добавим
127.0.1.1 test1
10.10.10.2 test2

Логично, что это для узла test1, для test2 нужно поменять ip адрес.
В /etc/host.allow добавим
portmap: 192.168.0.
portmap: 10.10.10.

Теперь настроим NFS сервер. Я создам папку mkdir /share и в файл /etc/exports добавлю
/share 192.168.0.0/24(rw,no_root_squash,no_all_squash,sync)
Но не нужно, чтобы NFS стартовал автоматически, отключим
update-rc.d -f nfs-kernel-server remove
update-rc.d -f nfs-common remove

DRBD

Нужно настроить /etc/drbd.conf. Прикладываю свой конфиг с комментариями
resource r0 {
device /dev/drbd0; //устройство DRBD
disk /share; //Путь монтирования
meta-disk internal;
startup {
wfc-timeout 15;
degr-wfc-timeout 60;
}
disk {
# on-io-error detach;
}
net {
protocol C;
cram-hmac-alg sha1;
allow-two-primaries;
shared-secret "secret"; //секретное слово :D
}
//Диск на test1
on test1 {
device /dev/drbd0;
disk /dev/sda2;
address 10.10.10.1:7788;
}
//Диск на test2
on test2 {
device /dev/drbd0;
disk /dev/sda2;
address 10.10.10.2:7788;
}
}

Проверьте, что порт 7788 доступен!
Теперь проверим.
sudo drbdadm up all
sudo drbdadm invalidate r0
sudo drbdadm -f primary r0
-ВАЖНО! на одном только сервере!!!
sudo drbdadm connect all
Когда запуск будет успешен — создадим файловую систему.
mkfs.ext4 /dev/drbd0
ВНИМАНИЕ!!! Для кластера не рекомендуется использовать EXT. Порекомендую OFS2 и OCFS2,можно попробовать XFS.
Ну и посмотрим что получилось
mount -t ext4 /dev/drbd0 /share
Теперь нужно перенести NFS на данный диск. Это нужно для переключения службы между серверами.
mv /var/lib/nfs /share
ln -s /share /var/lib/nfs

Corosync

Начнем с конфига /etc/corosync.conf
totem {
version: 2
token: 3000
token_retransmits_before_loss_const: 10
join: 60
consensus: 3600
vsftype: none
max_messages: 20
clear_node_high_bit: yes
secauth: off
threads: 0
rrp_mode: active
transport: udpu
//Настройка сети
interface {
member {
memberaddr: 10.10.10.2
}

member {
memberaddr: 10.10.10.1
}

ringnumber: 0
bindnetaddr: 10.10.10.0
mcastport: 5405
ttl: 1
}

}

amf {
mode: disabled
}

service {
ver: 0
name: pacemaker
}

aisexec {
user: user
group: user
}

logging {
syslog_priority: warning

fileline: off
to_stderr: no
to_logfile: yes
logfile: /var/log/corosync/corosync.log
logfile_priority: notice

to_syslog: no
syslog_facility: daemon
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
tags: enter|leave|trace1|trace2|trace3|trace4|trace6
}
}
quorum {
provider: corosync_votequorum
expected_votes: 2
}
Далее нужно создать ключи для доступа. Важно — создание ключей нужно повторить и на втором сервере.
corosync-keygen
chown root:root /etc/corosync/authkey
chmod 400 /etc/corosync/authkey

Ну и скопировать на второй сервер
scp /etc/corosync/authkey root@test2:/etc/corosync/authkey
Далее настроим политику stonish и quorum — пока на данном этапе без них.
crm configure property stonith-enabled="false"
crm configure property no-quorum-policy=ignore

Теперь настало время настройки сервисов. Введем.
crm configure edit
Откроется vi, напишем в него
//node добавятся автоматически
node 168430081: test1
node 168430082: test2
//ip, который доступен всему кластеру, по нему будет подключение к NFS
primitive failover-ip IPaddr \
params ip=192.168.4.3 \
op monitor interval=10s \
meta target-role=Started migration-threshold=2 failure-timeout=10s
//Служба NFS
primitive nfs-kernel-server lsb:nfs-kernel-server
//DRBD
primitive share Filesystem \
params device="/dev/drbd0" directory="/share" fstype=ext4 options=noatime \
meta target-role=Started \
meta target-role=Started migration-threshold=2 failure-timeout=10s
//STONISH по SSH, если захотите попробовать
primitive stonith-test stonith:external/ssh \
params hostlist="test1 test2" clone fencing stonith-test pcmk_reboot_timeout=1 --force
group group_ctr failover-ip share nfs-kernel-server stonith-test
order ipcheck inf: failover-ip nfs-kernel-server
property cib-bootstrap-options: \
have-watchdog=false \
dc-version=1.1.14-70404b0 \
cluster-infrastructure=corosync \
stonith-enabled=false \
no-quorum-policy=ignore
rsc_defaults rsc-options: \
resource-stickiness=110 \
migration-threshold=3

Теперь перезагружаем оба сервера, подключим NFS шару к чему-либо и экспериментируем с имитацией проблем.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *