Бозовые настройки сети:
FreeBSD
[gateN:~]# nano /etc/rc.conf
moused_enable="YES"
keyrate="fast"
hostname="gateN.corpX.un"
ifconfig_em0="inet 192.168.X.N/24"
ifconfig_em1="inet 172.16.1.N*100+X/24"
defaultrouter="172.16.1.254"
gateway_enable="YES"
sshd_enable="YES"
[gateN:~]# nano /etc/resolv.conf
domain corpX.un
nameserver 172.16.1.254
[gateN:~]# nano /etc/hosts
127.0.0.1 localhost localhost.corpX.un
192.168.X.1 gate1.corpX.un gate1
192.168.X.2 gate2.corpX.un gate2
172.16.1.254 proxy
172.16.1.254 nfs
172.16.1.254 rep
[gateN:~]# init 6
Ubuntu
gateN:~# nano /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.X.N
netmask 255.255.255.0
auto eth1
iface eth1 inet static
address 172.16.1.N*100+X
netmask 255.255.255.0
gateway 172.16.1.254
gateN:~# nano /etc/hostname
gateN.corpX.un
gateN:~# nano /etc/resolv.conf
search corpX.un
nameserver 172.16.1.254
gateN:~# nano /etc/hosts
127.0.0.1 localhost localhost.corpX.un
192.168.X.1 gate1.corpX.un gate1
192.168.X.2 gate2.corpX.un gate2
172.16.1.254 proxy
172.16.1.254 nfs
172.16.1.254 rep
gateN:~# nano /etc/sysctl.conf
...
net.ipv4.ip_forward=1
...
gateN:~# init 6
.....
gateN:~# apt-get update
Проверки
gateN:~# ping gate1
gateN:~# ping gate2
gateN:~# ping ya.ru
Настройка сервера точного времени NTP:
FreeBSD
[gateN:~]# nano /etc/rc.conf
...
ntpd_enable="YES"
Ubuntu
gateN:~# apt-get install ntp
FreeBSD/Ubuntu
gateN:~# nano /etc/ntp.conf
server 0.ru.pool.ntp.org
server 1.ru.pool.ntp.org
server 2.ru.pool.ntp.org
server 3.ru.pool.ntp.org
restrict 10.0.0.0 mask 255.255.255.0 nomodify notrap
Через 30 минут проверяем:
gateN:~# ntpq -p
gateN:~# ntptrace
Синхронизация файлов конфигураций:
gateN:~# apt-get update
gateN:~# apt-get install ssh
Настройка доступа по протоколу ssh пользователя root:
gate2:~# nano sshd_config
...
Match Address 192.168.X.1
PermitRootLogin yes
gate1:~# scp /CHANGE/DIR/file.config gate2:/CHANGE/DIR/file.config
(аутентификация_с_использованием_ключей_ssh):
gate1:~# ssh-keygen
...
Enter passphrase (empty for no passphrase): Пароль на ключ пустой!!!
...
для убунты
gate1:~# ssh-copy-id gate2
или
gate1:~# ssh gate2 "mkdir .ssh"
gate1:~# scp .ssh/id_rsa.pub gate2:.ssh/authorized_keys
Настраиваем DNS:
FreeBSD
[gateN:~]# nano /etc/namedb/named.conf
options {
directory "/etc/namedb";
pid-file "/var/run/named/pid";
allow-recursion { any; };
forwarders {
172.16.1.254;
};
};
view "inside" {
match-clients {
192.168.X/24;
127/8;
};
zone "corpX.un" {
type master;
file "master/corpX.un";
};
zone "X.168.192. in-addr.arpa " {
type master;
file "master/corpX.rev";
};
};
view "outside" {
zone "corpX.un" {
type master;
file "master/corpX.un.out";
};
};
[gateN:~]# cd /etc/namedb/master/
Ubuntu
gateN:~# apt-get install bind9
gateN:~# nano /etc/bind/named.conf
options {
directory "/var/cache/bind";
allow-recursion { any; };
forwarders {
172.16.1.254;
};
};
view "inside" {
match-clients {
192.168.X/24;
127/8;
};
zone "corpX.un" {
type master;
file "/var/cache/bind/corpX.un";
};
zone "X.168.192.in-addr.arpa" {
type master;
file "/var/cache/bind/corpX.rev";
};
};
view "outside" {
zone "corpX.un" {
type master;
file "/var/cache/bind/corpX.un.out";
};
};
gateN:~# cd /var/cache/bind/
FreeBSD/Ubuntu
gateN:~# nano corpX.un
$TTL3h
@ SOA gate root.gate 1 1d 12h 1w 3h
NS ns
ns A 192.168.X.1
ns A 192.168.X.2
gate1 A 192.168.X.1
gate2 A 192.168.X.2
gate A 192.168.X.254
gateN:~# nano corpX.rev
$TTL 3h
@ SOA gate.corpX.un. root. gate.corpX.un. 1 1d 12h 1w 3h
NS gate.corpX.un.
254 PTR gate.corpX.un.
1 PTR gate1.corpX.un.
2 PTR gate2.corpX.un.
gateN:~# nano corpX.un.out
$TTL 3h
@ SOA ns root.ns 1 1d 12h 1w 3h
NS ns
ns A 172.16.1.X
gate A 172.16.1.X
gateN:~# named-checkconf -z
Запуск или перезапуск сервиса
FreeBSD
[gateN:~]# nano /etc/rc.conf
...
named_enable="YES"
[gateN:~]# /etc/rc.d/named start
Ubuntu
предпочтительно перечитать конфиги
gateN:~# rndc reload
или
gateN:~# /etc/init.d/bind9 restart
Настраиваем DHCP сервер:
Установка
FreeBSD
[gateN:~]# pkg_add -r isc-dhcp31-server
[gateN:~]# nano /etc/rc.conf
...
dhcpd_ifaces="em0"
dhcpd_enable=yes
[gateN:~]# rehash
[gateN:~]# cd /usr/local/etc/
Ubuntu
gateN:~# apt-get install dhcp3-server
gateN:~# nano /etc/default/dhcp3-server
INTERFACES="eth0"
gateN:~# cd /etc/dhcp3/
gateN:~# nano dhcpd.general
ddns-update-style none;
log-facility local7;
subnet 192.168.X.0 netmask 255.255.255.0 {
pool {
failover peer "dhcp";
range 192.168.X.101 192.168.X.199;
}
option routers 192.168.X.254;
option domain-name "corpX.un";
option domain-name-servers 192.168.X.1, 192.168.X.2;
default-lease-time 600;
max-lease-time 7200;
}
gate1:~# nano dhcpd.conf
failover peer "dhcp" {
primary;
address 192.168.X.1;
port 519;
peer address 192.168.X.2;
peer port 520;
max-response-delay 60;
max-unacked-updates 10;
mclt 600;
split 128;
load balance max seconds 3;
}
include "/CORRECT/ETC/DIR/dhcpd.general";
gate2:~# nano dhcpd.conf
failover peer "dhcp" {
secondary;
address 192.168.X.2;
port 520;
peer address 192.168.X.1;
peer port 519;
max-response-delay 60;
max-unacked-updates 10;
}
include "/CORRECT/ETC/DIR/dhcpd.general";
Проверка конфигурации и запуск
FreeBSD
[gateN:~]# dhcpd -t
[gateN:~]# /usr/local/etc/rc.d/isc-dhcpd start
Ubuntu
gateN:~# dhcpd3 -t
Примечания: В качестве шлюза указан не существующий ip адрес 192.168.X.254, он будет назначаться в
следующей лабораторной работе. В первый момент необходимо запустить оба сервера
чтобы они синхронизировались.
Проверка: перезагружаем WinXP по очереди останавливая и запуская серверы.
Должен выдаваться один и тот же адрес (можно отключать интерфейс XP, ipconfig /renew не использовать)
gateN:~# tail -f /var/log/messages
Сервис Gateway/NAT
CARP
FreeBSD (user land)
[gateN:~]# pkg_add -r ucarp
[gate1:~]# nano /etc/rc.conf
...
ucarp_enable="YES"
ucarp_vhid="1"
ucarp_if="em0"
ucarp_src="192.168.X.1"
ucarp_addr="192.168.X.254"
# ucarp_advskew="50"
# ucarp_preempt="YES" # For always use master with lover advskew
ucarp_pass="secret"
ucarp_upscript="/usr/local/etc/vip-up.sh"
ucarp_downscript="/usr/local/etc/vip-down.sh"
[gate2:~]# nano /etc/rc.conf
...
ucarp_enable="YES"
ucarp_vhid="1"
ucarp_if="em0"
ucarp_src="192.168.X.2"
ucarp_addr="192.168.X.254"
# ucarp_advskew="100"
# ucarp_preempt="YES"
ucarp_pass="secret"
ucarp_upscript="/usr/local/etc/vip-up.sh"
ucarp_downscript="/usr/local/etc/vip-down.sh"
[gateN:~]# nano /usr/local/etc/vip-up.sh
#!/bin/sh
ifconfig em0 inet 192.168.X.254/32 alias
[gateN:~]# chmod +x /usr/local/etc/vip-up.sh
[gateN:~]# nano /usr/local/etc/vip-down.sh
#!/bin/sh
ifconfig em0 inet 192.168.X.254/32 -alias
[gateN:~]# chmod +x /usr/local/etc/vip-down.sh
[gateN:~]# /usr/local/etc/rc.d/ucarp start
Ubuntu
Установка
gateN:~# apt-get install ucarp
Настройка
gateN:~# nano /etc/vip-up.sh
#!/bin/sh
/sbin/ip addr add 192.168.X.254/32 dev "$1"
gateN:~# nano /etc/vip-down.sh
#!/bin/sh
/sbin/ip addr del 192.168.X.254/32 dev "$1"
gateN:~# chmod +x /etc/vip-up.sh /etc/vip-down.sh
Запуск (можно прописать в /etc/rc.local)
gate1:~#
...
ucarp -i eth0 -s 192.168.X.1 -v 1 -p secret -a 192.168.X.254 \
-u /etc/vip-up.sh -d /etc/vip-down.sh -z -B
gate2:~#
...
ucarp -i eth0 -s 192.168.X.2 -v 1 -p secret -a 192.168.X.254 \
-u /etc/vip-up.sh -d /etc/vip-down.sh -z -B
Проверка
gateN:~# ip addr show eth0
Остановка
gateN:~# killall ucarp
Запуск
gateN:~# ifup eth0
Проверка
gateN:~# ifconfig eth0:ucarp
работает ли ucarp
gateN:~# ps ax | grep ucarp
FreeBSD + UCARP
[gateN:~]# nano /usr/local/etc/vip-up.sh
#!/bin/sh
ifconfig em0 inet 192.168.X.254/32 alias
ifconfig em1 inet 172.16.1.X/24 alias
route delete default
route add default 172.16.1.254
[gateN:~]# nano /usr/local/etc/vip-down.sh
#!/bin/sh
ifconfig em0 inet 192.168.X.254/32 -alias
ifconfig em1 inet 172.16.1.X/24 -alias
route delete default
route add default 192.168.X.254
Ubuntu + UCARP
Назначаем у удаляем соответствующие адреса и маршруты
gateN:~# apt-get install fake
gateN:~# nano /etc/vip-up.sh
#!/bin/sh
ip addr add 192.168.X.254/32 dev "$1"
ip addr add 172.16.1.X/24 dev eth1
route delete default
route add default gw 172.16.1.254
gateN:~# nano /etc/vip-down.sh
#!/bin/sh
ip addr del 192.168.X.254/32 dev "$1"
ip addr del 172.16.1.X/24 dev eth1
route delete default
route add default gw 192.168.X.254
Настроить NAT простейший вариант (для примера)
Очистка таблицы nat
gateN:~# iptables -t nat --flush
Заполнение таблицы nat (eth1 - внешний интерфейс)
gateN:~# iptables -t nat -A POSTROUTING -o eth1
-s 192.168.X.0/24 -j MASQUERADE
в нашем случае используем SNAT т.к в случае маскарадинга трафик пойдет через IP
присвоеный карте eth1, а єто нас не устраивает, т.к у нас там стыренные у провайдера адреса.
gateN:~# iptables -t nat -A POSTROUTING -o eth1
-s 192.168.X.0/24 -j SNAT --to-source 172.16.1.X
Сохранение состояния iptables
gateN:~# iptables-save -c > /etc/iptables.rules
Восстановление состояния iptables
gateN:~# iptables-restore -c < /etc/iptables.rules
Восстановление состояния iptables при загрузке
gateN:~# nano /etc/network/interfaces
...
auto eth1
iface eth1 inet static
pre-up iptables-restore -c < /etc/iptables.rules
Сервис HTTP:
Сценарий: cоздаем отказоустойчивый www хостинг. Содержимое домашних каталогов мастер
сервера периодически копируется на резервный. В случае временной остановки или выхода
из строя главного сервера автоматически становится доступным резервный. Не
преднамеренный запуск мастер сервера не должен менять ролей серверов.
Подготовка (1-й этап):
Настройка серверов для зон corpX.un. и X.168.192.in-addr.arpa., добавляем запись о веб сервере в BIND
gateN:~# nano /var/cache/bind/corpX.un
...
www A 192.168.X.10
На обоих узлах устанавливаем и запускаем http сервер с поддержкой домашних каталогов
Установка и запуск сервера
Apache:
FreeBSD
[gateN]# pkg_add -r apache22
[gateN]# nano /etc/rc.conf
...
apache22_enable="YES"
...
[gateN]# /usr/local/etc/rc.d/apache22 start
Использование домашних каталогов
[gateN]# nano /usr/local/etc/apache22/httpd.conf
...
Include etc/apache22/extra/httpd-userdir.conf
...
Ubuntu
gateN:~# apt-get install apache2
Использование домашних каталогов
gateN:~# a2enmod userdir
gateN:~# /etc/init.d/apache2 restart
FreeBSD/Ubuntu
gateN:~# mkdir ~user1/public_html/
gateN:~# nano ~user1/public_html/index.html
<h1>Hello World from user1</h1>
gateN:~# chown -R user1 ~user1/public_html/
Проверяем подключившись с браузера клиента на www
На обоих узлах создаем пользователя user1 с одинаковым uid=10001
gateN:~# adduser --uid=10001 user
проверяем создался ли пользователь с необходимыми параметрами
gateN:~# id user
проверяем запущен ли апач
gateN:~# ps ax | grep apach
Устанавливаем сервер
ftp на gate1 и запускаем его
FreeBSD
[gateN:~]# nano /etc/rc.conf
ftpd_enable="YES"
[gateN:~]# /etc/rc.d/ftpd start
Starting ftpd.
Ubuntu
gateN:~# apt-get install proftpd
Run proftpd: standalone
Создаем тестовую www страницу для пользователя user1 используя протокол ftp на gate1 (через winscp)
Периодически синхронизируем (Планирование выполнения заданий в Linux)
содержимое домашних каталогов на резервный сервер
Использование rsync сервера
Установка
FreeBSD
[gateN:~]# pkg_add -r rsync
[gate2:~]# /usr/local/etc/rc.d/rsyncd rcvar
Ubuntu
gateN:~# apt-get install rsync
gate2:~# nano /etc/default/rsync
...
RSYNC_ENABLE=true
...
FreeBSD/Ubuntu
gate2:~# nano /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
# Название ресурса
[home]
# Кем подключаться
uid = root
use chroot = yes
# Что доступно
path = /home
# Доступно на запись
read only = no
# Коме разрешено подключаться
hosts allow = gate1.corpX.un
Какие ресурсы доступны
gate1:~# rsync gate2::
home
Посмотреть
gate1:~# rsync gate2::home
...
gate1:~# rsync gate2::home/user1/
...
Архивировать выдавая подробную информацию(-av), удаляя(--delete), что(/home/), куда(gate2::home)
gate1:~# rsync -av --delete /home/ gate2::home
Менеджер узлов (кластара) HEARTBEAT
Подготовка (2-й этап):
Устанавливаем ftp сервис на gate2 == gate1.
На обоих узлах отключаем автоматический запуск ftp сервиса.
gateN:~# ls /etc/rc2.d/
gateN:~# update-rc.d -f ftp remove
Если надо вернуть атозапуск:
gateN:~# update-rc.d ftp defaults
Добавляем сетевые адаптеры, которые будут соединены кросс кабелем и использоваться
для мониторинга состояния узлов (Ethernet 3 - VMnet4).
Настраиваем IP адреса адаптеров 10.0.0.1/24 на gate1 и 10.0.0.2/24 на gate2.
Установка и настройка
FreeBSD
[gateN:~]# pkg_add -r heartbeat
[gateN:~]# ls /usr/local/share/doc/heartbeat/
[gateN:~]# cd /usr/local/etc/ha.d/
Ubuntu
gateN:~# apt-get install heartbeat
gateN:~# zless /usr/share/doc/heartbeat/ha.cf.gz
gateN:~# cd /etc/ha.d/
FreeBSD/Ubuntu
gateN:~# nano ha.cf
# Сетевой интерфейс, вариант для фри
# bcast le2
# Сетевой интерфейс, вариант для убунты
# bcast eth2
# ucast eth1 192.168.1.2
# Сколько слейв ожидает мастера
deadtime 30
# Сколько секунд ждут друг друга
initdead 120
# Не возвращает мастера в случае поднятия упавшего серв
auto_failback off
# Список узлов
node gate1.corpX.un
# Список узлов
node gate2.corpX.un
debugfile /var/log/ha-debug
logfile /var/log/ha-log
gateN:~# nano authkeys
auth 1 # Для первой группы узлов
1 sha1 testpass123 # Ключ для первуй группы узлов
gateN:~# chmod 600 authkeys
gateN:~# nano resource.d/ftpserv
#!/bin/sh
# Don't forget disable autostart service
# Uncomment starting services compatible with FreeBSD/Ubuntu
# Передаем первую переменную
case $1 in
start)
# Вариант для фри
# /etc/rc.d/ftpd onestart
# Вариант для убунты
# /etc/init.d/proftpd start
;;
stop)
# Вариант для фри
# /etc/rc.d/ftpd onestop
# Вариант для убунты
# /etc/init.d/proftpd stop
;;
esac
exit 0
Даем бит исполнения
gateN:~# chmod +x resource.d/ftpserv
gateN:~# nano haresources
gate1.corpX.un \
IPaddr::192.168.X.10 \
ftpserv
# Пока пропустим
# gate2.corpX.un \
# IPaddr::192.168.X.20 \
# smbserv
Пробелы после \ пробелы и пустые строки не допустимы!!!
Запуск:
FreeBSD
[gateN:~]# /usr/local/etc/rc.d/heartbeat rcvar
[gateN:~]# /usr/local/etc/rc.d/heartbeat start
Ubuntu
gateN:~# /etc/init.d/heartbeat start
Проверка (смотрим логи):
gateN:~# tail -f /var/log/ha-debug
gateN:~# tail -f /var/log/ha-log
gateN:~# cl_status nodestatus gateN.corpX.un
Настроить автоматическую синхронизацию домашних каталогов с мастер узла на
резервный с использованием сети кросс кабеля.
Запустить rsync на gate1.
Указываем в файле /etc/hosts имя slave указывающее на соседний сервер
gate1:~# nano /etc/hosts
...
10.0.0.2 slave
...
gate2:~# nano /etc/hosts
...
10.0.0.1 slave
...
Устанавливаем на gate1 Пакет RSYNC
Изменяем диррекпивы в фойлах настройки
gateN:~# nano /CHANGE/DIR/rsyncd.conf
...
hosts allow = slave
проверяем
gateN:~# rsync slave::home
Добавляем автозапуск синхронизации каждую минуту
gateN:~# crontab -e
FreeBSD
* * * * * ps ax | grep -v grep | grep -q 'ftpd -D' && /usr/local/bin/rsync \
-a /home/ slave::home
Ubuntu
* * * * * ps ax | grep -v grep | grep -q 'proftpd: (accepting connections)' && /usr/bin/rsync \
-a /home/ slave::home
Подключаемся из винды, при помощи WinSCP подключаемся на www и редактируем файл index.htm,
через минуту файли на gate1 b gate2 должны быть одинаковы.
Синхронизация файловых систем (зеркалирование):
!!! Проверять на отказоустойчивость дожидаясь синхронизации.
Сценарий: Создаем отказоустойчивый корпоративный файловый сервер. Второй узел кластера
должен использоваться сервером по умолчанию.
Подключаем к обоим узлам по дополнительному физическому диску диску (для создания зеркал).
DRBD (Ubuntu)
Подготовка узлов:
Добавляем жесткие диски, создаем точки монтирования.
Смотрим какие диски подключены
gateN:~# lshw -C disk
Создаем директорию для монтирования зеркалируемого диска
gateN:~# mkdir /disk2
Установка и настройка
gateN:~# apt-get install drbd8-utils
gateN:~# nano /etc/drbd.d/global_common.conf
...
syncer {
# rate after al-extents use-rle cpu-mask verify-alg csums-alg
# Скорость зеркалирования 10Mb/s
rate 10M;
}
}
Редактируем основной файл конфигурации
gateN:~# nano /etc/drbd.d/r0.res
resource r0 {
on gate1.corpX.un {
device /dev/drbd0;
disk /dev/sdb;
# disk /dev/sdb1;
address 10.0.0.1:7788;
meta-disk internal;
}
on gate2.corpX.un {
device /dev/drbd0;
disk /dev/sdb;
# disk /dev/sdb1;
address 10.0.0.2:7788;
meta-disk internal;
}
}
Создаем мета информацию
gateN:~# drbdadm create-md r0
Стартуем одновременно на двух узлах (из родних консолей):
gateN:~# /etc/init.d/drbd start
смотрим запущен ли drbd
gateN:~# ps ax | grep drbd
назначаем первый узел gate1 - primary
gate1:~# drbdadm -- --overwrite-data-of-peer primary r0
проверяем
gateN:~# cat /proc/drbd
Можно не ожидая синхронизации создать файловую систему и смонтировать:
gate1:~# mkfs.ext3 /dev/drbd0
gate1:~# mount /dev/drbd0 /disk2
Смена ролей узлов (после окончания синхронизации):
для провеки копируем что-то
gate1:~# cp /etc/hostname /disk2
gate1:~# umount /disk2
gate1:~# drbdadm secondary r0
gate2:~# drbdadm primary r0
gate2:~# mount /dev/drbd0 /disk2
смотрум уже на второй машине gate2
gate2:~# cat /disk2/hostname
Отключение зеркалируемого раздела:
gate2:~# umount /disk2
gate2:~# drbdadm secondary r0
Восстановление после сбоя:
Устанавливаем новый диск
gateNEW:~# fdisk /dev/sdb
n
p
1
<enter>
<enter>
w
gateNEW:~# drbdadm create-md r0
gateNEW:~# /etc/init.d/drbd start
HEARTBEAT + DRBD
gateN:~# /etc/init.d/heartbeat stop
gateN:~# nano /etc/ha.d/haresources
gate2.corpX.un drbddisk Filesystem::/dev/drbd0::/disk2::ext3
gateN:~# /etc/init.d/heartbeat start
HAST (FreeBSD)
Подготовка узлов:
Добавляем жесткие диски, создаем точки монтирования.
gateN:~# dmesg
gateN:~# mkdir /disk2
Настройка узлов
gateN:~# nano /etc/hast.conf
resource r0 {
on gate1 {
local /dev/ad1
# local /dev/ad1s1d
remote 10.0.0.2
}
on gate2 {
local /dev/ad1
# local /dev/ad1s1d
remote 10.0.0.1
}
}
gateN:~# nano /etc/rc.conf
...
hastd_enable=yes
gateN:~# /etc/rc.d/hastd start
Инициализация:
gateN:~# hastctl create r0
gate1:~# hastctl role primary r0
gate2:~# hastctl role secondary r0
gateN:~# hastctl status
gate1:~# newfs /dev/hast/r0
gate1:~# mount /dev/hast/r0 /disk2
gate1:~# cp /etc/rc.conf /disk2/
Смена ролей узлов кластера:
gate1:~# umount /disk2
gate1:~# hastctl role secondary r0
gate2:~# hastctl role primary r0
gate2:~# fsck -y -t ufs /dev/hast/r0
gate2:~# mount /dev/hast/r0 /disk2
Отключение зеркалируемого раздела:
gate2:~# umount /disk2
gate2:~# hastctl role secondary r0
Дополнительные материалы:
Решение ситуации split brain
Выбираем узел, данные которого будут затерты.
gateZ:~# hastctl create r0
gateZ:~# hastctl role secondary r0
gateM:~# hastctl role primary r0
gateZ:~# hastctl status
gateM:~# hastctl status
HEARTBEAT + HAST
Состояние init возникает при запуске hastd на secondary узле, если он
остановился и стартует раньше primary.
Ситуация Split-Brain возникает при запуске hastd на secondary узле, если он остановился
позже primary и heartbeat успел его назначить primary, а запускаются оба узла синхронно
и heartbeat считает что primary должен оставаться прежним.
gateN:~# /usr/local/etc/rc.d/heartbeat stop
gateN:~# nano /usr/local/etc/ha.d/resource.d/hast
#!/bin/sh
case $1 in
status)
hastctl status r0 | grep -q 'role: init' && hastctl role secondary r0
;;
start)
hastctl role primary r0
sleep 5
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
gateN:~# chmod +x /usr/local/etc/ha.d/resource.d/hast
gateN:~# nano /usr/local/etc/ha.d/haresources
gate2.corpX.un hast
gateN:~# /usr/local/etc/rc.d/heartbeat start
Samba как файловый сервер с пуюличным каталогом доступным на запись:
gateN:~# nano /var/cache/bind/corpX.un
...
samba A 192.168.X.20
Установка
FreeBSD
[gateN]# pkg_add -r samba3
[gateN]# nano /etc/rc.conf
…
nmbd_enable="YES"
smbd_enable="YES"
winbindd_enable="NO"
…
[gateN]# rehash
[gateN]# /usr/local/etc/rc.d/samba start
[gateN]# сd /usr/local/etc/
Ubuntu
gateN:~# apt-get install samba
gateN:~# cd /etc/samba/
gateN:~# mv smb.conf smb.conf.old
Окно аутентификации возникает в случае совпадения имени пользователя Windows с пользователем
зарегистрированным в /etc/passwd
gateN:~# nano /etc/samba/smb.conf
[global]
# Типы кодировок
unix charset = UTF-8
dos charset = cp866
# Рабочая группа
workgroup = OFFICE.AT
# Тип авторизации
security = user
# Разрешаем только из конкретной сети
hosts allow = 10.0.0.
# Мапим на..
map to guest = Bad User
[share]
# Путь к каталогу шары
path = /var/samba
# Разрешаем общий доступ
guest ok = yes
# Разрешаем запись
read only = no
# Мапим на..
force user = nobody
gateN:~# chown -R nobody /var/samba
gateN:~# testparm
Для FreeBSD не включаем, для Ubuntu отключаем автоматический запуск сервиса
gateN:~# nano /etc/init/smbd.conf
...
#start on ...
#stop on ...
...
gateN:~# nano /etc/init/nmbd.conf
...
#start on ...
#stop on ...
...
gateN:~# stop smbd
Настраиваем heartbeat на монтирование на мастер узле зеркалируемого раздела в каталог /disk2,
назначение ip адреса 192.168.X.20 и запуск сервера samba
Ubuntu
gateN:~# /etc/init.d/heartbeat stop
gateN:~# nano /etc/ha.d/haresources
gate2.corpX.un \
drbddisk \
Filesystem::/dev/drbd0::/disk2::ext3 \
IPaddr::192.168.X.20 \
smbserv
gateN:~# nano /etc/ha.d/resource.d/smbserv
#!/bin/sh
case $1 in
start)
start smbd
;;
stop)
stop smbd
;;
esac
exit 0
root@gateN:~# chmod +x /etc/ha.d/resource.d/smbserv
root@gateN:~# /etc/init.d/heartbeat start
FreeBSD
[gateN:~]# /usr/local/etc/rc.d/heartbeat stop
[gateN:~]# nano /usr/local/etc/ha.d/haresources
gate2.corpX.un \
hast \
IPaddr::192.168.X.20 \
smbserv
[gateN:~]# nano /usr/local/etc/ha.d/resource.d/smbserv
#!/bin/sh
case $1 in
start)
sleep 10
/usr/local/etc/rc.d/samba onestart
;;
stop)
/usr/local/etc/rc.d/samba onestop
;;
esac
exit 0
[gateN:~]# chmod +x /usr/local/etc/ha.d/resource.d/smbserv
[gateN:~]# /usr/local/etc/rc.d/heartbeat start
Проверяем целостность зеркала
FreeBSD
master:~# hastctl status
Ubuntu
master:~# cat /proc/drbd
Останавливаем MASTER сервер и дожидаемся монтирования на SLAVE узле "половины" зеркалируемого
раздела в каталог /disk2, назначение ip адреса 192.168.X.20 и запуск сервера samba.
Запускаем бывший MASTER узел и дожидаемся восстановления целостности зеркала
Универсальное решение (виртуальные машины)
Подготовка
Проверять на отказоустойчивость останавливая системы (init 0)
Проверять на отказоустойчивость дожидаясь синхронизации
В зону corpX.un добавляем запись (mail A 192.168.X.30)
gateN:~# nano /var/cache/bind/corpX.un
...
mail A 192.168.X.30
Останавливаем heartbeat
gateN:~# /etc/init.d/heratbeat stop
проверяем
gateN:~# cat /proc/drbd
Монтируем /disk2 раздел на MASTER (gate1) узле, решение DRBD или решение HAST в зависимости от системы сответственно
gateN:~# nano /etc/ha.d/haresources
gate1.corpX.un \
drbddisk \
Filesystem::/dev/drbd0::/disk2::ext3
Запускаем и проверяем смонтировался ли раздел
gateN:~# /etc/init.d/heartbeat start
gateN:~# cat /proc/drbd
На первом ресурсе должен быть смонтирован /disk2
...
Primary/Secondary UpToDate/ UpToDate
...
Подготовка родительских узлов
LXC (Ubuntu)
Подготавливаем сеть для гостевых систем на обоих узлах для интерфейса LAN
eth0
gateN:~# apt-get install bridge-utils
gateN:~# ifdown eth0
gateN:~# nano /etc/network/interfaces
...
auto br0
iface br0 inet static
address 192.168.X.N
netmask 255.255.255.0
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
post-up /usr/sbin/brctl setfd br0 0
...
gateN:~# ifup br0
проверяем – из винды пингуем 192.168.X.1
Исправляем имена сетевых (/etc/rc.local) и dhcp (/etc/default/dhcp3-server) eth0 на br0
gateN:~# nano /etc/default/dhcp3-server
...
INTERFACES=”br0”
gateN:~# killall ucarp
gate1:~# nano /etc/rc.local
ucarp -i br0 -s 192.168.X.1 -v 1 -p secret -a 192.168.X.254 \
-u /etc/vip-up.sh -d /etc/vip-down.sh -z -B
gate2:~# nano /etc/rc.local
ucarp -i br0 -s 192.168.X.2 -v 1 -p secret -a 192.168.X.254 \
-u /etc/vip-up.sh -d /etc/vip-down.sh -z -B
Запускаем carp
gateN:~# /etc/init.d/hertbeat start
Установка утилит lxc (виртуализация линукс контейнеров) и настройка поддержки lxc на обоих узлах
gateN:~# apt-get install lxc
создаем точку монтирования, используется для хранения выделяемых ресурсов для виртуальной машины
gateN:~# mkdir /cgroup
не копировать редактировать индивидуально на каждой машине
gateN:~# nano /etc/fstab
...
none /cgroup cgroup defaults 0 0
gateN:~# mount /cgroup
Проверяем, на первом ресурсе должен быть смонтирован /disk2.
gate1:~# cat /proc/drbd
...
Primary/Secondary UpToDate/ UpToDate
...
Готовимся - все, относящееся к виртуальным системам, хранить на зеркалируемом разделе
gateN:~# rmdir /var/lib/lxc/
gateN:~# ln -s /disk2/var/lib/lxc/ /var/lib/lxc
Подготовка виртуальных машин
LXC (Ubuntu). Инсталлируем виртуальные системы в зеркалируемый раздел.
Создаем ветку гостевой системы
gate1:~# apt-get install debootstrap
gate1:~# mkdir -p /disk2/var/lib/lxc/
Утилита позволяет выкачать минимальный (в данном случае) вариант --variant=minbase
дистребутива lucid под указанную архитектуру --arch i386 в конкретную папку /var/lib/lxc/mail/rootfs
из конкретного репозитория http://rep/ubuntu/.
gate1:~# debootstrap --variant=minbase --arch i386 lucid /var/lib/lxc/mail/rootfs http://rep/ubuntu/
gate1:~# cp /etc/hosts /var/lib/lxc/mail/rootfs/etc/
gate1:~# cp /etc/apt/sources.list /var/lib/lxc/mail/rootfs/etc/apt/
Устанавливаем ПО в гостевой системе на MASTER узле
Переходим в каталог с выкачанной системой:
gate1:~# chroot /var/lib/lxc/mail/rootfs/ /bin/bash
Меняем приглашение (чтобы не запутаться)
gate1:~# PS1='mail:\w# '
Обновляем базу данных репозитория
mail:/# apt-get update
принудительно если надо
mail:/# apt-get install --force-yes -y gpgv
mail:/# apt-get update
mail:/# apt-get -y install language-pack-en
mail:/# update-locale LANG="en_US.UTF-8" LANGUAGE="en_US.UTF-8" LC_ALL="en_US.UTF-8" LC_CTYPE="C"
mail:/# apt-get install -y vim nano telnet natcat inetutils-ping ssh rsyslog cron
Настраиваем hostname, hosts, DNS client и учетную запись root в гостевой системе
mail:/# nano /etc/hostname
mail.corpX.un
mail:/# nano /etc/hosts
...
192.168.X.30 mail.corpX.un
mail:/# nano /etc/resolv.conf
search corpX.un
nameserver 192.168.X.1
nameserver 192.168.X.2
Установим пароль дочерней системы (123)
mail:/# passwd
Настройка процесса загрузки дочерней системы
mail:/# cd /etc/init
mail:/etc/init# rm -f console* control* hwclock* module* mount* network-interface*
mail:/etc/init# rm -f plymouth* procps* tty* udev* upstart*
mail:/etc/init# rm rc-sysinit.conf
mail:/etc/init# nano rc-sysinit.conf
start on startup
pre-start script
route add default gw 192.168.X.254
# /etc/init.d/postfix start
end script
post-stop script
# /etc/init.d/postfix stop
end script
mail:/etc/init# nano ssh.conf
...
start on startup
...
ail:/etc/init# nano rsyslog.conf
...
start on startup
...
mail:/etc/init# nano cron.conf
...
start on startup
...
Выход из ветки файлов дочерней системы
mail:/etc/init# exit
Настраиваем lxc для запуска гостевой системы в контейнере на MASTER узле
gate1:~# nano /var/lib/lxc/mail/config
lxc.utsname = mail
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.name = eth0
lxc.network.mtu = 1500
lxc.network.ipv4 = 192.168.X.30/24
lxc.rootfs = /var/lib/lxc/mail/rootfs
lxc.mount = /var/lib/lxc/mail/fstab
gate1:~# nano /var/lib/lxc/mail/fstab
none /var/lib/lxc/mail/rootfs/dev/pts devpts defaults 0 0
none /var/lib/lxc/mail/rootfs/proc proc defaults 0 0
none /var/lib/lxc/mail/rootfs/sys sysfs defaults 0 0
none /var/lib/lxc/mail/rootfs/var/lock tmpfs defaults 0 0
none /var/lib/lxc/mail/rootfs/var/run tmpfs defaults 0 0
gate1:~# lxc-info -n mail
запустить линукс контейнер
gate1:~# lxc-start -n mail -d
посмотреть какие линукс контейнеры запущены
gate1:~# lxc-info -n mail
'mail' is RUNNING
посмотреть процессы внутри линукс контейнера
gate1:~# lxc-ps --name mail
подрлючится по ssh
gate1:~# ssh mail
для проверки
mail:/ apt-get update
остановить
gate1:~# lxc-stop -n mail
gate1:~# umount /disk2
HEARTBEAT + LXC
Убеждаемся что контейнер остановлен
gate1:~# lxc-info -n mail
'mail' is STOPPED
gateN:~# /etc/init.d/heartbeat stop
gateN:~# cat /proc/drbd
...
Secondary /Secondary UpToDate/ UpToDate
...
gateN:~# nano /etc/ha.d/resource.d/lxcserv
#!/bin/sh
case $1 in
start)
lxc-start -n mail -d
;;
stop)
lxc-stop -n mail
;;
esac
даем бит выполнения
gateN:~# chmod +x /etc/ha.d/resource.d/lxcserv
gateN:~# nano /etc/ha.d/haresources
gate1.corpX.un \
drbddisk \
Filesystem::/dev/drbd0::/disk2::ext3 \
lxcserv
gateN:~# /etc/init.d/heartbeat start
jail (FreeBSD)
Инсталлируем исходные тексты системы
[gate1:~]# freebsd-update fetch
[gate1:~]# freebsd-update install
Создаем виртуальную машину только на MASTER узле
[gate1:~]# cd /usr/src
[gate1:/usr/src]# mkdir -p /disk2/jail/mail
[gate1:/usr/src]# make installworld DESTDIR=/disk2/jail/mail
[gate1:/usr/src]# make distribution DESTDIR=/disk2/jail/mail
Настраиваем параметры виртуальной машина на обоих узлах (без автозапуска)
[gateN:~]# nano /etc/rc.conf
...
jail_enable="NO"
jail_list="mail"
jail_mail_rootdir="/disk2/jail/mail"
jail_mail_hostname="mail.corpX.un"
jail_mail_interface="em0"
jail_mail_ip="192.168.X.30"
jail_mail_devfs_enable="YES"
jail_mail_devfs_ruleset="devfsrules_jail"
[gateN:~]# nano /etc/sysctl.conf
...
security.jail.allow_raw_sockets=1
[gateN:~]# sysctl security.jail.allow_raw_sockets=1
Тестируем виртуальную машину на MASTER узле
[gate1:~]# /etc/rc.d/jail onestart mail
[gate1:~]# jls
[gate1:~]# jexec NNN csh
mail# nano /etc/resolv.conf
nameserver 192.168.X.1
nameserver 192.168.X.2
mail# nano /etc/rc.conf
sshd_enable=yes
mail# adduser
...
student
mail# ping ya.ru
mail# telnet ya.ru 80
Trying 213.180.204.8...
Connected to ya.ru.
Escape character is '^]'.
[gate1:~]# /etc/rc.d/jail onestop mail
[gate1:~]# umount /disk2
HEARTBEAT + Jail
[gateN:~]# /usr/local/etc/rc.d/heartbeat stop
[gateN:~]# nano /etc/rc.conf
...
jail_enable="NO"
...
[gateN:~]# cat /usr/local/etc/ha.d/resource.d/jailserv
#!/bin/sh
case $1 in
start)
sleep 10 # for HAST init
/etc/rc.d/jail onestart mail
;;
stop)
/etc/rc.d/jail onestop mail
;;
esac
exit 0
[gateN:~]# chmod +x /usr/local/etc/ha.d/resource.d/jailserv
[gateN:~]# cat /usr/local/etc/ha.d/haresources
gate1.corpX.un hast jailserv
[gateN:~]# /usr/local/etc/rc.d/heartbeat start
Настраиваем виртуальную систему как сервер электронной почты или как любой другой сервер.