в предыдущем постеОсновное вводное руководство по Nginx, написанное для серверной части: реальный бойВ статье, начиная с собственно кода, мы примерно объяснили структуру конфигурационного файла Nginx, а также часто используемые функции, такие как сложный баланс, обратный прокси и простая настройка динамического и статического разделения. конечно нет, просто возьмем балансировку нагрузки в качестве примера, помните картинку, которую мы давали про обратный прокси в основах? Мы вносим в него небольшую модификацию и превращаем в нашу диаграмму балансировки нагрузки, как показано на следующем рисунке:
В начале проблем не обнаружил.Запрос проходит через наш сервер балансировки нагрузки и распределяется по разным серверам для обработки по разным стратегиям.Даже если один сервер зависнет, другие сервера продолжат его топить.,такая логика почти идеально, и моей маме больше не нужно беспокоиться о том, что огромный запрос приведет к сбою моего сервера.
и т.д,Под, казалось бы, спокойным озером часто бывает неспокойно., Точка знаний, друзья, возможно, вам придется проверить на собеседовании
Однако, в случае, если наш сервер балансировки нагрузки зависнет, не будет ли это полностью GG?
Бля, блять, блять, почему я не подумал об этом, что мне делать?
Не паникуйте, есть лучшие стратегии сверху и контрмеры снизу.Солдаты приходят, чтобы блокировать, а вода приходит, чтобы скрыть.Чтобы предотвратить такую ситуацию удушения, кто-то предложил другой способ мышления.Что не так ли? Это на самом деле очень просто, у вас нет Есть только один сервер балансировки нагрузки? Я не могу играть, если он зависнет. Я могу получить два сервера балансировки нагрузки. Если один выйдет из строя, могу ли я продолжать использовать другой? Хахахахахахахахахахахахахахахахахахахахахахахаха, вонючий брат, так никак, поэтому картинка выше становится такой:
Когда мы инициируем запрос к серверу, используемые адреса — это не IP-адреса двух настроенных нами серверов Nginx, а установленные нами виртуальные IP-адреса, а адреса двух серверов Nginx называются нашими рабочими IP-адресами. Например, на наш основной сервер Nginx приходит 5 запросов (похоже, я никогда не видел большой сцены), наш основной сервер Nginx видит столько запросов, так что.
Ах, столько просьб, я умер.
Затем, поскольку два сервера Nginx настроены на этот виртуальный IP-адрес, когда основной сервер Nginx зависает, при повторном посещении мы фактически посещаем нашс сервера NginxЧтобы выполнить определенную балансировку нагрузки,IP-адрес конкретной службы также переключается с IP-адреса основного сервера Nginx на IP-адрес подчиненного сервера Nginx., весь процесс переключения IP-адресов незаметен для пользователей, что на самом деле чем-то похоже на базу данных master-slave, о которой мы часто говорим.
Тогда весь процесс смены рабочего IP адреса, в индустрии имеет очень крутое название, называетсядрейф IP.
Конечно, этот виртуальный IP-адрес не настраивается в предложении, и он также нуждается в поддержке стороннего программного обеспечения.Здесь мы используем программное обеспечение поддержки активности, чтобы гарантировать, что наш nginx может достичь конфигурации кластера с высокой доступностью.
Что такое поддержка активности?
keepalived — это сервисное ПО, обеспечивающее высокую доступность кластеров в управлении кластером, его функции аналогичныheartbeat, в основном используется для предотвращения единой точки отказа.
Ты штаны хх не снимаешь, ты лишний?Да ничего страшного, если зависнет сервер Nginx, а если зависнет твой keepalived?
Лежа, я долго думал, что кто-то может задать этот вопрос.Во-первых, наш keepalived — это просто функция балансировки нагрузки, а реальный запрос все равно передается в Nginx.Поэтому вероятность зависания keepalived намного меньше, чем у Nginx.Вероятность зависания, если и виснет, то реально никак.
Сказав это, как вы играете? Ну, тогда не будем нести чушь и смотреть прямо на вещи.
Подробное объяснение файлов установки и конфигурации keepalived:
установка поддержки активности:
Так как мы говорим о настройке кластера высокой доступности nginx, во-первых, есть много предпосылок, которые у нас должны быть. подготовить десятки серверов, два Это хорошо, ведь стоимость высока. Конечно, это не проблема для человека Ролекса, как когда-то Чжу. Во-вторых, самое основное, нам нужно установить Nginx на наши два сервера. Как Чтобы установить Nginx, вы можете перейти к моей предыдущей реальной боевой статье, поэтому, чтобы реализовать конфигурацию кластера высокой доступности Nginx, нам нужно подготовить:
- Есть два сервера, я здесь локальная виртуальная машина, и IP-адреса192.168.17.119и192.168.17.120
- Оба наших сервера должны быть установленыnginxиkeepalived
Процесс немного короткий, я вам вру, по нашим предыдущим привычкам, вот только самый простой метод установки, откройте терминалы командной строки наших двух виртуальных машин и введите команду yum для установки:
yum install keepalived –y
Подробное объяснение конфигурационного файла поддержки активности:
После того, как он установлен, то есть настроен, где находится файл конфигурации нашего keepalived? Вообще говоря, под файлом etc/keepalived/keepalived.conf открываем этот файл.Поскольку содержимого слишком много, я не буду перечислять их здесь по порядку, но такое количество конфигураций — это еще не все, что мне нужно настроить. вместо этого наша простая конфигурацияМастер-подчиненный сервер NginxНужна лишь небольшая его часть, поэтому упростим файл keepalived.conf. Упрощенное содержание выглядит следующим образом. Вы можете напрямую заменить эту часть исходного файла конфигурации:
! Configuration File for keepalived
global_defs {
##邮件相关的配置
notification_email {
###设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
#keepalived在发生诸如切换操作时需要发送email通知地址,表示发送通知的邮件源地址是谁
notification_email_from Alexandre.Cassen@firewall.loc
#指定发送email的smtp服务器
smtp_server 192.168.17.129
#设置连接smtp server的超时时间
smtp_connect_timeout 30
##这个比较重要, router_id 用来标识我们这台主机,故障发生时,发邮件时显示在邮件主题中的信息
router_id Master_Nginx
}
##检测脚本和权重参数
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" ##配置脚本的路径
interval 2 #(检测脚本执行的间隔)
weight 2 ##权重
}
vrrp_instance VI_1 {
#指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。注意这里的state指 定 instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,
#但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一 台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,
#那么他会就回抢占为MASTER
state MASTER # 备份服务器上将 MASTER 改为 BACKUP
interface eth0 ###指定HA监测网络的接口。与本机 IP 地址所在的网络接口相同,可通过ip addr 查看
virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小,一般来说,主100 备 80
advert_int 1 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置验证类型和密码。主从必须一样
auth_type PASS #设置vrrp验证类型,主要有PASS和AH两种
auth_pass 123456 #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
}
virtual_ipaddress {
192.168.17.50 ## VRRP H 虚拟地址
}
}
В нашем примере файл конфигурации в основном разделен на три блока, а именноglobal_defs,vrrp_script chk_http_portи
vrrp_instance VI_1, давайте проиллюстрируем их конкретные роли одну за другой:
Блок global_defs:
Здесь выполняются глобальные настройки, уведомления по электронной почте и другие настройки, но более важным является параметр router_id, который используется для идентификации нашего хоста.
Так как же Master_Nginx в этом примере появился в моем хост-файле:
127.0.0.1 Master_Nginx
Конечно, я выбрал Master_Nginx, и вы можете назвать свой собственный хост в соответствии со своими привычками.
блок vrrp_script chk_http_port:
Когда я вижу сценарий, разве не это означает сценарий? Да, это в основном касается конфигурации нашего сценария поддержки активности. Разве я не говорил об этом раньше, у меня должен быть способ узнать, что ваш сервер Nginx не работает, чтобы я мог перейти к переключению на альтернативный сервер, этот скрипт делает именно это. Что означает каждая строка, смотрите в комментариях:
##检测脚本和权重参数
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" ##配置脚本的路径
interval 2 #检测脚本执行的间隔,脚本每隔两秒执行一次,
weight 2 ##权重,这个权重是什么意思呢,就是当我们主Nginx服务器挂了之后,就把该服务器的权重设置成2
}
Содержимое nginx_check.sh будет размещено в конце файла конфигурации.
Блок vrrp_instance VI_1:
Третий блок более важен. Он в основном используется для настройки нашего виртуального IP-адреса. Для конкретного объяснения я уже поместил его в комментарии к коду выше. Единственное, что нужно добавить, это: virtual_ipaddress Наш виртуальный IP-адрес Их может быть больше одного, например, как мне написать два виртуальных IP, достаточно изменить строку напрямую:
virtual_ipaddress {
192.168.17.50 ## VRRP H 虚拟地址
192.168.17.51
}
Прикрепил:
Создайте наш скрипт nginx_check.sh в папке /usr/local/src/.
Содержание скрипта примерно означает, что когда мы обнаружили, что наш текущий сервер nginx не работает, мы, кстати, остановили поддержку активности, потому что оба наших сервера nginx установили поддержку активности одновременно, а один был недоступен, поэтому мы, естественно, переключились на др. На резервном сервере,Это то же самое, что смерть древнего императора, и тяжелая ответственность, естественно, ложится на кронпринца.
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
После окончания помните, что путь к этому скрипту должен совпадать со значением скрипта в конфигурационном файле, не возвращайтесь и не пишите keepalived и не можете его найти.
К этому моменту я уже закончил относительно простую часть конфигурационного файла keepalived.Не говорите, что прочитав мой туториал, вы думаете, что усвоили всю суть.На самом деле это не так.Изучайте и разбирайтесь в дальнейшем использовании .
Настройте кластер высокой доступности на практике:
На самом деле, в процессе объяснения вышеприведенного файла конфигурации мы по незнанию настроили поддержку активности нашего основного сервера Nginx на Qiao Mimi, правильно, простая конфигурация на самом деле не так уж сложна, далее нужно настроить наш резервный сервер Nginx. . В основном шаги остаются прежними.
Это все еще замена нашего конфигурационного файла, но главное для всех, что есть еще немного изменений в конфигурационных файлах резервного сервера Nginx и основного сервера Nginx.В этом примере состояние нужно изменить с MASTER на BACKUP, приоритет Приоритет изменяется со 100 на 90, а содержимое после изменения выглядит следующим образом:
vrrp_instance VI_1 {
state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
interface eth0 ##网卡,可以从ipconfig这个命令查到
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小,一般来说,主100 备 80
advert_int 1 ##心跳,秒,每隔一秒发送一个心态确认我们的Nginx服务器的存活情况
authentication { ##密码验证
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.17.50 ## VRRP H 虚拟地址
}
}
Содержимое скрипта изменять не нужно, просто загрузите его прямо в указанную директорию.
В процессе настройки следует учитывать, что виртуальный IP-адрес между первичным сервером и вторичным сервером, то есть виртуальный_ipaddress, должен быть одинаковым.
контрольная работа:
#两台服务器分别启动nginx
nginx
#分别启动keepalived 服务
#centos 7
systemctl start keepalived.service
#centos 6+
service keepalived start
Введите 192.168.17.50 в адрес браузера, и вы увидите знакомый интерфейс приветствия Nginx.
Чтобы убедиться, что keepalived действительно работает, мы вручную отключаем службы keepalived и nginx основного сервера Nginx, а затем заходим на 192.168.17.50.
Итак, мы обнаружили, что по-прежнему можем нормально обращаться к нему, и знакомый интерфейс Nginx снова предстал перед глазами, который показывает, что наш резервный сервер Nginx используется.
Вы сделали здесь.
Начнем техническое резюме:
В этой статье мы просто реализовали настройку высокодоступного кластера сервиса Nginx с помощью keepalived.Хотя конфигурация очень простая, для новичков, я думаю можно реализовать высокодоступную работу моего собственного проекта через поддержка активности и Nginx. Но это не значит, что все,keepalived поддерживает режим двойного мастера одновременно,Ввиду длины этой статьи я не буду добавлять здесь никаких дополнений,но я освоил настройку режима активный-резервный.Думаю несложно освоить настройку режима двойной-активный.Наконец-то я очень благодарен друзьям, которые прочитали эту статью. Я очень рад, что смог вам помочь. Если у вас есть какие-либо вопросы или критические замечания, оставьте сообщение под этой статьей, и я отвечу один за другим, если у меня будет время.
Все учебные заметки Хань Шу находятся в открытом доступе на github, не забудьте нажатьstarах ах ах ах ах
Тысячи рек и гор - это всегда любовь, можешь подарить мне звезду?
Добро пожаловать лайк, следуйте за мной,ешь привет фрукты(смешной)