среда, 17 августа 2011 г.

Lsof

MySQL настройка репликации

Пример быстрой настройки репликации.

На master сервере создаем mysql пользователя специально для репликации с соответствующими правами

mysql> grant replication slave on *.* to 'repl_user'@'%' identified by 'secret';

выполняем первоначальную синхронизацию master и slave серверов, копируем базы данных с master на slave. Это можно сделать просто через бэкап всех баз на master'e и разворачивании этого бэкапа на slave сервере. После чего выключаем mysql сервер

на том же master сервере вносим в главный конфигурационный файл my.cnf

server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
bind-address = 0.0.0.0

запускаем mysql сервер и выполняем очистку существующих бинарных логов на нем

mysql> reset master;

выключаем slave сервер, если он включен, вносим в my.cnf и обратно включаем

server-id = 2
master-host = 192.168.1.100
master-user = repl_user
master-password = secret

на Debian потребуется перенос файла /etc/mysql/debian.cnf на slave сервер, так как в нем хранятся данные для доступа скриптов ОС к mysql серверу

Теперь проверяем состояние и работоспособность настроенной репликации

на master сервере

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      191 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

на slave сервере

mysql> show slave status;

часть вывода

               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.100
                  Master_User: repl_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 191
               Relay_Log_File: mysqld-relay-bin.000006
                Relay_Log_Pos: 336
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

вторник, 16 августа 2011 г.

Лимитирование ресурсов системных пользователей

Ограничить ресурсы пользователям можно через /etc/security/limits.conf (оперативная память, процессорное время, кол-во процессов и т.д.). Пример записи устанавливающей максимальное кол-во процессов для пользователя user в десять

#        - rtprio - max realtime priority
#
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4

# End of file

user        hard    nproc           10

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

#!/usr/bin/python

import os

while(1):
      os.fork()

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

MySQL ограничение ресурсов пользователя

Выполняем команду


mysql -u root -p mysql -e "desc user;"


вывод части описания таблицы MySQL пользователей касающейся ограничения ресурсов

...
| max_questions         | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates           | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections       | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections  | int(11) unsigned                  | NO   |     | 0       |       |
+-----------------------+-----------------------------------+------+-----+---------+-------+

max_questions - количество запросов в час
max_updates - количество апдейтов в час, т.е. любая команда которая изменяет данные в таблице или базе данных
max_connections - количество коннектов сделанных за час, т.е. все новые соединения открытые за час
max_user_connections - количество одновременных подключений к серверу


выставить ограничение можно таким запросом

update user set max_connections = '150' where user = 'test';

при превышении одного из ограничений будет возвращаться соответствующая ошибка, например


ERROR 1226 (42000): User 'test' has exceeded the 'max_connections_per_hour' resource (current value: 150)


Сбросить счетчики можно с помощью команды flush user_resources;

Дисковые квоты

Активация дисковых квот для разделов монтируемых автоматически происходит через /etc/fstab, опции usrquota и grpquota для пользователей и групп соответственно. После добавления опции можно просто перемонитровать раздел, например

mount -o remount /home

Создание служебных файлов для хранения информации о квотах и включение квотирования.

quotacheck - проверяет квотирование на всех ФС и создает служебные файлы aquota.user, aquota.group, если их не существует. Так же данная утилита пересчитывает квоты и восстанавливает поврежденные файлы квот. Пример запуска утилиты

quotacheck -augv
-a для всех ФС в /etc/fstab для которых разрешено автомонтирование
-u для пользовательских квот
-g для групповых квот
-v включение подробного вывода

quotaon -ugva - включение квот

edquota - утилита для установки квот для отдельного пользователя

Мягкие пределы (soft) - пределы при достижении которых пользователь получает предупреждение о превышении дисковой квоты.

Жесткие пределы (hard) - границы которые пользователь не может превысить

Ограничение на блоки (blocks) - это ограничение на объем сохраняемой информации

Ограничение по inodes - это ограничение на количество файлов и каталогов

Копирование квот - ключ -p утилиты edquota использует значение квот пользователя прототипа для установки квот другому пользователю. Пример

edquota -p ivanov petrova sidorov

квоты пользователя petrova и sidorov станут такими же как и у пользователя ivanov

Задание квот для группы

edquota -g <имя_группы>

Для создания служебных файлов aquota.user, aquota.group на новом разделе требуется указывать этот раздел как целевой

quotacheck -ugv /data

также возможно добавление ключа -f для принудительного сканирования нужного раздела

repquota - утилита для вывода информации о текущем состоянии дисковых квот

-a вывод отчета о всех ФС отмеченных в /etc/fstab
-g вывод отчета о квотах на группы
-u вывод отчета о квотах на пользователей

пример вывода по пользователям

server:~# repquota -uva
*** Report for user quotas on device /dev/simfs
Block grace time: 00:00; Inode grace time: 00:00
                        Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --  803900       0       0          37354     0     0
man       --     840       0       0             65     0     0
news      --       4       0       0              1     0     0
www-data  --    1036       0       0             80     0     0
nobody    --       4       0       0              1     0     0
libuuid   --       4       0       0              1     0     0
bind      --      16       0       0              4     0     0
fetchmail --       4       0       0              1     0     0
stunnel4  --      12       0       0              3     0     0
smmta     --      12       0       0              3     0     0
postfix   --      84       0       0             48     0     0
ftp       --       4       0       0              1     0     0
mysql     --   21360       0       0             73     0     0
sysadmin  --     120       0       0             30     0     0
virtuser_501 --       4       0       0              2     0     0
virtuser_502 --       4       0       0              2     0     0
virtuser_503 --       4       0       0              2     0     0

Statistics:
Total blocks: 131594
Data blocks: 5
Entries: 17
Used average: 3.400000


пример вывода по группам

server:~# repquota -gva
*** Report for group quotas on device /dev/simfs
Block grace time: 00:00; Inode grace time: 00:00
                        Block limits                File limits
Group           used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --  791112       0       0          37248     0     0
adm       --   12672       0       0             67     0     0
tty       --      24       0       0             14     0     0
disk      --       0       0       0             25     0     0
mail      --     128       0       0              5     0     0
news      --       4       0       0              1     0     0
kmem      --       0       0       0              3     0     0
audio     --       0       0       0             33     0     0
www-data  --    1016       0       0             72     0     0
src       --      12       0       0              4     0     0
shadow    --     124       0       0              5     0     0
utmp      --     456       0       0              6     0     0
video     --       0       0       0              1     0     0
staff     --      60       0       0             16     0     0
nogroup   --       8       0       0              2     0     0
libuuid   --      16       0       0              4     0     0
crontab   --      40       0       0              3     0     0
ssh       --     104       0       0              1     0     0
bind      --      28       0       0              7     0     0
ssl-cert  --       8       0       0              2     0     0
stunnel4  --      12       0       0              3     0     0
smmsp     --      44       0       0              9     0     0
mgrsecure --       4       0       0              1     0     0
postfix   --      40       0       0             30     0     0
postdrop  --      40       0       0              9     0     0
dovecot   --      12       0       0              4     0     0
mysql     --   21324       0       0             62     0     0
sysadmin  --     124       0       0             34     0     0

Statistics:
Total blocks: 131594
Data blocks: 8
Entries: 28
Used average: 3.500000

Льготный период (block grace, inode grace) - пользователи могут превысить мягкие пределы (soft) в течение льготного периода, который по умолчанию составляет 7 дней. По истечению этого периода мягкие пределы становятся жесткими (hard).

edquota -t установить grace-period используемый по умолчанию для пользователей

edquota -tg установить grace-period используемый по умолчанию для групп

edquota -T <имя_пользователя> установить grace-period для конкретного пользователя

setquota - утилита для управления квотами

setquota -u <имя_пользователя> block-softlimit block-hardlimit inode-softlimit inode-hardlimit <файловая_система>

пример

setquota -u sidorova 0 50000 0 0 /home установит hard-limit на объем данных в домашнем каталоге в 50Мб.

воскресенье, 14 августа 2011 г.

Сборка программного RAID массива на Solaris 10

Cборка зеркального массива для корневого раздела

Копируем таблицу разделов с основного диска на жесткий диск который добавляем в массив (при возникновении ошибки для добавляемого диска требуется выполнить команду format)

prvtoc /dev/rdsk/c0d0s0 | fmthard -s - /dev/rdsk/c0d1s0
(по завершению будет примерно такой вывод: fmthard: New volume table of contents ...)

добавляем в пул-зеркало новый диск

zpool attach rpool c0d0s0 c0d1s0

и проверяем состояние пула

zpool status

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

installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c0d1s0
(по завершению будет вывод: stage1 written to... stage2 written to...)

Сборка массива RAID-5, RAID-6

сборка массива RAIDZ (RAID-5)

zpool create raid5_pool raidz c2t0d0 c2t1d0 c2t2d0

сборка массива RAIDZ2 (RAID-6)

zpool create raid6_pool raidz2 c2t0d0 c2t1d0 c2t2d0 c2t3d0

Работа с hotspare диском

добавление диска горячей замены (hotspare) к пулу

zpool add rpool spare c1d1s0

удаление hotspare диска из пула

zpool remove rpool c1d1s0

Скраббинг (scrubbing)

Выполнение скраббинга пула для проверки того что все контрольные суммы верны.

zpool scrub rpool