Archive

Archive for the ‘linux’ Category

Установка простой системы мониторинга Munin

August 11th, 2011

Мунин идеально подойдет для тех администраторов, которым надо мониторить нагрузку (именно нагрузку, а не доступность!) одного-двух-трех серверов и не хочется заморачиваться с такими монстрами как 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 добавляем новый хост по типу:

[my-second-server]
    address 1.2.3.1
    use_node_name yes

linux ,

Еще один неплохой Yum-репозиторий для СentOS

March 29th, 2011

Расположен здесь http://www.webtatic.com/.
Добавляем в систему:

rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm

linux ,

Замена диска в Raid на linux md

March 28th, 2011

Если вдруг ваш 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 как идет синхронизация.

linux ,

Настройка logwatch

February 18th, 2011

Logwatch очень полезная утилита (перловый скрипт), которая ежедневно по крону анализирует системные логи и обо всех подозрительных вещах докладывает вам по почте. Она реально может помочь своевременно обнаружить компрометацию системы. Чаще всего она уже даже установлена в системе и прописана в cron.daily, но не активизирована. Если все-таки не установлена, то ставим:

yum install logwatch

Настройка проста до безобразия, а пользы от скрипта очень много. Просто копируем конфиг-пример /usr/share/logwatch/default.conf в /etc/logwatch/conf/logwatch.conf

В конфиге нужно поправить только MailTo – прописать мыло расположенное на внешнем сервисе, а не на проверяемой системе. Еще можно увеличить детализацию отчетов параметром Detail.

linux

Скрипт синхронизации баз, сайтов и конфигов

November 24th, 2010

С помощью данного скрипта можно синхронизировать папки сайтов, базы MySQL и конфиги виртуал-хостов апача и nginx с одного сервера на другой. Синхронизация баз происходит без остановку мускула.

#!/bin/bash

param=" --progress -plzuogthr --compress-level=9 --delete-after"
sitesfromserver1="site1.ru site2.ru site3.ru"
basesfromserver1="basesite1 basesite2 basesite3"

### Apache vhosts - Not need "update" parametr
rsync -e "ssh -p222"  --progress -plzogthr --compress-level=9 --delete-after /etc/httpd/vhosts root@server2.domain.com:/etc/httpd

### Nginx vhosts - Not need "update" parametr
rsync -e "ssh -p222"  --progress -plzogthr --compress-level=9 --delete-after /etc/nginx/vhosts root@server2.domain.com:/etc/nginx

### Sites sync
for site in $sitesfromserver1
    do
    rsync -e "ssh -p222" $param /usr/local/www/$site root@server2.domain.com:/usr/local/www
done

### MySQL bases sync
echo "Lock bases on Server1 and Server2"
echo "FLUSH TABLES WITH READ LOCK; SET GLOBAL read_only = ON;" | /usr/bin/mysql -u backup -pPasWord
ssh -p222 root@server2.domain.com 'echo "FLUSH TABLES WITH READ LOCK; SET GLOBAL read_only = ON;" | /usr/bin/mysql -u backup -pPasWord'

echo "Sleep 15s"
sleep 15s

# Bases from Server1
for base in $basesfromserver1
    do
    rsync -e "ssh -p222" $param /var/lib/mysql/$base root@server2.domain.com:/var/lib/mysql
done

echo "Unlock bases"
echo "SET GLOBAL read_only = OFF; UNLOCK TABLES;" | /usr/bin/mysql -u backup -pPasWord
ssh -p222 root@server2.domain.com 'echo "SET GLOBAL read_only = OFF; UNLOCK TABLES;" | /usr/bin/mysql -u backup -pPasWord'

/etc/init.d/mysqld restart
ssh -p222 root@server2.domain.com /etc/init.d/mysqld restart

linux ,

Проблема “Public key for … is not installed” при установке пакета из yum

November 10th, 2010

Если в процессе установки пакета с помощью yum из какого-либо недавно подключенного репозитория вы получаете ошибку: “Public key for … is not installed” это значит что публичный ключ данного репозитория, которым подписываются все входящие в него пакеты, отсутствует в вашей системе.
Далее два варианта:
1. Либо этот публичный ключ есть у вас на диске, находим его

find / -name "*GPG*"

2. Скачиваем его с оф. сайта репозитория. Он будет подписан примерно так “The packages are all signed with this GPG key.”

Теперь добавляем его в yum:

rpm --import [путь к ключу]

linux

Отключение yum-updatesd в CentOS

October 12th, 2010

По умолчанию в системе присутствует сервис yum-updatesd, который проверяет наличие обновлений и информирует через email, syslog или dbus. Иногда он занимает довольно много CPU, а пользы на сервере от него не много. Отключаем:

chkconfig yum-updatesd off
/etc/init.d/yum-updatesd stop

linux ,

Переходим с prefork на mpm-worker на Apache с mod_php (CentOS)

October 11th, 2010

Итак, допустим вы решили перейти на worker MPM в Apache чтобы повысить производительность. Имеем CentOS с Apache и PHP установленные из репозитория Remi.
Сначала устанавливаем новый тредобезопасный модуль PHP:

yum --enablerepo=remi install php-zts

Возможно придется обновить PHP до последней версии.

Затем в /etc/sysconfig/httpd раскомментируем строчку:

HTTPD=/usr/sbin/httpd.worker

Убедимся, что в конфиге апача присутствуют примерно такие настройки:

<IfModule worker.c>
StartServers       1
MaxClients         50
MinSpareThreads     15
MaxSpareThreads     35
ThreadsPerChild     25
MaxRequestsPerChild  2000
</IfModule>

Где:
StartServers – сколько процессов стартует при запуске
MinSpareThreads/MaxSpareThreads – сервер будет держать количество свободных потоков (про запас) в этих рамках. Свободные потоки – это сумма потоков во всех процессах
MaxClients – максимально количество одновременных клиентов. Т.е. максимальное количество потоков во всех процессах.
ThreadsPerChild – сколько потоков может создавать каждый процесс. Т.о. если мы разделим MaxClients на ThreadsPerChild, то получим сколько максимум процессов будет создано при максимальной загрузке.
ServerLimit – сколько макс. процессов может быть. Естественно, это число должно быть не меньше MaxClients/ThreadsPerChild – числа процессов при максимальной нагрузке.
MaxRequestsPerChild – через сколько запросов уничтожается процесс.

Если используется Zend или IonCube надо поправить пути к ним (обычно в php.ini), заменив на тредобезопасные варианты.

Рестартуем апач:

/etc/init.d/httpd restart

И получаем результат:

ps auxww |grep http
root     19552  0.0  0.5  31020 11300 ?        Ss   20:50   0:00 /usr/sbin/httpd.worker
apache   19555  150 39.2 1125872 813092 ?      Sl   20:50  17:17 /usr/sbin/httpd.worker

linux ,

Действие при превышении Load Average

September 4th, 2010

Простой скрипт рестартящий апач при превышении LA определенного значения (в данном примере 5):

#!/bin/sh

a=`uptime | awk -F "load average: " '{ print $2 }' | cut -d, -f1 | sed "s/[,.]//g"`;
if [ "$a" -lt 500 ]; then
    echo ALLOK;
    echo $a;
else
    echo $a;
    /etc/init.d/httpd restart;
fi

linux

Создание локального репозитория для yum

August 8th, 2010

Это может пригодиться если вы скачали кучу RPM-пакетов из разных мест и хотите автоматически проапдейтить установленные пакеты на новые. Делаем так.
1. Складываем все новые пакеты в папку, например, /root/updates
2. Устанавливаем пакет createrepo

yum install createrepo

3. Запускаем его с указанием нашего каталога с пакетами:

createrepo /root/updates

4. Создаем файл /etc/yum.repos.d/local.repo

[local]
name=Local Repo
baseurl=file:///root/updates
enabled=1
gpgcheck=0

5. Обновляем, например, PHP:

yum --enablerepo=local update php

6. Если вы обновили пакеты в папке надо перезапустить:

createrepo --update /root/updates

linux

Разные внешние IP для разных OpenVPN-клиентов

April 19th, 2010

Иногда появляется необходимость сделать для разных подключающихся клиентов разные исходящие IP-адреса. Большая часть настройки такая же как в статье “Установка OpenVPN на Linux“. Покажу лишь отличия в ситуации с двумя клиентами:
В server.conf:

server 10.10.0.0 255.255.0.0
client-config-dir /etc/openvpn/ccd

/etc/openvpn/ccd/client1:

ifconfig-push 10.10.10.1 10.10.10.2
iroute 10.10.10.0 255.255.255.0

/etc/openvpn/ccd/client2:

ifconfig-push 10.10.20.1 10.10.20.2
iroute 10.10.20.0 255.255.255.0

Ну и правил для ната должно быть тоже два:

iptables -t nat -A POSTROUTING -s 10.10.10.0/255.255.255.0 -o venet0 -j SNAT --to-source first-ext-ip
iptables -t nat -A POSTROUTING -s 10.10.20.0/255.255.255.0 -o venet0 -j SNAT --to-source second-ext-ip

linux, vpn

Некоторые проблемы при установке VMWare Server 2 на linux

April 1st, 2010

После установки VMWare Server может не открываться веб-консоль сыпя в логе такими сообщениями:

'Proxysvc' 3086011280 warning] SSL Handshake on client connection failed:

Тут могут помочь две вещи:
1. Если открываем консоль через Firefox, то надо вернуть в нем поддержку SSL2 в about:config

security.enable.ssl2 from false into true

2. Если открываем консоль через Internet Explorer то подключаться надо по доменному имени, на которое сгенерирован SSL сертификат, а не по IP.

Еще вмварный management-демон может иногда падать. Вот здесь человек разобрал как это дело полечить.

linux

Установка eAccelerator на CentOS с DirectAdmin

February 16th, 2010

Перед установкой вам может понадобиться 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 он должен быть примерно таким (порядок подключения модулей важен!):

extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20060613"

[eAccelerator]
extension="eaccelerator.so"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="100"
eaccelerator.shm_prune_period="1800"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

[Zend]
zend_extension = /usr/lib64/ioncube/ioncube_loader_lin_5.2.so
zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.3.3
zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-3.3.3
zend_optimizer.version=3.3.3
zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so
zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so

Теперь проверяем и релоадим апач:

php -i |grep eacc
/etc/init.d/httpd reload

linux, php ,

Добавление диапазона IP адресов в CentOS

February 12th, 2010

Если надо добавить непрерывный диапазон IP адресов на интерфейс, то создаем файл /etc/sysconfig/network-scripts/ifcfg-eth0-range0 с содержимым:

IPADDR_START=192.168.0.101
IPADDR_END=192.168.0.120
NETMASK=255.255.255.255
CLONENUM_START=1
NO_ALIASROUTING=yes

Где
IPADDR_START – первый IP, который вы хотите добавить
IPADDR_END – последний IP, который вы хотите добавить
CLONENUM_START – число, с которого будет начинаться виртуальный интерфейс, например от eth0:1 до eth0:20

/etc/init.d/network restart

linux

Fedora на сервере и NetworkManager

January 19th, 2010

При эксплуатации на сервере Fedora Linux рекомендуется отключать дефолтный NetworkManager и включать используемый по умолчанию в CentOS network тогда никаких глюков с добавлением алиасов на интерфейсы и прочим не будет:

chkconfig network on
chkconfig NetworkManager off
service network restart

linux

IPtables и пассивный режим работы FTP-сервера

January 19th, 2010

Чтобы на сервере закрытом iptables заработал пассивный режим на ФТП-сервере надо:
В /etc/sysconfig/iptables-config добавить модуль:

IPTABLES_MODULES="ip_conntrack_ftp"

Рестартим:

/etc/init.d/iptables restart

Конечно среди правил iptables должно быть подобное:

-p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

ftp, linux ,

Добавить non-free репозиторий в Debian

December 7th, 2009

в /etc/apt/sources.list должно быть:

deb ftp://ftp.debian.org/debian/ stable main contrib non-free

потом:

apt-get update

linux

Бэкап, восстановление, клонирование OpenVZ контейнеров

December 3rd, 2009

Ставим тулзы:

yum install cstream perl-LockFile-Simple
rpm -Uvh http://www.proxmox.com/cms_proxmox/cms/upload/vzdump/vzdump-1.2-4.noarch.rpm

Собственно дампим существующий контейнер в архив (по дефолту в /vz/dump/), восстанавливаем в новый ID (120), меняем у него хостнейм и IP и запускаем:

vzdump --compress --suspend 110
vzdump --restore /vz/dump/vzdump-110.tgz 120
vzctl set 120 --hostname newhostname.com --save
vzctl set 120 --ipdel 1.2.3.1 --save
vzctl set 120 --ipadd 1.2.3.2--save
vzctl start 120

У новых версий vzdump уже может не быть параметра restore – он заменен на утилиту

vzrestore /vz/dump/vzdump-110.tgz 120

Этот же механизм удобно использовать и для резервного копирования контейнеров OpenVZ.

linux

Хороший репозиторий для CentOS

November 20th, 2009

Нашел хороший дополнительный репозиторий серверного софта для CentOS.
Ставить так:
Для i386:
1. Устанавливаем epel репозиторий.

rpm -ihv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

2. Устанавливаем CentALT репозиторий.

rpm -ihv http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-4.noarch.rpm

Для x86_64:
1. Устанавливаем epel репозиторий.

rpm -ihv http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

2. Устанавливаем CentALT репозиторий.

rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-4.noarch.rpm

Полный список пакетов

linux ,

Установка mod_geoip на Linux/FreeBSD сервер с DirectAdmin

October 17th, 2009

В случае c Linux:

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

Добавление в конфиг апача аналогично.

FreeBSD, linux ,