Принцип и практика Keepalived

Java

С постепенным развитием архитектуры системы количество и структура серверов будут становиться все более сложными, например, построение кластера веб-серверов повышает производительность системы и в то же время увеличивает сложность обслуживания системы. Мониторинг осуществляется для того, чтобы убедиться, что сервер, предоставляющий услуги пользователям, работает нормально, а система в целом可用性является решающим.

Введение в Keepalived

Что такое Keepalived?

Keepalived на основеVRRPРешение высокой доступности службы LVS, реализованное протоколом, может использоваться для устранения единой точки отказа. Служба LVS будет иметь 2 сервера с Keepalived, один из которых является основным сервером (MASTER), а другой — сервером резервного копирования (BACKUP), но внешне он отображается как один.虚拟IPПервичный сервер отправит конкретное сообщение на сервер резервного копирования. Когда сервер резервного копирования не получает это сообщение, сервер резервного копирования приведет к виртуальному IP, когда основной сервер меньше, чем сообщение, и служба будет продолжать обеспечивать высокий доступность.

Роль Keepalived

Как указано выше,Keepalivedобеспечивает хороший高可用性保障服务, он может проверить состояние сервера, если есть проблема с сервером, Keepalived удалит его из системы, и использует резервный сервер для замены работы сервера в то же время, когда сервер может нормально работать , Keepalived вернет его обратно В ферме серверов этот процесс выполняется автоматически Keepalived без ручного вмешательства Нам нужно только исправить сервер с проблемой.

Принцип поддержания активности

На основе понимания протокола VRRP

Keepalived этоVRRPПротокол является основой реализации, полное название VRRPVirtual Router Redundancy Protocol,Сейчас虚拟路由冗余协议.

Протокол избыточности виртуальной маршрутизации можно рассматривать как протокол для реализации высокой доступности маршрутизаторов, то есть N маршрутизаторов, выполняющих одну и ту же функцию, образуют группу маршрутизаторов.Эта группа состоит из главного и нескольких резервных.Главный имеет поставщика услуг для внешний мир.VIP(Virtual IP Address)(Маршрут по умолчанию для других машин в локальной сети, где находится маршрутизатор, — это VIP), мастер будет отправлять многоадресную рассылку, и когда резервная копия не может получить пакет vrrp, мастер считается неработающим, и тогда ему нужно на основе приоритета VRRP.选举Резервное копирование - это мастер. Таким образом, высокая доступность маршрутизатора может быть гарантирована.

keepalived в основном состоит из трех модулей, а именно core, check и vrrp. Основной модуль поддерживает активностьосновной, отвечающий за запуск и обслуживание основного процесса, а также загрузку и анализ файлов глобальной конфигурации. check отвечает за проверку работоспособности, включая различные распространенные методы проверки. Модуль vrrp предназначен для реализации протокола VRRP.

Понимание на основе протокола TCP/IP

Взяв в качестве примера обнаружение веб-сервера, Keepalived определяет состояние сервера на 3 уровнях.

Layer3, Layer4 и Layer7 работают в стеке протоколов IP/TCP Уровень IP, уровень TCP и уровень приложений, принципы следующие:

Слой 3:

Когда Keepalived работает в режиме Layer3, Keepalived будет периодически отправлять пакет данных ICMP на сервер в группе серверов (то есть, программа Ping, которую мы обычно используем), Если обнаружит, что IP-адрес службы не активирован, Keepalived сообщить об этом server.fail и удалить его из фермы серверов, типичным примером такой ситуации является незаконное отключение сервера. Метод Layer3 основан на сервереIP地址Является ли это допустимым критерием того, работает ли сервер должным образом или нет.

Layer4:

Layer4 легко, если вы понимаете способ Layer3. Layer4 в основном основан наTCP 端口的状态чтобы решить, работает ли сервер должным образом или нет. Например, служебный порт веб-сервера обычно равен 80. Если Keepalived обнаружит, что порт 80 не запущен, Keepalived удалит этот сервер из группы серверов.

Стрэй7:

Уровень 7 работает на определенном прикладном уровне, который немного сложнее, чем уровень 3 и уровень 4, и требует большей полосы пропускания в сети. Keepalived проверит, нормально ли работает серверная программа в соответствии с настройками пользователя, и если она не соответствует настройкам пользователя, Keepalived удалит сервер из группы серверов.

Keepalived 双机主备原理

Политика поддержки активности

предвыборная стратегия

Во-первых, каждый узел имеет начальный приоритет, определяемыйpriorityЭлемент конфигурации указывает, что приоритет узла MASTER должен быть выше, чем у BAKCUP. keepalived во время работы по vrrp_scriptweightУстановите, увеличьте или уменьшите приоритет узла. Правила следующие:

  1. weightКогда значение положительное, значение «вес» будет добавлено к «приоритету» при успешном обнаружении скрипта и не будет добавлено при сбое обнаружения.
    • Основной отказ: переключение, когда основной приоритет
    • Мастер преуспевает: когда сумма основного приоритета + вес> сумма резервной приоритеты + вес, мастер по-прежнему является мастером, то есть никакого переключения не происходит.
  2. weightКогда это отрицательное число, «вес» не влияет на «приоритет» при успешном обнаружении скрипта, а при неудачном обнаружении вес главного узла будет разницей между значением «приоритет» и «весом». ценность
    • Первичный сбой: переключение происходит, когда первичный приоритет-abs(вес)
    • Первичный успех: первичный приоритет> вторичный приоритет не переключается
  3. Когда два узла имеют одинаковый приоритет, отправить как узелVRRP通告IP используется в качестве объекта сравнения, а больший IP является ГЛАВНЫМ.

Установка приоритета и веса

  1. Начальный приоритет приоритета ведущий-ведомый и настройка веса изменения очень важны, если несоответствие неправильное, переключение ведущий-ведомый не может быть выполнено. Например, если начальное значение MASTER установлено слишком высоким, даже если сценарий не удается выполнить, он больше, чем приоритет + вес BACKUP, и дрейф VIP не может быть выполнен.
  2. Таким образом, установка значений приоритета и веса должна следовать: абс (приоритет ГЛАВНЫЙ - приоритет BAKCUP)

Keepalived практический продвинутый

Установка и развертывание Keepalived

  1. Загрузите установочный пакет

Адрес загрузки официального сайта Keepalived:woohoo.keepalive.org/download.contracts…

image-20200521210358933

  1. распаковать

    tar -zxvf keepalived-2.0.18.tar.gz
  2. После распаковки перейдите в распакованный каталог и увидите, что там будетconfigure, то можно заняться настройкой (установка конфигурации точно такая же, как и у nginx)

    image-20200521210723704

  3. использоватьconfigureКоманда для настройки каталога установки и расположения основного файла конфигурации

    ./configure --prefix=/usr/local/keepalived --sysconf=/etc
    • префикс: место, где установлена ​​поддержка активности
    • sysconf: расположение файла конфигурации ядра поддержки активности, фиксированное местоположение, если вы измените его на другое местоположение, поддержка активности не запустится, и в /var/log/messages будет сообщено об ошибке.

    Предупреждающие сообщения могут появляться во время настройки следующим образом:

    image-20200521211303189

    Обходной путь: установите зависимости libnl/libnl-3yum -y install libnl libnl-devel,сноваconfigureМомент.

  4. установить поддержку активности

    make && make install
  5. Входить/etc/keepalived, этот каталог является файлом конфигурации ядра поддержки активности.

Конфигурация поддержки активности

Зарегистрируйте Keepalived как системную службу

Введите распакованный установочный пакетetcпапка

image-20200521222326891

Скопируйте файл конфигурации системы в системуetcдокумент

cp init.d/keepalived /etc/init.d/
cp sysconfig/keepalived /etc/sysconfig/

Обновите системные службы и загрузите недавно добавленную службу Keepalived.

systemctl daemon-reload

Конфигурация главного сервера

  1. по командеvim keepalived.confОткройте файл конфигурации, подробная конфигурация выглядит следующим образом
global_defs {
   # 路由id:当前安装keepalived的节点主机标识符,保证全局唯一
   router_id keep_104
}

vrrp_instance VI_1 {
    # 表示状态是MASTER主机还是备用机BACKUP
    state MASTER
    # 该实例绑定的网卡名称
    interface ens33
    # 保证主备节点一致即可
    virtual_router_id 51
    # 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
    priority 100
    # 主备之间同步检查时间间隔,单位秒
    advert_int 2
    # 认证权限密码,防止非法节点进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟出来的ip,可以有多个(vip)
    virtual_ipaddress {
        192.168.1.108
    }
}

Вложение: Посмотреть название сетевой карты

image-20200521214418246

  1. Начать проверку активности

    Запустите в каталоге sbin (так же, как nginx), как показано ниже:

    image-20200521214728691

  2. Посмотреть прогресс

    ps -ef|grep keepalived

    image-20200521214838919

  3. Просмотр виртуального IP-адреса (VIP)

    Под сетевой картой ens33 есть еще одна192.168.1.108Это виртуальный IP

    image-20200521220643981

Keepalived обеспечивает высокую доступность с двойным резервированием

После настройки узла главного сервера Keepalived можно настроить узел резервного сервера.Конфигурация резервного сервера выглядит следующим образом:

global_defs {
   router_id keep_105
}

vrrp_instance VI_1 {
    # 备用机设置为BACKUP
    state BACKUP
    interface ens33
    virtual_router_id 51
    # 权重低于MASTER
    priority 80
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        # 注意:主备两台的vip都是一样的,绑定到同一个vip
        192.168.1.108
    }
}

Начать проверку активности

# 启动keepalived
systemctl start keepalived
# 停止keepalived
systemctl stop keepalived
# 重启keepalived
systemctl restart keepalived

Просмотр процессов проверки активности альтернативного сервера

image-20200522235349567

Теперь узел главного сервера192.168.1.104и запасной серверный узел192.168.1.105и накопительный виртуальный IP192.168.1.105настроен

image-20200522235637330

image-20200522235724708

Здесь я устанавливаю виртуальный IP-адрес Keepalived локально192.168.1.108сопоставляется сwww.keep.com

image-20200522235859619

Так что иди прямоwww.keep.comдля доступа к узлу главного сервера

image-20200523000014318

Когда служба Keepalived узла главного сервера недоступна (здесь я напрямую останавливаю службу Keepalived главного сервера напрямуюsystemctl stop keepalived.service, для удобства тестирования), виртуальный IP-адрес автоматически привязывается к альтернативному адресу узла сервера.

image-20200523000333384

Keepalived настраивает Nginx на автоматический перезапуск

  1. Добавлен скрипт обнаружения перезапуска Nginx.

    vim /etc/keepalived/check_nginx_alive_or_not.sh
    #!/bin/bash
    
    A=`ps -C nginx --no-header |wc -l`
    # 判断nginx是否宕机,如果宕机了,尝试重启
    if [ $A -eq 0 ];then
        /usr/local/nginx/sbin/nginx
        # 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
        sleep 3
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
            killall keepalived
        fi
    fi

    Увеличить права доступа

    chmod +x /etc/keepalived/check_nginx_alive_or_not.sh

  2. Настройте скрипт состояния регулярного мониторинга nginx в keepalived.conf

    vrrp_script check_nginx_alive {
        script "/etc/keepalived/check_nginx_alive_or_not.sh"
        interval 2 # 每隔两秒运行上一行脚本
        weight 10 # 如果脚本运行成功,则升级权重+10
        # weight -10 # 如果脚本运行失败,则升级权重-10
    }
  3. существуетvrrp_instanceДобавлены скрипты мониторинга в

    track_script {
        check_nginx_alive   # 追踪 nginx 脚本
    }
  4. Перезапустите Keepalived, чтобы файл конфигурации вступил в силу.

    systemctl restart keepalived

Keepalived обеспечивает высокую доступность с двойным активным горячим резервированием

image-20200523004644961

Во-первых, вам необходимо настроить конфигурацию разрешения DNS и балансировку нагрузки облачной службы.Для получения подробной информации о настройке см.:

Подробная конфигурация Keepalived с двойным активным горячим резервированием:

Правило: сгруппировано по виртуальному ip, сгруппированному в один и тот же маршрут

Конфигурация главного узла

global_defs {
   router_id keep_104
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.108
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.138
    }
}

Альтернативная конфигурация узла

global_defs {
   router_id keep_105
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.108
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.138
    }
}

Справочная документация

  • Woohoo. Hu Weihuang.com/Linux-notes…Я Сяохай, который любит учиться и делиться. Спасибо, что заглянули и прочитали. Я надеюсь, что у нас будет больше обменов друг с другом. Наконец, я пришлю вам девиз моей жизни: Если нет цели в качестве поддержки, и только иллюзорное воображение, чтобы улучшить себя, тогда мы будем любить актерское мастерство, вы будете чувствовать, что вы не в себе.

Итак, какова ваша цель?

Категории