S3 кластер на Garage, как прикрутить HAProxy
Такс, S3 кластер на Garage в предыдущем посте мы с тобой сообразили, самое время накрутить обвесов и сделать всё по взрослому. Как ты любишь — без хуйни.
Нежных сразу — нахуй, остальным велком.
Для начала установим балансировщик. То есть входная точка у кластер всегда будет одна, а дальше балансировщик будет раскидывать запросы по 3м нашим серверам в кластере. Если одна из нод пойдет по пизде, балансировщик это прозрачно разрулит и отдаст тебе файл в любом случае, даже без правки конфигов.
читать первым в телеграм читать первым в макс
Проверяем наш кластер:
docker exec -it garage-garage-1 /garage status

Работает. Дальше берем еще один сервер, который будет выступать балансировщиком. Для теста я создам в Selectel нищую виртуалочку и впихарю на нее haproxy.

Устанавливаем haproxy:
apt install haproxy
Домен для кластера я буду использовать s3.linuxfactory.ru, соответственно во всяких rclone нужно будет прописать его в параметре endpoint.
Правим конфиг /etc/haproxy/haproxy.cfg:
global
log /dev/log local0
maxconn 4096
defaults
mode tcp
timeout connect 5s
timeout client 1m
timeout server 1m
option http-server-close
timeout http-request 10s
timeout queue 1m
frontend garage_front
bind *:443 ssl crt /etc/ssl/garage.pem
option http-buffer-request
default_backend garage_back
backend garage_back
balance roundrobin
server node1 95.123.123.116:3900 check
server node2 152.44.71.205:3900 check
server node3 145.83.116.20:3900 check
Проверяем валидность конфиги:
haproxy -c -f /etc/haproxy/haproxy.cfg

Ага, хуй там плавал. Давай создадим SSL сертификат. Я конечно предпочитаю angie, чтобы он сам это сделал, но у нас haproxy, поэтому придется немного пострадать.
apt update
apt install certbot -y
systemctl stop haproxy
certbot certonly --standalone -d s3.linuxfactory.ru
cat /etc/letsencrypt/live/s3.linuxfactory.ru/fullchain.pem \
/etc/letsencrypt/live/s3.linuxfactory.ru/privkey.pem \
> /etc/ssl/garage.pem
chmod 600 /etc/ssl/garage.pem
По итогу получаем такую картинку:

Ну вроде всё хорошо. Еще раз проверяем валидность конфига и получаем заветное Configuration file is valid. Можем продолжать наши пиздострадания.
systemctl start haproxy
Открываем в браузере https://s3.linuxfactory.ru и видим:

Супер, до «Гаража» достучались, балансировщик автоматически разрулил нам всё и отправил запрос на какой-то из 3х серверов.
0 3 * * * certbot renew --quiet --deploy-hook "cat /etc/letsencrypt/live/s3.linuxfactory.ru/fullchain.pem /etc/letsencrypt/live/s3.linuxfactory.ru/privkey.pem > /etc/ssl/garage.pem && systemctl reload haproxy"
Теперь можем поправить конфиг rclone и проверить:
[garage]
type = s3
provider = Other
access_key_id = GK5eba63ef8f5
secret_access_key = a0333b9e7a9d61f595d
region = garage
endpoint = https://s3.linuxfactory.ru
Проверяем доступность:

Есть контакт. S3 отдает данные и мы видим наш файл, который вчера загружали. Отлично! Ну а теперь самое время всё к хуям сломать и посмотреть что будет. На одной из нод запускаем:
cd /opt/garage
docker compose down
Проверяем статус кластера:
docker exec -it garage-garage-1 /garage status

Развалилось! Снова пиздуем в rclone и проверяем:
rclone lsd garage:
rclone ls garage:

И ничего криминального! Кластер по-прежнему работает, балансировщик успешно разрулил эту ситуацию и перенаправляет наши запросы на 2 других живых сервера. Файлы в порядке и у тебя к ним есть доступ. Что и требовалось доказать.
Поздравляю, ты только что настроил отказоустойчивый доступ к своему личному S3 кластеру, да еще и домен с SSL прикрутил. Ну мёёёдддд!
Что дальше? А дальше будем прикручивать морду, но это уже чуть позже, возможно и завтра. Развлекайся.
