24 окт. 2015 г.

Установка Zabbix в контейнеры OpenVZ Proxmox - раздельно database на postgreSQL и frontend+server

Что хотим получить?

Zabbix, если его ставить из appliance или пакетными менеджерами по-умолчанию, обладает проблемами с масштабируемостью. Поставить его просто и просто начать работу, но решение будет не масштабируемым и потом, при расширении системы, потребуется много работы по замене сервера БД на Postgres, выносе БД на отдельный хост, запуске failover-кластера.
Есть свободная платформа виртуализации Proxmox, в которой помимо полной виртуализации qemu есть контейнеры OpenVZ - аналог Solaris Zones. Контейнеры позволяют запускать множество систем на одном ядре с малыми накладными расходами. Proxmox позволяет легко бэкапить зоны, поддерживает Live Migration и кластера.
PostgreSQL устойчивее чем MySQL при высоких нагрузках, тоже позволяет создавать кластеры.

Результат - без перекомпиляции всех пакетов, при минимуме усилий, получить полностью свободную, легко масштабируемую в дальнейшем, отказоустойчивую конфигурацию Zabbix.


Что хотим получить?

Zabbix, если его ставить из appliance или пакетными менеджерами по-умолчанию, обладает проблемами с масштабируемостью. Поставить его просто и просто начать работу, но решение будет не масштабируемым и потом, при расширении системы, потребуется много работы по замене сервера БД на Postgres, выносе БД на отдельный хост, запуске failover-кластера.
Есть свободная платформа виртуализации Proxmox, в которой помимо полной виртуализации qemu есть контейнеры OpenVZ - аналог Solaris Zones. Контейнеры позволяют запускать множество систем на одном ядре с малыми накладными расходами. Proxmox позволяет легко бэкапить зоны, поддерживает Live Migration и кластера.
PostgreSQL устойчивее чем MySQL при высоких нагрузках, тоже позволяет создавать кластеры.

Результат - без перекомпиляции всех пакетов, при минимуме усилий, получить полностью свободную, легко масштабируемую в дальнейшем, отказоустойчивую конфигурацию Zabbix.

1. Ставим proxmox из бандла c cd - https://www.proxmox.com/en/downloads

2. Скачиваем шаблон Debian 7 из https://openvz.org/Download/template/precreated

3. Создаем 2 контейнера OpenVZ для базы данных и сервера/фронтенда.

4. Грузим контейнеры, подключаемся к ним по ssh.

5.По мануалу ставим репозитарии в каждом контейнере.
root@zbx-srv:~# wget http://repo.zabbix.com/zabbix/2.4/debian/pool/main/z/zabbix-release/zabbix-release_2.4-1+wheezy_all.deb
...
2015-10-23 07:46:25 (466 KB/s) - `zabbix-release_2.4-1+wheezy_all.deb' saved [2786/2786]
root@zbx-srv:~# dpkg -i zabbix-release_2.4-1+wheezy_all.deb
...
Setting up zabbix-release (2.4-1+wheezy) ...
root@zbx-srv:~#

6.Ставим инсталляцию на оба сервера
root@zbx-db:~# dpkg -i zabbix-release_2.4-1+wheezy_all.deb
Fetched 10.7 MB in 6s (1772 kB/s)
Reading package lists... Done

7. Ставим полную инсталляцию Postgresql на сервер БД
root@zbx-db:/etc# apt-get install postgresql
Reading package lists... Done
...
Setting up postgresql (9.1+134wheezy4) ...

И клиента на основной сервер.
root@zbx-srv:~#apt-get install postgresql-client
Reading package lists... Done
...
Setting up postgresql-client (9.1+134wheezy4) ...

8.На сервере БД ставим пароль на пользователя postgres
root@zbx-db:/etc# su postgres
postgres@zbx-db:/etc$ psql
psql (9.1.18)
Type "help" for help.
postgres=# \password postgres
Enter new password:
Enter it again:
postgres=# \q
postgres@zbx-db:/etc$ exit
exit
root@zbx-db:/etc#

9. Ставим zabbix на основном сервере
apt-get install zabbix-server-pgsql zabbix-frontend-php zabbix-agent php5-pgsql php5-ldap snmp-mibs-downloader  
На вопрос о конфигурировании БД отвечаем - No.

10. Копируем скрипты создания БД на сервер БД
root@zbx-db:~# scp root@zbx-srv:/usr/share/zabbix-server-pgsql/* /var/lib/postgresql
root@zbx-srv's password:
data.sql       
images.sql     
schema.sql     
zabbix_server.conf

11.Создаем базу данных (Порядок выполнения скриптов важен!)
su postgres
createdb zabbix
postgres@zbx-db:/root$ psql zabbix 
\i /var/lib/postgresql/schema.sql
\i /var/postgresql/images.sql
\i /var/lib/postgresql/data.sql
\q

12. Даем доступ с основного сервера

Добавляем в /etc/postgresql/9.1/main/postgresql.conf

listen_addresses = '*'

Добавляем в /etc/postgresql/9.1/main/pg_hba.conf

host all all xx.xx.xx.xx/32 trust

где xx.xx.xx.xx - адрес сервера zabbix+frontend

Проверяем:
su postgres
postgres@zbx-srv:/root$ psql -h zbx-db
could not change directory to "/root"
psql (9.1.18)
SSL connection (cipher: DHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.

postgres=# \l
                             List of databases
   Name    |  Owner   | Encoding  | Collate | Ctype |   Access privileges
-----------+----------+-----------+---------+-------+-----------------------
 postgres  | postgres | SQL_ASCII | C       | C     |
 template0 | postgres | SQL_ASCII | C       | C     | =c/postgres          +
           |          |           |         |       | postgres=CTc/postgres
 template1 | postgres | SQL_ASCII | C       | C     | =c/postgres          +
           |          |           |         |       | postgres=CTc/postgres
 zabbix    | postgres | SQL_ASCII | C       | C     |
(4 rows)

postgres=# \c zabbix
SSL connection (cipher: DHE-RSA-AES256-GCM-SHA384, bits: 256)
You are now connected to database "zabbix" as user "postgres".
zabbix=# \dt
Выводятся таблички
zabbix=# select * from actions;
Выводится содержимое таблички
\q


13. Настраиваем сервер на внешнюю базу.

Правим /etc/zabbix/zabbix-server.conf

DBHost=zbx-db
DBName=zabbix
DBUser=postgres
DBSchema=

Перезапускаем сервер

/etc/init.d/zabbix-server restart

Проверяем, что все в порядке в /var/log/zabbix/zabbix_server.log

14. Заходим на веб-морду.

http://zbx-srv/zabbix/

Проходим процесс инсталляции. Если в опциях нет postgresql, значит забыли поставить php5-pgsql. Если потом будем привязывать аутентификацию к OpenLDAP или MS AD, то еще нужен пакет php5-ldap.

Еще пришлось добавить date.timezone = Europe/Moscow (регистр букв важен) в /etc/php5/apache2/php.ini

Заходим под пользователем Admin пароль - zabbix.