Minio - кластер из нескольких нод

Thank you for reading this post, don't forget to subscribe!

1. Настрой­ка minio в кластере
2. Настрой­ка точ­ки вхо­да по домену
3. Про­вер­ка работы

Minio – это откры­тый сер­вер хра­не­ния объ­ек­тов, кото­рый может хра­нить неструк­ту­ри­ро­ван­ные дан­ные – фото­гра­фии, видео­ро­ли­ки, обра­зы вир­ту­аль­ной маши­ны, кон­тей­не­ры и фай­лы логов – в каче­стве объ­ек­тов. В рас­пре­де­лен­ном режи­ме Minio предо­став­ля­ет еди­ный сер­вер хра­не­ния объ­ек­тов, кото­рый объ­еди­ня­ет несколь­ко дис­ков, рас­пре­де­лен­ных меж­ду несколь­ки­ми серверами.

В целом, Minio под­хо­дит для сле­ду­ю­щих случаев:

  • хра­ни­ли­ще без репли­ка­ции поверх надеж­ной фай­ло­вой систе­мы с досту­пом по S3 (малые и сред­ние хра­ни­ли­ща, раз­ме­щен­ные на NAS и SAN);
  • хра­ни­ли­ще без репли­ка­ции поверх нена­деж­ной фай­ло­вой систе­мы с досту­пом по S3 (для раз­ра­бот­ки и тестирования);
  • хра­ни­ли­ще с репли­ка­ци­ей на неболь­шой груп­пе сер­ве­ров в одной стой­ке с досту­пом по про­то­ко­лу S3 (отка­зо­устой­чи­вое хра­ни­ли­ще с доме­ном отка­за рав­ным стойке).

Часть вызо­вов API S3 в Minio не под­дер­жи­ва­ет­ся, одна­ко, для боль­шин­ства при­ме­не­ний это не явля­ет­ся ограничением.

Для кла­сте­ра необ­хо­ди­мо чёт­ное коли­че­ство сер­ве­ров.
есть 4 сервера:
minio1 - 192.168.1.201
minio2 - 192.168.1.202
minio3 - 192.168.1.203
minio4 - 192.168.1.204

На каж­дом сер­ве­ре у нас будет добав­лен допол­ни­тель­ный диск, при­мон­ти­ро­ван­ный в дирек­то­рии /minio

 pvcreate /dev/sdb
 vgextend centos /dev/sdb
lvcreate -n minio -L 5G centos
 mkfs.ext4 -L minio /dev/mapper/centos-minio
 mkdir /minio
 mount /dev/mapper/centos-minio /minio/

cat /etc/fstab | grep minio
/dev/mapper/centos-minio /minio ext4 defaults 1 2

 

Сле­ду­ю­щие дей­ствия выпол­ня­ют­ся так­же НА КАЖДОМ СЕРВЕРЕ

Загру­зи­те бинар­ный файл Minio:
curl -O https://dl.minio.io/server/minio/release/linux-amd64/minio

В рабо­чий ката­лог будет загру­жен файл minio. Сде­лай­те его исполняемым:

chmod +x minio

Пере­ме­сти­те файл в /usr/local/bin, где его будет искать скрипт запуска.

mv minio /usr/local/bin

По сооб­ра­же­ни­ям без­опас­но­сти не сле­ду­ет запус­кать сер­вер Minio как root. Скрипт systemd (кото­рый исполь­зу­ет­ся в сле­ду­ю­щем раз­де­ле) ищет учет­ную запись поль­зо­ва­те­ля и груп­пу по име­ни minio-user, давай­те созда­дим их сейчас.

useradd -r minio -s /sbin/nologin

Пере­дай­те это­му поль­зо­ва­те­лю пра­ва на файл:

chown minio:minio /usr/local/bin/minio

Затем нуж­но создать ката­лог, в кото­ром Minio будет хра­нить фай­лы, у нас это при­мон­ти­ро­ван­ный ранее раз­дел /minio

Пере­дай­те пра­ва на ката­лог поль­зо­ва­те­лю minio-user:

chown minio:minio /minio

Обыч­но кон­фи­гу­ра­ци­он­ные фай­лы Minio хра­нят­ся в ката­ло­ге /etc. Создай­те в нем отдель­ный подкаталог.

mkdir /etc/minio

Пере­дай­те пра­ва на ката­лог поль­зо­ва­те­лю minio-user:

chown minio:minio /etc/minio

С помо­щью тек­сто­во­го редак­то­ра создай­те файл сре­ды, в кото­ром мож­но изме­нить настрой­ки по умолчанию.

vim /etc/default/minio

я уста­нав­ли­ваю свой ключ досту­па и сек­рет­ный ключ  , поэто­му я уста­нав­ли­ваю для него кон­фи­гу­ра­цию по умол­ча­нию для minio:

Добавь­те в файл сле­ду­ю­щие переменные:

[codesyntax lang="php"]

[/codesyntax]

 

  • MINIO_VOLUMES: ука­зы­ва­ет на ката­лог для хра­не­ния объектов.
  • MINIO_OPTS: изме­ня­ет пове­де­ние сер­ве­ра. Флаг –C ука­зы­ва­ет, какой кон­фи­гу­ра­ци­он­ный файл дол­жен исполь­зо­вать сер­вер Minio.  По умол­ча­нию исполь­зу­ет­ся порт 9000, но вы може­те выбрать любой дру­гой порт.

Сохра­ни­те и закрой­те файл.

chown minio:minio /etc/default/minio

Теперь нуж­но доба­вить Minio в систе­му ини­ци­а­ли­за­ции systemd. Для нача­ла загру­зи­те дескрип­тор Minio:

wget https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service

После завер­ше­ния загруз­ки в рабо­чем ката­ло­ге появит­ся файл minio.service.

Открой­те minio.service в тек­сто­вом редак­то­ре, что­бы про­смот­реть его содержимое:

vim minio.service

пра­вим там имя поль­зо­ва­те­ля, рабо­чую дирек­то­рию и так как с пере­мен­ны­ми не захо­тел нор­маль­но рабо­тать то и ExecStart:

[codesyntax lang="php"]

[/codesyntax]

 

Systemd хра­нит все unit-фай­лы в ката­ло­ге кон­фи­гу­ра­ций systemd. Открой­те этот каталог:

mv minio.service /etc/systemd/system

Запу­сти­те сле­ду­ю­щую коман­ду, что­бы пере­за­пу­стить сер­ви­сы systemd:

systemctl daemon-reload

ещё раз на вся­кий слу­чай пра­вим вла­дель­ца на всех директориях

chown -R minio:minio /etc/default/minio /usr/local/bin/minio /minio /etc/minio/

Добавь­те Minio в автозагрузку:

systemctl enable minio
systemctl start minio

systemctl status minio

[codesyntax lang="php"]

[/codesyntax]

 

про­ве­ря­ем, заходим:

http://192.168.1.201:9000/minio/login

тут вби­ва­ем наши логин пароль кото­рый мы зада­ва­ли тут:

[root@minio1 ~]# cat /etc/default/minio | grep KEY
MINIO_ACCESS_KEY="minio"
MINIO_SECRET_KEY="miniostorage"

теперь созда­дим дирек­то­рию в кото­рую смо­жем загру­жать файлы:

в пра­вом ниж­нем углу нажи­ма­ем на крестик

наби­ра­ем имя и нажи­ма­ем enter

кста­ти заглав­ные бук­вы нель­зя исполь­зо­вать но мне лень пере­де­лы­вать скрин­шот так что пиши­те малень­ки­ми буквами.

как видим дирек­то­рия успеш­но созда­на. Теперь можем доба­вим файл:

гру­зим файл:

 

все дей­ствия с фай­лом можем про­из­во­дить нажи­мая на ".…" спра­ва от файла:

теперь про­ве­ря­ем нали­чие это­го фай­ла на серверах:

[root@minio1 ~]# ll /minio/test/
total 4
drwxr-xr-x 3 minio minio 4096 Aug 16 20:21 200px-Brutal.png

[root@minio2 ~]# ll /minio/test/
total 4
drwxr-xr-x 3 minio minio 4096 Aug 16 20:21 200px-Brutal.png

[root@minio3 ~]# ll /minio/test/
total 4
drwxr-xr-x 3 minio minio 4096 Aug 16 20:21 200px-Brutal.png

[root@minio4 ~]# ll /minio/test/
total 4
drwxr-xr-x 3 minio minio 4096 Aug 16 20:21 200px-Brutal.png

 

как видим файл появил­ся на всех тачках.

 

Настройка точки входа по домену.

На все ноды ста­вим nginx

yum install nginx -y

созда­ём кон­фиг файл:

[root@minio1 ~]# cat /etc/nginx/conf.d/minio.test.ru.conf

[codesyntax lang="php"]

[/codesyntax]

 

копи­ру­ем его на каж­дый из серверов:

добав­ля­ем в авто­за­груз­ку и стар­ту­ем nginx на всех нодах:

про­ве­ря­ем что всё пашет, откры­ва­ем по домену:

как видим сле­ва сни­зу поме­ня­лось имя.

ну а что­бы прям все­гда паха­ло ста­вим keepalived на кото­рый мы и пове­сим домен

[root@minio1 ~]# yum install keepalived -y
[root@minio2 ~]# yum install keepalived -y
[root@minio3 ~]# yum install keepalived -y
[root@minio4 ~]# yum install keepalived -y

Вклю­ча­ем марш­ру­ти­за­цию пакетов

[root@minio1 ~]# cat /etc/sysctl.conf | grep -v ^#
net.ipv4.ip_forward=1

копи­ру­ем на все тачки
[root@minio1 ~]# for i in {2..4}; do scp /etc/sysctl.conf 192.168.1.20$i:/etc/sysctl.conf; done

и при­ме­ня­ем:

[root@minio1 ~]# for i in {1..4}; do ssh -t 192.168.1.20$i "sysctl -p"; done

теперь созда­дим конфиги:
[root@minio1 ~]# cat /etc/keepalived/keepalived.conf
[codesyntax lang="php"]

[/codesyntax]

 

[root@minio2 ~]# cat /etc/keepalived/keepalived.conf
[codesyntax lang="php"]

[/codesyntax]

 

[root@minio3 ~]# cat /etc/keepalived/keepalived.conf
[codesyntax lang="php"]

[/codesyntax]

 

[root@minio4 ~]# cat /etc/keepalived/keepalived.conf

[codesyntax lang="php"]

[/codesyntax]

 

теперь добав­ля­ем их в авто­за­груз­ку и стартуем:

про­ве­ря­ем что вир­ту­аль­ный айпиш­ник поднялся:

далее можем при­вя­зы­вать на DNS домен minio.test.ru к IP 192.168.1.200

 

Проверка работы

Выру­ба­ем пер­вый сер­вер minio1

[root@minio1 ~]# poweroff

смот­рим что IP переехал:

про­ве­ря­ем доступ­ность сайта
http://minio.test.ru/
видим по логам что всё ок, отве­ча­ет вто­рой сервер:

выру­ба­ем и этот сервер:

[root@minio2 ~]# poweroff

всё долж­но уйти на 3ий сер­вер. А теперь рас­ска­жу как эта херь пашет:

из 4  выру­ба­ем 1 - работает
из 4 выру­ба­ем 2 - чте­ние ещё рабо­та­ет запись уже нет

мини­мум 2 дис­ка долж­но работать