По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
В этой статье мы рассмотрим процесс установки и настройки режима Docker Swarm на сервере Ubuntu 16.04.
Docker Swarm является стандартным инструментом кластеризации для Docker, преобразующий набор хостов Docker в один последовательный кластер, называемый Swarm. Docker Swarm обеспечивает доступность и высокую производительность работы, равномерно распределяя ее по хостингам Docker внутри кластера.
Установка Docker Swarm:
Перед началом обновите Ваш системный репозиторий до последней версии с помощью следующей команды:
sudo apt-get update -y && sudo apt-get upgrade -y
После обновления следует выполнить перезагрузку системы. Необходимо еще установить среду Docker. По умолчанию Docker не доступен в репозитории Ubuntu 16.04, поэтому сначала необходимо создать хранилище Docker и начать установку с помощью следующей команды:
sudo apt-get install apt-transport-https software-properties-common ca-certificates -y:
Добавляем GPG ключ для Docker:
wget https://download.docker.com/linux/ubuntu/gpg && sudo apt-key add gpg
Добавляем репозиторий Docker и обновляем с помощью команды:
sudo echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable" >> /etc/apt/sources.list sudo apt-get update -y
Установка среды Docker с помощью следующей команды:
sudo apt-get install docker-ce -y
После установки запустите службу Docker во время загрузки с помощью следующей команды:
sudo systemctl start docker && sudo systemctl enable docker
Для запуска Docker необходимы root права, а для других юзеров доступ получается только с помощью sudo. При необходимости запустить docker без использования sudo, есть возможность создать Unix и включить в него необходимых пользователей за счет выполнения следующих строк кода:
sudo groupadd docker && sudo usermod -aG docker dockeruser
Затем выйдя из системы, делаем вход через dockeruser.
sudo ufw allow 2376/tcp && sudo ufw allow 7946/udp && sudo ufw allow 7946/tcp && sudo ufw allow 80/tcp && sudo ufw allow 2377/tcp && sudo ufw allow 4789/udp
Затем перезагрузите брандмауэр, включив его при загрузке
sudo ufw reload && sudo ufw enable
Выполните перезагрузку “Докера”:
sudo systemctl restart docker
Создавая Docker Swarm кластер, необходимо определиться с IP-адресом, за счет которого ваш узел будет действовать в качестве диспетчера:
docker swarm init --advertise-addr 192.168.0.103
Вы должны увидеть следующий вывод:
Swarm initialized: current node (iwjtf6u951g7rpx6ugkty3ksa) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-5p5f6p6tv1cmjzq9ntx3zmck9kpgt355qq0uaqoj2ple629dl4-5880qso8jio78djpx5mzbqcfu 192.168.0.103:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Проверяем его состояние:
docker node ls
Если все работает правильно, вы должны увидеть следующий вывод:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
iwjtf6u951g7rpx6ugkty3ksa * Manager-Node Ready Active Leader
Проверка статуса Docker Swarm Cluster осуществляется следующим образом:
code> docker info
Вывод должен быть следующим:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.09.0-ce
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: active
NodeID: iwjtf6u951g7rpx6ugkty3ksa
Is Manager: true
ClusterID: fo24c1dvp7ent771rhrjhplnu
Managers: 1
Nodes: 1
Orchestration:
Task History Retention Limit: 5
Raft:
Snapshot Interval: 10000
Number of Old Snapshots to Retain: 0
Heartbeat Tick: 1
Election Tick: 3
Dispatcher:
Heartbeat Period: 5 seconds
CA Configuration:
Expiry Duration: 3 months
Force Rotate: 0
Autolock Managers: false
Root Rotation In Progress: false
Node Address: 192.168.0.103
Manager Addresses:
192.168.0.103:2377
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 06b9cb35161009dcb7123345749fef02f7cea8e0
runc version: 3f2f8b84a77f73d38244dd690525642a72156c64
init version: 949e6fa
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 4.4.0-45-generic
Operating System: Ubuntu 16.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 992.5MiB
Name: Manager-Node
ID: R5H4:JL3F:OXVI:NLNY:76MV:5FJU:XMVM:SCJG:VIL5:ISG4:YSDZ:KUV4
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Узел теперь настроен правильно, пришло время добавить его в Swarm Cluster. Сначала скопируйте вывод команды «swarm init» из вывода результата выше, а затем вставьте этот вывод в рабочий узел для присоединения к Swarm Cluster:
docker swarm join --token SWMTKN-1-5p5f6p6tv1cmjzq9ntx3zmck9kpgt355qq0uaqoj2ple629dl4-5880qso8jio78djpx5mzbqcfu 192.168.0.103:2377
Вы должны увидеть следующий вывод:
This node joined a swarm as a worker.
Теперь выполните следующую команду для вывода списка рабочего узла:
docker node ls
Вы должны увидеть информацию следующего вида:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
iwjtf6u951g7rpx6ugkty3ksa * Manager-Node Ready Active Leader
snrfyhi8pcleagnbs08g6nnmp Worker-Node Ready Active
Docker Swarm Cluster запущен и работает, теперь можно запустить веб-сервис в Docker Swarm Mode. За счет следующей строки кода выполнится развертывание службы веб-сервера:
docker service create --name webserver -p 80:80 httpd
Приведенная выше строка создаст контейнер веб-сервера Apache и сопоставит его с 80 портом, позволив иметь полный доступ к необходимому веб-серверу Apache из удаленной системы. Теперь запускаем проверку работающего сервиса с помощью команды:
docker service ls
Вы должны увидеть следующий вывод:
ID NAME
MODE REPLICAS IMAGE PORTS
nnt7i1lipo0h webserver replicated 0/1 apache:latest *:80->80/tcp
Запустите службу масштабирования веб-сервера с помощью строки:
docker service scale webserver = 2
А также проверьте состояние с помощью команды:
docker service ps webserver
Вы должны увидеть следующий вывод:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
7roily9zpjvq webserver.1 httpd:latest Worker-Node Running Preparing about a minute ago
r7nzo325cu73 webserver.2 httpd:latest Manager-Node Running Preparing 58 seconds ago
Веб-сервер Apache работает. Теперь вы можете получить доступ к веб-серверу:
Служба веб-сервера Apache теперь распределена по двум узлам. Docker Swarm обеспечивает доступность вашего сервиса. Если веб-сервер отключается на рабочем узле, то новый контейнер будет запущен на узле менеджера. Для проверки доступности следует остановить службу Docker на рабочем узле:
sudo systemctl stop docker
Запустите службу веб-сервера с помощью команды:
docker service ps webserver
Вы должны увидеть следующую информацию:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
ia2qc8a5f5n4 webserver.1 httpd:latest Manager-Node Ready Ready 1 second ago
7roily9zpjvq \_ webserver.1 httpd:latest Worker-Node Shutdown Running 15 seconds ago r7nzo325cu73 webserver.2 httpd:latest Manager-Node Running Running 23 minutes ago
С помощью данной статьи, вы смогли установить и настроить кластер Docker Swarm для ОС Ubuntu 16.04. Теперь вы можете легко масштабировать свое приложение в кластере до тысячи узлов и пятидесяти тысяч контейнеров без существенной потери производительности.
Итак, вы, возможно, слышали аббревиатуры BIOS и UEFI, особенно если имели дело со сменой операционной системы или разгоном.
Возможно, вы даже знаете, как эти аббревиатуры расшифровываются (Unified Extensible Firmware Interface – единый расширяемый микропрограммный интерфейс, и Basic Input/Output System – базовая система ввода/вывода, соответственно). Но задумывались ли вы когда-нибудь, что они делают в компьютерной системе?
Давайте раскроем тайну этих терминов и их значений.
Процедура загрузки
Сначала – главное! Да, я знаю, что мы отклоняемся от темы, но я обещаю, что это поможет вам понять позже некоторые концепции.
Итак, как загружается компьютер? Давайте рассмотрим шаг за шагом:
Вы нажимаете кнопку питания на ноутбуке/настольном компьютере.
ЦП запускается, но ему необходимы некоторые команды для работы (помните о том, что ЦП всегда нужно что-то делать). Так как основная память на этом этапе пуста, то ЦП полагается на загрузку команд из прошивки микросхемы на материнской плате и начинает выполнять их.
Код встроенного ПО выполняет самотестирование при включении питания (POST - Power On Self Test), инициализирует оставшееся оборудование, определяет подключенные внешние периферийные устройства (мышь, клавиатуру, флешку и т.д.) и проверяет исправность всех подключенных устройств. Возможно, вы даже помните звуковой сигнал, который настольные компьютеры издавали после успешного прохождения процедуры POST.
И, наконец, алгоритм прошивки перебирает все запоминающие устройства и ищет загрузчик (обычно находится в первом секторе диска). Если загрузчик был найден, то прошивка передает ему управление компьютером. Для того, чтобы понять эту статью, вам не нужно знать больше. Но если вам интересно, то можете прочитать дальше (в ином случае вы можете перейти к следующему разделу).
Итак, теперь, когда загрузчик загружен, его задача – загрузить остальную часть операционной системы. GRUB – один из таких загрузчиков, способный загружать unix-подобные операционные системы, а также он может последовательно загружать операционные системы Windows. Загрузчик доступен только в первом секторе диска размером 512 байт. С учетом сложности современных операционных систем, некоторые из загрузчиков имеют тенденцию выполнять многоэтапную загрузку, то есть когда загрузчик загружает загрузчик второго этапа в среде, не ограниченной 512 байтами.
Затем загрузчик загружает ядро в память. Unix-подобные операционные системы затем запускают процесс init – процесс инициализации, (главный процесс, из которого разветвляются/выполняются другие процессы) и, наконец, инициализируют уровни запуска.
В Windows wininit.exe загружается вместе с некоторыми другими процессами, такими как services.exe для управления службами, lsass.exe для локальной безопасности и прав доступа (аналогично уровням запуска) и lsm.exe для локального управления сеансами.
После всех этих этапов и после инициализации некоторых других драйверов загружается графический пользовательский интерфейс (GUI - Graphical User Inferface), и отображается экран входа в систему.
Это было описание общего процесса загрузки. А теперь вернемся к нашей первоначальной теме.
BIOS:
BIOS расшифровывается как Basic Input/Output System, то есть базовая система ввода/вывода, а иначе говоря, прошивка, о которой мы говорили выше.
Она хранится в EPROM (Erasable Programmable Read-Only Memory – стираемое программируемое постоянное запоминающее устройство), что позволяет производителю легко выпускать обновления.
Она представляет собой множество вспомогательных функций, которые позволяют читать загрузочные сектора подключенного хранилища и выводить на экран. Вы можете получить доступ к BIOS на начальных этапах загрузки, нажав del, F2 или F10.
UEFI
UEFI расшифровывается как Unified Extensible Firmware Interface, или единый расширяемый микропрограммный интерфейс. Он выполняет ту же работу, что и BIOS, но с одним основным отличием – он хранит все данные об инициализации и запуске в файле .efi, а не в прошивке.
Этот файл .efi хранится в специальном системном разделе EFI (ESP - EFI System Partition) на жестком диске. Этот раздел также содержит загрузчик.
UEFI был разработан с целью преодоления многих ограничений старого BIOS, в том числе:
UEFI поддерживает размеры дисков до 9 зеттабайт, тогда как BIOS поддерживает только 2,2 терабайта.
UEFI обеспечивает более быструю загрузку.
UEFI поддерживает дискретные драйверы, в то время как BIOS поддерживает диски, хранящиеся в его ПЗУ, поэтому обновление прошивки BIOS немного затруднено.
UEFI обеспечивает безопасную загрузку, которая предотвращает загрузку компьютера из неавторизированных/неподписанных приложений. Это помогает предотвратить внедрения руткитов, но при этом затрудняет двойную загрузку, так как рассматривает другие ОС как неподписанные приложения.
UEFI работает в 32-битном или 64-битном режиме, тогда как BIOS работает в 16-битном режиме. Таким образом, UEFI может предоставить графический интерфейс (то есть управление с помощью мыши), в отличие от BIOS, который поддерживает управление только с помощью клавиатуры.
Возможно, вам не нужен UEFI
Несмотря на то, что все современные компьютеры по умолчанию оснащены UEFI, есть несколько причин, по которым вы можете выбрать BIOS вместо UEFI:
Если вы новичок и не хотите возиться с любым типом прошивки, то BIOS для вас.
Если у вас
Управление кэш-памятью определяет поведение кэширования для веб-сайта, давая браузерам понять, как часто следует обновлять локально хранящиеся ресурсы.
Что такое cache-control?
Cache-control – это HTTP-заголовок, который определяет поведение браузера при кэшировании. Проще говоря, когда кто-то посещает веб-сайт, то его браузер сохраняет определенные ресурсы, такие как изображения и данные веб-сайта, в хранилище, которое называется кэш. Когда пользователь вновь посещает этот веб-сайт, то cache-control диктует правила, которые определяют, будут ли эти ресурсы загружены из локального кэша данного пользователя, или браузер должен отправить запрос на сервер для получения новых ресурсов. Для более глубокого понимания, что такое cache-control необходимо базовое понимание того, что такое кэширование в браузере и что такое HTTP-заголовки.
Что такое кэширование в браузере?
Как уже было описано выше, кэширование в браузере – это когда веб-браузер сохраняет ресурсы веб-сайта, чтобы не запрашивать их вновь с сервера. Например, фоновое изображение веб-сайта может быть сохранено локально в кэше, чтобы при повторном посещении пользователем данного веб-сайта изображение загружалось из локальных файлов пользователя, и тем самым страница загружалась бы быстрее.
Браузеры хранят эти ресурсы в течение определенного периода времени, известного как время жизни информации (TTL - Time To Live). Если пользователь запросит кэшированный ресурс после истечения TTL, то браузеру придется снова обратиться к серверу, чтобы загрузить новую копию ресурса. Как браузеры и веб-серверы узнают TTL для каждого ресурса? Вот здесь в игру вступают HTTP-заголовки.
Что такое HTTP-заголовки?
Протокол передачи гипертекста (HTTP - Hypertext Transfer Protocol) представляет собой синтаксис для обмена данными во Всемирной паутине, и этот обмен данными состоит из запросов от клиентов к серверам и ответов от серверов к клиентам. Каждый из HTTP-запросов и ответов содержит ряд пар «ключ-значение», которые называют заголовками.
Заголовки содержат большое количество важной информации о каждом сообщении. Например, заголовок запроса обычно содержит:
Информацию о том, какой ресурс запрашивается
Информацию о том, какой браузер использует клиент
Информацию о том, какие форматы данных примет клиент
Заголовки ответов обычно содержат информацию о:
Успешности выполнения запроса
Языке и формате любых ресурсов в теле ответа
Заголовок cache-control может использоваться как в HTTP-запросах, так и в HTTP-ответах.
Что находится внутри заголовка cache-control?
Заголовки состоят из пар «ключ-значение», разделенных двоеточием. Для cache-control «ключ», или часть слева от двоеточия, - это всегда «cache-control». «Значение» - это то, что находится справа от двоеточия. Значений для cache-control может быть несколько, или оно может быть одно. Если их несколько, то они разделяются запятыми.
Эти значения называются директивами, и они определяют, кто может кэшировать ресурс, а также как долго эти ресурсы могут быть кэшированными, прежде чем их необходимо будет обновить. Давайте рассмотрим несколько наиболее распространенных директив cache-control:
cache-control: private
Ответ с директивой private может быть кэширован только клиентом, но никак не посредником, таким как CDN или прокси-сервером. Часто сюда относятся ресурсы, которые содержат личные данные, например, веб-сайт, отображающий личную информацию пользователя.
cache-control: public
Здесь наоборот, директива public говорит о том, что ресурс может хранится в любом кэше.
cache-control: no-store
Ответ с директивой no-store нельзя кэшировать нигде и никогда. Это означает, что при каждом запросе пользователем этих данных, требуется отправить запрос на исходный сервер для их получения. Эта директива, как правило, используется для ресурсов, содержащих конфиденциальные данные, например, информацию о банковском счете.
cache-control: no-cache
Эта директива означает, что кэшированные версии запрошенного ресурса нельзя использовать без предварительной проверки наличия обновленной версии. Обычно это делается с помощью ETag.
ETag – это еще один HTTP-заголовок, который содержит маркер, уникальный для версии ресурса на момент его запроса. Этот маркер меняется на исходном сервере при каждом обновлении ресурса.
Когда пользователь возвращается на страницу с ресурсом под директивой no-cache, клиенту всегда придется подключаться к исходному серверу и сравнивать ETag на кэшированном ресурсе с ETag на сервере. Если они совпадают, то кэшированный ресурс предоставляется пользователю. В противном случае, это означает, что ресурс был обновлен, и клиенту необходимо загрузить обновленную версию, чтобы иметь возможность предоставить его пользователю. Этот процесс гарантирует, что пользователь всегда будет получать самую последнюю версию ресурса без ненужных постоянных загрузок.
cache-control: max-age
Эта директива определяет время жизни информации, или, иными словами, сколько секунд ресурс может находиться в кэше после его загрузки. Например, если max-age установлен на 1800, то это значит, что в течение 1800 секунд (30 минут) после того, как ресурс был впервые запрошен с сервера, пользователю будет предоставляться кэшированная версия этого ресурса при последующих запросах. Если пользователь запросит этот ресурс снова по истечении этих 30 минут, то клиенту необходимо будет запросить новую копию с исходного сервера.
Директива s-maxage предназначена специально для общих кэшей, таких как CDN. Она определяет, как долго эти общие кэши могут продолжать обслуживать ресурс из кэша. Эта директива отменяет действие директивы max-age для некоторых клиентов.
Почему cache-control так важен?
Кэширование в браузере – это отличный способ сохранить ресурсы и, тем самым, улучшить процесс взаимодействия с пользователем в Интернете, но без cache-control этот процесс не был бы столь надежным. Все ресурсы на всех сайтах будут использовать одни и те же правила кэширования, а это значит, что конфиденциальная информация будет кэшироваться также, как и общедоступная информация, а ресурсы, которые часто обновляются, будут кэшироваться на то же время, что и ресурсы, которые редко обновляются.
Cache-control добавляет гибкости, которая делает кэширование в браузере действительно полезным, позволяя разработчикам определять, как будет кэшироваться каждый ресурс. Этот заголовок также позволяет разработчикам устанавливать определенные правила для посредников, что является причиной, по которой сайты, которые используют CDN, как правило, работают лучше, чем сайты, которые этого не делают.