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


1С-Битрикс: Низкие показатели MySQL в мониторе производительности (Решение)


Хочу поделится радостью: удалось оптимизировать работу MySQL.
В БУС монитор производительности на мощном сервере показывал следуюшее:
База данных MySQL (запись)      72      5 600      количество запросов на запись в секунду
База данных MySQL (чтение)      5 869   7 800      количество запросов на чтение в секунду
База данных MySQL (изменение)   4 251   5 800      количество запросов на изменение в секунду
Но нашлась все-таки одна настроечка, которая ну очень сильно меня обрадовала: innodb_flush_log_at_trx_commit=2
После того как я ее прописал, получил следующие циферки:
База данных MySQL (запись)     4 395     5 600     количество запросов на запись в секунду
База данных MySQL (чтение)    6 220    7 800    количество запросов на чтение в секунду
База данных MySQL (изменение)    4 643    5 800    количество запросов на изменение в секунду
Увелечение скорости записи в 60 раз меня ну очень обрадовало.
innodb_flush_log_at_trx_commit — Вам кажется, что InnoDB в сто раз медленнее MyISAM? Вероятно, вы забыли изменить значение этого параметра. Значение по умолчанию 1 означает, что после каждой завершенной транзакции (или после изменения состояния транзакции) лог должен быть сброшен на диск. Это достаточно дорогая операция, особенно если у вас нет Battery backed up cache. Многие приложения, особенно те, в которых раньше использовался MyISAM будут хорошо работать при значении 2, который означает, что не надо сбрасывать буфер на диск, а следует отправить его в кэш операционной системы. Лог по-прежнему будет сбрасываться на диск каждую секунду и максимум, что вы можете потерять — это 1-2 секунды записей. Значение 0 обеспечивает более высокую скорость, но и более низкую надежность. Есть вероятность потерять транзакции даже при падении mysql-сервера. При значении равном 2 единственная возможность потерять данные — это фатальный сбой операционной системы.

Оригинал статьи - в интернете

подсказки по работе с docker

Docker: Удалить Контейнер — Удалить Все Контейнеры

Список Docker-контейнеров
Список запущенных Docker-контейнеров:

$ docker ps
Список всех Docker-контейнеров:

$ docker ps -a
Удалить Docker-контейнер
Удалить Docker-контейнер по CONTAINER ID или NAME:

$ docker rm
Принудительно удалить запущенный Docker-контейнер:

$ docker rm -f
Удалить Все Docker-контейнеры
Удалить все остановленные (неиспользуемые) Docker-контейнеры:

$ docker container prune -f
Принудительно удалить все Docker-контейнеры, включая запущенные контейнеры:

$ docker rm -f $(docker ps -a -q)

Docker: Удалить Образ — Удалить Все Образы — Удалить Неиспользуемые

Список Docker-образов
Список всех локальных Docker-образов:

$ docker images
Удалить Docker-образ
Удалить Docker-образ по IMAGE ID:

$ docker rmi
Принудительно удалить Docker-образ:

$ docker rmi -f
Удалить Неиспользуемые Docker-образы
Удалить все неиспользуемые Docker-образы:

$ docker image prune -a -f
Удалить Все Docker-образы
Принудительно удалить все Docker-образы:

$ docker rmi -f $(docker images -q)

оригинал:

четверг, 13 сентября 2018 г.

Прерывание проверки дискового массива в mdadm

MDADM, поставляемый вместе с дистрибутивом Debian, содержит задание CRON, которое раз в месяц запускает проверку целостности массива. На больших массивах, размер которых превышает несколько терабайт, такая проверка может занять слишком много времени. Прогресс выполнения проверки можно узнать в /proc/mdstat

# cat /proc/mdstat
Personalities : [raid1] 
md1 : active raid1 sdb2[0] sda2[1]
      1911569360 blocks super 1.2 [2/2] [UU]
      [>....................]  check =  0.0% (8832/1911569360) finish=7201.4min speed=4416K/sec
      
md0 : active raid1 sdb1[0] sda1[1]
      41941944 blocks super 1.2 [2/2] [UU]
      
unused devices: 

Прервать такую проверку можно так:

# echo idle > /sys/block/md1/md/sync_action

После чего можно проверить, что массив действительно перестал проверяться:
# cat /proc/mdadm
Personalities : [raid1] 
md1 : active raid1 sdb2[0] sda2[1]
      1911569360 blocks super 1.2 [2/2] [UU]
      
md0 : active raid1 sdb1[0] sda1[1]
      41941944 blocks super 1.2 [2/2] [UU]
      
unused devices:  

Чтобы отменить такую проверку в будущем, нужно установить параметр AUTOCHECK=false в /etc/default/mdadm

Оригинал статьи:
https://blog.tataranovich.com/2012/04/mdadm.html

вторник, 22 мая 2018 г.

Заметка для рейд1 xen 7.x и XCP-NG 
по мотивам копипаста и исправления ошибок в мануалах.
базовая таблица диска поле установки xen 7.x, без созданного на стадии установки локального хранилища
/ (root) 18GB
(update) 18GB
/boot/efi 512M
/var/log 4GB
swap 1GB

0. Удаляем старое


Первым делом отключаем существующие хранилища (если есть):

xe sr-list
xe pbd-list sr-uuid=
xe pbd-unplug uuid=
xe sr-forget uuid=

естественно, pv и vg указываем свои, т.е. после знака равно можно использовать "TAB"

Теперь останавливаем и удаляем RAID, если они есть в системе:
mdadm --stop /dev/md0
mdadm --stop /dev/md1
mdadm --stop /dev/md2
mdadm --stop /dev/md3
mdadm --stop /dev/md4
mdadm --stop /dev/md5

mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3
mdadm --zero-superblock /dev/sdb4
mdadm --zero-superblock /dev/sdb5
mdadm --zero-superblock /dev/sdb6

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

cat /proc/mdstat

и останавливаем/удаляем существующие

Ниже я считаю, что раздела /dev/sda4 у вас нет.

1. Строим новое


Удаляем таблицу разделов на /dev/sdb и копируем её с /dev/sda:

sgdisk --zap-all /dev/sdb
sgdisk -R /dev/sdb /dev/sda

Задаем тип RAID для разделов:

sgdisk --typecode=1:fd00 /dev/sdb
sgdisk --typecode=2:fd00 /dev/sdb
sgdisk --typecode=3:fd00 /dev/sdb
sgdisk --typecode=5:fd00 /dev/sdb
sgdisk --typecode=6:fd00 /dev/sdb

Создаем, собственно, RAID:

yes|mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb1 missing
yes|mdadm --create /dev/md1 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb2 missing
yes|mdadm --create /dev/md2 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb3 missing
yes|mdadm --create /dev/md3 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb5 missing
yes|mdadm --create /dev/md4 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb6 missing


Создаем новый раздел подкачки. Он не будет жить на RAID, поэтому у нас их будет два.
mkswap /dev/md4


Создаем разделы (корень и /var/logs) и монтируем:
mkfs.ext3 /dev/md0
mkfs.ext3 /dev/md3
mount /dev/md0 /mnt
mkdir -p /mnt/var/log
mount /dev/md3 /mnt/var/log

Копируем файлы на новый раздел:

cp -xR --preserve=all / /mnt

Создаем файл mdadm.conf:

echo "MAILADDR root" > /mnt/etc/mdadm.conf
echo "auto +imsm +1.x -all" >> /mnt/etc/mdadm.conf
echo "DEVICE /dev/sd*[a-z][1-9]" >> /mnt/etc/mdadm.conf

mdadm --detail --scan >> /mnt/etc/mdadm.conf
cp /mnt/etc/mdadm.conf /etc


2. Правим fstab и grub



Изменяем точки монтирования на RAID:
sed -i 's/LABEL=root-[a-zA-Z\-]*/\/dev\/md0/' /mnt/etc/fstab
sed -i 's/LABEL=swap-[a-zA-Z\-]*/\/dev\/sda6 md4/' /mnt/etc/fstab
sed -i 's/LABEL=logs-[a-zA-Z\-]*/\/dev\/md3/' /mnt/etc/fstab
sed -i '/sda6/ a\/dev/sdb6          swap      swap   defaults   0  0 ' /mnt/etc/fstab


Копируем метку раздела на /dev/sdb:
e2label /dev/sda1 |xargs -t e2label /dev/sdb1


Делаем chroot в нашу будущую систему:
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount --bind /proc /mnt/proc
mount --bind /run /mnt/run
chroot /mnt  /bin/bash


Устанавливаем загрузчик:
grub-install /dev/sdb

груб начнет ругатся, исправление:
parted /dev/sdb set 3 bios_grub on

(или grub-install /dev/sdb но перед входом в chroot)

и обновляем мбр/жпт   partprobe
Создаем новый initrd:
Внимание! В большинстве мануалов, строка для дракута немного длиннее, т.к. все скопипищено с аналогичного мануала xen 6x
в результате дракут не отрабатывает как положено.
dracut -q --mdadmconf --fstab --add="dm mdraid" --add-drivers="raid1 raid10" --force /boot/initrd-$(uname -r).img $(uname -r) -M




Меняем конфигурацию GRUB, чтобы загрузиться с RAID:
sed -i 's/quiet/rd.auto rd.auto=1 rhgb quiet/' /boot/grub/grub.cfg
sed -i 's/LABEL=root-[a-zA-Z\-]*/\/dev\/md0/' /boot/grub/grub.cfg
sed -i '/search/ i\   insmod gzio' /boot/grub/grub.cfg
sed -i '/search/ i\   insmod part_msdos' /boot/grub/grub.cfg
sed -i '/search/ i\   insmod diskfilter mdraid09' /boot/grub/grub.cfg
sed -i '/search/ c\   set root=(hd0,gpt1)' /boot/grub/grub.cfg


Выходим из chroot:
exit

////////Запрашиваем КВМ

Перезагружаемся. В качестве загрузочного диска ставим второй, на котом мы создали RAID. Если что-то пойдет не так — будет шанс загрузиться со «старой» системы и попробовать еще раз.

Если всё прошло удачно, то переписываем таблицу с /dev/sdb на /dev/sda:
sgdisk -R /dev/sda /dev/sdb


И добавляем разделы в RAID:
mdadm -a /dev/md0 /dev/sda1
mdadm -a /dev/md1 /dev/sda2
mdadm -a /dev/md2 /dev/sda3
mdadm -a /dev/md3 /dev/sda5
mdadm -a /dev/md4 /dev/sda6


На всякий случай, и переустанавливаем загрузчик на /dev/sda:
grub-install /dev/sda

Перезагружаемся еще раз, дабы проверить, что все установилось корректно.
Ну вот, собственно, и всё. Теперь осталось подключить (или создать) разделы с данными, добавить (если нужно) их в RAID и создать/подключить хранилища:

сначала создаем разделы на sda и sdb, потом рейд, и потом дальше по тексту

xe sr-create content-type=user device-config:device=/dev/md5 host-uuid= name-label=”SRRaid1-Local” shared=false type=lvm

понедельник, 28 августа 2017 г.

Cloud Hosted Router god mode installation
(Установка CHR на любое железо либо VDS)

CHR_VERSION=6.37
INSTALLPATH=/dev/vda

apt-get update &&
apt-get install -y unzip wget pv &&
wget http://download2.mikrotik.com/routeros/${CHR_VERSION}/chr-${CHR_VERSION}.img.zip &&
unzip chr-${CHR_VERSION}.img.zip &&
echo u > /proc/sysrq-trigger &&
pv chr-${CHR_VERSION}.img | dd of=$INSTALLPATH &&
reboot
/user set admin password=********
/ip address add address=A.B.C.D/24 interface=ether1
/ip route add gateway=A.B.C.1
Оригинал на гитхаб https://gist.github.com/deemru/b6ae7e87aed251b727650b360867cfae

четверг, 3 марта 2016 г.

Приоретизация процессов в *nix

Команда nice

Когда на компьютере достаточно процессорного времени на исполнение всех процессов, нет необходимости в выставлении приоритетов. Но когда необходимо параллельно запустить несколько процессов, каждый из которых использует всё доступное процессорное время, может очень пригодиться утилита nice.

Команда nice запускает программу с изменённым приоритетом для планировщика задач.

Наибольший приоритет (и наименьшее значение nice) — −20. 19, либо 20 — наименьший приоритет, но это, с другой стороны, самые вежливые процессы.

Чтобы посмотреть идентификатор и значение nice нужного процесса в системе, можно воспользоваться командой ps axl.

Пример использования команды nice — запуск ресурсоёмкой задачи в фоновом режиме, так, чтобы она выполнялась, но освобождала часть процессорного времени для других процессов, как только оно становятся им нужно.

Чтобы запустить команду с определённым приоритетом, слева нужно добавить «nice -n значение_nice», либо «nice --adjustment значение_nice» (adjustment — настройка, регулировка).

nice -n значение_nice команда.

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

renice -n значение_nice id_процесса

Команда renice выводит старый и новый приоритет процесса.

Теперь, зная эти команды, можно управлять процессами так, чтобы определённые задачи выполнялись быстрее в случае, когда сразу много процессов используют всё доступное процессорное время.

По материалам https://habrahabr.ru/post/106381/

Ускоряем MySQL

Эта заметка поможет при работе с кривыми скриптами криво работающими с БД MySQL 
( был образец модуля для джумлы который с базой весом в 30 Мб умудрялся наглухо уложить linux-сервер по IOPS дисковой подсистемы)

Ускоряем MySQL с помощью tmpfs
Tmpfs — временное файловое хранилище во многих Unix подобных операционных системах. Tmpfs пердназначена для монтирования файловой системы, а сама размещается в оперативной памяти вместо физического диска. Использование tmpfs в вашей системе можно увидеть с помощью вывода команды df -h
/dev/sda 30G 925M 28G 4%
tmpfs     502M 0 502M 0% /lib/init/rw
udev      497M 60K 497M 1% /dev
tmpfs     502M 4,0K 502M 1% /dev/shm
В tmpfs могут размещатся любые директории, хранящие временные данные и которые можно удалить при перезагрузке системы: /var/lock, /var/run, /tmp и др. Tmpfs используют для уменьшения количества дисковых операций io c целью повышения производительности системы или экономии ресурса твердотельных накопителей.
В процессе работы базы данных MySQL создаются временные таблицы. Место расположения временных таблиц определяется переменной tmpdir в файле /etc/mysql/my.cnf. Если для таких временных таблиц (файлов) не хватает памяти, то начинается активный i/o, создающий нагрузку на дисковую подсистему сервера. А смонтировав папку временных файлов mysql на tmpfs, мы решим проблему проблему производительности базы данных и системы в целом.
На достаточно новых ядрах к директории /dev/shm по умолчанию подмонтирована файловая система tmpfs размером 0,5 объёма физической памяти, которую можно использовать для своих нужд. Если на вашем сервере дело с tmpfs обстоит именно так, нам остается внести правки файл конфигурации MySQL:
$ nano /etc/mysql/my.cnf
Закомментировав предыдущее значение параметра tmpdir, добавляем:
tmpdir = /dev/shm
Перезапускаем базу данных mysql:
$ service mysql restart
Проверяем полученный результат:
$ mysql
mysql> SHOW VARIABLES LIKE 'tmpdir';
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| tmpdir        | /dev/shm |
+---------------+----------+
1 row in set (0.00 sec)


Источник: http://serveradministrator.ru/mysql/mysql-to-tmpfs/