...

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

[recovery mode] Zabbix 2.0.9 верхом на nginx + php-fpm и mariadb


Перед нами стоит нетривиальная задача, добиться максимальной производительности известной системы мониторинга zabbix.

Среди многих статей в интернете, есть много описаний типовых установок этой системы. Я подробно опишу, как заставить работать zabbix быстрее.

В качестве базовой системы я буду использовать CentOS 6.4. Так так же как и многие я люблю Debian, Gentoo и все остальные дистрибутивы, но эта статья именно для CentOS.


Все что нужно делать я распишу подробно и шаг за шагом, и начнем с базовой настройки нашего CentOS


# Выключаем SELINUX

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config


# Настраиваем часовой пояс

ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime


# Запускаем синхронизацию времени

yum install ntp -y chkconfig ntpd on /etc/init.d/ntpd stop ntpdate 0.ru.pool.ntp.org 1.ru.pool.ntp.org 2.ru.pool.ntp.org 3.ru.pool.ntp.org /etc/init.d/ntpd start


# Добавляем полезные репозитории

yum install wget nano wget ntpdate -y


# Эти репозитории должны быть, очень много пакетов что нет в базовых репозиториях, мы найдем тут

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm rm *.rpm -f


# Этот репозиторий нам пригодиться но мы его выключим по умолчанию

rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt cd /tmp wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm && rpm -ivh rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm


# Выключаем, будем использовать через --enablerepo=rpmforge

sed -i 's/enabled = 1/enabled = 0/g' /etc/yum.repos.d/rpmforge.repo


# А вот это жемчужина для web систем и не только, тут действительно есть очень много того, что нужно администратору в своей работе. MustHave

wget -q -O - http://www.atomicorp.com/installers/atomic | sh


# Ставим полезный софт

yum install nano mc screen sudo nscd htop ntp zip unzip pigz iotop sysstat lsof strace atop multitail -y yum --enablerepo=rpmforge install htop -y


# Обновляем систему

yum update -y


Теперь перейдем к установке самого zabbix и требуемых ему компонентов:


SERVER


# Установим официальный репозиторий zabbix для centos

rpm -ivh http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-release-2.0-1.el6.noarch.rpm


# Убиваем все старые компоненты MySQL, Это удалит MySQL!


yum remove php-* mysql-* MariaDB-* -y


# Устанавливаем mariadb из репозитория atomic

yum install mariadb-server mariadb-devel mariadb-client -y


# Устанавливаем много компонентов и модулей которые нужны для работы zabbix

yum install ntp php php-mysql php-mbstring php-mcrypt rpm-build gcc mariadb-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel php-fpm php-cli php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-pecl-apc hp-magpierss php-snmp php-tidy spawn-fcgi openssl perl-TimeDate webalizer perl-DateTime-Format-HTTP perl-DateTime-Format-Builder perl-TimeDate libevent-devel php-pecl-memcache nginx cronie cronie-anacron crontabs postfix sysstat -y


# Устанавливаем сам zabbix

yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent


# Настраиваем MariaDB, нужно привести ее конфиг к такому виду (эти конфиг расчитан на 16ГБ ОЗУ на сервере)

[root@zabbix ~] nano /etc/my.cnf



[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

default_storage_engine=InnoDB

innodb_file_per_table = 1


#

#

# network

connect_timeout = 60

wait_timeout = 28800

max_connections = 200

max_allowed_packet = 512M

max_connect_errors = 1000


# limits

tmp_table_size = 512M

max_heap_table_size = 256M

table_cache = 1024


# logs

log_error = /var/log/mysql/mysql-error.log

#slow_query_log_file = /var/log/mysql/mysql-slow.log

#slow_query_log = 1

#long_query_time = 20


# innodb

default_storage_engine=InnoDB

innodb_file_per_table = 1

innodb_status_file = 1

innodb_additional_mem_pool_size = 128M

innodb_buffer_pool_size = 12G # Значение этого параметра должно быть не более 60% от объема ОЗУ на сервере

innodb_flush_method = O_DIRECT

innodb_io_capacity = 2000

innodb_flush_log_at_trx_commit = 2

innodb_support_xa = 0

innodb_log_buffer_size = 128M


# experimental

innodb_stats_update_need_lock = 0


# other stuff

event_scheduler = 1

query_cache_type = 0

query_cache_size = 536870912

join_buffer_size=1M

query_cache_limit=2M

sort_buffer_size=2M

read_buffer_size=2M

read_rnd_buffer_size=4M

key_buffer = 256M

key_buffer_size=64M

open_files_limit = 100000

thread_cache_size = 1024M


[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid


#

# include all files from the config directory

#

!includedir /etc/my.cnf.d



# Добавляем mysql в автозагрузку

chkconfig mysqld on && /etc/init.d/mysqld restart


# Добавляем php-fpm в автозагрузку

chkconfig --levels 235 php-fpm on /etc/init.d/php-fpm start


# Удаляем конфиги по умолчанию nginx

rm /etc/nginx/conf.d/default.conf -f rm /etc/nginx/conf.d/virtual.conf -f


# Создаем базу zabbix

mysql -e 'create database zabbix character set utf8;' mysql -e 'grant all privileges on zabbix.* to zabbix@localhost identified by "69c9yUiUuros";' mysql -e 'flush privileges;'


# Заливаем стандартные схемы для базы zabbix

mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.0.9/create/schema.sql mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.0.9/create/images.sql mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.0.9/create/data.sql


# Добавляем правила iptables



iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 10051 -j ACCEPT

iptables -A INPUT -p udp -m state --state NEW -m udp --dport 10050 -j ACCEPT

iptables -A INPUT -p udp -m state --state NEW -m udp --dport 10051 -j ACCEPT

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

service iptables save



# Внесем обязательные изменения в конфигурацию php

[root@zabbix ~] nano /etc/php.ini



post_max_size = 16M

max_execution_time = 300

max_input_time = 300

date.timezone = Europe/Moscow



# Приведем конфигурациию zabbix к следующему виду:

egrep -v '^#|^$' /etc/zabbix/zabbix_server.conf


[root@zabbix ~] nano /etc/zabbix/zabbix_server.conf



LogFile=/var/log/zabbix/zabbix_server.log

LogFileSize=0

PidFile=/var/run/zabbix/zabbix_server.pid

DBName=zabbix

DBUser=zabbix

DBUser=zabbix

DBPassword=69c9yUiUuros\

DBSocket=/var/lib/mysql/mysql.sock

SNMPTrapperFile=/var/log/snmptt/snmptt.log

AlertScriptsPath=/usr/lib/zabbix/alertscripts

ExternalScripts=/usr/lib/zabbix/externalscripts



# Добавляем сервер zabbix в автозагрузку

chkconfig zabbix-server on


# Немного изменим стандартную конфигурацию nginx, приведем конфиг к такому виду:

[root@zabbix ~] nano /etc/nginx/nginx.conf



user nginx;

worker_processes 10;

pid /var/run/nginx.pid;


events {

worker_connections 1024;

use epoll;


multi_accept on;


}


error_log /var/log/nginx/error.log warn;


http {

include /etc/nginx/mime.types;

default_type application/octet-stream;


log_format main '$remote_addr — $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';


access_log /var/log/nginx/access.log main;


connection_pool_size 256;

client_header_buffer_size 4k;

client_max_body_size 100m;

large_client_header_buffers 8 8k;

request_pool_size 4k;

output_buffers 1 32k;

postpone_output 1460;

proxy_max_temp_file_size 0;

gzip on;

gzip_min_length 1024;

gzip_proxied any;

gzip_proxied expired no-cache no-store private auth;

gzip_types text/plain text/xml application/xml application/x-javascript text/javascript text/css text/json;

gzip_comp_level 8;

gzip_disable «MSIE [1-6]\.(?!.*SV1)»;


sendfile on;

tcp_nopush on;

tcp_nodelay on;

keepalive_timeout 75 20;

server_names_hash_max_size 8192;

ignore_invalid_headers on;

server_name_in_redirect off;


proxy_buffer_size 8k;

proxy_buffers 32 4k;

proxy_connect_timeout 1000;

proxy_read_timeout 12000;

proxy_send_timeout 12000;

proxy_cache_path /var/cache/nginx levels=2 keys_zone=pagecache:5m inactive=10m max_size=50m;

real_ip_header X-Real-IP;


proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


allow all;


include /etc/nginx/conf.d/*.conf;

}



# Настраиваем nginx на работу с zabbix и php-fpm

[root@zabbix ~]# nano /etc/nginx/conf.d/zabbix.conf



server {

listen 80;

server_name имя;

server_name еще имя;


location / {

root /usr/share/zabbix;

index index.php index.html index.htm;

}


location ~ \.php$ {

root /usr/share/zabbix;

try_files $uri =404;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_buffers 4 256k;

fastcgi_busy_buffers_size 256k;

fastcgi_temp_file_write_size 256k;


fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}


# deny access to .htaccess files, if Apache's document root

# concurs with nginx's one

#

location ~ /\.ht {

deny all;

}

}


server {

listen 80;

server_name _;


location / {

root /usr/share/zabbix;

index index.php index.html index.htm;

}


location ~ \.php$ {

root /usr/share/zabbix;

try_files $uri =404;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}


# deny access to .htaccess files, if Apache's document root

# concurs with nginx's one

#

location ~ /\.ht {

deny all;

}

}



Вот таким простым методом, мы получаем высокопроизводительную установку zabbix.


Статья была бы не полной, если бы я не сказал об установке zabbix-proxy и zabbix-agent, предполагается что шаги базовой настройки системы (в самом начале статьи) мы уже прошли


PROXY


# Установим официальный репозиторий zabbix для centos

rpm -ivh http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-release-2.0-1.el6.noarch.rpm


# Удаляем старый софт

yum remove zabbix-proxy-* -y yum remove mysql* mysql-*


# Устанавливаем mariadb из репозитория atomic

yum install mariadb-server mariadb-devel mariadb-client -y


# После удаления компонентов mysql, могли удалиться важные компоненты

yum install -y cronie cronie-anacron crontabs postfix sysstat


# Собственно сам zabbix из официального репозитория

yum install zabbix zabbix-agent zabbix-proxy-mysql zabbix-proxy -y


Рассмотрим случай, что zabbix-proxy нужно поставить на чем то другом, например fedora 14


mkdir /root/zabbix && cd /root/zabbix wget http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-2.0.9-1.el6.x86_64.rpm wget http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-agent-2.0.9-1.el6.x86_64.rpm wget http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-proxy-2.0.9-1.el6.x86_64.rpm wget http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-proxy-mysql-2.0.9-1.el6.x86_64.rpm wget http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-get-2.0.9-1.el6.x86_64.rpm rpm -Uhv *.rpm


# Настраиваем MariaDB, нужно добавить параметры

[root@zabbix ~] nano /etc/my.cnf


default_storage_engine=InnoDB innodb_file_per_table = 1


# Добавляем zabbix в автозагрузку

chkconfig zabbix-proxy on chkconfig zabbix-agent on chkconfig mysqld on && /etc/init.d/mysqld start


# Создаем базу

mysql -e 'create database zabbix character set utf8;'

mysql -e 'grant all privileges on zabbix.* to zabbix@localhost identified by «lNZrKeZASv0L»;'

mysql -e 'flush privileges;'


# Заливаем стандартные схемы для базы zabbix

mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.0.9/create/schema.sql

mysql zabbix < /usr/share/doc/zabbix-server-mysql-2.0.9/create/images.sql


# Добавляем правила iptables



iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 10051 -j ACCEPT

iptables -A INPUT -p udp -m state --state NEW -m udp --dport 10050 -j ACCEPT

iptables -A INPUT -p udp -m state --state NEW -m udp --dport 10051 -j ACCEPT

service iptables save



# Настраиваем сам zabbix-proxy



sed -i «s/^Server=.*/Server=адрес-сервера-zabbix/g» /etc/zabbix/zabbix_proxy.conf

sed -i «s/^Hostname=.*/Hostname=имя-этого-прокси-который-указали-zabbix-server/g» /etc/zabbix/zabbix_proxy.conf

sed -i «s/^DBName=.*/DBName=zabbix/g» /etc/zabbix/zabbix_proxy.conf

echo ProxyMode=0 >> /etc/zabbix/zabbix_proxy.conf

echo ProxyLocalBuffer=1 >> /etc/zabbix/zabbix_proxy.conf

echo ProxyLocalBuffer=ProxyOfflineBuffer=100 >> /etc/zabbix/zabbix_proxy.conf

echo HousekeepingFrequency=1r=100 >> /etc/zabbix/zabbix_proxy.conf

echo DataSenderFrequency=300 >> /etc/zabbix/zabbix_proxy.conf

echo StartPollers=5 >> /etc/zabbix/zabbix_proxy.conf

echo StartIPMIPollers=1 >> /etc/zabbix/zabbix_proxy.conf

echo StartPollersUnreachable=1 >> /etc/zabbix/zabbix_proxy.conf

echo StartTrappers=5 >> /etc/zabbix/zabbix_proxy.conf

echo StartHTTPPollers=1 >> /etc/zabbix/zabbix_proxy.conf

echo StartDBSyncers=4 >> /etc/zabbix/zabbix_proxy.conf

echo Timeout=10 >> /etc/zabbix/zabbix_proxy.conf

echo FpingLocation=/usr/sbin/fping >> /etc/zabbix/zabbix_proxy.conf

echo Fping6Location=/usr/sbin/fping6 >> /etc/zabbix/zabbix_proxy.conf

echo DebugLevel=3 >> /etc/zabbix/zabbix_proxy.conf

echo StartDiscoverers=10 >> /etc/zabbix/zabbix_proxy.conf

echo DBPassword=lNZrKeZASv0L >> /etc/zabbix/zabbix_proxy.conf



# Проверяем конфигурационный файл zabbix-proxy

egrep -v '^#|^$' /etc/zabbix/zabbix_proxy.conf


# Поехали

/etc/init.d/zabbix-proxy start


AGENT, очевидно мы будем его разворачивать через chef или puppet но для полноты материала


# Установим официальный репозиторий zabbix для centos

rpm -ivh http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-release-2.0-1.el6.noarch.rpm


# Устанавливаем агента из официального репозитория

yum install zabbix zabbix-agent -y


или если у Вас не очень свежая fedora

rpm -Uhv http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-2.0.9-1.el6.x86_64.rpm


# Даем пользователю zabbix права sudo и создаем папки для наших будущих скриптов

usermod -s /bin/bash zabbix echo 'zabbix ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers sed -i 's/Defaults\ requiretty/#Defaults\ requiretty/g' /etc/sudoers mkdir /etc/zabbix/scripts/ chmod 750 /etc/zabbix/scripts/


# Добавляем zabbix-agent в автозагрузку

chkconfig zabbix-agent on


# Добавляем правила iptables



iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 10051 -j ACCEPT

iptables -A INPUT -p udp -m state --state NEW -m udp --dport 10050 -j ACCEPT

iptables -A INPUT -p udp -m state --state NEW -m udp --dport 10051 -j ACCEPT

service iptables save




sed -i «s/^Server=.*/Server=адрес-zabbix-sever-или-proxy/g» /etc/zabbix/zabbix_agentd.conf

sed -i «s/^ServerActive=.*/ServerActive=адрес-zabbix-sever-или-proxy/g» /etc/zabbix/zabbix_agentd.conf

sed -i «s/^Hostname=.*/Hostname=`hostname`/g» /etc/zabbix/zabbix_agentd.conf

echo EnableRemoteCommands=1 >> /etc/zabbix/zabbix_agentd.conf

echo LogRemoteCommands=1 >> /etc/zabbix/zabbix_agentd.conf

echo Timeout=30 >> /etc/zabbix/zabbix_agentd.conf

echo Include=/etc/zabbix/zabbix_agentd.d/ >> /etc/zabbix/zabbix_agentd.conf



# Готово, наблюдаем логи

/etc/init.d/zabbix-agent restart && tail -f -n 100 /var/log/zabbix/zabbix_*.log


Спасибо за Ваше внимание, если сочтете этом материал интересным, то я буду рад поделиться еще многим и многим!


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Комментариев нет:

Отправить комментарий