суббота, 18 марта 2023 г.

Multi-Master Replication Solutions for PostgreSQL

https://www.percona.com/blog/multi-master-replication-solutions-for-postgresql/


Впрочем, есть ещё slony, и найдено такое

Большая часть отказоустойчивых кластеров со Слоном реализованы либо на стеке коросинка с писмэйкером, либо на repmrg. Чуть меньше на патрони. При этом именно коросинк с писмэйкером позволяют реализовать сколь угодно сложные и изощрённые решения. Если не стоит задача делать master-master.


четверг, 9 марта 2023 г.

небольшой гист по работе с яндексом

 https://gist.github.com/dragonfly-net/a24199e6d048b1735311dc48dccfa3c2

Как подключить S3 как диск?

Предисловие: скорость работы оставляет желать лучшего, но иногда лучше чем ничего...

Самое популярное: s3fs

https://github.com/s3fs-fuse/s3fs-fuse

Для начала, нужно сделать бакет, и записать файл с кредами, формат ID:KEY, в файл $HOME/.passwd-s3fs или /etc/s3fs-storage если будет монтироваться через fstab, и обязательно ставим права 0600, иначе может не монтировать.

На примере edgecore

Монтирование из консоли:

sudo s3fs <bucket> <local_dir> -o passwd_file=/etc/s3fs-storage -o allow_other -o url=https://s-dt2.cloud.edgecore.ru -o use_path_request_style

Если же требуется отладка то добавляем в конец этой строки:

-o dbglevel=info -f -o curldbg

Монтирование из fstab:
<bucket>    <local_dir>        fuse.s3fs     _netdev,allow_other,use_cache=/tmp/cache,uid=1000,gid=1000,use_path_request_style,passwd_file=/etc/s3fs-storage,url=https://s-dt2.cloud.edgecore.ru    0       0
Опции меняем-убираем по вкусу, это уже запуск под нужным пользователем. Нюанс, во многих инструкциях другой формат записи:
s3fs#<bucket>    <local_dir>        fuse ......
в убунте 20.04 работают оба.

Ещё нюанс, маунт при опциях выше показывает (rw,relatime,user_id=0,group_id=0,allow_other), хотя файлы внутри от нужного пользователя...

Для яндекса: отличий не так много, url=https://storage.yandexcloud.net

Для timeweb: по идее, должно быть тоже только url=https://s3.timeweb.com, но по факту - не работает...

Также интересно рассмотреть аналог от яндекса

https://github.com/yandex-cloud/geesefs

(а ещё там есть сравнение с несколькими другими проектами)


Если захочется собрать самому, то статей много, у яндекса, сбера итд, типа
https://tecadmin.net/mount-s3-bucket-centosrhel-ubuntu-using-s3fs/

PS

s3fs показал себя крайне ненадёжно:
ls: cannot access '/srv/storage': Transport endpoint is not connected
Ремаунт помогает на короткое время.
Поставлен  geesefs - работает так же медленно (помним что это fuse-обёртка на http), но хотя бы не падает.
Проверено на яндексе и эджцентре (оно же gcore). При этом для подключения под юзера с ид 1015 строка в fstab получилась такая
app-uploads    /srv/storage     fuse.geesefs    _netdev,allow_other,--endpoint=https://s-dt2.cloud.edgecore.ru,--cache=/tmp/geesefs.cache,--memory-limit=400,--read-ahead-large=20480,--dir-mode=0755,--file-mode=0644,--uid=1015,--gid=1015 0 0

воскресенье, 19 февраля 2023 г.

systemd restart=always

 так, памятка чтобы системд вечно рестартил сервис

Необходимо, но не достаточно restart=always :

The default limit is to allow 5 restarts in a 10sec period. If a service goes over that threshold due to the Restart= config option in the service definition, it will not attempt to restart any further.


The rates are configured with the StartLimitIntervalSec= and StartLimitBurst= options and the Restart= option controls when SystemD tries to restart a service.

среда, 15 февраля 2023 г.

python3: ubuntu 16 и ошибки про docker

Проблемы только на Ubuntu16 и ниже.

apt install -y python3-pip

pip3 install --upgrade pip

После предыдущего шага pip сломается, нужно переустановить из скрипта

curl https://bootstrap.pypa.io/pip/3.5/get-pip.py -o get-pip.py; python3 get-pip.py --force-reinstall

Нужно переподключиться, чтобы подтянулись новые енвы.

pip3 install --upgrade --force-reinstall docker

pip3 install docker-compose

Если на предыдущем шаге ломается с ошибкой установки cffi : "fatal error: ffi.h: No such file or directory"

apt install libffi-dev

еще раз: 

pip3 install docker-compose

Docker: volumes, bind vs volume

https://maximorlov.com/docker-compose-syntax-volume-or-bind-mount/

https://docs.docker.com/storage/

Есть 4 вида "внешнего" хранения: volume, bind, tmpfs, named pipes. Обычно используются первые три, но tmpfs это "диск в памяти" - место ограничено рам, при перезагрузке очищается.. для чего-то временного. А вот для постоянного хранения - первые два. И разницы на самом деле не так много, volume можно управлять через docker volume, и описывать в конфиге как new_volume:/app/data. При этом, если указать в первой части полный путь, то если нет такого файла/каталога то будет создан каталог, если есть то просто подцепит. Если путь не полный то будет в /var/lib/docker/volumes/, а если первую часть (имя опустили) то /.../some_uuid. Но инфу можно получить через docker volume ls

В случае бинда всё проще, создаётся обычный mount bind, если каталога нет - будет ошибка, плюс если это не RO вольюм то его обязательно описывать ещё и в главном блоке в отдельном volume, иначе будет ошибка. Так же, данный вид более опасен тем, что можно примонтировать например /etc

суббота, 4 февраля 2023 г.

nginx redirect с исключениями

 Типовой редирект в nginx (нужен например для сео, чтобы одна страница не открывалась по двум урлам)

rewrite ^/(.*)/$ /$1 permanent;

Но иногда нужно пропустить отдельные пути, например /api/...

Оказывается, можно это сделать красиво и элегантно

rewrite ^(/(?!api/).*)/$ $1 permanent;

(но чаще слэши добавляются, читать про browsing context)

суббота, 28 января 2023 г.

mysql proxy?

 Когда-то может понадобиться mysql proxy. Была версия "официальная", которая так и называлась, но в репе последнее обновление 8 лет назад - по факту оно мертво.

Была найдена живая замена: https://github.com/sysown/proxysql/

После установки по README подключаться так

$ mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '

Есть в докере, например proxysql/proxysql, percona/proxysql

Мониторинг:

Интегрировать будем с графаной, и например, можно взять proxysql-exporter (или proxysql-grafana-prometheus - нужно ставить и проверять), но в целом есть такое

https://proxysql.com/documentation/backend-monitoring/

Что почитать:

ProxySQL — еще один mysql-proxy

Оптимизация запросов MySQL с помощью кеширования ProxySQL в Ubuntu 16.04 (по названию конечно старое, но дока за 2020, плюс там важны "азы")

https://mydbops.wordpress.com/2018/08/20/proxysql-series-percona-cluster-mariadb-cluster-galera-read-write-split/

https://mydbops.wordpress.com/2020/01/30/monitoring-mysql-using-proxysql/

(вообще на этом сайте много полезных статей про proxysql)

Есть и какая-то интеграция с реликом, другой вопрос кому он нужен при таких ценах..

https://newrelic.com/blog/how-to-relic/how-to-monitor-mysql


PS

Впрочем, можно и свой прокси написать, например как тут

https://xakep.ru/2017/02/22/mysql-proxy/

вторник, 3 января 2023 г.

Апи к нескольким хостерам

 У herzner например есть cloud, и там вполне внятное апи. Но вот к физическим серверам (которые robot) - найти не удалось... подкинули ссылку

https://docs.hetzner.com/robot/dedicated-server/robot-interfaces/

Описание

https://robot.hetzner.com/doc/webservice/en.html#preface

и для питона там есть.. чья-то левая репа. Могли бы хоть для приличия себе склонировать и синхронизироваться.

https://github.com/aszlig/hetzner

Требуется предоставить логин-пароль, что возможно не всегда. Ломается при включенном 2fa.

PS есть https://robot.hetzner.com/doc/webservice/en.html#get-ip

clo

https://clo.ru/help/terraformforclo

воскресенье, 27 ноября 2022 г.

edgecenter/gcore certbot plugin

1) git clone https://github.com/G-Core/gcore-dns-certbot-plugin

2) https://accounts.edgecenter.ru/profile/api-tokens

и добавляем токен, на данный момент достаточно уровня User

3) cd gcore-dns-certbot-plugin

vim gcore.ini

# G-Core API token used by Certbot
dns_gcore_apitoken = 000xxx

4) 

sed -i'' -e 's/gcorelabs.com/edgecenter.ru/g' certbot_dns_gcore/api_gcore.py

ИЛИ

dns_gcore_api_url = https://api.edgecenter.ru
5) получаем
certbot certonly --authenticator dns-gcore --dns-gcore-credentials=./gcore.ini -d 'example.com'

6) продлеваем
certbot renew --authenticator dns-gcore --dns-gcore-credentials=./gcore.ini

вторник, 8 ноября 2022 г.

Особенности работы с python-netbox

 Речь о той версии, которая pip install python-netbox (потому что их несколько)

Держим под рукой доку https://demo.netbox.dev/api/docs/ (можно на свой ипам открыть, /api/docs)

понедельник, 31 октября 2022 г.

Netbox в докере

 Как быстро запустить нетбокс в докере?

docker run -ti netboxcommunity/netbox

Но... оно не запустится. Потому что базы нет. И редиса, по хорошему. И конфигов..

Поэтому правильнее так

git clone -b release https://github.com/netbox-community/netbox-docker.git

Далее читаем про docker-compose.override.yml - в частности, нужно настроить правильный проброс портов nginx, это есть в доке

https://hub.docker.com/r/netboxcommunity/netbox

оно же

https://github.com/netbox-community/netbox-docker

И

docker-compose pull
docker-compose up