User Tools

Site Tools


решение_hast

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
решение_hast [2011/07/29 09:39]
val
решение_hast [2017/10/02 09:48] (current)
val [HAST и HEARTBEAT]
Line 1: Line 1:
 ====== Решение HAST ====== ====== Решение HAST ======
  
-[[http://​wiki.freebsd.org/​HAST]]+  * [[http://​wiki.freebsd.org/​HAST|HAST - Highly Available Storage]]
  
-===== Подготовка ​стенда ​=====+===== Подготовка ​узлов ​=====
  
-Будем использовать устройство ad1+Добавляем жесткие диски, создаем точки монтирования
  
 <​code>​ <​code>​
-gateN# mkdir /disk2+nodeN# dmesg | grep ada1 
 + 
 +nodeN# mkdir /disk2
 </​code>​ </​code>​
  
 ===== Настройка узлов ===== ===== Настройка узлов =====
 <​code>​ <​code>​
-gateN# cat /​etc/​hast.conf+nodeN# cat /​etc/​hast.conf
 </​code><​code>​ </​code><​code>​
 resource r0 { resource r0 {
-        on gate1 +        on node1 
-                local /dev/ad1 +                local /dev/ada1 
-                remote 10.0.0.2+                remote 10.Z.M.200+X
         }         }
-        on gate2 +        on node2 
-                local /dev/ad1 +                local /dev/ada1            ​ 
-                remote 10.0.0.1+                remote 10.Z.M.100+X
         }         }
 } }
 </​code><​code>​ </​code><​code>​
-gateNcat /​etc/​rc.conf +nodeNservice hastd rcvar
-... +
-hastd_enable=yes+
  
-gateN/etc/rc.d/hastd start+nodeNservice ​hastd start
 </​code>​ </​code>​
  
 ===== Инициализация ===== ===== Инициализация =====
 <​code>​ <​code>​
-gateN# hastctl ​create r0+nodeN# hastctl ​status
  
-gate1# hastctl ​role primary ​r0+nodeN# hastctl ​create ​r0
  
-gate2# hastctl role secondary ​r0+node1# hastctl role primary ​r0
  
-gateN# hastctl ​status+node2# hastctl ​role secondary r0
  
-gate1newfs /​dev/​hast/​r0+nodeNhastctl status
  
-gate1mount /​dev/​hast/​r0 ​/disk2+node1newfs /​dev/​hast/​r0
  
-gate1# cp /​etc/​rc.conf /disk2/+node1# mount /​dev/​hast/​r0 /disk2 
 + 
 +node1# cp /​etc/​rc.conf /disk2/
 </​code>​ </​code>​
  
 ===== Смена ролей узлов кластера ===== ===== Смена ролей узлов кластера =====
 <​code>​ <​code>​
-gate1# umount /disk2+node1# umount /disk2
  
-gate1# hastctl role secondary r0+node1# hastctl role secondary r0
  
-gate2# hastctl role primary r0+node2# hastctl role primary r0
  
-gate2# fsck -y -t ufs /​dev/​hast/​r0+node2# fsck -y -t ufs /​dev/​hast/​r0
  
-gate2# mount /​dev/​hast/​r0 /disk2+node2# mount /​dev/​hast/​r0 /disk2
 </​code>​ </​code>​
  
-===== Остановка заркалирования ​=====+===== Отключение ​зеркалируемого раздела =====
 <​code>​ <​code>​
-gate2# umount /disk2+node2# umount /disk2
  
-gate2# hastctl role secondary r0+node2# hastctl role secondary r0
 </​code>​ </​code>​
  
-===== Дополнительные материалы ===== +===== Решение ситуации split brain =====
- +
-==== Решение ситуации split brain ====+
  
 Выбираем узел, данные которого будут затерты. Выбираем узел, данные которого будут затерты.
 <​code>​ <​code>​
-gateZ# hastctl create r0+nodeZ# hastctl create r0
  
-gateZ# hastctl role secondary r0+nodeZ# hastctl role secondary r0
  
-gateZ# hastctl ​status+nodeM# hastctl ​role primary r0
  
-gateM# hastctl status+nodeZ# hastctl status 
 + 
 +nodeM# hastctl status
 </​code>​ </​code>​
  
 +===== HAST и Heartbeat =====
 +
 +  - Состояние init возникает при запуске hastd на secondary узле, если он остановился и стартует раньше primary
 +  - Ситуация Split-Brain возникает при запуске hastd на secondary узле, если он остановился позже primary и heartbeat успел его назначить primary, а запускаются оба узла синхронно и heartbeat считает что primary должен оставаться прежним.
 +
 +<​code>​
 +nodeN# service heartbeat stop
 +
 +nodeN# cat /​usr/​local/​etc/​ha.d/​resource.d/​hast
 +</​code><​code>​
 +#!/bin/sh
 +case $1 in
 +status)
 +        hastctl status r0 | grep -q '​init'​ && hastctl role secondary r0
 +        ;;
 +start)
 +        hastctl role primary r0
 +        sleep 60
 +        fsck -y -t ufs /​dev/​hast/​r0
 +        mount /​dev/​hast/​r0 /disk2
 +        ;;
 +stop)
 +        mount | grep -q hast && umount /disk2
 +        hastctl role secondary r0
 +        ;;
 +esac
 +
 +exit 0
 +</​code><​code>​
 +nodeN# chmod +x /​usr/​local/​etc/​ha.d/​resource.d/​hast
 +
 +nodeN# cat /​usr/​local/​etc/​ha.d/​haresources
 +</​code><​code>​
 +node1.corpX.un hast
 +</​code><​code>​
 +nodeN# service heartbeat start
 +</​code>​
решение_hast.1311917965.txt.gz · Last modified: 2013/05/22 13:50 (external edit)