Назад | Перейти на главную страницу

Безопасно ли запускать два экземпляра svnserve в одном репозитории или только один?

У нас есть два узла, на которых работает 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 по разным протоколам.