Новые каталоги
This commit is contained in:
141
PostgreSQL/PostgreSQL_Exporter.md
Normal file
141
PostgreSQL/PostgreSQL_Exporter.md
Normal file
@ -0,0 +1,141 @@
|
||||
Устанавливаю согласно инструкции из:
|
||||
|
||||
https://github.com/prometheus-community/postgres_exporter
|
||||
|
||||
Подключаюсь к нужной машине
|
||||
```sh
|
||||
ssh igor@ccalm.org -p 2200
|
||||
```
|
||||
|
||||
Configure postgresql.conf
|
||||
```conf
|
||||
shared_preload_libraries = 'pg_stat_statements'
|
||||
pg_stat_statements.track = all
|
||||
```
|
||||
|
||||
## 1. Установка Docker и Docker Compose
|
||||
Если Docker не установлен, установим его:
|
||||
```sh
|
||||
sudo apt update && sudo apt upgrade -y &&
|
||||
sudo apt install -y docker.io docker-compose &&
|
||||
sudo systemctl enable --now docker
|
||||
```
|
||||
|
||||
## 2. Установка postgres-exporter в докере из заранее подготовленного образа
|
||||
|
||||
```sh
|
||||
sudo mkdir -p /opt/postgres-exporter &&
|
||||
sudo chown $USER:$USER /opt/postgres-exporter &&
|
||||
cd /opt/postgres-exporter
|
||||
```
|
||||
|
||||
Создаю файл с настройками
|
||||
```sh
|
||||
cd /opt/postgres-exporter/ &&
|
||||
cat > docker-compose.yml <<'EOF'
|
||||
services:
|
||||
postgres-exporter:
|
||||
image: quay.io/prometheuscommunity/postgres-exporter
|
||||
container_name: postgres-exporter
|
||||
restart: unless-stopped
|
||||
network_mode: "host"
|
||||
environment:
|
||||
DATA_SOURCE_URI: "postgresql://postgres:309A86FF65A78FB428F4E38DFE35F730@localhost:5432/postgres?sslmode=disable"
|
||||
volumes:
|
||||
- ./postgres_exporter.yml:/etc/postgres_exporter.yml
|
||||
command:
|
||||
- "--config.file=/etc/postgres_exporter.yml"
|
||||
|
||||
EOF
|
||||
```
|
||||
|
||||
Создаём файл с настройками
|
||||
```sh
|
||||
cd /opt/postgres-exporter/ &&
|
||||
cat > postgres_exporter.yml <<'EOF'
|
||||
collectors:
|
||||
- database
|
||||
- index
|
||||
- query
|
||||
- table
|
||||
EOF
|
||||
```
|
||||
Запускаю:
|
||||
```sh
|
||||
cd /opt/postgres-exporter &&
|
||||
sudo docker-compose up -d
|
||||
```
|
||||
|
||||
Проверяю запущен ли докер
|
||||
```sh
|
||||
sudo docker ps
|
||||
```
|
||||
|
||||
Testing with:
|
||||
```sh
|
||||
curl "http://127.0.0.1:9187/metrics"
|
||||
```
|
||||
|
||||
Посмотреть журнал за сегодня:
|
||||
```sh
|
||||
journalctl --since today
|
||||
```
|
||||
|
||||
Настраиваем простую авторизацию при помощи HAProxy для скачивания при помощи удаленного сервера
|
||||
|
||||
```sh
|
||||
sudo mcedit /etc/haproxy/haproxy.cfg
|
||||
```
|
||||
Настраиваем:
|
||||
```text
|
||||
acl v_metrics_nd path_beg /metrics_nd
|
||||
acl v_basic_auth http_auth(prometheus_list)
|
||||
http-request auth realm Metrics_org_ccalm_nd if v_metrics_nd !v_basic_auth
|
||||
use_backend b_metrics_nd if v_metrics_nd v_basic_auth
|
||||
|
||||
backend b_metrics_nd
|
||||
mode http
|
||||
option http-keep-alive
|
||||
http-request replace-path .* /metrics
|
||||
server web1 127.0.0.1:9100 check
|
||||
```
|
||||
|
||||
Проверяем
|
||||
```sh
|
||||
haproxy -f /etc/haproxy/haproxy.cfg -c
|
||||
````
|
||||
Перезагружаем:
|
||||
```sh
|
||||
sudo systemctl restart haproxy
|
||||
````
|
||||
|
||||
|
||||
|
||||
Подключаюсь к машине где Prometeus:
|
||||
|
||||
```sh
|
||||
ssh igor@192.168.200.84 -p 22
|
||||
```
|
||||
|
||||
Перезагружаем prometheus чтобы он начал собирать метрики
|
||||
```sh
|
||||
sudo systemctl restart prometheus
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
Теперь можно настраивать графану, вот готовыдашбоард
|
||||
Открыть Grafana
|
||||
Перейти в Dashboards → Import
|
||||
Вставить ID: 9628
|
||||
Выбрать источник данных Prometheus (с PostgreSQL Exporter)
|
||||
Нажать Import
|
||||
|
||||
|
||||
Теперь можно настраивать графану, вот готовыдашбоард
|
||||
Открыть Grafana
|
||||
Перейти в Dashboards → Import
|
||||
Вставить ID: 12273
|
||||
Выбрать источник данных Prometheus (с PostgreSQL Exporter)
|
||||
Нажать Import
|
||||
61
PostgreSQL/PostgreSQL_credcheck.md
Normal file
61
PostgreSQL/PostgreSQL_credcheck.md
Normal file
@ -0,0 +1,61 @@
|
||||
****************************************************************************************************
|
||||
Установка и настройка проверяльщик паролей credcheck
|
||||
PostgreSQL https://www.postgresql.org/about/news/credcheck-v200-released-2654/
|
||||
|
||||
Тестовая база
|
||||
```sh
|
||||
ssh administrator@10.201.3.36 -p 22
|
||||
```
|
||||
|
||||
Похоже в официальном репозитории нет credcheck, так что если будем искать то не найдём:
|
||||
```sh
|
||||
apt search credcheck
|
||||
```
|
||||
|
||||
Поэтому устанавливаем из репозиториев (компилируем на тестовой машине потом устанавливаем на продакшен):
|
||||
```sh
|
||||
sudo apt-get install postgresql-server-dev-16 &&
|
||||
sudo apt-get install build-essential &&
|
||||
git clone https://github.com/HexaCluster/credcheck.git &&
|
||||
cd credcheck &&
|
||||
make &&
|
||||
sudo make install
|
||||
```
|
||||
|
||||
Подключаемся к базе данных для выполнения запросов
|
||||
```sh
|
||||
psql -h 127.0.0.1 -U postgres -d transit
|
||||
```
|
||||
Проверяем что настройки имеются:
|
||||
```sh
|
||||
SELECT name, setting, unit, source, sourcefile, sourceline
|
||||
FROM pg_settings
|
||||
WHERE name LIKE 'credcheck%';
|
||||
```
|
||||
|
||||
Читаем текущие настройки
|
||||
```sh
|
||||
SHOW ALL;
|
||||
```
|
||||
|
||||
Создаём расширение в базе postgres:
|
||||
```sh
|
||||
CREATE EXTENSION credcheck;
|
||||
```
|
||||
|
||||
Теперь можно настроить расширение по https://tembo.io/docs/getting-started/postgres_guides/extensions/credcheck:
|
||||
-- Configure credential policies to enforce username and password standards and reload configuration files
|
||||
ALTER SYSTEM SET credcheck.username_min_length = 4;
|
||||
ALTER SYSTEM SET credcheck.password_min_length = 8;
|
||||
ALTER SYSTEM SET credcheck.password_min_special = 1;
|
||||
SELECT pg_reload_conf();
|
||||
|
||||
-- Attempt to create a user for a new park ranger, which does not meet the credential policies
|
||||
CREATE USER ranger_ WITH PASSWORD 'forest';
|
||||
ERROR: password length should match the configured credcheck.password_min_length
|
||||
|
||||
Для пароля установить:
|
||||
ALTER SYSTEM SET credcheck.password_expiration_days = 90;
|
||||
SELECT pg_reload_conf();
|
||||
|
||||
Для приложений нужно изменить политику паролей (менять не автоматически а по расписанию у администратора):
|
||||
348
PostgreSQL/PostgreSQL_install.md
Normal file
348
PostgreSQL/PostgreSQL_install.md
Normal file
@ -0,0 +1,348 @@
|
||||
# Install PostgreSQL database
|
||||
|
||||
Coonect lto need server:
|
||||
```sh
|
||||
wsl
|
||||
```
|
||||
Or coonect to need server:
|
||||
```sh
|
||||
ssh igor@ccalm.org -p 2200
|
||||
```
|
||||
|
||||
****************************************************************************************************
|
||||
Установка PostgreSQL 11.5 windows10 из https://www.enterprisedb.com/download-postgresql-binaries:
|
||||
Скачал, создаю дирректорию хранения данных:
|
||||
O:\MyDocuments\DataBases\postgresql-12.3-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_12.3
|
||||
O:\MyDocuments\DataBases\postgresql-10.13-1-windows-x64-binaries\pgsql\bin\initdb.exe -D O:\MyDocuments\DataBases\Data_PostgreSQL_10.13
|
||||
Потом создать BAT файл с тем текстом что отобразится при создании каталога базы
|
||||
База данных создаётся не под пользователем postgres а под локальным пользователем igor
|
||||
****************************************************************************************************
|
||||
Установка PostgreSQL 14 ubuntu 22.04 или 24.04
|
||||
```sh
|
||||
sudo apt-get update
|
||||
sudo apt-get install postgresql postgresql-contrib -y
|
||||
```
|
||||
Или так если нужно установить PostGIS
|
||||
```sh
|
||||
sudo apt-get install postgis
|
||||
```
|
||||
Для удаления PostGIS в месте с зависимыми пакетами:
|
||||
```sh
|
||||
sudo apt-get remove --auto-remove postgis &&
|
||||
sudo apt-get purge postgis
|
||||
```
|
||||
Добавить русскую локаль если её нет:
|
||||
```sh
|
||||
sudo locale-gen ru_RU &&
|
||||
sudo locale-gen ru_RU.UTF-8 &&
|
||||
sudo locale-gen kk_KZ &&
|
||||
sudo locale-gen kk_KZ.UTF-8
|
||||
```
|
||||
Проверить какая локаль по умолчанию:
|
||||
```sh
|
||||
localectl status
|
||||
```
|
||||
И переконфигурировать локаль по умолчанию в ru_RU.UTF-8 (а то в mc могут быть кракозябры):
|
||||
```sh
|
||||
sudo dpkg-reconfigure locales
|
||||
```
|
||||
Для задания пароля в PostgreSQL выполнить:
|
||||
```sh
|
||||
sudo -u postgres psql &&
|
||||
\password postgres
|
||||
```
|
||||
Чтобы выйти нужно выпольнить команду: \q
|
||||
|
||||
Роль входа по умолчанию: postgres пароль можно поменять когда в pg_hba.conf установить trust
|
||||
Задать пароль:
|
||||
sudo -u postgres psql
|
||||
postgres=> SELECT usename FROM pg_user;
|
||||
postgres=> alter user postgres password 'PasSecrKey1';
|
||||
postgres=> \q
|
||||
|
||||
Настройка postgresql.conf: http://www.lissyara.su/archive/1c_8.2+postgresql/
|
||||
Создаём базу данных выполнив функцию:
|
||||
CREATE DATABASE CCALM
|
||||
WITH OWNER = postgres
|
||||
TEMPLATE = template0
|
||||
ENCODING = 'UTF8'
|
||||
TABLESPACE = pg_default
|
||||
LC_COLLATE = 'ru_RU.UTF-8'
|
||||
LC_CTYPE = 'ru_RU.UTF-8'
|
||||
CONNECTION LIMIT = -1;
|
||||
|
||||
Файл настроек postgresql:
|
||||
```sh
|
||||
sudo mcedit /etc/postgresql/16/main/postgresql.conf
|
||||
```
|
||||
listen_addresses='*' #Разрешить подключение с внешки
|
||||
#Для 9й версии разрешаем экранирующие символы \' и другие без спец символа "E" перед строкой
|
||||
backslash_quote = on
|
||||
escape_string_warning = off
|
||||
standard_conforming_strings = off
|
||||
Чтобы воводил двоичные данные по старому изменить на:
|
||||
bytea_output = 'escape'
|
||||
|
||||
Настраиваю лимиты а то в саранче не выполняло большой запрос "Ошибка ввода/ввывода при отправке бэкенду"
|
||||
|
||||
Для создания нового пользователя выполнить:
|
||||
sudo -u postgres psql
|
||||
CREATE ROLE zholak LOGIN ENCRYPTED PASSWORD 'md5c0029083b93a3b16207a83b45e8a324a' NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION;
|
||||
|
||||
Для подключения к определённой базе данных выполнить команду:
|
||||
sudo -u postgres psql
|
||||
\list or \l: для отображения всех баз
|
||||
\connect zholak zholak
|
||||
\dt для отображения всех таблиц
|
||||
|
||||
или написать со своим IP: host all all 2.133.238.240/24 trust
|
||||
Для подключения с любых IP адресов в "
|
||||
```sh
|
||||
sudo mcedit /etc/postgresql/16/main/pg_hba.conf
|
||||
```
|
||||
host all all 0.0.0.0/0 md5
|
||||
Либо с одного конкретного то: host all all 92.46.48.37/24 md5
|
||||
А также поменять на listen_addresses = '*' в postgresql.conf
|
||||
Потом перезагрузить postgres:
|
||||
sudo service postgresql restart
|
||||
sudo /etc/init.d/postgresql stop
|
||||
sudo /etc/init.d/postgresql restart
|
||||
sudo /etc/init.d/postgresql start
|
||||
Проверить запущен или нет то:
|
||||
sudo /etc/init.d/postgresql status
|
||||
Посмотрель лог загрузки PostGreSQL:
|
||||
dmesg |grep pg
|
||||
Чтобы посмотреть чем занят порт выполнить команду:
|
||||
sudo netstat -tap | grep 5432
|
||||
|
||||
Создать Backup (при переносе со старой на новую версию может быть не совместим для этого нужно делать бакам в текстовом формате: plain):
|
||||
pg_dump bigfoott_shop>/home/igor/bigfoott_shop.sql --host=127.0.0.1 --username=bigfoott_root
|
||||
pg_dump ASDC_Locust>/home/igor/ASDC_Locust.sql --host=127.0.0.1 --username=postgres
|
||||
pg_dump zholak>/home/zholak/zholak.sql --host=127.0.0.1 --username=postgres
|
||||
pg_dump stations>/home/administrator/pg_dump.sql --host=127.0.0.1 --username=postgres --format=custom
|
||||
pg_dump transit>/home/administrator/transit.sql --host=127.0.0.1 --username=postgres
|
||||
pg_dump weather>weather.backup --host=127.0.0.1 --username=postgres --format=custom
|
||||
pg_dump transit>transit.backup --host=127.0.0.1 --username=postgres --format=custom
|
||||
|
||||
pg_dump CCALM>CCALM.backup --host=127.0.0.1 --username=postgres --format=custom
|
||||
|
||||
pg_dump weather_ru>weather_ru.backup --host=127.0.0.1 --username=postgres --format=custom
|
||||
pg_dump -d CCALM -h 192.168.0.161 -U postgres -f O:\dumps\CCALM.sql
|
||||
pg_dump --dbname=postgresql://postgres:PostPas1key@127.0.0.1:5432/ShopMaster | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).ShopMaster.gz
|
||||
|
||||
Востановить Dump из текстового файла:
|
||||
psql ASDC_Locust < /home/igor/ASDC_Locustfcron.backup
|
||||
psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop_old2 < E:\dumps\bigfoottrade\dump.sql
|
||||
psql -h 127.0.0.1 -U postgres -d monitoring < /home/igor/pg_dump.sql
|
||||
psql -h 127.0.0.1 -U postgres -d transit_2024 < /home/administrator/transit.sql
|
||||
psql -h 127.0.0.1 -U postgres -d bigfoot_shop < /home/igor/goods.sql
|
||||
|
||||
Создание SH скрипта для ежедневного бакапирования и архивации в ZIP файл:
|
||||
/mnt/O_DRIVE/MyDocuments/DataBases/dumps/run.sh
|
||||
#!/bin/sh
|
||||
pg_dump --dbname=postgresql://postgres:A6dCgeDDWHbC@127.0.0.1:5432/Queue | gzip > /mnt/disk1/backup/$(date +%Y-%m-%d).Queue.gz
|
||||
|
||||
Для востановления через pg_restore (версии баз должны совпадать а то может не восстановиться):
|
||||
su - postgres
|
||||
pg_restore -U <username> -d <dbname> -1 <filename>.dump
|
||||
pg_restore -U postgres -d zholak -1 /home/zholak/zholak_16.01.2019.backup
|
||||
pg_restore -U postgres -d monitoring -1 /home/igor/stations_20200626.backup
|
||||
pg_restore -U postgres -d transit_new -1 /home/administrator/temp/transit.backup
|
||||
pg_restore -U postgres -d transit -1 /home/administrator/transit.backup
|
||||
pg_restore --host=127.0.0.1 --username=postgres --dbname=transit_2024 --verbose /home/administrator/transit.backup
|
||||
|
||||
sudo -u postgres psql -d transit -f /tmp/transit.backup
|
||||
|
||||
Или из архива (первоначально задать trust на 127.0.0.1) так:
|
||||
gunzip -c /var/www/dump.sql.gz | psql -h 127.0.0.1 -U bigfoott_root -d bigfoott_shop
|
||||
|
||||
****************************************************************************************************
|
||||
Настройка отображения статистики для PostgreSQL:
|
||||
https://habr.com/ru/articles/488968/
|
||||
|
||||
SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC;
|
||||
SELECT * FROM pg_stat_activity
|
||||
SELECT * FROM pg_stat_replication
|
||||
SELECT * FROM pg_stat_all_tables
|
||||
|
||||
Полный список: https://postgrespro.ru/docs/postgrespro/9.5/monitoring-stats
|
||||
|
||||
Установить Prometheus сграфаной Grafana для PostgreSQL там по умолчанию есть набор настроек для сбора статистики с PostgreSQL
|
||||
По мотивам: https://grafana.com/oss/prometheus/exporters/postgres-exporter/
|
||||
По мотивам: https://www.youtube.com/watch?v=B_yz37CR1XU
|
||||
****************************************************************************************************
|
||||
Установка pgagent
|
||||
sudo apt-get update
|
||||
sudo apt-get install pgagent
|
||||
Выполнить в консоли запрос:
|
||||
psql -h localhost -U postgres
|
||||
create extension pgagent;
|
||||
\q
|
||||
Для разрешения подключения откройте файл pg_hba.conf и замените строку на:
|
||||
host all all 127.0.0.1/32 md5
|
||||
|
||||
Можно для теста запустить pgagent с повышенным уровнем логирования:
|
||||
/usr/bin/pgagent -f -l 2 hostaddr=127.0.0.1 dbname=postgres user=postgres password=lelPfAtgQWhHYfy1SsHk
|
||||
|
||||
Если файла нет то пытаюсь его создать:
|
||||
sudo mcedit /lib/systemd/system/pgagent.service
|
||||
|
||||
[Unit]
|
||||
Description=PostgreSQL PgAgent Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=postgres
|
||||
ExecStart=/usr/bin/pgagent -f hostaddr=127.0.0.1 dbname=postgres user=postgres password=PasSecrKey1
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
Проверяю что сервис был запущен:
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable pgagent
|
||||
sudo service pgagent start
|
||||
sudo systemctl status pgagent
|
||||
|
||||
|
||||
Для проверки пробуем подключиться к базе данных
|
||||
sudo -u postgres psql -h 127.0.0.1 -U postgres -d postgres
|
||||
\q
|
||||
|
||||
Похоже что нужно ещё создать файл паролей так как агент не знает как подключаться:
|
||||
sudo -u postgres touch /var/lib/postgresql/.pgpass
|
||||
sudo -u postgres chmod 600 /var/lib/postgresql/.pgpass
|
||||
sudo -u postgres mcedit /var/lib/postgresql/.pgpass
|
||||
И прописать в него:
|
||||
127.0.0.1:5432:postgres:postgres:PasSecrKey1
|
||||
Где используется такой формат: hostname:port:database:username:password
|
||||
Затем:
|
||||
sudo systemctl enable pgagent
|
||||
sudo service pgagent start
|
||||
sudo service pgagent status
|
||||
Посмотреть логи:
|
||||
sudo journalctl -u pgagent
|
||||
|
||||
****************************************************************************************************
|
||||
Для добавления автоматического бакапирования Postgresql базы *.backup создать скрипт:
|
||||
|
||||
|
||||
****************************************************************************************************
|
||||
Перенос базы PostgreSQL на другой диск: https://internet-lab.ru/postgresql_ubuntu_move
|
||||
|
||||
****************************************************************************************************
|
||||
Установка PostGIS на PostgreSQL выше 9.0 версии:
|
||||
sudo apt-get install postgis postgresql-9.3-postgis-2.1
|
||||
Для 10й версии:
|
||||
sudo apt install postgresql-10-postgis-2.4
|
||||
sudo apt install postgresql-10-postgis-scripts
|
||||
Для 12й версии:
|
||||
sudo apt install postgresql-12-postgis-2.4
|
||||
|
||||
Создать базу данных и выполнть на ней следующие команды:
|
||||
-- Enable PostGIS (includes raster)
|
||||
CREATE EXTENSION postgis;
|
||||
-- Enable Topology
|
||||
CREATE EXTENSION postgis_topology;
|
||||
-- fuzzy matching needed for Tiger
|
||||
CREATE EXTENSION fuzzystrmatch;
|
||||
-- rule based standardizer
|
||||
CREATE EXTENSION address_standardizer;
|
||||
-- example rule data set
|
||||
CREATE EXTENSION address_standardizer_data_us;
|
||||
-- Enable US Tiger Geocoder
|
||||
CREATE EXTENSION postgis_tiger_geocoder;
|
||||
|
||||
У меня начало выдавать NOTICE: version "2.2.1" of extension "postgis_topology" is already installed и PostGIS перестал работать на моём PostgreSQL 9.5.17
|
||||
Аказывается расширение кудато делось установил:
|
||||
sudo apt-get install postgresql-9.5-postgis-2.2
|
||||
****************************************************************************************************
|
||||
Для добавления TOTP авторизации в Postgresql выполнить:
|
||||
CREATE EXTENSION otp;
|
||||
|
||||
|
||||
****************************************************************************************************
|
||||
sudo apt-get install libpq-dev libpq-fe
|
||||
Если есть несовместимость libpq-dev : Зависит: libpq5 (= 14.3-0ubuntu0.22.04.1) но 14.3-1.pgdg22.04+1 должен быть установлен
|
||||
То удали ранее добавленный репозиторий: /etc/apt/sources.list.d/pgadmin4.list и обнови а потом попробуй установить заново libpq-dev
|
||||
apt update
|
||||
****************************************************************************************************
|
||||
Установка phpPgAdmin через репозиторий:
|
||||
sudo apt-get install phppgadmin
|
||||
Можно открыть так: http://localhost/phppgadmin
|
||||
Для доступа с любых ip адресов в файле: /etc/phppgadmin/apache.conf изменить на allow from all
|
||||
Чтоб можно было залогинется под пользователем postgres меняем в:
|
||||
/etc/phppgadmin/config.inc.php extra_login_security в false
|
||||
Если phpphadmin не дает залогиниться и пишет "Неверный логин", нужно в postgresql.conf прописать $conf['servers'][0]['host'] = 'localhost';
|
||||
|
||||
Другой вариант скачать с сайта последнюю версию с "http://phppgadmin.sourceforge.net/doku.php".
|
||||
****************************************************************************************************
|
||||
Установка pgAdmin4 через докер контейнер
|
||||
|
||||
```sh
|
||||
sudo mkdir -p /opt/pgAdmin4 &&
|
||||
sudo chmod -R 777 /opt/pgAdmin4 &&
|
||||
sudo chown -R $USER:$USER /opt/pgAdmin4
|
||||
```
|
||||
|
||||
```sh
|
||||
cd /opt/pgAdmin4 &&
|
||||
cat > docker-compose.yml <<'EOF'
|
||||
services:
|
||||
pgadmin:
|
||||
image: dpage/pgadmin4
|
||||
container_name: pgadmin4
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "5050:80"
|
||||
environment:
|
||||
PGADMIN_DEFAULT_EMAIL: irigm@mail.ru
|
||||
PGADMIN_DEFAULT_PASSWORD: 123456
|
||||
volumes:
|
||||
- pgadmin_data:/var/lib/pgadmin
|
||||
|
||||
volumes:
|
||||
pgadmin_data:
|
||||
EOF
|
||||
```
|
||||
|
||||
## 4. Запуск контейнера
|
||||
|
||||
```sh
|
||||
cd /opt/pgAdmin4 &&
|
||||
sudo docker compose up -d
|
||||
```
|
||||
|
||||
```sh
|
||||
cd /opt/pgAdmin4 &&
|
||||
sudo docker compose down
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Проверить что не записан левый репозиторий для phppgadmin в /ect/opt/
|
||||
curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add
|
||||
sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/bionic pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'
|
||||
sudo apt install pgadmin4
|
||||
|
||||
И не запустился сервер оболочка пытается стартануть а сервер нет...
|
||||
|
||||
sudo curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add
|
||||
sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/focal pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update'
|
||||
sudo apt install pgadmin4
|
||||
|
||||
Тоже не заработал
|
||||
|
||||
Попробовать так: https://www.tecmint.com/install-postgresql-with-pgadmin4-on-linux-mint/
|
||||
|
||||
****************************************************************************************************
|
||||
Балансировщик назрузки и потоковая репликация:
|
||||
Pgpool-II https://www.youtube.com/watch?v=qpxKlH7DBjU сервер с высокой доступностью
|
||||
https://ritorika.com.ua/dokument/6/pgpool-chto-jeto
|
||||
****************************************************************************************************
|
||||
Мониторинг запросов postgresql
|
||||
|
||||
|
||||
12
PostgreSQL/PostgreSQL_replication.md
Normal file
12
PostgreSQL/PostgreSQL_replication.md
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
Создано на основе https://www.cherryservers.com/blog/how-to-set-up-postgresql-database-replication
|
||||
|
||||
Подключаюсь к нужной машине
|
||||
```sh
|
||||
ssh igor@192.168.200.84 -p 22
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
137
PostgreSQL/PostgreSQL_replication_synchronous.md
Normal file
137
PostgreSQL/PostgreSQL_replication_synchronous.md
Normal file
@ -0,0 +1,137 @@
|
||||
# Настройка PostgreSQL в синхронном режиме репликации
|
||||
|
||||
Синхронная репликация в PostgreSQL гарантирует, что данные записываются на реплику перед подтверждением транзакции на основном сервере (Primary). Это повышает надежность, но может замедлить запись из-за необходимости ожидания отклика реплики.
|
||||
|
||||
---
|
||||
|
||||
## **1. Подготовка серверов**
|
||||
Допустим, у нас есть:
|
||||
- **Основной сервер (Primary):** `192.168.1.1`
|
||||
- **Реплика (Standby):** `192.168.1.2`
|
||||
|
||||
Убедитесь, что PostgreSQL установлен на обоих серверах.
|
||||
|
||||
---
|
||||
|
||||
## **2. Настройка основного сервера (Primary)**
|
||||
|
||||
### **2.1 Разрешаем подключение реплики**
|
||||
Редактируем `postgresql.conf`:
|
||||
```sh
|
||||
sudo nano /etc/postgresql/15/main/postgresql.conf
|
||||
```
|
||||
Добавляем/изменяем параметры:
|
||||
```conf
|
||||
wal_level = replica
|
||||
synchronous_commit = on
|
||||
synchronous_standby_names = 'replica1'
|
||||
max_wal_senders = 3
|
||||
wal_keep_size = 256MB
|
||||
hot_standby = on
|
||||
```
|
||||
Редактируем `pg_hba.conf`, добавляя доступ для реплики:
|
||||
```sh
|
||||
sudo nano /etc/postgresql/15/main/pg_hba.conf
|
||||
```
|
||||
Добавляем строку:
|
||||
```conf
|
||||
host replication replicator 192.168.1.2/32 md5
|
||||
```
|
||||
|
||||
### **2.2 Создаем пользователя для репликации**
|
||||
```sql
|
||||
CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'your_password';
|
||||
```
|
||||
|
||||
### **2.3 Перезапускаем PostgreSQL**
|
||||
```sh
|
||||
sudo systemctl restart postgresql
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **3. Настройка реплики (Standby)**
|
||||
|
||||
### **3.1 Останавливаем PostgreSQL на реплике**
|
||||
```sh
|
||||
sudo systemctl stop postgresql
|
||||
```
|
||||
|
||||
### **3.2 Копируем данные с основного сервера**
|
||||
На реплике выполняем:
|
||||
```sh
|
||||
sudo -u postgres pg_basebackup -h 192.168.1.1 -U replicator -D /var/lib/postgresql/15/main -Fp -Xs -R -P
|
||||
```
|
||||
|
||||
### **3.3 Указываем `application_name` вручную**
|
||||
Файл `postgresql.auto.conf`, создаваемый `pg_basebackup`, не добавляет `application_name`, поэтому задаем его вручную:
|
||||
```sh
|
||||
sudo su postgres -c "psql -c \"ALTER SYSTEM SET primary_conninfo TO 'host=192.168.1.1 user=replicator password=your_password application_name=replica1';\""
|
||||
```
|
||||
Затем перезапускаем PostgreSQL на реплике:
|
||||
```sh
|
||||
sudo systemctl restart postgresql
|
||||
```
|
||||
|
||||
### **3.4 Проверяем `primary_conninfo`**
|
||||
```sh
|
||||
cat /var/lib/postgresql/15/main/postgresql.auto.conf | grep primary_conninfo
|
||||
```
|
||||
Ожидаемый результат:
|
||||
```ini
|
||||
primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1'
|
||||
```
|
||||
Если строка отсутствует, редактируем файл вручную:
|
||||
```sh
|
||||
sudo nano /var/lib/postgresql/15/main/postgresql.auto.conf
|
||||
```
|
||||
Добавляем строку:
|
||||
```ini
|
||||
primary_conninfo = 'host=192.168.1.1 user=replicator password=your_password application_name=replica1'
|
||||
```
|
||||
Сохраняем и перезапускаем PostgreSQL:
|
||||
```sh
|
||||
sudo systemctl restart postgresql
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **4. Обновляем настройки Primary для работы с репликой**
|
||||
|
||||
На основном сервере (Primary) выполняем:
|
||||
```sh
|
||||
sudo su postgres -c "psql -c \"ALTER SYSTEM SET synchronous_standby_names TO 'replica1';\""
|
||||
```
|
||||
Перезапускаем PostgreSQL на Primary:
|
||||
```sh
|
||||
sudo systemctl restart postgresql
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## **5. Проверка работы синхронной репликации**
|
||||
|
||||
### **5.1 Проверяем статус репликации**
|
||||
На **основном сервере (Primary)** выполняем:
|
||||
```sql
|
||||
SELECT application_name, sync_state FROM pg_stat_replication;
|
||||
```
|
||||
Ожидаемый результат:
|
||||
```
|
||||
application_name | sync_state
|
||||
-----------------+------------
|
||||
replica1 | sync
|
||||
```
|
||||
Если `sync_state = 'sync'`, значит синхронная репликация работает.
|
||||
|
||||
---
|
||||
|
||||
## **6. Итоговая проверка**
|
||||
✅ **Задали `primary_conninfo` вручную на реплике**
|
||||
✅ **Перезапустили PostgreSQL на реплике**
|
||||
✅ **Обновили `synchronous_standby_names` на основном сервере**
|
||||
✅ **Перезапустили PostgreSQL на основном сервере**
|
||||
✅ **Проверили `pg_stat_replication` на Primary**
|
||||
|
||||
Готово! 🎉
|
||||
|
||||
91
PostgreSQL/PostgreSQL_select.md
Normal file
91
PostgreSQL/PostgreSQL_select.md
Normal file
@ -0,0 +1,91 @@
|
||||
Подключаюсь к инфраструктуре:
|
||||
```sh
|
||||
ssh ivanov_i@10.101.1.3
|
||||
```
|
||||
|
||||
Зеркало APP Астана RabbitMQ
|
||||
```sh
|
||||
ssh ivanov_i@10.201.1.3 -p 22
|
||||
```
|
||||
|
||||
```sh
|
||||
psql -h 10.101.1.6 -U user_developer_igor_i -d transit
|
||||
```
|
||||
|
||||
|
||||
```sh
|
||||
psql -h 10.201.1.6 -U postgres -d transit
|
||||
```
|
||||
|
||||
## Логи по Базе
|
||||
|
||||
0) Создание таблицы
|
||||
```sql
|
||||
CREATE TABLE public.test_table (id bigint, PRIMARY KEY (id));
|
||||
```
|
||||
1) Немного изменил права:
|
||||
```sql
|
||||
ALTER TABLE IF EXISTS public.test_table OWNER to user_developer_igor_i;
|
||||
```
|
||||
2) Удаление таблицы
|
||||
```sql
|
||||
DROP TABLE public.test_table;
|
||||
```
|
||||
3) Создание пользователя БД
|
||||
```sql
|
||||
CREATE ROLE test_user WITH LOGIN NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT NOREPLICATION NOBYPASSRLS CONNECTION LIMIT -1 VALID UNTIL '2025-05-22T00:00:00+05:00' PASSWORD '!Ii123456';
|
||||
```
|
||||
|
||||
|
||||
|
||||
4) Изменение прав пользователя !!!!!!!!!!Вадим не видел!!!!!!!!!!!
|
||||
```sql
|
||||
ALTER ROLE user_developer_igor_i NOLOGIN VALID UNTIL '2025-05-22T00:00:00+05:00';
|
||||
```
|
||||
```sql
|
||||
GRANT app_authorization TO user_developer_igor_i;
|
||||
```
|
||||
```sql
|
||||
REVOKE app_authorization FROM user_developer_igor_i;
|
||||
```
|
||||
```sql
|
||||
REVOKE SELECT ON TABLE public.test_table FROM user_developer_igor_i;
|
||||
```
|
||||
```sql
|
||||
GRANT SELECT ON public.test_table TO user_developer_igor_i;
|
||||
```
|
||||
|
||||
|
||||
5) Удаление пользователя БД
|
||||
```sql
|
||||
DROP ROLE test_user;
|
||||
```
|
||||
```sql
|
||||
CREATE DATABASE test_db WITH OWNER = user_developer_igor_i ENCODING = 'UTF8' LOCALE_PROVIDER = 'libc' CONNECTION LIMIT = -1 IS_TEMPLATE = False;
|
||||
```
|
||||
```sql
|
||||
DROP DATABASE test_db;
|
||||
```
|
||||
|
||||
Выходим:
|
||||
```sql
|
||||
\q
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Логи по ППО:
|
||||
1) Попытки не верного ввода пароля/логина
|
||||
2) Авторизация
|
||||
3) Выход из системы
|
||||
4) Создание пользователя
|
||||
5) Изменение прав пользователю.
|
||||
6) Удаление пользователя
|
||||
7) Создание перевозки
|
||||
8) Проведение оплаты
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user