пятница, 30 августа 2019 г.

Tuning Postgres Autovacuum ssd

24.1. Регламентная очистка
Автоматическая очистка
Давайте отключим автовакуум!?
видео
Настройка Autovacuum в PostgreSQL и Autovacuum Internals
Агрессивный Autovacuum на PostgreSQL
Основы автовакуумной настройки
pg-autovacuum-diagnostics
MVCC-7. Автоочистка

$ sudo su postgres
$ psql
postgres=# SELECT name,setting FROM pg_settings WHERE name ~ 'autova|vacuum';



Пример настройки для SSD:
Давайте отключим автовакуум!?

$ sudo nano /etc/postgresql/10/main/postgresql.conf

Добавить в конец: 

log_autovacuum_min_duration = 0
vacuum_cost_delay = 0
vacuum_cost_page_hit = 0
vacuum_cost_page_miss = 5
vacuum_cost_page_dirty = 5
vacuum_cost_limit = 200
autovacuum_max_workers =4
autovacuum_naptime = 1s
autovacuum_vacuum_threshold = 50
autovacuum_analyze_threshold = 50
autovacuum_vacuum_scale_factor = 0.05
autovacuum_analyze_scale_factor = 0.05
autovacuum_vacuum_cost_delay = 5ms
autovacuum_vacuum_cost_limit = 1000

#autovacuum_vacuum_cost_limit = -1
Сохранить.

$ sudo systemctl restart postgresql.service

$ sudo su postgres
$ psql
postgres=# SELECT name,setting FROM pg_settings WHERE name ~ 'autova|vacuum';



$ ps -eaf | egrep "/post|autovacuum"

Оценка работы autovacuum в конкретной базе, например demo

$ sudo su postgres
$ psql
postgres=# \c demo
Вы подключены к базе данных "demo" как пользователь "postgres".
demo=#
Выполнить:
 
WITH rel_set AS
(
    SELECT
        oid,
        CASE split_part(split_part(array_to_string(reloptions, ','),\
 'autovacuum_vacuum_threshold=', 2), ',', 1)
            WHEN '' THEN NULL
        ELSE split_part(split_part(array_to_string(reloptions, ','),\
 'autovacuum_vacuum_threshold=', 2), ',', 1)::BIGINT
        END AS rel_av_vac_threshold,
        CASE split_part(split_part(array_to_string(reloptions, ','),\
  'autovacuum_vacuum_scale_factor=', 2), ',', 1)
            WHEN '' THEN NULL
        ELSE split_part(split_part(array_to_string(reloptions, ','),\
 'autovacuum_vacuum_scale_factor=', 2), ',', 1)::NUMERIC
        END AS rel_av_vac_scale_factor
    FROM pg_class
) 
SELECT
    PSUT.relname,
    to_char(PSUT.last_vacuum, 'YYYY-MM-DD HH24:MI')     AS last_vacuum,
    to_char(PSUT.last_autovacuum, 'YYYY-MM-DD HH24:MI') AS last_autovacuum,
    to_char(C.reltuples, '9G999G999G999')               AS n_tup,
    to_char(PSUT.n_dead_tup, '9G999G999G999')           AS dead_tup,
    to_char(coalesce(RS.rel_av_vac_threshold,\
 current_setting('autovacuum_vacuum_threshold')::BIGINT)\
  + coalesce(RS.rel_av_vac_scale_factor,\
 current_setting('autovacuum_vacuum_scale_factor')::NUMERIC)\
  * C.reltuples, '9G999G999G999') AS av_threshold,
    CASE
        WHEN (coalesce(RS.rel_av_vac_threshold,\
 current_setting('autovacuum_vacuum_threshold')::BIGINT)\
  + coalesce(RS.rel_av_vac_scale_factor, current_setting(\
'autovacuum_vacuum_scale_factor')::NUMERIC) * C.reltuples)\
  < PSUT.n_dead_tup
        THEN '*'
    ELSE ''
    END AS expect_av
FROM
    pg_stat_user_tables PSUT
    JOIN pg_class C
        ON PSUT.relid = C.oid
    JOIN rel_set RS
        ON PSUT.relid = RS.oid
ORDER BY C.reltuples DESC;
 
 
 
 

воскресенье, 25 августа 2019 г.

Сервер хранилища конфигурации

[Unit]
Description=1C configuration repository service
After=syslog.target
After=network-online.target
[Service]
Type=forking
Restart=always
OOMScoreAdjust=-100
LimitNOFILE=1048576
User=usr1cv8
Group=grp1cv8
ExecStart=/opt/1C/v8.3/i386/crserver -daemon -d /mnt/data/repo
[Install]
WantedBy=multi-user.target

пятница, 23 августа 2019 г.

Настройка статического ip Ubuntu 18.04.3 server

$ sudo cat /etc/netplan/50-cloud-init.yaml

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enp1s0:
            dhcp4: true
    version: 2

$ sudo nano /etc/netplan/50-cloud-init.yaml

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
# Закомментировать:
#       enp1s0:
#            dhcp4: true
#   version: 2

# Добавить:
         enp1s0:
            dhcp4: false
            dhcp6: false
            addresses: [192.168.10.24/24]
            gateway4: 192.168.10.1
            nameservers:
              addresses: [8.8.8.8, 8.8.4.4]
#     version: 2


Сохранить.

Применть:
$ sudo netplan apply
или
$ sudo netplan --debug apply

среда, 21 августа 2019 г.

Тестовый сервер test на Ubuntu 18.04.3

В данной статье опишем установку сервера СУБД PostgreSQL версия 10.5-24.1C на ubuntu 18.04.3 на физическую машину.

Устанавливаем ubuntu 18.04.3 на программный RAID 1 SSD
RAM (16 GB) монтируем диск для backup /backups


Настройки ubuntu пользователь (привязка в скриптах) user пароль 12345, имя компьютера test2

После установки, Ctrl +Alt + T (окно терминала)
$ sudo apt update -y
$ sudo apt upgrade -y
$ sudo apt autoremove -y
$ sudo apt install mc ssh samba -y

Возможно sudo apt upgrade -y не пройдет из за блокировки, тогда sudo reboot и повторите с начала.

$ lsusb

2. Настройка сети

Тестовый сервер будет использовать dhcp

Смотрим:
$ cat  /etc/hosts
127.0.0.1       localhost
.....


$ sudo nano /etc/hosts

Меняем:

127.0.0.1       localhost       test2


Сохранить.

$ cat /proc/cpuinfo | grep MHz
cpu MHz         : 800.111
cpu MHz         : 800.028
cpu MHz         : 800.377
cpu MHz         : 800.190


3. Тюнинг остального:

Сделаем еще один скрипт для настройки остального:

$ nano tuning.sh

#!/bin/bash
# отключим ipv6
sudo /bin/su -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.lo.disable_ipv6 = 1' >> /etc/sysctl.conf"
#sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
#тюнинг postgresql
#add a swap file to an Ubuntu 16.04
#sudo fallocate -l 1G /swapfile
#sudo chmod 600 /swapfile
#sudo mkswap /swapfile
#sudo swapon /swapfile
#sudo cp /etc/fstab /etc/fstab.bak
#sudo echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
sudo /bin/su -c "echo 'vm.swappiness=1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'kernel.sched_migration_cost_ns = 5000000' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'kernel.sched_autogroup_enabled = 0' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.dirty_background_bytes = 67108864' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.dirty_bytes = 536870912' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.zone_reclaim_mode = 0' >> /etc/sysctl.conf"
sudo sysctl -p
# перезагрузим сеть
#sudo systemctl restart networking.service
#sudo systemctl start networking.service
#sudo systemctl enable networking.service
# Настройка sudo journalctl -b sudo journalctl -b -1 sudo journalctl --list-boots
sudo sed -i 's/#Storage=auto/Storage=persistent/' /etc/systemd/journald.conf
# Отключение уведомлений службы Apport (/var/crash)
sudo sed -i 's/enabled=1/enabled=0/' /etc/default/apport
# Отключим службу ondemand# (для разгона cpu)
# cat /proc/cpuinfo | grep MHz
# systemctl status ondemand
sudo systemctl stop ondemand
sudo systemctl disable ondemand
# shutdown -r now

Сохраним файл tuning.sh

------------------------------------------
Сделаем исполняем
$ chmod +x tuning.sh
$  sudo ./tuning.sh

или
$  sudo sh tuning.sh
------------------------------------------

Перезагрузимся

$ sudo reboot

После перезагрузки по сети можно подключиться MobaXterm

$ cat /proc/cpuinfo | grep MHz 
cat /proc/cpuinfo | grep MHz
cpu MHz         : 4000.489
cpu MHz         : 4000.162
cpu MHz         : 4000.980
cpu MHz         : 4002.072

$ free
              total        used        free      shared  buff/cache   available
Память:    16284616       95512    15944100        1312      245004    15870784
Подкачка:     1048572           0     1048572


Установка СУБД PostgreSQL версия 10.8_18.1C

После перезагрузки по сети можно подключиться MobaXterm
к нашей виртуальной машине (по ip или или имени )  загрузить файлы установки:
$ mkdir /home/user/test

 В папку /test положить файл:
deb64_8_3_15_1565.tar.gz
 postgresql_10.8_18.1C_amd64_deb.tar.bz2

Файл postgresql_10.8_18.1C_amd64_addon_deb.tar.bz2 не устанавливаем - проблемы с зависимостями

$ wget http://archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu55_55.1-7_amd64.deb
$ sudo sudo dpkg -i libicu55_55.1-7_amd64.deb
$ dpkg -l | grep libicu55 | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
# libicu55 помечен как зафиксированный. 
$ sudo apt-get install postgresql-common  -y
$ dpkg -l | grep postgres | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#postgresql-client-common помечен как зафиксированный.
#postgresql-common помечен как зафиксированный.
$ mkdir -p /tmp/post
$ cp /home/user/test/postgresql_10.8_18.1C_amd64_deb.tar.bz2 /tmp/post/
$ cd /tmp/post
$ tar -xvf postgresql_10.8_18.1C_amd64_deb.tar.bz2
$ ls 
$ cd postgresql-10.8-18.1C_amd64_deb
$ ls
# список файлов:
#libpq5_10.8-18.1C_amd64.deb  postgresql-10_10.8-18.1C_amd64.deb  postgresql-client-10_10.8-18.1C_amd64.deb
$ sudo dpkg -i *.deb
$ dpkg -l | grep 10.8-18.1C | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#libpq5 помечен как зафиксированный.
#postgresql-10 помечен как зафиксированный.
#postgresql-client-10 помечен как зафиксированный.

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 online postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log


$ sudo pg_dropcluster --stop 10 main

$ sudo pg_createcluster --locale ru_RU.UTF-8 10 main --  --data-checksums


$ sudo pg_ctlcluster 10 main start

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 online postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log
 
$ sudo -u postgres psql -U postgres -c "alter user postgres with password 'pass';"
$ sudo cp /etc/postgresql/10/main/postgresql.conf /etc/postgresql/10/main/postgresql.conf.bak

#Делаем проверки
$ sudo systemctl status postgresql.service
$ ss -tunpl | grep 5432
tcp    LISTEN     0      128       *:5432                  *:*
tcp    LISTEN     0      128      :::5432                 :::*
$ ps aux | grep postgres | grep -- -D
postgres  4914  0.0  0.1 320972 28864 ?        S    08:37   0:00 /usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/main/postgresql.conf

-------------------------------------------------------------------------------------------------------

Настройка postgresql.conf для 1С Total Memory (RAM): 16 GB

$ sudo nano /etc/postgresql/10/main/postgresql.conf
Добавить в конец:

# DB Version: 10
# OS Type: linux
# DB Type: oltp
# Total Memory (RAM): 16 GB
# Data Storage: ssd

max_connections = 1000
shared_buffers = 4GB
temp_buffers = 256MB
work_mem = 64MB
effective_cache_size = 8GB # 4GB for 1c
maintenance_work_mem = 1GB
wal_buffers = 16MB
min_wal_size = 2GB
max_wal_size = 4GB

default_statistics_target = 100
effective_io_concurrency = 2
random_page_cost = 1.1
autovacuum = on
autovacuum_max_workers = 4
autovacuum_naptime = 20s
bgwriter_delay = 20ms
bgwriter_lru_multiplier = 4.0
bgwriter_lru_maxpages = 400
synchronous_commit = off
checkpoint_completion_target = 0.9
ssl = off
fsync = on
commit_delay = 1000
commit_siblings = 5
row_security = off
max_files_per_process = 1000
standard_conforming_strings = off
escape_string_warning = off
max_locks_per_transaction = 256
#log_min_duration_statement = 0
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,client=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
#log_autovacuum_min_duration = 0
#log_duration = on
#log_statement = all
log_destination = stderr
plantuner.fix_empty_table = 'on'
online_analyze.table_type = 'temporary'
online_analyze.verbose = 'off'

Сохранить.

$ sudo systemctl restart postgresql.service
 -------------------------------------------------------------------------------------------------------

Установка pg_probackup 

pg_probackup описание

$ sudo su -c "echo 'deb [arch=amd64] http://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)' > /etc/apt/sources.list.d/pg_probackup.list" 
$ sudo su -c "wget -O - http://repo.postgrespro.ru/pg_probackup/keys/GPG-KEY-PG_PROBACKUP | apt-key add -" 
$ sudo apt-get update 
$ sudo apt-get install pg-probackup-10
$ dpkg -l | grep pg-probackup-10 | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#pg-probackup-10 помечен как зафиксированный.

Инициализация каталога резервных копий 1 экземпляр на примонтированом HDD


Каталог резервных копий /backup/pg_probackup расположено на hdd диске, в нем будем ежедневно сохранять backup за 30 дней без непрерывного архивирования.
Если нет дополнительного диска, выполняем закомментированые команды
$ sudo pg_probackup-10 init -B /backup
$ sudo mkdir /backup/copy
$ sudo mkdir /backup/log
$ sudo mkdir /backup/pg_dump
$ sudo chown -R postgres:postgres /backup/
#$ sudo chmod -R 777 /backup/pg_probackup
# /backups примонтированный диск для архивов
$ sudo mkdir /backups/copy
$ sudo mkdir /backups/pg_dump
$ sudo chown -R postgres:postgres /backups/ 


Определение копируемого экземпляра 
$ sudo -u postgres pg_probackup-10 add-instance -B /backup -D /var/lib/postgresql/10/main --instance main


$ sudo nano /etc/postgresql/10/main/postgresql.conf

Добавить:

max_wal_senders = 10
wal_level = replica
unix_socket_directories='/var/run/postgresql'
# Для настройки архивного резервного копирования разкомментировать:
archive_mode = on
#archive_command ='test ! -f /wal/%f && cp %p /wal/%f' 
archive_command = '/usr/bin/pg_probackup-10 archive-push -B /backup --compress --instance main --wal-file-path %p --wal-file-name %f'

Сохранить.

$ sudo systemctl restart postgresql.service

Настройка политики сохранения 5 резервных копий

$ sudo -u postgres nano /backup/backups/main/pg_probackup.conf

Добавить:

retention-redundancy=5

Сохранить


Создание полной автономной резервной копии: 

$ sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired


Просмотр:

$ sudo -u postgres pg_probackup-10 show -B /backup


Проверка backup:

Проверка файлов:
$ sudo -u postgres pg_probackup-10 checkdb -B /backup --instance main
INFO: Start checking data files
INFO: Data files are valid

Проверка backup: 
$ sudo -u postgres pg_probackup-10 validate -B /backup
INFO: Validate backups of the instance 'main'
INFO: Validating backup PUVU29
INFO: Backup PUVU29 data files are valid
INFO: Backup PUVU29 WAL segments are valid
INFO: Validating backup PUVTUX
INFO: Backup PUVTUX data files are valid
INFO: Backup PUVTUX WAL segments are valid
INFO: All backups are valid

------------------------------------------------------------------------------------------------------- 

Пример восстановления из полной автономной резервной копии (замена кластера на резервную копию)


Сделали копию:
 $ sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired 

Перед восстановлением

Просмотр:

$ sudo -u postgres pg_probackup-10 show -B

Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup

INFO: Validate backups of the instance 'main'
INFO: Validating backup PRP29I
INFO: Backup PRP29I data files are valid
INFO: Backup PRP29I WAL segments are valid

Можно восстанавливать.

Останавливаем 1с
$ sudo systemctl stop srv1cv83.service

Останавливаем postgresql
$ sudo systemctl stop postgresql.service

Удалим кластер main
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"

Восстановим кластер main
$ sudo -u postgres pg_probackup-10 restore -B /backup --instance main -i PRP29I
INFO: Validating backup PRP29I
INFO: Backup PRP29I data files are valid
INFO: Backup PRP29I WAL segments are valid
INFO: Backup PRP29I is valid.
INFO: Restore of backup PRP29I completed.


Запускаем postgresql
$ sudo systemctl start postgresql.service

Запускаем 1с
$ sudo systemctl start srv1cv83.service

------------------------------------------------------------------------------------------------------- 

Пример восстановления из полной автономной резервной копии c непрерывным архивированием (замена кластера на резервную копию)


$ sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired


Просмотр:

$ sudo -u postgres pg_probackup-10 show -B /backup


Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup

INFO: Validate backups of the instance 'main'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
 Можно восстанавливать, но проверим непрерывность архивирования:


Войти в 1с создать документ, провести, выйти из 1с.


$ sudo -u postgres pg_probackup-10 validate -B /backup   --instance main -i PRP6Q5 --time='2042-04-16 12:26:00'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
WARNING: Thread [1]: Could not read WAL record at 1/88000000
ERROR: Thread [1]: WAL segment "/backupwal/wal/main/000000010000000100000088" is absent
WARNING: Recovery can be done up to time 2019-05-18 14:36:30+03, xid 0 and LSN 1/2A000198
ERROR: Not enough WAL records to time 2042-04-16 12:26:00+03



Останавливаем 1с
$ sudo systemctl stop srv1cv83.service

Останавливаем postgresql
$ sudo systemctl stop postgresql.service

Удалим кластер main
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"

Восстановим кластер main
$ sudo -u postgres pg_probackup-10 restore -B /backup --instance main -i PRP6Q5 --recovery-target='latest'


INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
INFO: Backup PRP6Q5 is valid.
INFO: Restore of backup PRP6Q5 completed.


Запускаем postgresql
$ sudo systemctl start postgresql.service

Запускаем 1с
$ sudo systemctl start srv1cv83.service


Для проверки стандартной wal архивации:

$ sudo mkdir -p /wal
$ sudo chown -R postgres:postgres /wal


$ sudo nano /etc/postgresql/10/main/postgresql.conf

расскоментировать:
archive_command ='test ! -f /wal/%f && cp %p /wal/%f'

Сохранить.

$ sudo systemctl restart postgresql.service

В папку /test положить файлы:
deb64_8_3_15_1565.tar.gz

# установка 1с
$ mkdir -p /tmp/1ctmp
$ cd /tmp/1ctmp
$ sudo apt install imagemagick -y
#$sudo apt install -y unixodbc libgsf-1-114 libglib2.0
$ sudo apt install libfreetype6 libgsf-1-common unixodbc glib2.0
#ubuntu
$ sudo  apt install -y xfonts-utils cabextract
$ sudo apt install ttf-mscorefonts-installer -y
#$ sudo dpkg -i fonts-ttf-ms_1.0-eter4ubuntu_all.deb
#$ sudo fc-cache -fv
$  ls /home/user/test/
$ cp /home/user/test/deb64_8_3_15_1565.tar.gz /tmp/1ctmp
$ tar xvzf deb64_8_3_15_1565.tar.gz
$ sudo dpkg -i 1c-enterprise83-common_8.3.15-1565_amd64.deb
$ sudo dpkg -i 1c-enterprise83-server_8.3.15-1565_amd64.deb
#$ sudo dpkg -i 1c-enterprise83-ws_8.3.15-1565_amd64.deb
#$ sudo dpkg -i 1c-enterprise83-crs_8.3.15-1565_amd64.deb
#$ sudo apt -f -y install
$ sudo chown -R usr1cv8:grp1cv8 /opt/1C
#$ sudo echo -e "pass\npass\n" | sudo passwd usr1cv8
$ sudo service srv1cv83 start
$ sudo service srv1cv83 status
#$ sudo usermod -aG sudo usr1cv8

$ sudo  apt install -y libc6-i386
$ cd ~/test
$ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/18.04/haspd-modules_7.90-eter2ubuntu_amd64.deb
$ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/18.04/haspd_7.90-eter2ubuntu_amd64.deb
$ sudo dpkg -i *.deb
#$ sudo apt-get install -f -y
$ sudo service haspd start
$ sudo service haspd status
#$ sudo reboot

$ sudo service srv1cv83 status
$ ss -tlnp | grep :15
LISTEN     0      128          *:1560                     *:*
LISTEN     0      128          *:1540                     *:*
LISTEN     0      128          *:1541                     *:*
LISTEN     0      128         :::1560                    :::*
LISTEN     0      128         :::1540                    :::*
LISTEN     0      128         :::1541                    :::*


Для программной лицензии (прявязанной к hasp)

в /var/1C/licenses
Положить лицензию

$ sudo mv 20190207114003.lic /var/1C/licenses

или вставить hasp

После установки

$ sudo reboot


Процессор Intel Core i3-8350K @ 4.00GHz

Процессор Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz



Запуск службы сервера администрирования RAS

$ sudo nano /etc/systemd/system/srv1cv8-ras.service

Вставить:

[Unit]
Description=1C:Enterprise Remote Administration Service
After=network.target remote-fs.target nss-lookup.target
Requires=srv1cv83.service

[Service]
Type=simple
ExecStart=/opt/1C/v8.3/x86_64/ras cluster --port=1545
KillSignal=SIGINT
PrivateTmp=true
Restart=on-failure
RestartSec=5
User=usr1cv8
Group=grp1cv8

[Install]
WantedBy=multi-user.target

Сохранить.


#$ sudo systemctl daemon-reload
$ sudo systemctl enable srv1cv8-ras.service
$ sudo systemctl start srv1cv8-ras.service
$ sudo systemctl status srv1cv8-ras.service

Управление серверами 8.3.15


Настройка технологического журнала

$ sudo mkdir -p /var/log/1c/logs/excp
$ sudo mkdir -p /var/log/1c/logs/vrs
$ sudo mkdir -p /var/log/1c/dumps
$ sudo chown -R usr1cv8:grp1cv8 /var/log/1c
$ sudo chmod g+rw /var/log/1c
$ sudo mkdir -p /opt/1C/v8.3/x86_64/conf
 

$ sudo nano /opt/1C/v8.3/x86_64/conf/logcfg.xml

<?xml version="1.0"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
   <log location="/var/log/1c/logs/excp" history="24">
      <event>
         <eq property="name" value="excp"/>
      </event>
      <property name="all"/>
   </log>
   <log location="/var/log/1c/logs/vrs" history="24">
      <event>
         <eq property="name" value="vrsrequest"/>
      </event>
      <event>
         <eq property="name" value="vrsresponse"/>
      </event>
      <property name="all"/>
   </log>
   <dump location="/var/log/1c/dumps" create="1" type="3"/>
</config>
 
Сохранить.

$ sudo chown -R usr1cv8:grp1cv8 /opt/1C

Настройка дампов для Linux 

$ sudo mkdir /dumps
$ sudo chown -R usr1cv8:grp1cv8 /dumps
$ echo 'usr1cv8 soft core unlimited' | sudo tee -a /etc/security/limits.conf
$ echo 'usr1cv8 hard core unlimited' | sudo tee -a /etc/security/limits.conf
$ echo 'kernel.core_pattern=/dumps/core.%e.%p ' | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p /etc/sysctl.conf

$ sudo su - usr1cv8
$ ulimit -a

Проверим

$ sudo su - usr1cv8
$ bash
$ ps ax | grep bash
$ kill -s SIGSEGV 17952


Ошибка сегментирования (сделан дамп памяти)

$ ls /dumps
core.bash.17952

====================================================================
Настройка Ubuntu 18.04.3 для работы с Back-UPS ES 700G от APC

Настройка Ubuntu для работы с ИБП от APC
APCUPSd: Поля о состоянии устройства
APCUPSD User Manual
Ureadahead сообщает об ошибках относительного пути в выходных данных journalctl

$ lsusb | grep American

Bus 001 Device 004: ID 051d:0002 American Power Conversion Uninterruptible Power Supply

$ sudo apt-get install apcupsd -y
$ sudo nano /etc/apcupsd/apcupsd.conf


1. ( В 18.04 настроено)
#UPSCABLE smart
UPSCABLE usb
......
2.  ( В 18.04 настроено)
#UPSTYPE apcsmart
UPSTYPE usb

 3. Обязательно закомментировать DEVICE /dev/ttyS0  !!!
#DEVICE /dev/ttyS0

# Для проверки можно 30 (потом убрать )
TIMEOUT 30

TIMEOUT - параметр актуален для старых ИБП, неспособных определять свой уровень заряда. Задаёт время (в секундах) между сбоем электропитания и отключением компьютера. Для современного ИБП параметр стоит оставить на 0, но выставление иного значения может быть удобно для тестирования работы ИБП. Например, если выставить 30 и выдернуть шнур из розетки, уже через полминуты apcupsd продемонстрирует своё умение выключать компьютер
Сохранить.

Настроим /etc/default/apcupsd 
Заменяем ISCONFIGURED=no на ISCONFIGURED=yes , сохраняем, закрываем. Отныне apcupsd будет знать, что мы не забыли его настроить.

Т.е 0 будет ждать разрядки батареи, 30 - будет ждать 30 с.


$ sudo nano /etc/default/apcupsd

#ISCONFIGURED=no
ISCONFIGURED=yes


Сохранить.


Теперь достаточно запустить apcupsd:


$ sudo systemctl start apcupsd.service
$ apcaccess
APC      : 001,017,0421
DATE     : 2019-08-21 12:00:55 +0300
HOSTNAME : test2
VERSION  : 3.14.14 (31 May 2016) debian
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2019-08-21 12:00:15 +0300
STATUS   : COMMLOST
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 30 Seconds
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
STATFLAG : 0x05000100
END APC  : 2019-08-21 12:00:55 +0300

Важно!
#$ sudo reboot
$ sudo systemctl restart apcupsd.service


 Смотреть статус должен быть STATUS   : ONLINE
 Если STATUS   : COMMLOST, нет связи с UPS !!!

$ apcaccessAPC      : 001,034,0828
DATE     : 2019-08-21 11:49:09 +0300
HOSTNAME : test2
VERSION  : 3.14.14 (31 May 2016) debian
UPSNAME  : test2
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2019-08-21 11:38:02 +0300
MODEL    : Back-UPS ES 700G
STATUS   : ONLINE
LINEV    : 224.0 Volts
LOADPCT  : 26.0 Percent
BCHARGE  : 100.0 Percent
TIMELEFT : 18.0 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 30 Seconds
SENSE    : Medium
LOTRANS  : 180.0 Volts
HITRANS  : 266.0 Volts
ALARMDEL : 30 Seconds
BATTV    : 13.5 Volts
LASTXFER : No transfers since turnon
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
STATFLAG : 0x05000008
SERIALNO : 5B1909T49061
BATTDATE : 2019-03-02
NOMINV   : 230 Volts
NOMBATTV : 12.0 Volts
FIRMWARE : 871.O4 .I USB FW:O4
END APC  : 2019-08-21 11:49:20 +0300


BCHARGE  : 50.0 Percent - Зарядка батарей 50%
TIMELEFT : 26.1 Minutes - Оставшееся время работы от батареи по оценке ИБП.

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

====================================================================

Настройка Postfix Ubuntu 18.04.3 для отправки почты через yandex 

Настройка Postfix для отправки почты через yandex

Postfix relay yandex
Отправка почты для root на внешний ящик
Пошаговая инструкция установки Postfix и Dovecot на Ubuntu
journalctl: open database /etc/aliases.db: No such file or directory 

user@yandex.ru - e-mail с которого будем посылать письма на произвольные адреса

$ sudo apt update 
$ sudo apt upgrade
(postfix без настройки)
$ sudo apt install postfix mutt



$ sudo mkdir /etc/postfix/private
#$ sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
$ sudo nano /etc/postfix/main.cf

Вставить в пустой файл:

relayhost =
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/private/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_type = cyrus
smtp_sasl_mechanism_filter = login
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/private/sender_relay
sender_canonical_maps = hash:/etc/postfix/private/canonical

Сохранить.

Создать файл /etc/postfix/private/canonical :

$ sudo nano /etc/postfix/private/canonical

Содержимое (Ваш: user@yandex.ru  где user ваш логин) :

@yandex.ru user@yandex.ru


Сохранить.

Создать файл  /etc/postfix/private/sender_relay :

$ sudo nano /etc/postfix/private/sender_relay

Содержимое:

@yandex.ru smtp.yandex.ru

Сохранить.

Создать файл  /etc/postfix/private/sasl_passwd:
где вместо *** укажите свой пароль:
 
$ sudo nano /etc/postfix/private/sasl_passwd

Содержимое (Ваш: user@yandex.ru  где user ваш логин, password - ваш пароль ) :

[smtp.yandex.ru] user@yandex.ru:password

Сохранить.

$ sudo postmap /etc/postfix/private/*
$ sudo postalias /etc/aliases
$ sudo systemctl restart postfix.service
#$ sudo systemctl status postfix.service

$ sudo systemctl status postfix.service
#$ sudo reboot
$ sudo systemctl restart postfix.service

 посмотреть:

$ sudo journalctl -b
$ sudo journalctl -b -p err

Если есть сообщения:
........
open database /etc/aliases.db: No such file or directory
........

$ sudo postalias /etc/aliases
или
$ sudo newaliases

Перезагрузить и проверить.

Отправка почты на наш e-mail:

$ echo "test" | mutt -s "test" nash@e-mail.ru

Отправка почты на наш e-mail с вложением файла:

$ echo "test" | mutt -s "test" nash@e-mail.ru -a file

$ sudo apt install sysstat lm-sensors smartmontools

Отправка почты для root на внешний адрес через yandex

$ sudo nano /etc/aliases

root: nash@e-mail.ru



Сохранить.
 
$ sudo newaliases

Проверка:

$ echo test | mutt -s "test message" root

Проверка сообщения от mdadm

$ sudo mdadm --monitor --scan --test -1

This is an automatically generated mail message from mdadm
running on test2

A TestMessage event had been detected on md device /dev/md/0.

Faithfully yours, etc.

P.S. The /proc/mdstat file currently contains the following:

Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[1] sda1[0]
      488252416 blocks super 1.2 [2/2] [UU]
      bitmap: 2/4 pages [8KB], 65536KB chunk

unused devices: <none>

Как следить за состоянием жесткого диска с помощью smartmontools в Ubuntu

$ sudo apt install sysstat lm-sensors smartmontools
$ sudo nano /etc/default/smartmontools

# Defaults for smartmontools initscript (/etc/init.d/smartmontools)
# This is a POSIX shell fragment

# List of devices you want to explicitly enable S.M.A.R.T. for
# Not needed (and not recommended) if the device is monitored by smartd
#enable_smart="/dev/hda /dev/hdb"

# uncomment to start smartd on system startup
#start_smartd=yes
start_smartd=yes

# uncomment to pass additional options to smartd on startup
#smartd_opts="--interval=1800"
smartd_opts="--interval=1800"

Сохранить.

Для проверки получения почты:

$ sudo nano /etc/smartd.conf

Закомментировать:
#DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner


Добавить:

/dev/sda -m root -M test
/dev/sdb -m root -M test
/dev/sdc -m root -M test

Сохранить.

$ sudo reboot

Проверить почту.

This message was generated by the smartd daemon running on:

   host name:  test
   DNS domain: [Empty]

The following warning/error was logged by the smartd daemon:

TEST EMAIL from smartd for device: /dev/sdb [SAT]

Device info:
Samsung SSD 860 EVO 500GB, S/N:S3YANB0M338396K, WWN:5-002538-e40e200e4, FW:RVT02B6Q, 500 GB

For details see host's SYSLOG. 

$ sudo nano /etc/smartd.conf

 Изменить:

/dev/sda -m root -M daily
/dev/sdb -m root -M daily
/dev/sdc -m root -M daily

Сохранить.

$ sudo systemctl restart smartd
 
====================================================================
Настройка резервного копирования
Управление серверами 8.3.15

Перед настройкой резервного копирования
необходимо задать Имя и Пароль администратора центрального сервера


также необходимо задать Имя и Пароль администратора кластера


В скрипте backup.sh нужно указать пароль postgres

перед запуском предварительно настроить  скрипт terminate.sh

(Добавить в скрипт terminate.sh
Имя и Пароль администратора кластера) 
$ sudo nano /root/backup.sh
 
#!/bin/sh -e
# Внимание задать пароль PGPASSWORD !!!
#/backup
inst='/backup'
cd $inst
#sudo sh /root/terminate.sh
# vacuumdb
sudo systemctl stop srv1cv8-ras.service
sudo systemctl stop srv1cv83.service
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
sudo su postgres -c "echo 'vacuumdb $DATA - начало' > $inst/vacuumdb.txt"
sudo su postgres -c "vacuumdb -afz >> $inst/vacuumdb.txt"
sudo systemctl start srv1cv83.service
sudo systemctl start srv1cv8-ras.service
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
if [ $? -ne 0 ]
then
     sudo su postgres -c "echo 'vacuumdb $DATA - неудачное завершение' >> $inst/vacuumdb.txt"
else
     sudo su postgres -c "echo 'vacuumdb $DATA - удачное завершение' >> $inst/vacuumdb.txt"
fi
sudo su postgres -c "echo '-------------------------------------------' >> $inst/vacuumdb.txt"
sudo su postgres -c "cat vacuumdb.txt >> vacuumdb.log"
cat vacuumdb.txt | mutt -s "vacuumdb" root
#  /backup/pg_probackup
log=$inst'/log/pg_probackup.log'
log1=$inst'/log/probackup.log'
if [ -f $log ]; then rm $log; fi
cd $inst
sudo su postgres -c "PGPASSWORD=12345 pg_probackup-10 backup -B $inst --instance main \
    -U postgres -d postgres -h 127.0.0.1 -b FULL --stream --compress --expired --delete-wal \
    --log-level-file=info -j 4"
grep completed $log > /dev/null 2>&1
if [ $? -ne 0 ]
then
    msg="$inst неудачное завершение."
else
    msg="$inst удачное завершение."
fi
DATA=`date +"%Y-%m-%d %H:%M:%S"`
msg1="Размер экземпляра pg_probackup: $(du -h -s $inst/backups)"
sudo su postgres -c "echo '$DATA $msg' >> $log"
sudo su postgres -c "echo '$DATA $msg1' >> $log"
sudo su postgres -c "echo '==================================================================' >> $log"
sudo su postgres -c "cat $log >> $log1"
cat $log  | mutt -s "pg_probackup" root
#echo "$DATA $msg" >> $log1
# Сразу архивируем для rsync
#COPY_DIR=$inst/copy
COPY_DIR=/backups/copy
#COPY_LOG=$inst/copy/copy.log
COPY_LOG=/backups/copy/copy.log
#Берем последнюю копию
COPY_ID=$(ls $inst/backups/main -1 | tail -1)
#Она должна быть completed
grep "$COPY_ID completed" $log > /dev/null 2>&1
if [ $? = 0 ]
then
    DATA=`date +"%Y-%m-%d_%H-%M-%S"`
    #rm  $inst/copy/*
    sudo su postgres -c "tar -cvzf $COPY_DIR/pg_pro-$DATA.tar.gz  \
           $inst/backups/main/$COPY_ID > /dev/null 2>&1"
    if [ $? = 0 ]
    then
        msg="создан $COPY_DIR/pg_pro-$DATA.tar.gz"
    else
        msg="ошибка создания $COPY_DIR/pg_pro-$DATA.tar.gz"
    fi
    DATA=`date +"%Y-%m-%d %H:%M:%S"`
    sudo su postgres -c "echo '$DATA $msg' >> $COPY_LOG"
    echo "$DATA $msg" | mutt -s "copy pg_probackup" root
fi
#BACKUP_DIR="/backup/pg_dump"
BACKUP_DIR="/backups/pg_dump"
cd $BACKUP_DIR
echo "====================================================================" > $BACKUP_DIR/backup.log
# останавливаем сервер 1С
echo "останавливаем сервер 1С"
sudo systemctl stop srv1cv8-ras.service
sudo systemctl stop  srv1cv83.service
echo "состояние сервера 1С"  >> $BACKUP_DIR/backup.log
sudo systemctl status  srv1cv83.service | grep 'Active:' >> $BACKUP_DIR/backup.log
echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
# Устанавливаем дату
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
DATA_NAME=`date +"%Y-%m-%d_%H-%M-%S"`
echo "$DATA Size database file: " >> $BACKUP_DIR/backup.log
sudo du -h -s /var/lib/postgresql/10/main/base  >> $BACKUP_DIR/backup.log
echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
# делаем  backup
DB_BASE=`sudo /bin/su postgres -c "/usr/bin/psql -qAt -c 'SELECT * FROM pg_database;'" | \
     cut -d"|" -f1 | /bin/grep -v template | /bin/grep -v postgres`
#DB_BASE="demo test" #конкретные базы
#DB_BASE="" #пропустить
echo $DB_BASE
for DB_NAME in $DB_BASE
 do
     DATA=`date +"%Y-%m-%d_%H-%M-%S"`
     # Записываем информацию в лог с секундами
     echo "$DATA Начало backup базы ${DB_NAME}" >> $BACKUP_DIR/backup.log
     # Бэкапим базу данных demo и сразу сжимаем
     echo "$DATA Начало backup базы ${DB_NAME}"
     sudo /bin/su postgres -c "pg_dump -Fc ${DB_NAME}"  > $BACKUP_DIR/${DB_NAME}_$DATA_NAME.dump
     DATA=`date +"%Y-%m-%d_%H-%M-%S"`
     if [ $? -ne 0 ]
     then
         echo "$DATA Ошибка завершения backup для базы ${DB_NAME}"
         echo "$DATA Ошибка завершения backup для для базы ${DB_NAME}" >> $BACKUP_DIR/backup.log
         exit
     else
          echo "$DATA Успешное завершение backup для базы ${DB_NAME}"
          echo "$DATA Успешное завершение backup для базы ${DB_NAME}" >> $BACKUP_DIR/backup.log
     fi
     echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
done
# запускаем сервер 1С
echo "Запускаем сервер 1С"
sudo systemctl start  srv1cv83.service
sudo systemctl start srv1cv8-ras.service
echo "Состояние сервера 1С"  >> $BACKUP_DIR/backup.log
sudo systemctl status  srv1cv83.service | grep 'Active:' >> $BACKUP_DIR/backup.log
echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
echo "Закончено"
cat $BACKUP_DIR/backup.log >> $BACKUP_DIR/backupall.log
cat $BACKUP_DIR/backup.log | mutt -s "backup" root



Сохранить.

Проверка:

$ sudo sh /root/backup.sh

Добавить в скрипт terminate.sh
Имя и Пароль администратора кластера:


$ sudo nano /root/terminate.sh

#!/bin/bash
CLUSTER_USER=admin
CLUSTER_PWD=12345
if pgrep 'ras'
    then
        _cluster=$(/opt/1C/v8.3/x86_64/rac cluster list  | grep 'cluster'| awk -F' ' '{print $3}')
        echo 'кластеры: ' $_cluster
    for cluster in $_cluster
    do
        echo 'кластер: ' $cluster
        _base=$(/opt/1C/v8.3/x86_64/rac infobase --cluster=$cluster \
            --cluster-user=$CLUSTER_USER --cluster-pwd=$CLUSTER_PWD \
            summary list | grep 'infobase '| awk '{print$3}')
        _session=$(/opt/1C/v8.3/x86_64/rac session --cluster=$cluster \
            --cluster-user=$CLUSTER_USER --cluster-pwd=$CLUSTER_PWD \
            list | grep 'session '| awk '{print$3}')
        echo 'базы: ' $_base
        echo 'сессии:  ' $_session
        for session in $_session
        do
             /opt/1C/v8.3/x86_64/rac session --cluster=$cluster --cluster-user=$CLUSTER_USER \
                               --cluster-pwd=$CLUSTER_PWD terminate --session=$session
        done
        _session=$(/opt/1C/v8.3/x86_64/rac session --cluster=$cluster \
            --cluster-user=$CLUSTER_USER --cluster-pwd=$CLUSTER_PWD \
            list | grep 'session '| awk '{print$3}')
        echo 'сессии:  ' $_session
    done
else
    echo 'не запущен ras'
fi


Сохранить.

Проверка

$ sudo sh /root/terminate.sh


#$ sudo apt install sysstat lm-sensors smartmontools

Добавить в скрипт sysinfo.sh
Имя и Пароль администратора кластера:


$ sudo nano /root/sysinfo.sh

Вставить:

#!/bin/sh
# Устанавливаем дату
DATA=`date +"%Y-%m-%d_%H-%M"`
#FILE= 'sys_$DATA.txt'
echo  $DATA  > sysinfo.txt
#echo  '12345'  > sys_$DATA.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "uptime" >> sysinfo.txt
uptime >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "last -n 10" >> sysinfo.txt
last -n 10 >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "cat /proc/mdstat" >> sysinfo.txt
cat /proc/mdstat >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "sudo mdadm --detail /dev/md0" >> sysinfo.txt
sudo mdadm --detail /dev/md0 >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "journalctl -b -p err" >> sysinfo.txt
journalctl -b -p err  >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "free -m" >> sysinfo.txt
free -m >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "iostat -xz" >> sysinfo.txt
iostat -xz >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "mpstat -P ALL" >> sysinfo.txt
mpstat -P ALL >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "df -h" >> sysinfo.txt
df -h >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "Размер папки с логами postgresql:" >> sysinfo.txt
echo "du -h -s /var/lib/postgresql/10/main/pg_log" >> sysinfo.txt
du -h -s /var/lib/postgresql/10/main/pg_log  >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "Размер папки с базами postgresql:" >> sysinfo.txt
echo "du -h -s /var/lib/postgresql/10/main/base" >> sysinfo.txt
du -h -s /var/lib/postgresql/10/main/base  >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "Содержимое /dumps:" >> sysinfo.txt
echo "ls /dumps" >> sysinfo.txt
ls /dumps >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "Содержимое /var/log/1c/dumps:" >> sysinfo.txt
echo "ls /var/log/1c/dumps" >> sysinfo.txt
ls /var/log/1c/dumps >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "sensors" >> sysinfo.txt
sensors >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "top -b -n1 -o %MEM | head -n30"
top -b -n1 -o %MEM | head -n30 >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
ps -eo rss,pid,user,command | sort -rn | head -20 | awk '{ hr[1024**2]="GB"; hr[1024]="MB";\
 for (x=1024**3; x>=1024; x/=1024) {\
 if ($1>=x) { printf ("%-6.2f %s ", $1/x, hr[x]); break }\
 } } { printf ("%-6s %-10s ", $2, $3) }\
 { for ( x=4 ; x<=NF ; x++ ) { printf ("%s ",$x) } print ("\n") }\
 ' >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "/usr/sbin/smartctl -A /dev/sda" >> sysinfo.txt
/usr/sbin/smartctl -A /dev/sda  >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "smartctl -A /dev/sdb" >> sysinfo.txt
/usr/sbin/smartctl -A /dev/sdb  >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "/usr/sbin/smartctl -A /dev/sdc" >> sysinfo.txt
/usr/sbin/smartctl -A /dev/sdc  >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "/sbin/apcaccess" >> sysinfo.txt
/sbin/apcaccess >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
echo "Мониторинг 1С" >> sysinfo.txt
# Обязательно установить администратора кластера и его пароль
#  только на один кластер
CLUSTER_USER=admin
CLUSTER_PWD=12345
#--cluster-pwd=$CLUSTER_PWD
if pgrep 'ras'
then
_cluster=$(/opt/1C/v8.3/x86_64/rac cluster list  | grep 'cluster'| awk -F' ' '{print $3}')
_base=$(/opt/1C/v8.3/x86_64/rac infobase --cluster=$_cluster --cluster-user=$CLUSTER_USER \
       --cluster-pwd=$CLUSTER_PWD summary list | grep 'infobase '| awk '{print$3}')
_session=$(/opt/1C/v8.3/x86_64/rac session --cluster=$_cluster \
       --cluster-user=$CLUSTER_USER --cluster-pwd=$CLUSTER_PWD \
       list | grep 'session '| awk '{print$3}')
echo 'кластер: ' $_cluster
echo 'базы: ' $_base
echo 'сессии:  ' $_session
echo 'кластер: ' $_cluster >> sysinfo.txt
echo 'базы: ' $_base >> sysinfo.txt
echo 'сессии:  ' $_session >> sysinfo.txt
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
for cluster in $_cluster
do
/opt/1C/v8.3/x86_64/rac session --cluster=$cluster --cluster-user=$CLUSTER_USER \
       --cluster-pwd=$CLUSTER_PWD  list >> sysinfo.txt
done
echo "---------------------------------------------------------------------------------------" >> sysinfo.txt
else
echo 'не запущен ras'
fi
sleep 2
#echo "test" | mutt -s $DATA  root -a sysinfo.txt
cat sysinfo.txt | mutt -s $DATA  root

Сохранить.

Проверка:
$ sudo sh /root/sysinfo.sh

$ sudo crontab -e
Добавить в конец:
MAILTO=""
@reboot sh /root/terminate.sh
*/5 * * * * sh /root/sysinfo.sh
00 5 * * * sh /root/backup.sh

Сохранить.

Как следить за состоянием жесткого диска с помощью smartmontools в Ubuntu

Как следить за состоянием жесткого диска с помощью smartmontools в Ubuntu
Как проверить работоспособность жесткого диска в Linux с помощью smartmontools

$ sudo nano /etc/default/smartmontools

# Defaults for smartmontools initscript (/etc/init.d/smartmontools)
# This is a POSIX shell fragment

# List of devices you want to explicitly enable S.M.A.R.T. for
# Not needed (and not recommended) if the device is monitored by smartd
#enable_smart="/dev/hda /dev/hdb"

# uncomment to start smartd on system startup
#start_smartd=yes
start_smartd=yes

# uncomment to pass additional options to smartd on startup
#smartd_opts="--interval=1800"
smartd_opts="--interval=1800"

Сохранить.

Для проверки получения почты:

$ sudo nano /etc/smartd.conf

Добавить:

/dev/sda -m root -M test
/dev/sdb -m root -M test
/dev/sdc -m root -M test

Сохранить.

$ sudo reboot

Проверить почту.

$ sudo nano /etc/smartd.conf

 Изменить:

/dev/sda -m root -M daily
/dev/sdb -m root -M daily
/dev/sdc -m root -M daily

Сохранить.

$ sudo systemctl restart smartd


 


Настройка Postfix Ubuntu 18.04.3 для отправки почты через yandex

Настройка Postfix для отправки почты через yandex

Postfix relay yandex
Отправка почты для root на внешний ящик
Пошаговая инструкция установки Postfix и Dovecot на Ubuntu
journalctl: open database /etc/aliases.db: No such file or directory 

user@yandex.ru - e-mail с которого будем посылать письма на произвольные адреса

$ sudo apt update 
$ sudo apt upgrade
(postfix без настройки)
$ sudo apt install postfix mutt



$ sudo mkdir /etc/postfix/private
#$ sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
$ sudo nano /etc/postfix/main.cf

Вставить в пустой файл:

relayhost =
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/private/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_type = cyrus
smtp_sasl_mechanism_filter = login
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/private/sender_relay
sender_canonical_maps = hash:/etc/postfix/private/canonical


Сохранить.

Создать файл /etc/postfix/private/canonical :

$ sudo nano /etc/postfix/private/canonical

Содержимое (Ваш: user@yandex.ru  где user ваш логин) :

@yandex.ru user@yandex.ru


Сохранить.

Создать файл  /etc/postfix/private/sender_relay :

$ sudo nano /etc/postfix/private/sender_relay

Содержимое:

@yandex.ru smtp.yandex.ru

Сохранить.

Создать файл  /etc/postfix/private/sasl_passwd:
где вместо *** укажите свой пароль:
 
$ sudo nano /etc/postfix/private/sasl_passwd

Содержимое (Ваш: user@yandex.ru  где user ваш логин, password - ваш пароль ) :

[smtp.yandex.ru] user@yandex.ru:password

Сохранить.

$ sudo postmap /etc/postfix/private/*
$ sudo postalias /etc/aliases
$ sudo systemctl restart postfix.service
#$ sudo systemctl status postfix.service
#$ sudo reboot
$ sudo systemctl status postfix.service

 посмотреть:

$ sudo journalctl -b
$ sudo journalctl -b -p err

Если есть сообщения:
........
open database /etc/aliases.db: No such file or directory
........

$ sudo postalias /etc/aliases
или
$ sudo newaliases

Перезагрузить и проверить.

Отправка почты на наш e-mail:

$ echo "test" | mutt -s "test" nash@e-mail.ru

Отправка почты на наш e-mail с вложением файла:

$ echo "test" | mutt -s "test" nash@e-mail.ru -a file

$ sudo apt install sysstat lm-sensors smartmontools

Отправка почты для root на внешний адрес через yandex

$ sudo nano /etc/aliases

root: nash@e-mail.ru



Сохранить.
 
$ sudo newaliases

Проверка:

$ echo test | mail -s "test message" root

Проверка сообщения от mdadm

$ sudo mdadm --monitor --scan --test -1

This is an automatically generated mail message from mdadm
running on test2

A TestMessage event had been detected on md device /dev/md/0.

Faithfully yours, etc.

P.S. The /proc/mdstat file currently contains the following:

Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[1] sda1[0]
      488252416 blocks super 1.2 [2/2] [UU]
      bitmap: 2/4 pages [8KB], 65536KB chunk

unused devices: <none>





$ sudo nano /etc/smartd.conf


DEVICESCAN -H -m root

Настройка Ubuntu 18.04.3 для работы с Back-UPS ES 700G от APC

5. Настройка Ubuntu для работы с ИБП от APC
APCUPSd: Поля о состоянии устройства
APCUPSD User Manual
Ureadahead сообщает об ошибках относительного пути в выходных данных journalctl

$ lsusb | grep American

Bus 001 Device 004: ID 051d:0002 American Power Conversion Uninterruptible Power Supply

$ sudo apt-get install apcupsd -y
$ sudo nano /etc/apcupsd/apcupsd.conf


1. ( В 18.04 настроено)
#UPSCABLE smart
UPSCABLE usb
......
2.  ( В 18.04 настроено)
#UPSTYPE apcsmart
UPSTYPE usb

 3. Обязательно закомментировать DEVICE /dev/ttyS0  !!!
#DEVICE /dev/ttyS0

# Для проверки можно 30 (потом убрать )
TIMEOUT 30

TIMEOUT - параметр актуален для старых ИБП, неспособных определять свой уровень заряда. Задаёт время (в секундах) между сбоем электропитания и отключением компьютера. Для современного ИБП параметр стоит оставить на 0, но выставление иного значения может быть удобно для тестирования работы ИБП. Например, если выставить 30 и выдернуть шнур из розетки, уже через полминуты apcupsd продемонстрирует своё умение выключать компьютер
Сохранить.

Настроим /etc/default/apcupsd 
Заменяем ISCONFIGURED=no на ISCONFIGURED=yes , сохраняем, закрываем. Отныне apcupsd будет знать, что мы не забыли его настроить.

Т.е 0 будет ждать разрядки батареи, 30 - будет ждать 30 с.


$ sudo nano /etc/default/apcupsd

#ISCONFIGURED=no
ISCONFIGURED=yes


Сохранить.


Теперь достаточно запустить apcupsd:

#$ sudo /etc/init.d/apcupsd start
$ sudo systemctl start apcupsd.service
Starting UPS power management: apcupsd.
$ sudo /etc/init.d/apcupsd status


$ apcaccess
APC      : 001,017,0421
DATE     : 2019-08-21 12:00:55 +0300
HOSTNAME : test2
VERSION  : 3.14.14 (31 May 2016) debian
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2019-08-21 12:00:15 +0300
STATUS   : COMMLOST
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 30 Seconds
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
STATFLAG : 0x05000100
END APC  : 2019-08-21 12:00:55 +0300

Важно!
$ sudo reboot


 Смотреть статус должен быть STATUS   : ONLINE
 Если STATUS   : COMMLOST, нет связи с UPS !!!


$ sudo /etc/init.d/apcupsd status
$ sudo systemctl status apcupsd.service

$ apcaccess
APC      : 001,034,0828
DATE     : 2019-08-21 11:49:09 +0300
HOSTNAME : test2
VERSION  : 3.14.14 (31 May 2016) debian
UPSNAME  : test2
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2019-08-21 11:38:02 +0300
MODEL    : Back-UPS ES 700G
STATUS   : ONLINE
LINEV    : 224.0 Volts
LOADPCT  : 26.0 Percent
BCHARGE  : 100.0 Percent
TIMELEFT : 18.0 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 30 Seconds
SENSE    : Medium
LOTRANS  : 180.0 Volts
HITRANS  : 266.0 Volts
ALARMDEL : 30 Seconds
BATTV    : 13.5 Volts
LASTXFER : No transfers since turnon
NUMXFERS : 0
TONBATT  : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
STATFLAG : 0x05000008
SERIALNO : 5B1909T49061
BATTDATE : 2019-03-02
NOMINV   : 230 Volts
NOMBATTV : 12.0 Volts
FIRMWARE : 871.O4 .I USB FW:O4
END APC  : 2019-08-21 11:49:20 +0300


BCHARGE  : 50.0 Percent - Зарядка батарей 50%
TIMELEFT : 26.1 Minutes - Оставшееся время работы от батареи по оценке ИБП.

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

воскресенье, 18 августа 2019 г.

Intel Core I3

Изменение конфигураций сохраняет информацию о установленных лицензиях

12.1. Окно справки
$ sudo  su postgres
$ psql
postgres-# \c demo
demo-# UPDATE files SET binarydata = '', datasize = 0
WHERE filename = 'c01b78f6-1525-41b1-9cc1-69e3da58d2ac.pfl';

Отключение аутентификации 1C при клиент-серверном варианте работы

demo=# ALTER TABLE v8users RENAME TO v8users_old;
demo=# UPDATE params SET filename = 'users.usr_old' WHERE filename = 'users.usr';

Войти в конфигуратор:
demo=# DROP TABLE v8users;
demo=# ALTER TABLE v8users_old RENAME TO v8users;
demo=# UPDATE params SET filename = 'users.usr' WHERE filename = 'users.usr_old';
Изменить пароль

суббота, 17 августа 2019 г.

Тестовый сервер test2 на Ubuntu 18.04.3

В данной статье опишем установку сервера СУБД PostgreSQL версия 10.5-24.1C на ubuntu 18.04.3 на физическую машину.

Устанавливаем ubuntu 18.04.3 на программный RAID 1 SSD
RAM (16 GB) монтируем диск для backup /backups


Настройки ubuntu пользователь (привязка в скриптах) user пароль 12345, имя компьютера test2

После установки, Ctrl +Alt + T (окно терминала)
$ sudo apt update -y
$ sudo apt upgrade -y
$ sudo apt autoremove -y
$ sudo apt install mc ssh samba -y

Возможно sudo apt upgrade -y не пройдет из за блокировки, тогда sudo reboot и повторите с начала.

$ lsusb

2. Настройка сети

Тестовый сервер будет использовать dhcp

Смотрим:
$ cat  /etc/hosts
127.0.0.1       localhost
.....


$ sudo nano /etc/hosts

Меняем:

127.0.0.1       localhost       test2


Сохранить.

$ cat /proc/cpuinfo | grep MHz
cpu MHz         : 800.111
cpu MHz         : 800.028
cpu MHz         : 800.377
cpu MHz         : 800.190


3. Тюнинг остального:

Сделаем еще один скрипт для настройки остального:

$ nano tuning.sh

#!/bin/bash
# отключим ipv6
sudo /bin/su -c "echo 'net.ipv6.conf.all.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.default.disable_ipv6 = 1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'net.ipv6.conf.lo.disable_ipv6 = 1' >> /etc/sysctl.conf"
#sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
#тюнинг postgresql
#add a swap file to an Ubuntu 16.04
#sudo fallocate -l 1G /swapfile
#sudo chmod 600 /swapfile
#sudo mkswap /swapfile
#sudo swapon /swapfile
#sudo cp /etc/fstab /etc/fstab.bak
#sudo echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
sudo /bin/su -c "echo 'vm.swappiness=1' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'kernel.sched_migration_cost_ns = 5000000' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'kernel.sched_autogroup_enabled = 0' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.dirty_background_bytes = 67108864' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.dirty_bytes = 536870912' >> /etc/sysctl.conf"
sudo /bin/su -c "echo 'vm.zone_reclaim_mode = 0' >> /etc/sysctl.conf"
sudo sysctl -p
# перезагрузим сеть
#sudo systemctl restart networking.service
#sudo systemctl start networking.service
#sudo systemctl enable networking.service
# Настройка sudo journalctl -b sudo journalctl -b -1 sudo journalctl --list-boots
sudo sed -i 's/#Storage=auto/Storage=persistent/' /etc/systemd/journald.conf
# Отключение уведомлений службы Apport (/var/crash)
sudo sed -i 's/enabled=1/enabled=0/' /etc/default/apport
# Отключим службу ondemand# (для разгона cpu)
# cat /proc/cpuinfo | grep MHz
# systemctl status ondemand
sudo systemctl stop ondemand
sudo systemctl disable ondemand
# shutdown -r now

Сохраним файл tuning.sh

------------------------------------------
Сделаем исполняем
$ chmod +x tuning.sh
$  sudo ./tuning.sh

или
$  sudo sh tuning.sh
------------------------------------------

Перезагрузимся

$ sudo reboot

После перезагрузки по сети можно подключиться MobaXterm

$ cat /proc/cpuinfo | grep MHz 
cat /proc/cpuinfo | grep MHz
cpu MHz         : 4000.489
cpu MHz         : 4000.162
cpu MHz         : 4000.980
cpu MHz         : 4002.072

$ free
              total        used        free      shared  buff/cache   available
Память:    16284616       95512    15944100        1312      245004    15870784
Подкачка:     1048572           0     1048572


Установка СУБД PostgreSQL версия 10.8_18.1C

После перезагрузки по сети можно подключиться MobaXterm
к нашей виртуальной машине (по ip или или имени )  загрузить файлы установки:
$ mkdir /home/user/test

 В папку /test положить файл:
deb64_8_3_15_1565.tar.gz
 postgresql_10.8_18.1C_amd64_deb.tar.bz2

Файл postgresql_10.8_18.1C_amd64_addon_deb.tar.bz2 не устанавливаем - проблемы с зависимостями

$ wget http://archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu55_55.1-7_amd64.deb
$ sudo sudo dpkg -i libicu55_55.1-7_amd64.deb
$ dpkg -l | grep libicu55 | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
# libicu55 помечен как зафиксированный. 
$ sudo apt-get install postgresql-common  -y
$ dpkg -l | grep postgres | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#postgresql-client-common помечен как зафиксированный.
#postgresql-common помечен как зафиксированный.
$ mkdir -p /tmp/post
$ cp /home/user/test/postgresql_10.8_18.1C_amd64_deb.tar.bz2 /tmp/post/
$ cd /tmp/post
$ tar -xvf postgresql_10.8_18.1C_amd64_deb.tar.bz2
$ ls 
$ cd postgresql-10.8-18.1C_amd64_deb
$ ls
# список файлов:
#libpq5_10.8-18.1C_amd64.deb  postgresql-10_10.8-18.1C_amd64.deb  postgresql-client-10_10.8-18.1C_amd64.deb
$ sudo dpkg -i *.deb
$ dpkg -l | grep 10.8-18.1C | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#libpq5 помечен как зафиксированный.
#postgresql-10 помечен как зафиксированный.
#postgresql-client-10 помечен как зафиксированный.

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 online postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log


$ sudo pg_dropcluster --stop 10 main

$ sudo pg_createcluster --locale ru_RU.UTF-8 10 main --  --data-checksums


$ sudo pg_ctlcluster 10 main start

$ pg_lsclusters
Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 online postgres /var/lib/postgresql/10/main pg_log/postgresql-%a.log
 
$ sudo -u postgres psql -U postgres -c "alter user postgres with password 'pass';"
$ sudo cp /etc/postgresql/10/main/postgresql.conf /etc/postgresql/10/main/postgresql.conf.bak

#Делаем проверки
$ sudo systemctl status postgresql.service
$ ss -tunpl | grep 5432
tcp    LISTEN     0      128       *:5432                  *:*
tcp    LISTEN     0      128      :::5432                 :::*
$ ps aux | grep postgres | grep -- -D
postgres  4914  0.0  0.1 320972 28864 ?        S    08:37   0:00 /usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/main/postgresql.conf

-------------------------------------------------------------------------------------------------------

Настройка postgresql.conf для 1С Total Memory (RAM): 16 GB

$ sudo nano /etc/postgresql/10/main/postgresql.conf
Добавить в конец:

# DB Version: 10
# OS Type: linux
# DB Type: oltp
# Total Memory (RAM): 16 GB
# Data Storage: ssd

max_connections = 1000
shared_buffers = 4GB
temp_buffers = 256MB
work_mem = 64MB
effective_cache_size = 8GB # 4GB for 1c
maintenance_work_mem = 1GB
wal_buffers = 16MB
min_wal_size = 2GB
max_wal_size = 4GB

default_statistics_target = 100
effective_io_concurrency = 2
random_page_cost = 1.1
autovacuum = on
autovacuum_max_workers = 4
autovacuum_naptime = 20s
bgwriter_delay = 20ms
bgwriter_lru_multiplier = 4.0
bgwriter_lru_maxpages = 400
synchronous_commit = off
checkpoint_completion_target = 0.9
ssl = off
fsync = on
commit_delay = 1000
commit_siblings = 5
row_security = off
max_files_per_process = 1000
standard_conforming_strings = off
escape_string_warning = off
max_locks_per_transaction = 256
#log_min_duration_statement = 0
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,client=%h '
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
#log_autovacuum_min_duration = 0
#lc_messages='C'
#log_duration = on
#log_statement = all
log_destination = stderr
plantuner.fix_empty_table = 'on'
online_analyze.table_type = 'temporary'
online_analyze.verbose = 'off'

vacuum_cost_delay = 0
vacuum_cost_page_hit = 0
vacuum_cost_page_miss = 5
vacuum_cost_page_dirty = 5
vacuum_cost_limit = 200
autovacuum_max_workers =4
autovacuum_naptime = 1s
autovacuum_vacuum_threshold = 50
autovacuum_analyze_threshold = 50
autovacuum_vacuum_scale_factor = 0.05
autovacuum_analyze_scale_factor = 0.05
autovacuum_vacuum_cost_delay = 5ms
autovacuum_vacuum_cost_limit = -1


Сохранить.

$ sudo systemctl restart postgresql.service
 -------------------------------------------------------------------------------------------------------

Установка pg_probackup 

pg_probackup описание

$ sudo su -c "echo 'deb [arch=amd64] http://repo.postgrespro.ru/pg_probackup/deb/ $(lsb_release -cs) main-$(lsb_release -cs)' > /etc/apt/sources.list.d/pg_probackup.list" 
$ sudo su -c "wget -O - http://repo.postgrespro.ru/pg_probackup/keys/GPG-KEY-PG_PROBACKUP | apt-key add -" 
$ sudo apt-get update 
$ sudo apt-get install pg-probackup-10
$ dpkg -l | grep pg-probackup-10 | awk -F' ' '{print $2}' | sudo xargs apt-mark hold
#pg-probackup-10 помечен как зафиксированный.

Инициализация каталога резервных копий 1 экземпляр на примонтированом HDD


Каталог резервных копий /backup/pg_probackup расположено на hdd диске, в нем будем ежедневно сохранять backup за 30 дней без непрерывного архивирования.
Если нет дополнительного диска, выполняем закомментированые команды
$ sudo pg_probackup-10 init -B /backup
$ sudo mkdir /backup/copy
$ sudo mkdir /backup/log
$ sudo mkdir /backup/pg_dump
$ sudo chown -R postgres:postgres /backup/
#$ sudo chmod -R 777 /backup/pg_probackup
# /backups примонтированный диск для архивов
$ sudo mkdir /backups/copy
$ sudo mkdir /backups/pg_dump
$ sudo chown -R postgres:postgres /backups/ 


Определение копируемого экземпляра 
$ sudo -u postgres pg_probackup-10 add-instance -B /backup -D /var/lib/postgresql/10/main --instance main


$ sudo nano /etc/postgresql/10/main/postgresql.conf

Добавить:

max_wal_senders = 10
wal_level = replica
unix_socket_directories='/var/run/postgresql'
# Для настройки архивного резервного копирования разкомментировать:
archive_mode = on
#archive_command ='test ! -f /wal/%f && cp %p /wal/%f' 
archive_command = '/usr/bin/pg_probackup-10 archive-push -B /backup --compress --instance main --wal-file-path %p --wal-file-name %f'

Сохранить.

$ sudo systemctl restart postgresql.service

Настройка политики сохранения 5 резервных копий

$ sudo -u postgres nano /backup/backups/main/pg_probackup.conf

Добавить:

retention-redundancy=5

Сохранить


Создание полной автономной резервной копии: 

$ sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired


Просмотр:

$ sudo -u postgres pg_probackup-10 show -B /backup


Проверка backup:

Проверка файлов:
$ sudo -u postgres pg_probackup-10 checkdb -B /backup --instance main
INFO: Start checking data files
INFO: Data files are valid

Проверка backup: 
$ sudo -u postgres pg_probackup-10 validate -B /backup
INFO: Validate backups of the instance 'main'
INFO: Validating backup PUVU29
INFO: Backup PUVU29 data files are valid
INFO: Backup PUVU29 WAL segments are valid
INFO: Validating backup PUVTUX
INFO: Backup PUVTUX data files are valid
INFO: Backup PUVTUX WAL segments are valid
INFO: All backups are valid

------------------------------------------------------------------------------------------------------- 

Пример восстановления из полной автономной резервной копии (замена кластера на резервную копию)


Сделали копию:
 $ sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired 

Перед восстановлением

Просмотр:

$ sudo -u postgres pg_probackup-10 show -B

Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup

INFO: Validate backups of the instance 'main'
INFO: Validating backup PRP29I
INFO: Backup PRP29I data files are valid
INFO: Backup PRP29I WAL segments are valid

Можно восстанавливать.

Останавливаем 1с
$ sudo systemctl stop srv1cv83.service

Останавливаем postgresql
$ sudo systemctl stop postgresql.service

Удалим кластер main
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"

Восстановим кластер main
$ sudo -u postgres pg_probackup-10 restore -B /backup --instance main -i PRP29I
INFO: Validating backup PRP29I
INFO: Backup PRP29I data files are valid
INFO: Backup PRP29I WAL segments are valid
INFO: Backup PRP29I is valid.
INFO: Restore of backup PRP29I completed.


Запускаем postgresql
$ sudo systemctl start postgresql.service

Запускаем 1с
$ sudo systemctl start srv1cv83.service

------------------------------------------------------------------------------------------------------- 

Пример восстановления из полной автономной резервной копии c непрерывным архивированием (замена кластера на резервную копию)


$ sudo -u postgres pg_probackup-10 backup -B /backup --instance main -b FULL --stream --compress --delete-wal --expired


Просмотр:

$ sudo -u postgres pg_probackup-10 show -B /backup


Проверка backup:
$ sudo -u postgres pg_probackup-10 validate -B /backup

INFO: Validate backups of the instance 'main'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
 Можно восстанавливать, но проверим непрерывность архивирования:


Войти в 1с создать документ, провести, выйти из 1с.


$ sudo -u postgres pg_probackup-10 validate -B /backup   --instance main -i PRP6Q5 --time='2042-04-16 12:26:00'
INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
WARNING: Thread [1]: Could not read WAL record at 1/88000000
ERROR: Thread [1]: WAL segment "/backupwal/wal/main/000000010000000100000088" is absent
WARNING: Recovery can be done up to time 2019-05-18 14:36:30+03, xid 0 and LSN 1/2A000198
ERROR: Not enough WAL records to time 2042-04-16 12:26:00+03



Останавливаем 1с
$ sudo systemctl stop srv1cv83.service

Останавливаем postgresql
$ sudo systemctl stop postgresql.service

Удалим кластер main
$ sudo /bin/su postgres -c "rm -rf /var/lib/postgresql/10/main/*"

Восстановим кластер main
$ sudo -u postgres pg_probackup-10 restore -B /backup --instance main -i PRP6Q5 --recovery-target='latest'


INFO: Validating backup PRP6Q5
INFO: Backup PRP6Q5 data files are valid
INFO: Backup PRP6Q5 WAL segments are valid
INFO: Backup PRP6Q5 is valid.
INFO: Restore of backup PRP6Q5 completed.


Запускаем postgresql
$ sudo systemctl start postgresql.service

Запускаем 1с
$ sudo systemctl start srv1cv83.service


Для проверки стандартной wal архивации:

$ sudo mkdir -p /wal
$ sudo chown -R postgres:postgres /wal


$ sudo nano /etc/postgresql/10/main/postgresql.conf

расскоментировать:
archive_command ='test ! -f /wal/%f && cp %p /wal/%f'

Сохранить.

$ sudo systemctl restart postgresql.service

В папку /test положить файлы:
deb64_8_3_15_1565.tar.gz

# установка 1с
$ mkdir -p /tmp/1ctmp
$ cd /tmp/1ctmp
$ sudo apt install imagemagick -y
#$sudo apt install -y unixodbc libgsf-1-114 libglib2.0
$ sudo apt install libfreetype6 libgsf-1-common unixodbc glib2.0
#ubuntu
$ sudo  apt install -y xfonts-utils cabextract
$ sudo apt install ttf-mscorefonts-installer -y
$  ls /home/user/test/
$ cp /home/user/test/deb64_8_3_15_1565.tar.gz /tmp/1ctmp
$ tar xvzf deb64_8_3_15_1565.tar.gz
$ sudo dpkg -i 1c-enterprise83-common_8.3.15-1565_amd64.deb
$ sudo dpkg -i 1c-enterprise83-server_8.3.15-1565_amd64.deb
#$ sudo dpkg -i 1c-enterprise83-ws_8.3.15-1565_amd64.deb
#$ sudo dpkg -i 1c-enterprise83-crs_8.3.15-1565_amd64.deb
#$ sudo apt -f -y install
$ sudo chown -R usr1cv8:grp1cv8 /opt/1C
#$ sudo echo -e "pass\npass\n" | sudo passwd usr1cv8
$ sudo service srv1cv83 start
$ sudo service srv1cv83 status
#$ sudo usermod -aG sudo usr1cv8

$ sudo  apt install -y libc6-i386
$ mkdir /tmp/hasp
$ cd /tmp/hasp
$ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/18.04/haspd-modules_7.90-eter2ubuntu_amd64.deb
$ wget http://download.etersoft.ru/pub/Etersoft/HASP/last/x86_64/Ubuntu/18.04/haspd_7.90-eter2ubuntu_amd64.deb
$ sudo dpkg -i *.deb
#$ sudo apt-get install -f -y
$ sudo service haspd start
$ sudo service haspd status
#$ sudo reboot

$ sudo service srv1cv83 status
$ ss -tlnp | grep :15
LISTEN     0      128          *:1560                     *:*
LISTEN     0      128          *:1540                     *:*
LISTEN     0      128          *:1541                     *:*
LISTEN     0      128         :::1560                    :::*
LISTEN     0      128         :::1540                    :::*
LISTEN     0      128         :::1541                    :::*


Не встал скриптом imagemagick?
Без строчки ниже будет ругаться при входе в 1с
$ sudo apt-get install imagemagick  -y

Для программной лицензии (прявязанной к hasp)

в /var/1C/licenses
Положить лицензию


$ sudo mv 20190207114003.lic /var/1C/licenses




Запуск службы сервера администрирования RAS

$ sudo nano /etc/systemd/system/srv1cv8-ras.service

Вставить:

[Unit]
Description=1C:Enterprise Remote Administration Service
After=network.target remote-fs.target nss-lookup.target
Requires=srv1cv83.service

[Service]
Type=simple
ExecStart=/opt/1C/v8.3/x86_64/ras cluster --port=1545
KillSignal=SIGINT
PrivateTmp=true
Restart=on-failure
RestartSec=5
User=usr1cv8
Group=grp1cv8

[Install]
WantedBy=multi-user.target

Сохранить.


#$ sudo systemctl daemon-reload
$ sudo systemctl enable srv1cv8-ras.service
$ sudo systemctl start srv1cv8-ras.service
$ sudo systemctl status srv1cv8-ras.service

Управление серверами 8.3.15

Настройка резервного копирования

$ sudo nano /root/fullbackup.sh
 
#!/bin/sh -e
# Внимание задать пароль PGPASSWORD !!!
export PGPASSWORD=pass
#/backup
inst='/backup'
cd $inst
#sudo sh /root/terminate.sh
# vacuumdb
sudo systemctl stop srv1cv83.service
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
echo "vacuumdb $DATA - начало" > vacuumdb.txt
sudo -u postgres vacuumdb -afz >> vacuumdb.txt
sudo systemctl start srv1cv83.service
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
if [ $? -ne 0 ]
then
     echo "vacuumdb $DATA - неудачное завершение" >> vacuumdb.txt
else
     echo "vacuumdb $DATA - удачное завершение" >> vacuumdb.txt
fi
echo "-------------------------------------------" >> vacuumdb.txt
cat vacuumdb.txt >> vacuumdb.log
cat vacuumdb.txt | mutt -s "vacuumdb" root
#  /backup/pg_probackup
log=$inst'/log/pg_probackup.log'
log1=$inst'/log/probackup.log'
if [ -f $log ]; then rm $log; fi
cd $inst
pg_probackup-10 backup -B $inst --instance main -U postgres -d postgres -h 127.0.0.1 -b FULL --stream --compress --expired --delete-wal --log-level-file=info
grep completed $log > /dev/null 2>&1
if [ $? -ne 0 ]
then
    msg="$inst неудачное завершение."
else
    msg="$inst удачное завершение."
fi
DATA=`date +"%Y-%m-%d %H:%M:%S"`
#msg1="Размер экземпляра pg_probackup: $(du -h -s $inst)"
echo "=================================================================="  >> $log
echo "$DATA $msg" >> $log
cat $log >> $log1
cat $log  | mutt -s "pg_probackup" root
#echo "$DATA $msg" >> $log1
# Сразу архивируем для rsync
#COPY_DIR=$inst/copy
COPY_DIR=/backups/copy
#COPY_LOG=$inst/copy/copy.log
COPY_LOG=/backups/copy/copy.log
#Берем последнюю копию
COPY_ID=$(ls $inst/backups/main -1 | tail -1)
#Она должна быть completed
grep "$COPY_ID completed" $log > /dev/null 2>&1
if [ $? = 0 ]
then
    DATA=`date +"%Y-%m-%d_%H-%M-%S"`
    #rm  $inst/copy/*
    tar -cvzf $COPY_DIR/pg_pro-$DATA.tar.gz  \
           $inst/backups/main/$COPY_ID > /dev/null 2>&1
    if [ $? = 0 ]
    then
        msg="создан $COPY_DIR/pg_pro-$DATA.tar.gz"
    else
        msg="ошибка создания $COPY_DIR/pg_pro-$DATA.tar.gz"
    fi
    DATA=`date +"%Y-%m-%d %H:%M:%S"`
    echo "$DATA $msg" >> $COPY_LOG
    echo "$DATA $msg" | mutt -s "copy pg_probackup" root
fi

Сохранить.

Проверка:

$ sudo sh /root/fullbackup.sh


$ sudo nano /root/backup-sql.sh

#!/bin/sh
# crontab -e
# mkdir -p /backup/pg_dump
set -e

#BACKUP_DIR="/backup/pg_dump"
BACKUP_DIR="/backups/pg_dump"
cd $BACKUP_DIR
echo "====================================================================" > $BACKUP_DIR/backup.log
# останавливаем сервер 1С
echo "останавливаем сервер 1С"
sudo systemctl stop srv1cv8-ras.service
sudo systemctl stop  srv1cv83.service
echo "состояние сервера 1С"  >> $BACKUP_DIR/backup.log
sudo systemctl status  srv1cv83.service | grep 'Active:' >> $BACKUP_DIR/backup.log
echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
# Устанавливаем дату
DATA=`date +"%Y-%m-%d_%H-%M-%S"`
DATA_NAME=`date +"%Y-%m-%d_%H-%M-%S"`
echo "$DATA Size database file: " >> $BACKUP_DIR/backup.log
sudo du -h -s /var/lib/postgresql/10/main/base  >> $BACKUP_DIR/backup.log
echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
# делаем  backup
DB_BASE=`sudo /bin/su postgres -c "/usr/bin/psql -qAt -c 'SELECT * FROM pg_database;'" | \
     cut -d"|" -f1 | /bin/grep -v template | /bin/grep -v postgres`
#DB_BASE="demo test" #конкретные базы
#DB_BASE="" #пропустить
echo $DB_BASE
for DB_NAME in $DB_BASE
 do
     DATA=`date +"%Y-%m-%d_%H-%M-%S"`
     # Записываем информацию в лог с секундами
     echo "$DATA Начало backup базы ${DB_NAME}" >> $BACKUP_DIR/backup.log
     # Бэкапим базу данных demo и сразу сжимаем
     echo "$DATA Начало backup базы ${DB_NAME}"
     sudo /bin/su postgres -c "pg_dump -Fc ${DB_NAME}"  > $BACKUP_DIR/${DB_NAME}_$DATA_NAME.dump
     DATA=`date +"%Y-%m-%d_%H-%M-%S"`
     if [ $? -ne 0 ]
     then
         echo "$DATA Ошибка завершения backup для базы ${DB_NAME}"
         echo "$DATA Ошибка завершения backup для для базы ${DB_NAME}" >> $BACKUP_DIR/backup.log
         exit
     else
          echo "$DATA Успешное завершение backup для базы ${DB_NAME}"
          echo "$DATA Успешное завершение backup для базы ${DB_NAME}" >> $BACKUP_DIR/backup.log
     fi
     echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
done
# запускаем сервер 1С
echo "Запускаем сервер 1С"
sudo systemctl start  srv1cv83.service
sudo systemctl start srv1cv8-ras.service
echo "Состояние сервера 1С"  >> $BACKUP_DIR/backup.log
sudo systemctl status  srv1cv83.service | grep 'Active:' >> $BACKUP_DIR/backup.log
echo "--------------------------------------------------------------------" >> $BACKUP_DIR/backup.log
echo "Закончено"
cat $BACKUP_DIR/backup.log >> $BACKUP_DIR/backupall.log
cat $BACKUP_DIR/backup.log | mutt -s "backup" root



Сохранить.
 
Проверка  

$ sudo sh /root/backup-sql.sh

$ sudo nano /root/terminate.sh


#!/bin/bash
#if ! pgrep 'ras'; then sudo su usr1cv8 -c "/opt/1C/v8.3/x86_64/ras --daemon cluster"; fi
sudo su usr1cv8 -c "/opt/1C/v8.3/x86_64/ras --daemon cluster" 
#sleep 5
_cluster=$(/opt/1C/v8.3/x86_64/rac cluster list  | grep 'cluster'| awk -F' ' '{print $3}')
_base=$(/opt/1C/v8.3/x86_64/rac infobase --cluster=$_cluster summary list | grep 'infobase '| awk '{print$3}')
_session=$(/opt/1C/v8.3/x86_64/rac session --cluster=$_cluster list | grep 'session '| awk '{print$3}')
echo 'кластер: ' $_cluster
echo 'базы: ' $_base
echo 'сессии:  ' $_session
for session in $_session
do
/opt/1C/v8.3/x86_64/rac session --cluster=$_cluster terminate --session=$session
done
_session=$(/opt/1C/v8.3/x86_64/rac session --cluster=$_cluster list | grep 'session '| awk '{print$3}')
echo 'сессии:  ' $_session

Сохранить.

Проверка

$ sudo sh /root/terminate.sh

$ sudo crontab -e

00 0 * * * sh /root/fullbackup.sh
00 3 * * * sh /root/backup-sql.sh


Сохранить.