LINUX.ORG.RU
ФорумAdmin

MariaDB-Galera-cluster+corosync+pacemaker несколько вопросов

 , ,


1

1

Сейчас занимаюсь постройкой нового кластера 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"

1. on-fail=restart ни на что не намекает? :)

2. При любых деструктивных операциях с Pacemaker/Corosync нужно вводить его в maintanence режим чтобы он не трогал ресурсы

3. В crm resource есть какая-то команда, точно не помню.

blind_oracle ★★★★★ ()
Ответ на: комментарий от blind_oracle

Спасибо! on-fail=restart заменил на on-fail=standby, теперь при убивании демона, адрес переезжает, но демон надо поднимать руками, а потом рестартить pacemaker, иначе он его в статусе так и будет показывать, как Stopped. При resource reprobe рестартиться mysqld вроде перестал. Остался вопрос, можно-ли как-то сказать pacemaker'у, что бы он живость демона mysqld оценивал по результату выполнения определённого запроса?

dronozavr ()
Ответ на: комментарий от dronozavr

http://www.linux-ha.org/wiki/Mysql_(resource_agent)

Посмотри там. Запускают mysqld напрямую без mysqld_safe, у тебя параметров ещё куча лишних. Тот же role=Master зачем? Это ты из какой-то доки с репликацией небось вытащил. У галеры то нет Master/Slave разделения, они все мастеры. Ну и так далее.

что бы он живость демона mysqld оценивал по результату выполнения определённого запроса?

https://github.com/percona/percona-pacemaker-agents/blob/master/doc/PRM-setup...

У их ресурса (ocf:percona:mysql) есть параметры test_table/test_user/test_password - как раз то что тебе надо.

blind_oracle ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.