предисловие
Предыдущая статьяИспользованиеConsul
иRegistrator
существуетdocker
построен в контейнерной средеРегистрация и обнаружение службыкластер. На основе обнаружения и регистрации служб в этой статье будут представленыNginx
обратный прокси-сервер иConsul-template
компонент, который реализует динамическийБалансировка нагрузки службы.
текст
1. Введение в инструмент
1.1. Nginx
высокая производительностьHTTP
иобратный прокси-сервер, используемый для трафика внешнего доступа к внутреннему серверу приложенийбалансировки нагрузкиизапрос на переадресацию.
1.2. Consul-template
Consul-template
даHashiCorp
на основеConsul
Расширяемые инструменты, предоставляемые прослушиваниемConsul
серединаизменение данных, динамически изменять некоторыеконфигурационный файлсерединашаблон. обычно используется вNginx
,HAProxy
Динамически настраивайте сведения о обратном прокси-сервере клиента в работоспособном состоянии.
2. Принцип реализации
- пройти через
Nginx
самореализациябалансировки нагрузкиизапрос на переадресацию; - пройти через
Consul-template
изconfig
Функция мониторинга в реальном времениConsul
узел кластераСлужитьиданныеПеремена; - использование в режиме реального времени
Consul
Информация об узлезаменятьNginx
файл конфигурациишаблон,иПерезагрузитьконфигурационный файл;
Consul-template
иnginx
должны быть установлены на той же машине, потому чтоConsul-template
нужно динамически изменятьnginx
файл конфигурацииnginx.conf
, затем выполнитеnginx -s reload
команда для выполнения обновления маршрутизации для достиженияДинамическая балансировка нагрузкицель.
2.1 Традиционная балансировка нагрузки
Традиционная балансировка нагрузкиClient
Визит сестры поддержкиNginx
, а затем перенаправляется на серверную частьWeb Server
. Если бэкэнд имеетДобавить к/Удалить Web Server
, операции и техническое обслуживание должны быть изменены вручнуюnginx.conf
,Потомперезагрузить конфигурацию, вы можете динамически регулировать балансировку нагрузки.
2.2. Автоматическая балансировка нагрузки
Давайте посмотрим на балансировку нагрузки на основе автоматического обнаружения и регистрации сервисов.Способ балансировки нагрузки не изменился, но есть и другие.Периферийные компоненты, конечно, эти компонентыClient
невидим,client
Все еще только вижуNginx
Способы входа и доступа не изменились.
Nginx
Процесс реализации динамической балансировки нагрузки выглядит следующим образом:
- с тем же
Consul
ЭтикеткаправильноWeb Server
провестизнак обслуживанияиКлассификация,новыйилиУдалитьWeb Server
серверный узел; -
Registrator
мониторприбытьWeb Server
Обновление статуса, автоматическоеConsul
сервисный реестр будет ли эторегистриливыйти; -
Consul-template
подписалсяConsul
сервисный реестрслужебное сообщение,получилаConsul
push сообщения, т.е.Web Server
сервисный узелгосударствопроизошли изменения. -
Consul-template
автоматически изменять изаменятьNginx
под серверnginx
в файле конфигурациишаблон,иПерезагрузитьСлужба достигает цели автоматической балансировки нагрузки.
3. Экологичность
3.1 Системная среда
программное обеспечение | Версия |
---|---|
Операционная система | Ubuntu: 16.04 x86_64, ядро: 4.8.0-58-универсальное |
docker | Docker version 1.12.6, build 78d1802 |
docker-compose | docker-compose version 1.8.0 |
3.2 Планирование узла
IP хоста | компоненты |
---|---|
192.168.1.181 | Consul Server, Registrator, Nginx, Consul-template |
192.168.1.186 | Consul Server, Registrator, Nginx, Consul-template |
192.168.1.182 | Consul Client, Registrator, Client WebApp1, Server WebApp1, Server WebApp2 |
192.168.1.183 | Consul Client, Registrator, Client WebApp2, Server WebApp3, Server WebApp4 |
192.168.1.185 | Consul Client, Registrator, Client WebApp3, Server WebApp5, Server WebApp6 |
-
Client WebApp: Обеспечивает на основе
Thrift
изRPC
клиент и на основеHttp
протоколRESTful
клиент для доступаServer
программа. -
Server WebApp: Обеспечивает на основе
Thrift
изRPC
сервер и основанныйHttp
протоколRESTful
сервер, дляClient
вызов программы.
3 хоста здесь -192.168.1.182
,192.168.1.183
и192.168.1.185
, разверните два на хостClient WebApp
контейнер иClient Server
контейнер, для издевательствсервисный уровеньбалансировки нагрузки.
3.3. Сборка образа
- Consul:консул: последний
- Registrator:gliderlabs/регистратор:последний
- NginxиConsul-template:либералман/nginx-консул-шаблон: последний
- Client WebApp: тестовый клиент: последний
- Server WebApp: тестовый сервер: последний
Давайте поговорим об этом здесьtest-client
иtest-server
Зеркальная сборка из:
- Клонируйте проект в локальную среду проекта:GitHub.com/O — арендатор/билеты…
- переключиться на подмодуль
spring-cloud-starter-thrift-examples
внизtest
каталог, выполнить командуmvn clean package
Упакуйте программу. - соответственно
test-client
иtest-server
проектКорневая директориявнизDockerfile
документы иtarget
в каталогеtarget/*.jar
Программа копирования в192.168.1.182
,192.168.1.183
и192.168.1.185
Под содержанием. - Входитьклиент
Dockerfile
каталог, даклиентпрограммаtest-client
Для создания образа команда выглядит следующим образом:docker build . -t test-client:latest
- ВходитьСервер
Dockerfile
каталог, даСерверпрограммаtest-server
Для создания образа команда выглядит следующим образом:docker build . -t test-server:latest
После завершения сборки проверьте локальную зеркальную библиотеку:
3.4 Модель развертывания
пять хостов, в том числе192.168.1.181
и192.168.1.186
Основные функции двух хостов следующие:
- в видефорвардер балансировки нагрузки(Это всего лишь демонстрация, вы можете пройти
KeepAlived
выполнитьNginx
изHA
), пропускайте трафик внешнего доступа черезалгоритм загрузкиОдин вперед на задний планClient WebApp
. - от
Server
запуск режимаConsul
узлы, один из которых служит всемКластер обнаружения и регистрации службизleader
, заСинхронизироватьиУпорствоостальные триClient
модальныйConsul
узладанныеиинформация о состоянии.
Остальные три хоста -192.168.1.182
,192.168.1.183
и192.168.1.185
, который играет следующие роли:
- Каждый с
Client
развертывание шаблонаConsul
узел длярегистриНаходитьроднойdocker
услуги, предоставляемые контейнером, иConsul Server
изleader
узел дляСинхронизация состояния службы. - начать по одному
Client WebApp
экземпляр контейнера и дваServer WebApp
экземпляр контейнера, будетClient WebApp
запрос в соответствии ссервисный уровеньалгоритм загрузкиВторичная переадресацияприбытьServer WebApp
Завершите конкретную бизнес-обработку на любом из них.
Здесь есть две операции переадресации услуг:
-
Переадресация на уровне доступа:два
Nginx
Сервер отправляет клиентский трафик черезодин ретвитдо трехClient WebApp
Обрабатывается любой из экземпляров службы. -
Переадресация на сервисном уровне:три
Client WebApp
Один из экземпляров сервиса, согласноРеестр услугВытащил здоровымСписок кеша службы, запроситВторичная переадресациядо шестиServer WebApp
Один из экземпляров службы выполняет обработку.
3.5. Начать строительство
3.5.1 Хост Consul Server
(а) Пишется отдельноdocker-compose.yml
,УведомлениеRegistrator
нужно настроить самостоятельноIP
адрес.
- хост: 192.168.1.181
docker-compose.yml
version: '2'
services:
load_balancer:
image: liberalman/nginx-consul-template:latest
hostname: lb
links:
- consul_server_master:consul
ports:
- "80:80"
consul_server_master:
image: consul:latest
hostname: consul_server_master
ports:
- "8300:8300"
- "8301:8301"
- "8302:8302"
- "8400:8400"
- "8500:8500"
- "8600:8600"
command: consul agent -server -bootstrap-expect 1 -advertise 192.168.1.181 -node consul_server_master -data-dir /tmp/data-dir -client 0.0.0.0 -ui
registrator:
image: gliderlabs/registrator:latest
hostname: registrator
links:
- consul_server_master:consul
volumes:
- "/var/run/docker.sock:/tmp/docker.sock"
command: -ip 192.168.1.181 consul://192.168.1.181:8500
- хост: 192.168.1.186
docker-compose.yml
version: '2'
services:
load_balancer:
image: liberalman/nginx-consul-template:latest
hostname: lb
links:
- consul_server_slave:consul
ports:
- "80:80"
consul_server_slave:
image: consul:latest
hostname: consul_server_slave
ports:
- "8300:8300"
- "8301:8301"
- "8302:8302"
- "8400:8400"
- "8500:8500"
- "8600:8600"
command: consul agent -server -join=192.168.1.181 -advertise 192.168.1.186 -node consul_server_slave -data-dir /tmp/data-dir -client 0.0.0.0 -ui
registrator:
image: gliderlabs/registrator:latest
hostname: registrator
links:
- consul_server_slave:consul
volumes:
- "/var/run/docker.sock:/tmp/docker.sock"
command: -ip 192.168.1.186 consul://192.168.1.186:8500
(b) Проходя через два хоста соответственноdocker-compose
Запустите многососудные приложения, команда выглядит следующим образом:
docker-compose up -d
это на хосте192.168.1.181
Вы можете увидеть вывод при запуске команды запуска наdocker-compose
Он будет проверять сначала при запускецелевой файл изображенияТо ли тянуть на локалку, то ли последовательноСоздайтеизапускать docker-compose.yml
конфигурация файлаэкземпляр контейнера.
(C) Просмотр нормального начала технологического сосуда наблюдаетсяConsul
,Registrator
иNginx
/Consul-template
Контейнеры запускаются нормально.
(D). Утилизацияdocker-compose
, так же и на хосте192.168.1.186
Запустите настроенный экземпляр службы контейнеров на сервере и проверьте состояние запуска следующим образом:
(д).Доступhttp://IP:8500
ПроверятьConsul Server
изИнформация об узлеиСписок регистрации службы.
- Информация об узле:
- Список статусов службы:
дваConsul Server
Все экземпляры службы контейнеров на хосте запускаются нормально!
3.5.2 Хост-клиент Consul
При нормальных обстоятельствах мыConsul
В качестве центра регистрации и обнаружения услуг он будет использоватьопределение услуги (Service Definition
) иОпределение проверки работоспособности (Health Check Definition
), соответствующие инструкции по настройке относятся к следующему:
определение услуги
ключ переменной среды | переменная среды Значение | инструкция |
---|---|---|
SERVICE_ID | web-001 | Это может быть GUID или более удобочитаемая переменная, чтобы исключить повторение. |
SERVICE_NAME | web | Если ID не задан, Consul будет использовать имя в качестве id, и регистрация может не пройти |
SERVICE_TAGS | nodejs,web | Сервисные теги, разделенные запятыми, разработчики могут запрашивать некоторую информацию на основе тегов |
SERVICE_IP | IP-адрес интрасети | Чтобы использовать Консул, доступный IP |
SERVICE_PORT | 50001 | IP-приложения, если приложение, прослушивание к нескольким портам, следует рассматривать как больше приложений |
SERVICE_IGNORE | Boolean | Игнорировать ли этот Контейнер, вы можете добавить это свойство для некоторых Контейнеров, которые не нужно регистрировать. |
Определение проверки работоспособности службы
Принципы настройки таковы:SERVICE_XXX_*
. Если ваше приложение слушает5000
порт, изменить наSERVICE_5000_CHECK_HTTP
, конфигурация других переменных среды такая же.
ключ переменной среды | переменная окружения Значение | инструкция |
---|---|---|
--- Ниже приведен режим HTTP | --- | --- |
SERVICE_80_CHECK_HTTP | /path_to_health_check | Путь к проверке состояния вашего здоровья, например, /status |
SERVICE_80_CHECK_INTERVAL | 15s | Проверять каждые 15 секунд |
SERVICE_80_CHECK_TIMEOUT | 2s | Тайм-аут проверки статуса |
--- Ниже приведен режим HTTPS | --- | --- |
SERVICE_443_CHECK_HTTPS | /path_to_health_check | Путь к проверке состояния вашего здоровья, например, /status |
SERVICE_443_CHECK_INTERVAL | 15s | Проверять каждые 15 секунд |
SERVICE_443_CHECK_TIMEOUT | 2s | Тайм-аут проверки статуса |
--- Ниже приведен режим TCP | --- | --- |
SERVICE_443_CHECK_TCP | /path_to_health_check | Путь к проверке состояния вашего здоровья, например, /status |
SERVICE_443_CHECK_INTERVAL | 15s | Проверять каждые 15 секунд |
SERVICE_443_CHECK_TIMEOUT | 2s | Тайм-аут проверки статуса |
--- использовать скрипт для проверки | --- | --- |
SERVICE_CHECK_SCRIPT | curl --silent --fail example.com | Такие как check_redis.py в официальном примере |
--- разное | --- | --- |
SERVICE_CHECK_INITIAL_STATUS | passing | Зарегистрированная служба Consul по умолчанию не работает |
Инструкции по настройке
(а) Пишется отдельноdocker-compose.yml
, также обратите вниманиеRegistrator
нужно настроить самостоятельноIP
адрес.test-server
иtest-client
изЭкземпляр службыПри настройке необходимо указать соответствующиепеременная среды.
- хост: 192.168.1.182
docker-compose.yml
version: '2'
services:
consul_client_01:
image: consul:latest
ports:
- "8300:8300"
- "8301:8301"
- "8301:8301/udp"
- "8302:8302"
- "8302:8302/udp"
- "8400:8400"
- "8500:8500"
- "8600:8600"
command: consul agent -retry-join 192.168.1.181 -advertise 192.168.1.182 -node consul_client_01 -data-dir /tmp/data-dir -client 0.0.0.0 -ui
registrator:
image: gliderlabs/registrator:latest
volumes:
- "/var/run/docker.sock:/tmp/docker.sock"
command: -ip 192.168.1.182 consul://192.168.1.182:8500
test_server_1:
image: test-server:latest
environment:
- SERVICE_8080_NAME=test-server-http-service
- SERVICE_8080_TAGS=test-server-http-service-01
- SERVICE_8080_CHECK_INTERVAL=10s
- SERVICE_8080_CHECK_TIMEOUT=2s
- SERVICE_8080_CHECK_HTTP=/health
- SERVICE_25000_NAME=test-server-thrift-service
- SERVICE_25000_TAGS=test-server-thrift-service-01
- SERVICE_25000_CHECK_INTERVAL=10s
- SERVICE_25000_CHECK_TIMEOUT=2s
- SERVICE_25000_CHECK_TCP=/
ports:
- "16000:8080"
- "30000:25000"
test_server_2:
image: test-server:latest
environment:
- SERVICE_8080_NAME=test-server-http-service
- SERVICE_8080_TAGS=test-server-http-service-02
- SERVICE_8080_CHECK_INTERVAL=10s
- SERVICE_8080_CHECK_TIMEOUT=2s
- SERVICE_8080_CHECK_HTTP=/health
- SERVICE_25000_NAME=test-server-thrift-service
- SERVICE_25000_TAGS=test-server-thrift-service-02
- SERVICE_25000_CHECK_INTERVAL=10s
- SERVICE_25000_CHECK_TIMEOUT=2s
- SERVICE_25000_CHECK_TCP=/
ports:
- "18000:8080"
- "32000:25000"
test_client_1:
image: test-client:latest
environment:
- SERVICE_8080_NAME=my-web-server
- SERVICE_8080_TAGS=test-client-http-service-01
- SERVICE_8080_CHECK_INTERVAL=10s
- SERVICE_8080_CHECK_TIMEOUT=2s
- SERVICE_8080_CHECK_HTTP=/features
ports:
- "80:8080"
- хост: 192.168.1.183
docker-compose.yml
version: '2'
services:
consul_client_02:
image: consul:latest
ports:
- "8300:8300"
- "8301:8301"
- "8301:8301/udp"
- "8302:8302"
- "8302:8302/udp"
- "8400:8400"
- "8500:8500"
- "8600:8600"
command: consul agent -retry-join 192.168.1.181 -advertise 192.168.1.183 -node consul_client_02 -data-dir /tmp/data-dir -client 0.0.0.0 -ui
registrator:
image: gliderlabs/registrator:latest
volumes:
- "/var/run/docker.sock:/tmp/docker.sock"
command: -ip 192.168.1.183 consul://192.168.1.183:8500
test_server_1:
image: test-server:latest
environment:
- SERVICE_8080_NAME=test-server-http-service
- SERVICE_8080_TAGS=test-server-http-service-03
- SERVICE_8080_CHECK_INTERVAL=10s
- SERVICE_8080_CHECK_TIMEOUT=2s
- SERVICE_8080_CHECK_HTTP=/health
- SERVICE_25000_NAME=test-server-thrift-service
- SERVICE_25000_TAGS=test-server-thrift-service-03
- SERVICE_25000_CHECK_INTERVAL=10s
- SERVICE_25000_CHECK_TIMEOUT=2s
- SERVICE_25000_CHECK_TCP=/
ports:
- "16000:8080"
- "30000:25000"
test_server_2:
image: test-server:latest
environment:
- SERVICE_8080_NAME=test-server-http-service
- SERVICE_8080_TAGS=test-server-http-service-04
- SERVICE_8080_CHECK_INTERVAL=10s
- SERVICE_8080_CHECK_TIMEOUT=2s
- SERVICE_8080_CHECK_HTTP=/health
- SERVICE_25000_NAME=test-server-thrift-service
- SERVICE_25000_TAGS=test-server-thrift-service-04
- SERVICE_25000_CHECK_INTERVAL=10s
- SERVICE_25000_CHECK_TIMEOUT=2s
- SERVICE_25000_CHECK_TCP=/
ports:
- "18000:8080"
- "32000:25000"
test_client_1:
image: test-client:latest
environment:
- SERVICE_8080_NAME=my-web-server
- SERVICE_8080_TAGS=test-client-http-service-02
- SERVICE_8080_CHECK_INTERVAL=10s
- SERVICE_8080_CHECK_TIMEOUT=2s
- SERVICE_8080_CHECK_HTTP=/features
ports:
- "80:8080"
- хост: 192.168.1.185
docker-compose.yml
version: '2'
services:
consul_client_03:
image: consul:latest
ports:
- "8300:8300"
- "8301:8301"
- "8301:8301/udp"
- "8302:8302"
- "8302:8302/udp"
- "8400:8400"
- "8500:8500"
- "8600:8600"
command: consul agent -retry-join 192.168.1.181 -advertise 192.168.1.185 -node consul_client_03 -data-dir /tmp/data-dir -client 0.0.0.0 -ui
registrator:
image: gliderlabs/registrator:latest
volumes:
- "/var/run/docker.sock:/tmp/docker.sock"
command: -ip 192.168.1.185 consul://192.168.1.185:8500
test_server_1:
image: test-server:latest
environment:
- SERVICE_8080_NAME=test-server-http-service
- SERVICE_8080_TAGS=test-server-http-service-05
- SERVICE_8080_CHECK_INTERVAL=10s
- SERVICE_8080_CHECK_TIMEOUT=2s
- SERVICE_8080_CHECK_HTTP=/health
- SERVICE_25000_NAME=test-server-thrift-service
- SERVICE_25000_TAGS=test-server-thrift-service-05
- SERVICE_25000_CHECK_INTERVAL=10s
- SERVICE_25000_CHECK_TIMEOUT=2s
- SERVICE_25000_CHECK_TCP=/
ports:
- "16000:8080"
- "30000:25000"
test_server_2:
image: test-server:latest
environment:
- SERVICE_8080_NAME=test-server-http-service
- SERVICE_8080_TAGS=test-server-http-service-06
- SERVICE_8080_CHECK_INTERVAL=10s
- SERVICE_8080_CHECK_TIMEOUT=2s
- SERVICE_8080_CHECK_HTTP=/health
- SERVICE_25000_NAME=test-server-thrift-service
- SERVICE_25000_TAGS=test-server-thrift-service-06
- SERVICE_25000_CHECK_INTERVAL=10s
- SERVICE_25000_CHECK_TIMEOUT=2s
- SERVICE_25000_CHECK_TCP=/
ports:
- "18000:8080"
- "32000:25000"
test_client_1:
image: test-client:latest
environment:
- SERVICE_8080_NAME=my-web-server
- SERVICE_8080_TAGS=test-client-http-service-03
- SERVICE_8080_CHECK_INTERVAL=10s
- SERVICE_8080_CHECK_TIMEOUT=2s
- SERVICE_8080_CHECK_HTTP=/features
ports:
- "80:8080"
Уведомление:Используемые нами сторонние зеркала
liberalman/nginx-consul-template
,Nginx
будет называться какmy-web-server
изСервисный контейнеротправлено в качестве фонацелевой сервер, Таким образом, вtest-client
В пункте конфигурации нужно указатьSERVICE_XXX_NAME
заmy-web-server
. Конечно, вы также можетесделать зеркалоуточнитьшаблон.
(б) Использование на трех хостахdocker-compose
Запустите многоконтейнерное приложение:
docker-compose up -d
принимать гостей192.168.1.182
В качестве примера (два других аналогичны) в журнале консоли показано, создано и запущеноdocker-compose.yml
5 Конфигурация файлаэкземпляр контейнера.
(c) Просмотрите процесс контейнера, который запускается нормально, и обратите внимание, чтоConsul
, одинtest-client
и дваtest-server
Контейнеры запускаются нормально.
(г).b
Вывод консоли в операции можно увидеть:docker-compose
не согласноdocker-compose.yml
Конфигурация службы в файлепоследовательностьзапускать.registrator
Запуск контейнера зависит отconsul
Контейнер, покаconsul
Он еще не начался, кажетсяregistrator
приоритет для началаненормальный выходФеномен. Обходной путь - запустить его сноваdocker-compose up -d
Заказ.
(e) Снова проверьте процесс контейнера, на этот разRegistrator
Контейнер запустился нормально.
(F) На оставшихся двух хостах таким же образомповторениеВышеупомянутая операция, посетите еще разhttp://IP:8500
ПроверятьConsul Server
изИнформация об узлеиСписок регистрации службы.
-
Consul
Информация об узле кластера, включая дваConsul Server
узел и одинConsul Client
узел, вы можете увидеть всеСписок регистрации службыи связанные с нимиРезультаты проверки работоспособности:
-
nginx
список статусов службы, имя службыnginx-consul-template
,поставкаhttp
сервис, всего 2 экземпляра сервиса:
-
test-client
Список статусов службы, имя службыmy-web-server
,поставкаhttp
сервис, есть 3 экземпляра сервиса:
-
test-server
Список статусов службы, имя службыtest-server-http-service
иtest-server-thrift-service
6 соответственноhttp
экземпляр службы и 6thrift
Экземпляр службы:
триConsul Client
Все экземпляры службы контейнеров на узле запускаются нормально, а регистрация и обнаружение службы выполняются нормально!
4. Проверка результатов
4.1 Балансировка нагрузки Nginx
4.1.1. Доступ к Nginx
Nginx
Номер порта доступа по умолчанию:80
, Выбери одинNginx
доступ, например:http://192.168.1.181/swagger-ui.html
.
Запрос отправленTest Client
изSwagger
Страница с указаниемnginx
конфигурационный файлnginx.conf
одеялоConsul-template
Модифицировано успешно.
4.1.2. Войдите в контейнер Nginx
бегатьdocker ps
Проверятьnginx-consul-template
контейнерID
, например вот:4f2731a7e0cb
. Входитьnginx-consul-template
контейнер.
docker-enter 4f2731a7e0cb
Просмотрите список процессов внутри контейнера:
Обратите особое внимание на следующую однострочную команду процесса, которая выполняет три важных шага:
consul-template -consul-addr=consul:8500 -template /etc/consul-templates/nginx.conf.ctmpl:/etc/nginx/conf.d/app.conf:nginx -s reload
-
Consul-template
использоватьConsul
ВверхСлужебная информацияправильноNginx
изШаблон профиля/etc/consul-templates/nginx.conf.ctmpl
переделыватьРазобратьиоказывать. -
оказыватьСгенерировано
nginx
Файл конфигурации/etc/nginx/conf.d/app.conf
. - бежать дальше
nginx -s reload
Перезагрузитьapp.conf
,продлитьСписок переадресации маршрута.
Проверятьapp.conf
элементы конфигурации, найдено триtest-client
узлаIP:port
присоединилисьПереулок по маршруту спискасередина.
Выйдите и выключите хост192.168.1.182
Вверхtest-client
контейнер.
Проверьте еще разapp.conf
, его можно найтиузел маршрутизации 192.168.1.182:80
уже изNginx
изсписок переадресации маршрутаначальствовыбраковыватьПотерял.
Аналогично, перезапуститеtest-client
Восстановив контейнер, его снова можно найтиNginx
изсписок переадресации маршрутаАвтоматически добавить его снова!
4.2 Балансировка сервисной нагрузки
4.2.1 Тест интерфейса
test-client
пройти черезhttp
Запрос режима связи любойtest-server
, возвращает результат ответа (время обработки запросаms
).
test-client
пройти черезthrift
Запрос режима связи любойtest-server
, возвращает результат ответа (время обработки запросаms
).
4.2.3 Анализ журнала
Балансировка нагрузки сервисовНе очень, вот прямо перехватилtest-client
изсписок сервисного кэшаЖурнал, напечатанный во время динамического обновления времени:
2018-02-09 13:15:55.157 INFO 1 --- [erListUpdater-1] t.c.l.ThriftConsulServerListLoadBalancer : Refreshed thrift serverList: [
test-server-thrift-service: [
ThriftServerNode{node='consul_client_01', serviceId='test-server-thrift-service', tags=[test-server-thrift-service-01], host='192.168.1.182', port=30000, address='192.168.1.182', isHealth=true},
ThriftServerNode{node='consul_client_01', serviceId='test-server-thrift-service', tags=[test-server-thrift-service-02], host='192.168.1.182', port=32000, address='192.168.1.182', isHealth=true},
ThriftServerNode{node='consul_client_02', serviceId='test-server-thrift-service', tags=[test-server-thrift-service-03], host='192.168.1.183', port=30000, address='192.168.1.183', isHealth=true},
ThriftServerNode{node='consul_client_02', serviceId='test-server-thrift-service', tags=[test-server-thrift-service-04], host='192.168.1.183', port=32000, address='192.168.1.183', isHealth=true},
ThriftServerNode{node='consul_client_03', serviceId='test-server-thrift-service', tags=[test-server-thrift-service-05], host='192.168.1.185', port=30000, address='192.168.1.185', isHealth=true},
ThriftServerNode{node='consul_client_03', serviceId='test-server-thrift-service', tags=[test-server-thrift-service-06], host='192.168.1.185', port=32000, address='192.168.1.185', isHealth=true}
],
test-server-http-service: [
ThriftServerNode{node='consul_client_01', serviceId='test-server-http-service', tags=[test-server-http-service-01], host='192.168.1.182', port=16000, address='192.168.1.182', isHealth=true},
ThriftServerNode{node='consul_client_01', serviceId='test-server-http-service', tags=[test-server-http-service-02], host='192.168.1.182', port=18000, address='192.168.1.182', isHealth=true},
ThriftServerNode{node='consul_client_02', serviceId='test-server-http-service', tags=[test-server-http-service-03], host='192.168.1.183', port=16000, address='192.168.1.183', isHealth=true},
ThriftServerNode{node='consul_client_02', serviceId='test-server-http-service', tags=[test-server-http-service-04], host='192.168.1.183', port=18000, address='192.168.1.183', isHealth=true},
ThriftServerNode{node='consul_client_03', serviceId='test-server-http-service', tags=[test-server-http-service-05], host='192.168.1.185', port=16000, address='192.168.1.185', isHealth=true},
ThriftServerNode{node='consul_client_03', serviceId='test-server-http-service', tags=[test-server-http-service-06], host='192.168.1.185', port=18000, address='192.168.1.185', isHealth=true}
],
my-web-server: [
ThriftServerNode{node='consul_client_01', serviceId='my-web-server', tags=[test-client-http-service-01], host='192.168.1.182', port=80, address='192.168.1.182', isHealth=true},
ThriftServerNode{node='consul_client_02', serviceId='my-web-server', tags=[test-client-http-service-02], host='192.168.1.183', port=80, address='192.168.1.183', isHealth=true},
ThriftServerNode{node='consul_client_03', serviceId='my-web-server', tags=[test-client-http-service-03], host='192.168.1.185', port=80, address='192.168.1.185', isHealth=true}
]]
Экземпляр службы
-
test-server-http-service
всездоровыйЭкземпляр службы:
Сервис IP-адрес | сервисный порт | Метка |
---|---|---|
192.168.1.182 | 16000 | test-server-http-service-01 |
192.168.1.182 | 18000 | test-server-http-service-02 |
192.168.1.183 | 16000 | test-server-http-service-03 |
192.168.1.183 | 18000 | test-server-http-service-04 |
192.168.1.185 | 16000 | test-server-http-service-05 |
192.168.1.185 | 18000 | test-server-http-service-06 |
-
test-server-thrift-service
всездоровыйЭкземпляр службы:
IP-адрес службы | сервисный порт | Метка |
---|---|---|
192.168.1.182 | 30000 | test-server-thrift-service-01 |
192.168.1.182 | 32000 | test-server-thrift-service-02 |
192.168.1.183 | 30000 | test-server-thrift-service-03 |
192.168.1.183 | 32000 | test-server-thrift-service-04 |
192.168.1.185 | 30000 | test-server-thrift-service-05 |
192.168.1.185 | 32000 | test-server-thrift-service-06 |
-
my-web-server
всездоровыйЭкземпляр службы:
IP-адрес службы | сервисный порт | Метка |
---|---|---|
192.168.1.182 | 80 | test-client-http-service-01 |
192.168.1.183 | 80 | test-client-http-service-02 |
192.168.1.185 | 80 | test-client-http-service-03 |
spring-cloud-starter-thrift
усыновленныйголосованиеЭкспедиционная стратегия, то естьmy-web-server
будет нажиматьцикл в последовательностиземляhttp
илиrpc
запросить рассылку соответствующим6
КусокЭкземпляр службыПолная обработка.
Суммировать
В этой статье представлен набор, основанный наСистема регистрации и обнаружения сервисов микросервисовиконтейнеризВысокая доступность (HA
) решение, введенноеуровень доступаисервисный уровеньизАвтоматическая балансировка нагрузкиреализация, которая подробно описанапрограмма практикиитехнические средства!
Добро пожаловать в технический публичный аккаунт: Zero One Technology Stack
Эта учетная запись будет продолжать делиться сухими товарами серверных технологий, включая основы виртуальных машин, многопоточное программирование, высокопроизводительные фреймворки, асинхронное ПО, промежуточное ПО для кэширования и обмена сообщениями, распределенные и микросервисы, материалы для обучения архитектуре и расширенные учебные материалы и статьи.