Сейчас занимаюсь постройкой нового кластера MariaDB+Galera. Кластер планируется из трёх нод + арбитратор (на данный момент в наличии только две, для третей и арбитратора ещё железо не готово), на каждой ноде стоит Debian Jessie, запущена MariaDB в режиме MM-репликации, так же стоит corosync и pacemaker для мониторинга состояния MariaDB и в случае её отказа, переноса vip-адреса на живую ноду.
В процессе конфигурирования столкнулся со следующими проблемами: 1. Если демону mysqld сделать kill -9, то corosync, вместо того, что бы передвинуть ip на живую ноду, пытается снова запустить mysqld на этой же ноде. Как сделать так, что бы айпишник переезжал при недоступности, а в идеале, при неработоспособности демона (например, выполнялся тестовый запрос, если результат отличен от ожидаемого, передвинуть адрес на другую ноду и оповестить админа)?
2. При рестарте демона corosync, зачем-то рестартится и MariaDB. Как сделать, что бы оно не трогало mysqld при рестарте?
3. Как при запущенном mysld сбросить статус OFFLINE/Fail/Stopped в corosync? (reprobe не подходит, потому-что при resource reprobe mariadb-01 так же происходит рестарт mysqld).
Зачем оно вообще на каждый чих рестартит то, бесперебойную работу чего должно обеспечивать?
Конфиги: /etc/corosync/corosync.conf:
totem {
version: 2
token: 3000
nodeid: 10
token_retransmits_before_loss_const: 10
clear_node_high_bit: yes
crypto_cipher: none
crypto_hash: none
transport: udpu
interface {
ringnumber: 0
bindnetaddr: 10.100.22.50
mcastaddr: 224.0.0.50
}
}
logging {
to_logfile: yes
logfile: /var/log/corosync/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: QUORUM
debug: off
}
}
quorum {
provider: corosync_votequorum
expected_votes: 3
}
nodelist {
node {
ring0_addr: mariadb-01.sdn
}
node {
ring0_addr: mariadb-02.sdn
}
node {
ring0_addr: mariadb-03.sdn
}
}
crm configure show:
node 10: mariadb-01
node 20: mariadb-02
primitive IP-rsc_mysqld IPaddr2 \
params ip=10.100.22.50 nic=bond0.22 cidr_netmask=24 \
meta migration-threshold=2 \
op monitor interval=2 timeout=20 on-fail=restart
primitive mysqld mysql \
params binary="/usr/bin/mysqld_safe" config="/etc/mysql/my.cnf" user=mysql group=mysql log="/var/log/mysql/mysql_err.log" pid="/run/mysqld/mysqld.pid" datadir="/var/lib/mysql" socket="/run/mysqld/mysqld.sock" replication_user=root replication_passwd=MY_SECRET_PASS \
meta migration-threshold=2 target-role=Started is-managed=true \
op monitor timeout=30s interval=2s on-fail=restart role=Master interleave=true ordered=true \
op start interval=0 timeout=300s \
op stop interval=0 timeout=300s
ms mariadb_cluster mysqld \
meta target-role=Started is-managed=true
colocation ip_with_mariadb inf: IP-rsc_mysqld mariadb_cluster
property cib-bootstrap-options: \
dc-version=1.1.12-561c4cf \
cluster-infrastructure=corosync \
stonith-enabled=no \
no-quorum-policy=ignore \
default-resource-stickiness=100 \
stop-all-resources=no \
symmetric-cluster=true
property mysql_replication: \
mysqld_REPL_INFO="mariadb-01|mariadb-bin.000867|345"