понедельник, 31 июля 2023 г.

yandex cloud - postgresql

 Сервис, которым управляет яндекс.

Нюансы:

  • - Для подключения требуется подключить сертификат яндекса, для юзера делается так

mkdir -p ~/.postgresql && \

wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \

--output-document ~/.postgresql/root.crt

  • - когда кончается место, кластер переходит в режим readonly
в вебе пишет Доступность Minor issues

при этом веб консоль при обращении (SQL) даёт ошибку 500, а консоль

psql: error: connection to server at "rc1b-ххх.mdb.yandexcloud.net" (1.2.3.4), port 6432 failed: session is read-only

Но можно убрать target_session_attrs и подключиться, для анализа места

Вычислить более точно размер можно по этой странице

воскресенье, 30 июля 2023 г.

yandex cloud - yc

https://cloud.yandex.ru/docs/cli/operations/install-cli

Ставим, потом делаем

yc init

Вариант - создать OAuth-токен и добавить

yc config set token <OAuth-токен>

Если нужно от сервисного аккаунта и подобное - переходим по первой ссылке и слева в меню всё есть.

Может быть несколько профилей, которые будут привязаны к разным "фолдерам". И переключение совсем не очевидно. В частности, у меня после init появился второй folder со своим набором машин и прочего, как переключиться на основной - непонятно. Чтение доки особо не помогло, зато помогло сделать так

vi ~/.config/yandex-cloud/config.yaml
profiles:
  default:
весь блок default копируем и вставляем ещё раз, переименовываем второй.
в вебе меняем фолдер на первый - его айди будет в урле, в файле выше заменяем folder-id: на основной - и получили, что дефолт теперь основной фолдер, созданный инитом фолдер - с новым именем.
Можно переключать профили через этот файл, но для переключения уже есть штатные команды

$ yc config profile list

default ACTIVE

gitops

$ yc config profile activate gitops

Profile 'gitops' activated

(второй профиль - gitops, создавался как раз под яндекс практику)

yandex cloud

Один из облаков, размещённых в РФ, при этом с какими-то соответствиями. Веб не очень понятен, часто редактирование параметра может прятаться в меню, может под точками у ресурса, может в кнопках справа сверху - и всё это без особой логики.

Также есть странные ограничения, вида увеличить диск - только на выключенной машине (95% других хостеров именно увеличить дают на лету), базы данных как сервис требуют обязательного сертификата, с которым нужно помучаться, порой очень долго, даже для тестовых сред..

Однако, всё больше компаний переходят на яндекс, плюс сам яндекс даёт гранты для перехода к ним (на год), правда несколько странное распределение - условно выдали 4 миллиона, из них только миллион на 8 основных позиций (compute cloud, object storage, vpc, вычислительные ноды кубернетеса итд), а 3 миллиона на что-то непонятное.

Кроме веба, есть cli - yc, есть поддержка terraform ("ушедшего" из рф и с рф адресов его получить нельзя, только из зеркал)

Большой плюс - есть яндекс.практикум, где ряд курсов бесплатен (впрочем, ресурсы для прохождения надо будет оплатить, да...)

Ну и в вакансиях стали появляться требования к работе с облаком от яндекса.

суббота, 29 июля 2023 г.

Дешёвый кубер кластер на "поиграться" от таймвеба

 Можно у таймвеба взять такой тариф

K8S Promo

488 ₽/мес

1 гиг рамы, но 30 гиг на диске

А дальше нюансы

Если для других тарифов есть ингресс и внешний адрес

Посмотреть IP-адрес можно командой kubectl get svc -n ingress-nginx. Адрес будет указан в столбце EXTERNAL-IP

Но! На данном промо тарифе ничего нет, поэтому ответ саппорта:

Для получения внешнего IP адреса, пожалуйста, воспользуйтесь NodePort.


kubectl несколько контекстов (кластеров)

 Часто провайдер даёт скачать конфиг, который кладётся в ~/.kube/config. А что если таких конфигов нужно больше одного? Самый простой вариант - взять программы типа lens и подключить их независимо. А можно подшаманить - и собрать их в общем конфиге. Что для этого надо?

вторник, 25 июля 2023 г.

redis на несколько нод

 1) самое простое, master-slave

 на мастере:

bind 127.0.0.1 <masterip>

на слейве

replicaof <masterip> <masterport>

рестарт, работаем. Сначала мастер, потом слейвы.
! несовместимо с параметрами типа cluster-enabled

2) redis cluster ("для новых версий"), есть особенности с 16384 хэш-слотами (hash slots). Так же, кластер собирает отдельный, хоть и комплектный, скриптик на руби, но только ради этого ставить руби - совсем перебор.

3) redis sentinel ("для старых версий")

Для всяких кластерных режимов есть нююанс что требуется минимум 3 ноды (для кворума), на каждой из которых надо поднять мастер и слейв, то есть будет 6 процессов.

Проверка статуса:

# redis-cli 

127.0.0.1:6379> info replication 

понедельник, 24 июля 2023 г.

upgrade ubuntu non-lts

 Если вдруг удалось вляпаться в не-лтс убунту, то уже через год попытки что-то сделать будут давать

E: The repository 'http://nova.clouds.archive.ubuntu.com/ubuntu impish Release' no longer has a Release file.

 do-release-upgrade -d
Checking for a new Ubuntu release
Upgrades to the development release are only 
available from the latest supported release.
root@fitfest:/home/fitfest# do-release-upgrade
Checking for a new Ubuntu release
Your Ubuntu release is not supported anymore.
For upgrade information, please visit:
http://www.ubuntu.com/releaseendoflife

доступ к ВМ без пароля рута

 Многие это умеют лет 20, но тут нюанс что нам нужна консоль виртуалки (в данном случае - провайдера gcore/edgecenter). И основная заметка именно про 2 шифта (см ниже)

Итак.

Вы можете сменить проль через grub:

1) Перезагрузите ВМ через VNC (в правом верхнем углу кнопка), а затем кликните на поле ввода (чтобы нажатия регистрировались именно на сервере). 

2) Сразу же после перезагрузки нажмите и зажмите левый Shift (можно правый зажать, а кликать левый). Для CentOS можно зажимать "C", но и Shift должен работать. Таким образом мы попадем в меню grub

3) Выберите основную ОС в меню (если с ней проблемы - выбирайте advanced options и версию с recovery mode).

4) Нужно этот пункт выбрать и нажать e, чтобы перейти в режим редактирования. Если просто нажать ентер - загрузит систему как обычно.

5) Найдите строку, которая начинается с linux, нужно в конец добавить single, init=/bin/bash или их комбинацию. Для убунты работает только сингл, с инит загрузка зависнет, но где-то работает только инит.

Эти изменения действуют только на текущую загрузку и нигде не сохраняются.

6) Нажмите F10 или ctrl+X

7) Загрузитесь в ОС как root-user. После запуска шелла пропишите: mount -o remount,rw /.

 Введите команду passwd root.

8) Введите дважды новый пароль.

9) Перезагрузите ВМ.

Также, есть режим emergency

Защита от возможности загрузиться в обход авторизации будет отдельно

редис иногда хочет писать в /etc/cron.d

Эксепшен

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

В логе

 Failed opening the RDB file dump.rdb (in server root dir /etc/cron.d) for saving: Read-only file system

Внимания тут заслуживает именно попытка записи в /etc. При этом в инете найден только 1 такой случай (в гугле)

https://stackoverflow.com/questions/57864901/redis-server-is-restarted-for-every-two-minutes-and-loses-keys-for-every-few-min

В данном случае - Ubuntu 22.04.2 LTS, redis 5:6.0.16-1ubuntu1

Быстрое решение: 

pkill -9 redis-server; systemctl restart redis-server

просто рестарт не сработает, будет тупить, потом в статусе ошибки.. нужен именно килл -9

Возможно, причина что в системе кончалось место, но это было с неделю назад.

вторник, 18 июля 2023 г.

Переход с letsencrypt на acme.sh

 Вдруг перестал работать (ошибка ссл) один старый сайт...

Your system is not supported by certbot-auto anymore.
Certbot cannot be installed.

Да, система старовата...

Description:    Debian GNU/Linux 7.11 (wheezy)

Тем не менее, надо починить. Цертбот славится своими странными зависимостями, которые на такой старой системе вряд ли удастся решить, а гит версия - там какая-то каша, certbot-auto удалён, похоже требуется свежий питон (не просто 3, а типа 3.5+).. В общем, пора закопать стюардессу.

https://github.com/acmesh-official/acme.sh/wiki

https://github.com/acmesh-official/acme.sh/wiki/How-to-install

При установке спрашивает почту, не используйте дефолтный my@example.com - не заработает! будет

"detail": "Error creating new account :: invalid contact domain. Contact emails @example.com are forbidden",

Дальше выписывать нужно типа так

/root/.acme.sh/acme.sh  --issue  --standalone  -d <DOMAIN>

но у меня в логе было

 Create new order error. Le_OrderFinalize not found. {"type":"urn:ietf:params:acme:error:unauthorized","status":401,"detail":"A requested identifier is not permitted [ххх.ru]"}

Непонятно, фикс или случайность, но помогло

./acme.sh --debug --log --set-default-ca --server letsencrypt

https://wiki.vps-server.ru/doku.php/wiki:other:lets_encrypt_errors

И судя по

acme.sh uses zerossl (under setigo) as default ca, which blockes all .ru domain. LE doesn't so change CA

https://community.letsencrypt.org/t/acme-sh-error-issuing-certificates-for-ru-zone/195388/2

это действие обязательно.

В общем, дальше

acme.sh --issue -d ххх.ru -d www.ххх.ru --webroot /var/www/ххх/data/www/ххх.ru --nginx

и всё выписало успешно.

Посмотреть список сертификатов:

acme.sh --list


composer: убрать мусор из баннера

 При установке пакетов через композер есть баг:

Info from https://repo.packagist.org: #StandWithUrkaine

Как убрать этот мусор? И главное, этот мусор содержит задержку секунд в 10, что вообще свинство

https://stackoverflow.com/questions/76130997/composer-how-to-remove-standwithukraine-cli-message

composer config -g repos.packagist composer https://mirrors.tencent.com/composer/

убирает и мусор, и задержку.
Надо понимать, что простое "скрыть сообщение" не уберёт задержку, а основная проблема именно в ней, скриптам сообщение по барабану. Так что или левая репа, или пересборка (в ссылках выше и ниже есть как).

ЗЫ модераторы в гитхабе тоже "вообще не политизированы" и просто удалили ветку с решением этой проблемы, вот соседняя
хотя.. всё нужное есть и в этом треде. Непонятно.

воскресенье, 16 июля 2023 г.

backup proxysql

 1) cp /var/lib/proxysql/proxysql.db

2) sqlite3 /var/lib/proxysql/proxysql.db .dump > /var/lib/proxysql/proxysql-dump.sql

3) sqlite3 /var/lib/proxysql/proxysql.db ".backup 'proxysql-backup.sq3'"

4) mysqldump -u admin -padmin -h 127.0.0.1 -P6032 --no-tablespaces --skip-triggers -t main mysql_servers --skip-column-statistics > /tmp/dump_servers.sql

5) select config into outfile ...


links

среда, 12 июля 2023 г.

airflow in yandex.cloud

https://cloud.yandex.ru/marketplace/products/yc/apache-airflow-2

Запуск прост: нажимаем "создать вм", создаём, получаем айпи, входим по ссш. И тут нюанс: доступы будут после логина в motd

И да, ставится это решение прямо на саму вм, без докеров-куберов.

При входе видим плашку

Welcome to Yandex.Cloud Apache Airflow version 2.2.3 image.


Main configuration file is: /etc/airflow/airflow.cfg

LocalExecutor is being used by default

Logs are stored in: /var/log/airflow/

DAGs should be placed to: /home/airflow/dags/

Airflow scheduler and webserver are run as systemd units: airflow-scheduler.service, airflow-webserver.service

Airflow metadata db is run as local PostgreSQL daemon 127.0.0.1:5432 (user=airflow,password=airflow,dbname=airflow)

Airflow webserver is listening on: http://0.0.0.0:80/

Web authentication is enabled. Default username=test_admin,password=xxx


Full documentation: https://cloud.yandex.ru/marketplace/products/f2e9ae0bm5h1ltispt7c


 

вторник, 11 июля 2023 г.

metabase: go deeper

 Продолжение к https://dragonflybsd.blogspot.com/2022/03/metabase-in-ubuntu.html

(перед обновлением версии не забываем забэкапить базу, если это штатная H2 то скопировав metabase.db.mv.db)

При запуске выше не хватает инфы, какие файлы брать для обновления, эта инфа есть в гитхабе (в который у меня не получилось попасть за пол часа ползанья по офсайту, только стало понятно что сейчас 0.46 - и всё)

https://github.com/metabase/metabase/releases/

то есть я качаю так

wget https://downloads.metabase.com/v0.46.6/metabase.jar -O metabase.0.46.6.jar

Почему в итоговом файле есть версия? Потому что при неудачном старте или проблемах просто перекидываем симлинк на прошлую версию - и изучаем. Собственно, после закачки делаю

ln -sf metabase.0.46.6.jar metabase.jar

и теперь не меняя сервис файла, делаем рестарт - и получаем новую версию.

В частности, в версии 0.46 происходит конвертация H2 базы в новый формат (v2)

Впрочем, можно запустить и в докере, прямо в гитхабе есть нужное имя, например metabase/metabase:v0.46.6

И тут есть нюанс, что без подключения volumes мы просто потеряем всё при перезапуске/обновлении, более подробная дока: https://www.metabase.com/docs/latest/installation-and-operation/running-metabase-on-docker (при желании использовать в докере - к прочтению строго обязательно, целиком)

Там же - решение некоторых проблем, типа запуск в докере с постгресом, что делать если забыли подключить вольюм итд. Но. У меня после переноса страница логина стала отдавать " An error occurred", при том что на старом инстансе работало. Что помогло:
1) очистить куки (в хроме F12 - Application - Cookies - внутри удалить куки
2) войти, получить ошибку, нажать Ctrl+F5
Перекинуло внутрь уже авторизованным. И такие странные баги бывают...

PS https://www.metabase.com/docs/latest/databases/encrypting-details-at-rest - очень желательно шифровать креды