Инструменты пользователя

Инструменты сайта


service:keepalived

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
service:keepalived [23.03.2022 14:48] – [Конфиг] viacheslavservice:keepalived [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== Keepalived ======
 +Состоит из 2 частей:
 +  - LB, основанная на модуле ядра Linux Virtual Server (IPVS), 4 уровень OSI. Keepalived предоставляет набор проверок состояния серверов для динамического и гибкого распределения ресурсов в балансируемом пуле.
 +  - HA, основанная на Virtual Redundancy Routing Protocol (VRRP).
  
 +Машина, выполняющая роль LB в терминологии Keepalived называется //Director// или //LVS router.// Вкратце, Keepalived выполняет 2 функции - проверку состояния ресурсов и их балансировку, и обеспечение отказоустойчивости самих балансировщиков ("директоров").
 +
 +Работает как 3 процесса: родительский, отслеживающий состояние дочерних (watchdog), и дочерние - один отвечает за VRRP, другой - за проверку здоровья. Родительский каждые 5 сек шлёт hello-пакет дочерним процессам, и если они не отвечают, перезапускает их.
 +
 +Файл конфигурации по умолчанию - ''/etc/keepalived/keepalived.conf''.
 +
 +Варианты проверок:
 +  - TCP_CHECK - уровень 4, TCP Vanilla check. Если сервер не отвечает - долой из пула.
 +  - HTTP_GET -  уровень 5, ходит на URL, проверка MD5, вычисляется утилитой genhash, идущей в составе keepalived. Можно для одного сервера указывать несколько URL.
 +  - SSL_GET - то же, что и HTTP_GET, только использует SSL_соединение.
 +  - MISC_CHECK - использование самописного скрипта, который на выходе должен давать 0 или 1. Запускается на Директоре, с указанием полного пути. Если запускается с аргументами, надо заключать в двойные кавычки.
 +
 +Failover (VRRP) Framework:
 +  - Failover: создание виртуальных адресов (VIPs), это основное применение протокола VRRP.
 +  - VRRP Instance synchronization: можно настроить мониторинг состояния между 2 узлами VRRP, т. е. //VRRP sync group.// Это гарантирует, что 2 экземпляра VRRP остаются в одном и том же состоянии. Узлы в группе мониторят друг друга.
 +  - Nice Fallback
 +  - Advert Packet integrity: используется IPSEC-AH ICV.
 +  - System call: при изменении состояния VRRP (VRRP state transition), можно выполнять сторонний скрипт или программу.
 +
 +Режимы работы LB:
 +  - Виртуальный сервер через NAT. Используется, если на Директоре 2 интерфейса - один внешний, другой внутренний. Юзеры обращаются на внешний порт, и запросы транслируются на серверы в LAN, а ответы в обратном порядке. Преимущество - сервера закрыты от внешних запросов, недостаток - LB превращается в узкое место, т. к. через него ходят и запросы, и ответы. Недостаток - узким местом может стать сервер LB, т. к. весь трафик идёт через него.
 +  - Через туннель - запросы с LB на сервера идут по IP-туннелю, а ответ идёт с серверов напрямую клиентам. Недостаток - более сложная настройка сети.
 +  - Прямая маршрутизация - клиенты обращаются на VIP, а сервера шлют им ответ напрямую. Недостаток этого метода маршрутизации заключается в ограничении ARP. Чтобы настоящие серверы могли напрямую отвечать на запросы публичных пользователей, каждый реальный сервер должен использовать виртуальный IP-адрес в качестве исходного адреса при отправке ответов. В результате комбинация VIP и MAC-адресов распределяется между самим балансировщиком нагрузки, а также каждым из реальных серверов, что может привести к ситуациям, когда реальные серверы получают запросы напрямую, минуя балансировщик нагрузки при входящих запросах. Существуют методы решения этой проблемы за счет дополнительной сложности конфигурации и управляемости.
 +
 +https://www.keepalived.org/doc/introduction.html\\
 +https://www.keepalived.org/manpage.html
 +
 +===== Конфиг =====
 +
 +Простейший конфиг
 +<code bash>
 +vrrp_instance haproxy1 {
 +interface eth0
 +virtual_router_id 1
 +# to be MASTER, make priority 50 more than on other machines.
 +priority 100
 +authentication {
 +auth_type PASS
 +auth_pass 1111
 +}
 +virtual_ipaddress {
 +192.168.1.40
 +}
 +}
 +</code>
 +
 +https://www.redhat.com/sysadmin/advanced-keepalived\\
 +https://e-mc2.net/keepalived-documentation-nightmare
 +
 +''/etc/keepalived/keepalived.conf'', 2 VIP с отправкой писем при изменении статуса и отслеживанием работы сервиса с изменением веса.
 +
 +<WRAP group>
 +<WRAP half column>
 +Первичный сервер
 +<code bash>
 +global_defs {
 + notification_email {
 +   user@domain.ru
 + }
 + notification_email_from vmls-haproxy1@domain.ru
 + smtp_server mail.domain.ru
 + smtp_connect_timeout 60
 + enable_script_security
 +}
 +
 +
 +vrrp_script chk_haproxy {
 +  script "/usr/bin/killall -0 haproxy"
 +  interval 3
 +  weight 50
 +  user root
 +}
 +
 +
 +vrrp_instance haproxy_DMZ {
 +
 +  interface eth2
 +  virtual_router_id 1
 +  priority 100
 +
 +  authentication {
 +    auth_type PASS
 +    auth_pass 12345
 +  }
 +
 +  virtual_ipaddress {
 +    192.168.20.44/24
 +  }
 +
 +  track_script {
 +    chk_haproxy
 +  }
 +
 +  smtp_alert
 +
 +}
 +
 +vrrp_instance haproxy_LAN {
 +
 +  interface eth0
 +  virtual_router_id 2
 +  priority 100
 +
 +  authentication {
 +    auth_type PASS
 +    auth_pass 54321
 +  }
 +
 +  virtual_ipaddress {
 +    10.1.4.55/16
 +  }
 +
 +  track_script {
 +    chk_haproxy
 +  }
 +
 +  smtp_alert
 +
 +}
 +</code>
 +</WRAP>
 +
 +<WRAP half column>
 +Вторичный сервер
 +<code bash>
 +global_defs {
 + notification_email {
 +   user@domain.ru
 + }
 + notification_email_from vmls-haproxy2@domain.ru
 + smtp_server mail.domain.ru
 + smtp_connect_timeout 60
 + enable_script_security
 +}
 +
 +
 +vrrp_script chk_haproxy {
 +  script "/usr/bin/killall -0 haproxy"
 +  interval 3
 +  weight 50
 +  user root
 +}
 +
 +
 +vrrp_instance haproxy_DMZ {
 +
 +  interface eth2
 +  virtual_router_id 1
 +  priority 90
 +
 +  authentication {
 +    auth_type PASS
 +    auth_pass 12345
 +  }
 +
 +  virtual_ipaddress {
 +    192.168.20.44/24
 +  }
 +
 +  track_script {
 +    chk_haproxy
 +  }
 +
 +  smtp_alert
 +
 +}
 +
 +vrrp_instance haproxy_LAN {
 +
 +  interface eth0
 +  virtual_router_id 2
 +  priority 90
 +
 +  authentication {
 +    auth_type PASS
 +    auth_pass 54321
 +  }
 +
 +  virtual_ipaddress {
 +    10.1.4.55/16
 +  }
 +
 +  track_script {
 +    chk_haproxy
 +  }
 +
 +  amtp_alert
 +
 +}
 +</code>
 +</WRAP>
 +</WRAP>
 +
 +
 +
 +===== Отправка писем =====
 +Силами Postfix. При настройке выбрать Satellite system, т. е. весь почтовый трафик идёт через внешний почтовый сервер.
 +
 +Примерный конфиг ''/etc/postfix/main.cf''. В данном случае - отправка на внутрисетевой открытый релей Exchange. Запуск мастера настройки заново - ''dpkg-reconfigure postfix''.
 +<code bash>
 +# See /usr/share/postfix/main.cf.dist for a commented, more complete version
 +
 +# Debian specific:  Specifying a file name will cause the first
 +# line of that file to be used as the name.  The Debian default
 +# is /etc/mailname.
 +#myorigin = /etc/mailname
 +
 +smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
 +biff = no
 +
 +# appending .domain is the MUA's job.
 +append_dot_mydomain = no
 +
 +# Uncomment the next line to generate "delayed mail" warnings
 +#delay_warning_time = 4h
 +
 +readme_directory = no
 +
 +# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
 +# fresh installs.
 +compatibility_level = 2
 +
 +# TLS parameters
 +smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
 +smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
 +smtpd_tls_security_level=may
 +
 +smtp_tls_CApath=/etc/ssl/certs
 +smtp_tls_security_level=may
 +smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
 +
 +smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
 +myhostname = vmls-haproxy2.domain.ru
 +alias_maps = hash:/etc/aliases
 +alias_database = hash:/etc/aliases
 +mydestination = vmls-haproxy2.domain.ru, vmls-haproxy2, localhost.localdomain, localhost
 +relayhost = mail.domain.ru
 +mailbox_size_limit = 0
 +recipient_delimiter =
 +inet_interfaces = loopback-only
 +inet_protocols = ipv4
 +</code>

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki