Как я практику в универе сдавал и Nextcloud настраивал

в 13:42, , рубрики: linux, облака, Облачные вычисления, Серверное администрирование, чайники

Собственно, и о чем текст?

Как часто наши ожидания расходятся суровой реальностью?

Вот и я, поступая в лучший технический ВУЗ страны на кафедру ИБ, рассчитывал на увлекательное обучение, веселую студенческую жизнь и, конечно, интересную практику. Однако, вместо того, чтобы разгадывать шифры (привет, Алан) и открывать криптексы (добрый вечер, Роберт) мне пришлось настривать облако Nextcloud на нескольких серверах, объединенных в кластер. И это оказалось интересно!

«Ну и что в этом сложного?» — подумали Вы. Действительно, задачка весьма и весьма тривиальная. Однако, когда я искал в Сети информацию по данному вопросу, мне так и не удалось найти туториала, который объединял бы вместе все части настройки. Поэтому, дабы съэкономить время таких же чайников сетевого администрирования, я пишу эту, с Вашего позволения, статью.

Итак, что мы получим в конце — небольшое облако Nextcloud, имеющее в основе мастер-сервер (да, да, конечно нам нужен прокси. И несколько мастер-серверов. А еще скилл. Если Вы ждете всего этого — прошу прощения.), несколько (в данном случае 2) серверов, играющих роль объедененного, отказоустойчивого хранилища, БД.

Миленькое такое облачко, для маленькой такой компании.

Ну, поехали

Начальные условия

Прежде всего, мы должны подготовить оборудование (в моем случае VirtualBox, с созданными в нем тремя машинами).

Мастер — 192.168.0.105
Сервер1 — 192.168.0.108
Сервер2 — 192.168.0.109

1. Операционная система — Ubuntu Server 16.04.
Параметры машин особой роли не играют — для разворачивания нашего небольшого облака достаточно мощности среднего (совсем среднего) компьютера. Завышенные параметры виртуальных машин могут сыграть с Вами злую шутку — когда я показывал практику на университетском компьютере с четырьмя гигабайтами ОП, запуск третьей машины привел к падению компа. Хотя, может в этом виновата очередная кастомная Unix-система, стоявшая на нём?

2. Работающая сеть.
Если Вы, как и я, пользуетесь ВиртуалБокс, то советую в настройках сети указать «Сетевой мост», как тип подключения. Таким образом вы можете пропинговать сервер в коробке и с основной системы, и с других машин.

3. Хороший плейлист (опционально)
По истечении n-ного часа танцев с бубном в поисках оптимального решения (быть может, я еще в процессе) стало совсем невмоготу.

Настройка кластера

Чтобы получить отказоустойчивое хранилище, состоящее из нескольких серверов, нам нужен кластер. Я выбрал Gluster, потому что смог найти отличные маны на русском(!!) языке.

Начнем с установки.

Открываем консоль нашего сервера и вводим следующее:

sudo apt-get install python-software-properties

Затем, подключаемся к репозиторию:

sudo add-apt-repository ppa:gluster/glusterfs-3.8
    sudo apt-get update

И, наконец, устанавливаем:

sudo apt-get install glusterfs-server

Производим те же самые действия на втором (n-ном) сервере.

Совет! (для чайников)
Впервые столкнувшись с настройкой серверов в ВМ я был неприятно удивлен отсутствием общего буфера между гостевой и основной ОС (хотя, это было ожидаемо). Поэтому, для общения с машинами я использовал Путти . Скачиваем, запускаем путти.экзе. Перед использованием не забываем установить на машинах, которым будем обращаться, openssh-server:

sudo apt-get install openssh-server

Думаю, этот же клиент можно использовать и при общении с настоящими машинами. А, может, и лучше есть?

Итак, Gluster установлен. Теперь, создаем подключение. Но прежде, узнаем ip-адреса наших серверов:

ifconfig

Вот теперь создаем, прописывая с первого сервера следующее (прежде, авторизовавшись под root-ом):

gluster peer probe 192.168.0.109

peer probe: success.

Отлично, теперь мы имеем 2 сервера в кластере. Производим эту операцию столько раз, сколько серверов мы хотим объединить в кластере, меняя лишь ip-адрес сервера.

Хранилище, которое мы создаем при помощи Glusterfs, имеет несколько видов хранения контента (подробнее, в ссылке выше). Нас интересует replicated — контент зеркально копируется на все сервера в кластере.

Пока, нам негде хранить данные, поэтому создадим папки на наших серверах:
на первом:

mkdir /mnt/server1

и на втором:

mkdir /mnt/server2

Финальная часть кластера — создаем хранилище:

gluster volume create nextcloud replica 2 transport tcp 192.168.0.108:/mnt/server1 192.168.0.109:/mnt/server2 force

где nextcloud — название нашего хранилища, а 2 — количество серверов в кластере.

Не забываем про словечко force в конце — можно получить ошибку и долго ломать голову, что же не так?

Запускаем:

gluster volume start nextcloud

Работа с кластером почти завершена. Остальное — после установки облака.

Установка Nextcloud

Для этого нам понадобится наш мастер сервер. Заходим под рут правами и наслаждаемся.
Для установки можно использовать эту статью. Доходим до Шаг 5. Останавливаемся.

Скачиваем архив с облаком:

cd ~
wget --no-check-certificate https://download.nextcloud.com/server/releases/nextcloud-11.0.0.tar.bz2
sudo tar -C /var/www -xvjf ~/nextcloud-11.0.0.tar.bz2 
rm ~/nextcloud-11.0.0.tar.bz2

Создаем пару папок:

sudo mkdir /var/www/nextcloud/data
sudo mkdir /var/www/nextcloud/assets

Самый ответственный момент. Вспоминаем про наш кластер и подключаем его к мастер серверу:

mount.glusterfs 192.168.0.108:/nextcloud /var/www/nextcloud/data/

Теперь все файлы, попадающие в наше облако будут скопированы на все сервера.
Завершаем установку, следуя советам из статьи.

Что в итоге?

Ну и что же у нас получилось? А получилось небольшое облако, которое отказоустойчиво к падению серверов, которые хранят данные — попробуйте специально уронить один из них — мастер немного подумает и снова все будет работать. Когда упавший сервер восстановится, данные на нем автоматически обновятся.

Конечно, узким местом является мастер-сервер. Наличие нескольких мастеров, работающих с одной БД, под управлением, например, Galera и прокси-сервера, отвечающего за распределение трафика между ними, в разы повысило бы отказоустойчивость системы (хотя, врядли сейчас её можно таковой назвать). Может быть в следующей статье?

Если Вы дочитали до этого момента вы герой — спасибо огромное за внимание.
Для приятного сообщества — приятно писать.

Автор: romabibi

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js