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
Last revision Both sides next revision
решение_hast [2011/09/28 10:29]
val
решение_hast [2017/09/29 10:01]
val
Line 1: Line 1:
 ====== Решение HAST ====== ====== Решение HAST ======
  
-[[http://​wiki.freebsd.org/​HAST]]+  * [[http://​wiki.freebsd.org/​HAST|HAST - Highly Available Storage]]
  
 ===== Подготовка узлов ===== ===== Подготовка узлов =====
Line 8: Line 8:
  
 <​code>​ <​code>​
-gateN# dmesg+nodeN# dmesg | grep ada1
  
-gateN# mkdir /disk2+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 
-#                local /dev/ad1s1d +                remote 10.Z.M.200+X
-                remote 10.0.0.2+
         }         }
-        on gate2 +        on node2 
-                local /dev/ad1 +                local /dev/ada1            ​ 
-#                local /​dev/​ad1s1d ​               +                remote 10.Z.M.100+X
-                remote 10.0.0.1+
         }         }
 } }
 </​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
  
-gateM# hastctl role primary r0+nodeM# hastctl role primary r0
  
-gateZ# hastctl status+nodeZ# hastctl status
  
-gateM# 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.txt · Last modified: 2017/10/02 09:48 by val