Мунин идеально подойдет для тех администраторов, которым надо мониторить нагрузку (именно нагрузку, а не доступность!) одного-двух-трех серверов и не хочется заморачиваться с такими монстрами как Cacti.
Мунин состоит из двух частей: Munin-node – демон, который ставится на хост, который надо мониторить – она собирает всю информацию о системе. Вторая часть – пакет munin – он уже рисует графики по данным с одной или нескольких машин и генерит из них статические странички и картинки.
Итак, сначала установим пакет munin, к слову, это перловый скрипт и ставит с собой несколько перловых библиотек:
yum install munin
Он пропишется в /etc/cron.d для запуска раз в 5 минут, создаст /var/www/html/munin – туда будет генериться статика, которую можно отдавать любым веб-сервером. Конфиги мунина лежат в /etc/munin. Прописываем мунин в Апаче, можно просто алиасом к каком-нибудь существующему виртуалхосту:
Alias /munin/ /var/www/html/munin/
<Directory "/var/www/html/munin/">
Options Indexes FollowSymlinks
AllowOverride All
</Directory>
Релоадим апач и устанавливаем munin-node (эту часть проделываем на всех серверах, которые надо мониторить):
yum install munin-node
chkconfig munin-node on
/etc/init.d/munin-node start
Если мы ставим оба пакета на одну машину, то нижесказанное проделывать не надо – все работает по дефолту.
Munin-node работает как демон, к которому на порт 4949 периодически подключается munin, поэтому в /etc/munin/munin-node.conf добавляем дериктиву allow ^127\.0\.0\.1$ с адресом munin.
На машине, на которой установлен Munin в /etc/munin/munin.conf добавляем новый хост по типу:
Если вдруг ваш RAID1 поломался и
cat /proc/mdstat говорит:
md2 : active raid1 sda3[2] sdb3[1]
726266432 blocks [2/1] [_U]
Т.е. один диск в зеркале U – up, а другой вылетел.
Смотрим более подробнаю информацию о raid:
mdadm -D /dev/md2
То надо менять винт. Для этого выключаем сервер, меняем винт, включаемся и затем:
Смотрим dmesg |grep sda, что новый винт на месте (в моем случае вылетел sda).
Иногда саппорт дата-цента просит сказать серийный номер винта, который надо заменить. Вот так смотрим подробную инфорамацию по жесткому диску:
hdparm -I /dev/sda
Затем копируем информацию о разделах со старого рабочего винта на новый (не ошибитесь в источнике и назначении!):
sfdisk -d /dev/sdb | sfdisk /dev/sda
В моем случае винты были разбиты на три раздела каждый и каждый из них был собран в md-зеркало с соответствующим разделом на другом винте. Теперь подключаем разделы с sda в существующие md-рэйды:
mdadm --manage /dev/md2 --add /dev/sda3
Не ошибитесь с разделами!
И наблюдаем в cat /proc/mdstat как идет синхронизация.
Logwatch очень полезная утилита (перловый скрипт), которая ежедневно по крону анализирует системные логи и обо всех подозрительных вещах докладывает вам по почте. Она реально может помочь своевременно обнаружить компрометацию системы. Чаще всего она уже даже установлена в системе и прописана в cron.daily, но не активизирована. Если все-таки не установлена, то ставим:
yum install logwatch
Настройка проста до безобразия, а пользы от скрипта очень много. Просто копируем конфиг-пример /usr/share/logwatch/default.conf в /etc/logwatch/conf/logwatch.conf
В конфиге нужно поправить только MailTo – прописать мыло расположенное на внешнем сервисе, а не на проверяемой системе. Еще можно увеличить детализацию отчетов параметром Detail.
С помощью данного скрипта можно синхронизировать папки сайтов, базы MySQL и конфиги виртуал-хостов апача и nginx с одного сервера на другой. Синхронизация баз происходит без остановку мускула.
Если в процессе установки пакета с помощью yum из какого-либо недавно подключенного репозитория вы получаете ошибку: “Public key for … is not installed” это значит что публичный ключ данного репозитория, которым подписываются все входящие в него пакеты, отсутствует в вашей системе.
Далее два варианта:
1. Либо этот публичный ключ есть у вас на диске, находим его
find / -name "*GPG*"
2. Скачиваем его с оф. сайта репозитория. Он будет подписан примерно так “The packages are all signed with this GPG key.”
По умолчанию в системе присутствует сервис yum-updatesd, который проверяет наличие обновлений и информирует через email, syslog или dbus. Иногда он занимает довольно много CPU, а пользы на сервере от него не много. Отключаем:
chkconfig yum-updatesd off
/etc/init.d/yum-updatesd stop
Итак, допустим вы решили перейти на worker MPM в Apache чтобы повысить производительность. Имеем CentOS с Apache и PHP установленные из репозитория .
Сначала устанавливаем новый тредобезопасный модуль PHP:
yum --enablerepo=remi install php-zts
Возможно придется обновить PHP до последней версии.
Затем в /etc/sysconfig/httpd раскомментируем строчку:
HTTPD=/usr/sbin/httpd.worker
Убедимся, что в конфиге апача присутствуют примерно такие настройки:
Где:
StartServers – сколько процессов стартует при запуске
MinSpareThreads/MaxSpareThreads – сервер будет держать количество свободных потоков (про запас) в этих рамках. Свободные потоки – это сумма потоков во всех процессах
MaxClients – максимально количество одновременных клиентов. Т.е. максимальное количество потоков во всех процессах.
ThreadsPerChild – сколько потоков может создавать каждый процесс. Т.о. если мы разделим MaxClients на ThreadsPerChild, то получим сколько максимум процессов будет создано при максимальной загрузке.
ServerLimit – сколько макс. процессов может быть. Естественно, это число должно быть не меньше MaxClients/ThreadsPerChild – числа процессов при максимальной нагрузке.
MaxRequestsPerChild – через сколько запросов уничтожается процесс.
Если используется Zend или IonCube надо поправить пути к ним (обычно в php.ini), заменив на тредобезопасные варианты.
Это может пригодиться если вы скачали кучу RPM-пакетов из разных мест и хотите автоматически проапдейтить установленные пакеты на новые. Делаем так.
1. Складываем все новые пакеты в папку, например, /root/updates
2. Устанавливаем пакет createrepo
yum install createrepo
3. Запускаем его с указанием нашего каталога с пакетами:
Иногда появляется необходимость сделать для разных подключающихся клиентов разные исходящие IP-адреса. Большая часть настройки такая же как в статье “Установка OpenVPN на Linux“. Покажу лишь отличия в ситуации с двумя клиентами:
В server.conf:
server 10.10.0.0 255.255.0.0
client-config-dir /etc/openvpn/ccd
Перед установкой вам может понадобиться php-devel, autoconf. Тогда просто ставим их через yum
yum install php-devel
yum install autoconf
cd /usr/local/src
mkdir eAccelerator
cd eAccelerator
wget http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6.tar.bz2
tar -xvjf eaccelerator-0.9.6.tar.bz2
cd eaccelerator-0.9.6
export PHP_PREFIX="/usr/local"
$PHP_PREFIX/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
make
make install
cd /tmp
mkdir eaccelerator
chmod 0777 eaccelerator
Теперь правим php.ini. Например, при установленных ZendOptimizer, ionCube и eAccelerator он должен быть примерно таким (порядок подключения модулей важен!):
Где
IPADDR_START – первый IP, который вы хотите добавить
IPADDR_END – последний IP, который вы хотите добавить
CLONENUM_START – число, с которого будет начинаться виртуальный интерфейс, например от eth0:1 до eth0:20
При эксплуатации на сервере Fedora Linux рекомендуется отключать дефолтный NetworkManager и включать используемый по умолчанию в CentOS network тогда никаких глюков с добавлением алиасов на интерфейсы и прочим не будет:
chkconfig network on
chkconfig NetworkManager off
service network restart
yum install GeoIP GeoIP-devel
cd /root
wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz
tar zxvf mod_geoip2_1.2.5.tar.gz
cd mod_geoip2_1.2.5
apxs -i -a -L/usr/lib -I/usr/include -lGeoIP -c mod_geoip.c
В /etc/httpd/conf/httpd.conf добавляем:
LoadModule geoip_module /usr/lib/apache/mod_geoip.so
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
/etc/init.d/httpd restart
В случае с FreeBSD:
cd /usr/ports/net/GeoIP && make install
cd /root
wget http://geolite.maxmind.com/download/geoip/api/mod_geoip2/mod_geoip2_1.2.5.tar.gz
tar zxvf mod_geoip2_1.2.5.tar.gz
cd mod_geoip2_1.2.5
apxs -i -a -L/usr/local/lib -I/usr/local/include -lGeoIP -c mod_geoip.c