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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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...