Jump to content
iT4iT.CLUB
Sign in to follow this  
Maerhekil

Отказоустойчивоcть динамической настройки узлов с распределением нагрузки

Recommended Posts

Распространённая проблемка, когда при падении сервера на котором развёрнут DHCP наступает неприятная ситуация в общении с пользователями. Довольно просто предотвратить данную ситуацию развёртыванием дублирующего DHCP на другом сервере в локальной сети. Что мы сейчас и проделаем, правда начнём просто с настройки, считая что у вас уже есть установленные два сервака на FreeBSD

Первичный сервер:

Для удобства дробим конфигурационный файл на несколько. У нас получается три файла с таким содержимым.

/usr/local/etc/dhcpd.conf :
 

option domain-name "mycompany.local";
option domain-name-servers 10.0.0.2, 10.0.0.3;
option subnet-mask 255.255.255.0;

default-lease-time 86400;
max-lease-time 604800;
ddns-update-style none;
authoritative;

subnet 10.0.0.0 netmask 255.255.255.0 {
option routers 10.0.0.1;
interface em0;
   pool {
         failover peer "mynetwork";
         range 10.0.0.20 10.0.0.250;
        }
}

include "/usr/local/etc/dhcpd-primary";

include "/usr/local/etc/dhcpd-hold";

Что мы тут имеем в первом и так сказать главном файле конфигурации:

option domain-name "mycompany.local"; - Задаём доменное имя, которое клиенты будут использовать при запросах к DNS. Если имена разрешены.

option domain-name-servers 10.0.0.2, 10.0.0.3; - Собственно, адреса DNS серверов в сети.

option subnet-mask 255.255.255.0; - Сетевая маска локальной сети где будет находится DHCP сервер.

default-lease-time 86400; - Период времени по умолчанию в секундах, на который будет выданный адрес закреплён за устройством.

max-lease-time 604800; - Максимальный период времени в секундах, на который будет выданный адрес закреплён за устройством.

subnet 10.0.0.0 netmask 255.255.255.0 - Подсеть с её маской.

option routers 10.0.0.1; - Шлюз сети.

interface em0; - На каком интерфейсе слушать запросы и отвечать с которого.

Далее описание пула для выдачи адресов:

failover peer "mynetwork"; - название.

range 10.0.0.20 10.0.0.250; - диапазон адресов для выдачи клиентам.

Влючаем в конфиг другие файлы конфигурации:

include "/usr/local/etc/dhcpd-primary";

include "/usr/local/etc/dhcpd-hold";

Далее /usr/local/etc/dhcpd-primary :

 

failover peer "mynetwork" {
        primary;
        address 10.0.0.4;
        port 647;
        peer address 10.0.0.5;
        peer port 647;
        max-response-delay 60;
        max-unacked-updates 10;
        mclt 3600;
        split 128;
        load balance max seconds 3;
 }

Это описание самой технологии failover, что мы имеем тут:

primary; - К какому серверу DHCP относится этот файл, грубо говоря :-) . В данном случае к  первичному.

address 10.0.0.4; - Его адрес в сети

port 647; - Порт? :-)

peer address 10.0.0.5; - Адрес вторичного сервера в сети.

peer port 647; - Его порт.

max-response-delay 60; - Ожидание в секундах ответа первичным сервером от вторичного. По истечении считает его недоступным.

max-unacked-updates 10; - Непонятная хрень. Максимальное количество несанкционированных обновлений?

mclt 3600; - Время в секундах, по истечении которого продлевается или прекращается аренда без синхронизации.

split 128; - Нужно для балансировки.

load balance max seconds 3; - Время в секундах, по истечении балансировка прекращается.

Топаем дальше /usr/local/etc/dhcpd-hold . Это файл со статическими назначениями ip-адресов в соответствии с mac-адресами. Приведу только один пример:

host BLA-BLA { hardware ethernet FF:FF:FF:FF:FF:FF; fixed-address 10.0.0.81;}

BLA-BLA - описание хоста

FF:FF:FF:FF:FF:FF - Mac-адрес сетевой карты

10.0.0.81 - Закреплённый ip-адрес

Ну в принципе с первичным сервером закончили. 

Перейдём к вторичному.

/usr/local/etc/dhcpd.conf  У нас немного меняются только две строчки:

include "/usr/local/etc/dhcpd-secondary";
include "/usr/local/etc/dhcpd-hold-nowrite";

Но это при условии, что у нас имя сетевого интерфейса такое-же, в данном случае em0 .

Далее /usr/local/etc/dhcpd-secondary

failover peer "mynetwork" {
        secondary;
        address 10.0.0.5;
        port 647;
        peer address 10.0.0.4;
        peer port 647;
        max-response-delay 60;
        max-unacked-updates 10;
        mclt 3600;
        load balance max seconds 3;
 }

Ну и последний, создаём /usr/local/etc/dhcpd-hold-nowrite . Это тот-же dhcpd-hold, там ничего не меняется.

В принципе всё готово. Запускаем, и радуемся жизни. Но радость была недолгой ибо неудобно после каждой правки перезапускать два сервака ручками, мы сразу захотели автоматизацию. Но это уже совсем другая история.

Надеюсь ничего не упустил, у меня бывает. Если это так, пишите.

Удачи.

 

  • Like 1

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

  • Similar Content

    • By Maerhekil
      Так получилось, что у меня имеются два провайдера у одного из которых я вижу внутреннюю сеть, а ещё есть Zabbix который начинает ничего мне не сообщать если я не на работе про то, что происходит если провайдер через которого он это делает "уснул".
      Встретив на просторах интернета интересный скриптик я немного модифицировал его под себя и радуюсь жизни. Сим хочу с вами поделиться.
      Имеем два шлюза с апи нашей локалки 1.1.1.1 и 1.1.1.2.
      Имееем айпи 3.3.3.3 из внутренней сети провайдера.
      Создаём рабочую директорию для скрипта в /usr/local/scripts/bin/status
      В принципе это всё что нам надо.
      #!/bin/sh FPING="/usr/local/sbin/fping" WRKDIR='/usr/local/scripts/bin' DATE=`/bin/date` MAININET='3.3.3.3' MAIN='1.1.1.1' BACKUP='1.1.1.2' main_status_old=`/bin/cat $WRKDIR/status/main | /usr/bin/awk '{ print $1 }'` main_try=`/bin/cat $WRKDIR/status/main | /usr/bin/awk '{ print $2 }'` router=`/bin/cat $WRKDIR/status/router` main_status_new=`$FPING $MAININET | /usr/bin/awk '{ print $3 }'` back_status=`$FPING $BACKUP | /usr/bin/awk '{ print $3 }'` if [ $main_status_new != 'alive' ] then { if [ $router = 'main' ] then { if [ $back_status = 'alive' ] then { if [ $main_try != 0 ] then { route change default 1.1.1.2 echo 'backup' > $WRKDIR/status/router } else { main_try=`expr $main_try + 1` echo "$main_status_new $main_try" > $WRKDIR/status/main } . fi } fi } fi . } else { if [ $router = 'backup' ] then { route change default 1.1.1.1 echo 'main' > $WRKDIR/status/router echo "$main_status_new 0" > $WRKDIR/status/main } fi } . fi Делаем статический маршрут до айпи 3.3.3.3 через шлюз 1.1.1.1
      route add -net 3.3.3.3 1.1.1.1 Добавляем этот маршрут в rc.conf
       
      static_routes="local-prov" route_local-prov="-net 3.3.3.3 1.1.1.1" Добавляем выполнение в крон по желаемому временному интервалу и радуемся тому, что сообщения о состоянии будут приходить если провайдер один отвалится. И тому что провайдер так любезен.
      Удачи!
    • By Maerhekil
      В прошлый раз мы совершили начальную настройку, в принципе всё что написано не претендует на исключительность и наверняка в каком-нибудь частном случае могут быть разные нюансы. Но, на то он и форум чтоб спросить и получить ответ, не так ли?Эта часть будет короткой ибо DHCP для внутренней сети настраивается очень легко и приятно на этом устройстве.
      Итак наше устройство является центральным маршрутизатором для нашей сети, ещё не полноценным но мы идём к этому, для этого следующим шагом поднимем на нём сервер динамической настройки узла.
      Поехали.
      Исключаем, на всякий случай несколько сетевых адресов из пула:
      home-cisco#conf t home-cisco(config)#ip dhcp excluded-address 192.168.1.1 192.168.1.10 home-cisco(config)#  
      И поднимаем свой пул адресов
      home-cisco(config)#ip dhcp pool LAN home-cisco(dhcp-config)#network 192.168.1.0 255.255.255.0 home-cisco(dhcp-config)#default-router 192.168.1.1 home-cisco(dhcp-config)#dns-server 8.8.8.8 home-cisco(dhcp-config)#end home-cisco#wr Building configuration... [OK] home-cisco#  
      Вот в принципе и всё, адресочки начнут выдаваться в диапазоне параметра network исключая первые десять адресов. Шлюз будет присваиваться исходя из параметра default-router, а DNS сервер исходя из параметра dns-server. Ваш Кэп.
      Мы закончили настройку простейшего DHCP на cisco.
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...