Автор: Джек Тиан
Публичный аккаунт: путь Джейка в ИТ (идентификатор: Jake_Internet)
Это 3-й день моего участия в Gengwen Challenge, смотрите подробности мероприятия: больше текстового задания
1. Балансировка нагрузки
Когда объем доступа к серверу больше, нагрузка на сервер будет больше.Если давление доступа превышает его собственное назначенное давление доступа, он рухнет, чтобы избежать подобных вещей, поэтому также существует балансировка нагрузки для совместного использования сервера. давление.
Итак, что именно负载均衡
Шерстяная ткань? Говоря простым языком, у нас есть десятки, сотни или даже больше серверов, и эти серверы формируются в кластер серверов, когда клиент обращается к данным определенного устройства, первый отправленный запрос отправляется на промежуточный сервер, а通过中间服务器在服务器集群中平均分摊到其他服务器中
, поэтому, когда каждый запрос, отправленный пользователем, будет保证服务器集群中的设备均与平摊,以此来分担服务器的压力,从而保持服务器集群的整理性能最优
, чтобы избежать сбоев.
Во-вторых, роль балансировки нагрузки Nginx.
-
转发功能
: Nginx будет пересылать запрос, отправленный клиентом, на разные серверы приложений по определенному алгоритму опроса и веса, при этом снижается нагрузка на один сервер и увеличивается параллелизм сервера; -
故障迁移
: при сбое сервера запрос, отправленный клиентом, будет автоматически отправлен на другие серверы; *添加恢复
: Когда неисправный сервер возобновит нормальную работу, он будет автоматически добавлен для обработки запросов пользователей;
3. Несколько стратегий балансировки нагрузки Nginx
1) опрос (по умолчанию)
Каждый запрос, отправленный клиентом, будет распределяться по разным внутренним серверам один за другим в хронологическом порядке.Если внутренний сервер не работает, он может быть автоматически устранен.
upstream backserver {
server 192.168.1.10;
server 192.168.1.11;
}
2) вес
weight представляет собой вес, значение по умолчанию равно 1, чем выше вес, тем больше клиентов будет выделено.
указать вероятность опроса,weight
и访问
Соотношение пропорциональное и используется, когда производительность бэкенд серверов неравномерна, то есть: к какому серверу подключений меньше, к какому серверу и пойдет маршрут.
upstream backserver {
server 192.168.1.10 weight=3;
server 192.168.1.11 weight=7;
}
3) ip_хэш
за запрос по IP доступаhash
Распределение результата, каждый посетитель фиксированно обращается к бэкенд серверу, что можно решитьsession
Проблема.
upstream backserver {
ip_hash;
server 192.168.1.10:80;
server 192.168.1.11:88;
}
4) справедливая (третья сторона)
Запросы распределяются в соответствии со временем отклика внутреннего сервера, и первыми распределяются запросы с коротким временем отклика.
upstream backserver {
server server1;
server server2;
fair;
}
5) url_hash (третья сторона)
При доступеurl
изhash
Результат распределить запрос так, чтобы каждыйurl
Направление на один и тот же внутренний сервер более эффективно, когда внутренний сервер является кешем.
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
4. Каковы распространенные решения для балансировки нагрузки?
Следующий рисунок разделен, и его общая распределенная архитектура Интернета в основном разделена на:
- Клиентский уровень
- обратный прокси-уровень
- Уровень сайта сервера
- сервисный уровень
- слой данных
Таким образом, можно видеть, что из запроса, отправленного клиентом на конечный уровень данных, восходящий поток может получить доступ к нисходящему потоку, чтобы обеспечить окончательное равномерное совместное использование.
Уровень 1: от уровня клиента к уровню обратного прокси.
Балансировка нагрузки с уровня клиента на уровень обратного прокси черезDNS轮询
понял, вDNS
соответствующий серверу域名
настроить несколькоIP
, когда клиент отправляет запрос наDNS
сервер, будет轮询
Возвращает IP-адрес, настроенный для соответствующего доменного имени, чтобы обеспечить разрешениеIP
требуется сNginx
сервераIP
то же самое, так чтоNginx
Распределение запросов сервера также будет сбалансировано.
Второй уровень: от уровня обратного прокси к уровню сайта сервера
Балансировка нагрузки от уровня обратного прокси-сервера к уровню сайта сервера черезNginx
внедрять, модифицироватьnginx.conf
Файлы конфигурации для реализации различных стратегий балансировки нагрузки;
PS: вот и проходим
nginx.conf
Основной метод реализации может относиться к вышеизложенному: 3. Несколько методов балансировки нагрузки Nginx (в основном в том числе: опрос, вес, ip_hash, честный (третья сторона), url_hash (третья сторона) связанные описания)
Третий уровень: от уровня сайта сервера к уровню обслуживания
Балансировка нагрузки от уровня сайта сервера до уровня обслуживания достигается за счет服务连接池
Реализовано, восходящий пул соединений будет устанавливать несколько соединений с нижестоящим сервисом, и каждый запрос будет随机
Выберите соединение для доступа к нижестоящим службам.
Четвертый уровень: от сервисного уровня к уровню данных
Когда сервисный уровень переходит на уровень данных, в случае большого объема данных уровень данных (db, cache) будет включать горизонтальную сегментацию данных, поэтому балансировка нагрузки уровня данных будет более сложной.数据的均衡
и请求的均衡
.
-
数据的均衡
: относится к горизонтально сегментированному每个服务(db,cache)
,数据量
Это равномерное. -
请求的均衡
: относится к горизонтально сегментированному每个服务(db,cache)
,请求量
является однородным.
Существует два распространенных метода горизонтальной сегментации:
Первый: разделить по горизонтали в соответствии с диапазоном
Каждая служба данных хранит определенный диапазон данных
-
user0 服务,存储 uid 范围:1-1kw
; -
user1 服务,存储 uid 范围:1kw-2kw
;
этой программы好处
Да:
-
规则简单
, служба может маршрутизироваться к соответствующей службе хранилища, только оценивая диапазон uid; -
数据均衡性较好
; -
易扩展
, вы можете в любое время добавить службу данных uid [2kw,3kw];
этой программы不足
Да:
Нагрузка запросов не обязательно сбалансирована, новые пользователи будут более активны, чем старые пользователи, и давление запросов на обслуживание в большом диапазоне будет больше.
Второй: разделить по горизонтали по хэшу id
Каждая служба данных хранит часть данных после хэша значения ключа.
-
user0 服务,存储偶数 uid 数据
; -
user1 服务,存储奇数 uid 数据
;
этой программы好处
Да:
-
规则简单
, службе необходимо хэшировать uid для маршрутизации к соответствующей службе хранилища; -
数据均衡性较好
; -
请求均匀性较好
;
этой программы不足
Да:
- Это непросто расширить.Для расширения службы данных при изменении метода хеширования может потребоваться миграция данных.
Пять, пример конфигурации балансировки нагрузки Nginx
1. Осознайте эффект
Введите в адресной строке браузераhttp://192.168.1.10/abc/20200320.html
, эффект балансировки нагрузки усредняется по номеру порта8080
и8081
середина.
2. Подготовка
1)подготовить дваTomcat
сервер, сервер есть8080
, другой сервер8081
.
2)соответственно в двухTomcat
на сервереwebapps
каталог, создайте имяabc
папка, вabc
Создать страницу в папке20200320.html
, проведите тестирование.
В предыдущей статье мыTomcat
Сервис создан8080
и8081
, так что здесь нам не нужно его создавать, а просматривать отдельно8080
и8081
на службеwebapps
Проверьте, есть ли в каталоге файлы тестовых страниц, если нет, то можете создать их самостоятельно.
Tomcat8080
# cat /root/tomcat8080/apache-tomcat-7.0.70/webapps/abc/20200320.html
<h1>welcome to tomcat 8080!</h1>
Tomcat8081
# cd /root/tomcat8081/apache-tomcat-7.0.70/webapps/
# mkdir abc
# cd abc/
# vim 20200320.html
<h1>welcome to tomcat 8081!</h1>
переключить на/root/tomcat8081/apache-tomcat-7.0.70/bin/
каталог, начало8081
изTomcat
Служить.
# ./startup.sh
Using CATALINA_BASE: /root/tomcat8081/apache-tomcat-7.0.70
Using CATALINA_HOME: /root/tomcat8081/apache-tomcat-7.0.70
Using CATALINA_TMPDIR: /root/tomcat8081/apache-tomcat-7.0.70/temp
Using JRE_HOME: /usr
Using CLASSPATH: /root/tomcat8081/apache-tomcat-7.0.70/bin/bootstrap.jar:/root/tomcat8081/apache-tomcat-7.0.70/bin/tomcat-juli.jar
Tomcat started.
Тестовая проверка
Протестируйте отдельно в клиентском браузереTomcat8080
:http://192.168.1.10/abc/20200320.html
иTomcat8081
:http://192.168.1.10:8081/abc/20200320.html
аутентификация.
Tomcat8080
Tomcat8081
3)Настройте балансировку нагрузки в конфигурационном файле Nginx;
существуетhttp
добавить под модульupstream myserver
конфигурация, имя_сервера из оригиналаlocalhost
изменить наNginx
адрес сервера, по адресуlocation
добавить подproxy_pass http://myserver;
Ты сможешь;
# vim /usr/local/nginx/conf/nginx.conf
17 http {
18 ......
34 upstream myserver {
35 server 192.168.1.10:8080;
36 server 192.168.1.10:8081;
37 }
38
39 server {
40 listen 80;
41 server_name 192.168.1.10;
42
43 #charset koi8-r;
44
45 #access_log logs/host.access.log main;
46
47 location / {
48 proxy_pass http://myserver;
49 root html;
50 index index.html index.htm;
51 }
52 ......
После настройки балансировки нагрузки файла Nginx перезапуститеNginx
службы возникает следующая проблема:
# ./nginx -s stop
nginx: [warn] conflicting server name "192.168.1.10" on 0.0.0.0:80, ignored
# ./nginx
Средства многократного связыванияserver name
, предупреждение не повлияет на работу сервера. Кроме того, смысл этой дублирующей привязки теперь работаетNginx
Дублируется в сервисе и новая конфигурация, которая будет загружена, так что это предупреждение на самом деле не нужно.
Тестовая проверка
В браузере клиента введите:http://192.168.1.10/abc/20200320.html
, постоянно обновлять и наблюдать за изменениями, то есть делиться запросами, выданными клиентом, с разнымиTomcat
служба, то есть так называемая负载均衡
эффект от .
Эффект балансировки нагрузки
Суммировать
Эта статья представляет什么的负载均衡
,Nginx负载均衡的作用
,Nginx负载均衡的几种策略方式
,常见的负载均衡方案
,Nginx负载均衡配置实例
И т. д.; Балансировка нагрузки является одним из факторов, который необходимо учитывать при проектировании архитектуры распределенной системы, который обычно относится к: равномерному распределению запросов/данных по нескольким операционным модулям для выполнения, ключом является единообразие:
-
反向代理层
балансировка нагрузки осуществляется черезDNS轮询
выполнить; -
服务器站点层
балансировка нагрузки осуществляется черезNginx
выполнить; -
服务层
балансировка нагрузки осуществляется через服务连接池
выполнить; -
数据层
балансировка нагрузки, чтобы рассмотреть数据的均衡
и请求的均衡
Две точки, общие способы按照范围水平切分
иhash水平切分
Оригинальность непростая.Если вы считаете, что эта статья полезна для вас, ставьте лайк, комментируйте или пересылайте эту статью, потому что это будет моей мотивацией выпускать больше качественных статей, спасибо!
Увидимся в следующий раз!