У нас есть два узла, на которых работает heartbeat / drbd, и одна из используемых нами служб - это Subversion. Я хочу знать: безопасно ли запускать svnserve на обоих узлах все время, или он должен работать только на активном узле?
Использует ли svnserve блокировку на уровне файлов или все это в памяти? Каковы последствия запуска svnserve без доступа к его репозиториям?
Пожалуйста, дайте мне знать, если это непонятно, и я постараюсь изо всех сил перефразировать / уточнить. :)
Я предполагаю, что как и вы heartbeat
управляя аварийным переключением, вы запускаете активный / пассивный кластер DRBD. Таким образом, во время аварийного переключения heartbeat
на пассивном обнаруживает, что он должен стать активным. В этом процессе он (обычно) транслирует тот факт, что берет на себя VIP-адрес основного сервера, а затем монтирует диск DRBD. Это делает диск доступным для файловой системы и, наконец, heartbeat
вызывает необходимое программное обеспечение (MySQL, Apache и т. д.) согласно haresources
.
Вам следует добавить любые дополнительные службы, которые вам потребуются для запуска после переключения на ваш /etc/ha.d/haresources
файл в формате:
#node1 10.0.0.170 Filesystem::/dev/sda1::/data1::ext2
db1 192.168.100.200/24/eth0 drbddisk::mysql Filesystem::/dev/drbd0::/drbd::ext3::defaults mysql
с соответствующим сценарием запуска в /etc/ha.d/resource.d/mysql
(или назван относительно функции скрипта!) - подробности в Настройка haresources, то drbd руководство и OpenVZ вики
Суть в том, что диска для svnserve
читать ваши репозитории до тех пор, пока он не станет таким активным, как drbd
процесс блокирует его в пассивном режиме. Можно запустить DRBD active / active, но это относительно новая функция, и я не пробовал ее!
Одна ошибка, которая плохо документирована: вместо использования сценариев hb_takeover для проверки аварийного переключения просто завершите heartbeat
службы на первичном сервере и ждите, пока вторичный сервер не возьмет на себя управление, наблюдая на обоих серверах с tail -f /var/log/ha-log
. Это дает дополнительный бонус в виде тестирования deadtime
, warntime
и initdead
параметры ha.cf
которые важны в реальном отказе.
Да, вы можете запускать 2 процесса svnserve одновременно, если вы работаете в файловой системе с поддержкой кластера, которая не позволяет им обоим записывать в один и тот же файл одновременно.
Например, вы можете без проблем запускать svnserve и httpd в одном репо.
Репозиторий заблокирован файлом, когда происходит фиксация, загрузка идет в каталог транзакции, когда он завершается, txn применяется к репо атомарно. Этот раздел svn book подробно описывает, как несколько процессов могут одновременно обслуживать данные SVN по разным протоколам.