리눅스 HA(corosync, pacemaker, shared disk)에 zabbix 모니터링 서버 구성 – part 4
zabbix 모니터링 서버를 Active/Passive(Standby) 클러스터로 구성하기.
리눅스 HA(corosync, pacemaker) – Part 1
리눅스 HA(corosync, pacemaker, DRBD) – Part 2
리눅스 HA (pacemaker, corosync, iscsi shared storage) – part 3
이 글은 위의 리눅스 HA (pacemaker, corosync, iscsi shared storage) – part 3 의 구성을 기본으로 zabbix 서버를 구성하는 방법을 기술합니다.
1. 구성
몇 가지 방법이 있겠지만, 여기서는 zabbix 서버가 사용하는 mysql 데이타만 공유 스토리지에 위치시키는 방법을 사용하도록 하겠다. 물론, 모든 서비스를 공유 스토리지에 위치시키는 방법도 있을 수 있지만, 그렇게 구성하려면 패키지 설치 보다는 소스코드를 받아서 컴파일하는 것이 유리하다.
여기서는 패키지 설치의 장점을 최대한 살려 가장 단순하고 쉽게 구성해 보도록 한다.
Node1
IP : 192.168.0.31
hostname: wolf1
Node2
IP : 192.168.0.32
hostname: wolf2
iSCSI shared storage Node
IP : 192.168.0.33
Cluster VIP: 192.168.0.30
2. 클러스터 노드에 zabbix 설치.
node1, node2 모두에 zabbix 서버를 설치한다. 현재 시점에서, zabbix 최신 버전은 5.4이지만, 5.0LTS 버전을 설치하도록 하겠다.
설치는 Zabbix 설치하기 – CentOS 8 에서를 참고 하자.
# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm # dnf clean all # dnf install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-agent # dnf install mysql-server
3. mysql 데이타베이스의 데이터 파일을 shared storage에 위치하도록 설정한다.
기본 설정은, /etc/my.cnf.d/mysql-server.cnf 파일에서 확인 가능하며 아래처럼 설정되어 있다.
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysql/mysqld.log pid-file=/run/mysqld/mysqld.pid
datadir을 shared storage가 마운트된 디렉토리로 변경하거나, 클러스터의 shared storage 리소스를 /var/lib/mysql에 마운트하도록 한다.
여기서는 이미 등록된 리소스를 변경하도록 하겠다.(이미 /var/lib/mysql 이 존재 하며 mysql을 처음 설치했다면 디렉토리가 비어 있을것이다.)
# ls -al /var/lib/mysql total 4 drwxr-xr-x 2 mysql mysql 6 Sep 1 15:42 . drwxr-xr-x. 44 root root 4096 Nov 23 02:59 ..
한쪽 노드에서, 클러스터 리소스를 변경한다. 공유 스토리지의 마운트 포인트를 /var/lib/mysql로 변경한다.
# pcs resource update cluster-fs ocf:heartbeat:Filesystem device=/dev/shared_vg/shared_lv directory=/var/lib/mysql
리소스 변경 후, df 명령으로 마운트 포인트를 확인한다.
# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 395M 0 395M 0% /dev tmpfs 410M 53M 357M 13% /dev/shm tmpfs 410M 16M 394M 4% /run tmpfs 410M 0 410M 0% /sys/fs/cgroup /dev/sda1 8.0G 4.0G 4.1G 50% / tmpfs 82M 0 82M 0% /run/user/0 /dev/mapper/shared_vg-shared_lv 8.0G 90M 7.9G 2% /var/lib/mysql
mysql 서버 상태를 확인한다.(실행되지 않음)
# systemctl status mysqld mysqld.service - MySQL 8.0 database server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled) Active: inactive (dead)
MySQL 리소스를 클러스터에 등록한다.
# pcs resource create MySQL ocf:heartbeat:mysql --group SHARED-LVM
리소스 상태를 보면 아래처럼 등록되어 있다.
# pcs resource * Resource Group: SHARED-LVM: * cluster-vg (ocf::heartbeat:LVM-activate): Started wolf1 * cluster-fs (ocf::heartbeat:Filesystem): Started wolf1 * VirtualIP (ocf::heartbeat:IPaddr2): Started wolf1 * MySQL (ocf::heartbeat:mysql): Stopped
클러스터 상태는,
# pcs status Cluster name: wolf_cluster Cluster Summary: * Stack: corosync * Current DC: wolf1 (version 2.0.3-5.el8_2.1-4b1f869f0f) - partition with quorum * Last updated: Tue Nov 23 23:23:28 2021 * Last change: Tue Nov 23 21:42:19 2021 by root via cibadmin on wolf1 * 2 nodes configured * 4 resource instances configured Node List: * Online: [ wolf1 wolf2 ] Full List of Resources: * Resource Group: SHARED-LVM: * cluster-vg (ocf::heartbeat:LVM-activate): Started wolf2 * cluster-fs (ocf::heartbeat:Filesystem): Started wolf2 * VirtualIP (ocf::heartbeat:IPaddr2): Started wolf2 * MySQL (ocf::heartbeat:mysql): Stopped Failed Resource Actions: * MySQL_start_0 on wolf1 'not installed' (5): call=24, status='complete', exitreason='Setup problem: couldn't find command: /usr/bin/safe_mysqld', last-rc-change='2021-11-23 23:22:49 -05:00', queued=0ms, exec=361ms * MySQL_start_0 on wolf2 'not installed' (5): call=24, status='complete', exitreason='Setup problem: couldn't find command: /usr/bin/safe_mysqld', last-rc-change='2021-11-23 23:22:57 -05:00', queued=0ms, exec=190ms Daemon Status: corosync: active/disabled pacemaker: active/disabled pcsd: active/enabled
mysql 은 실행되지 않았고, /usr/bin/safe_mysqld 를 찾을 수 없다는 메시지가 보인다.
mysqld를 심볼릭 링크 걸어준다.(양쪽 노드 모두)
# ln -s /usr/sbin/mysqld /usr/bin/safe_mysqld
클러스터를 재 시작한다.
# pcs cluster stop # pcs cluster start --all
이제, 클러스터 리소스를 확인해 보고, mysql에 접속되는지 확인한다.
# pcs cluster status Cluster Status: Cluster Summary: * Stack: corosync * Current DC: wolf1 (version 2.0.3-5.el8_2.1-4b1f869f0f) - partition with quorum * Last updated: Tue Nov 23 23:32:13 2021 * Last change: Tue Nov 23 23:22:45 2021 by root via cibadmin on wolf1 * 2 nodes configured * 4 resource instances configured Node List: * Online: [ wolf1 wolf2 ] PCSD Status: wolf2: Online wolf1: Online
아래 resource를 보면, 클러스터의 모든 서비스들이 wolf1 노드에서 실행되고 있음을 볼 수 있다.
[root@wolf1 ~]# pcs resource * Resource Group: SHARED-LVM: * cluster-vg (ocf::heartbeat:LVM-activate): Started wolf1 * cluster-fs (ocf::heartbeat:Filesystem): Started wolf1 * VirtualIP (ocf::heartbeat:IPaddr2): Started wolf1 * MySQL (ocf::heartbeat:mysql): Started wolf1
mysql 서버가 실행되고 있는 active 노드에서 zabbix가 사용할 데이타베이스와 계정을 만든다.
mysql_secure_install을 실행하지 않았으므로 바로 접속된다.(비밀번호는 없음)
# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0.26 Source distribution Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
zabbix가 사용할 데이타베이스를 만든다.
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) mysql> create database zabbix character set utf8 collate utf8_bin; Query OK, 1 row affected (0.03 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | zabbix | +--------------------+ 5 rows in set (0.00 sec)
데이타베이스 사용자 등록한다.
mysql> create user zabbix@localhost identified by 'zabbix123'; Query OK, 0 rows affected (0.03 sec) mysql> grant all privileges on zabbix.* to zabbix@localhost; Query OK, 0 rows affected (1.66 sec) mysql>
zabbix 데이타베이스 스키마를 만든다.
# zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -u zabbix -p zabbix Enter password:
zabbix 서버 설정파일에 DBPassword를 설정(모든 클러스터 노드에서).
# vi /etc/zabbix/zabbix_server.conf ... DBPassword=zabbix123
php timezone 설정(모든 노드에서).
# vi /etc/php-fpm.d/zabbix.conf ; php_value[date.timezone] = Europe/Riga php_value[date.timezone] = Asia/Seoul
active 노드에서 zabbix 서비스가 잘 실행되는지 확인한다.
# systemctl start php-fpm # systemctl start httpd # systemctl start zabbix-server # systemctl start zabbix-agent
클러스터 vip로 접속해본다.
http://192.168.0.30/zabbix
정상 작동하므로, zabbix 관련 서비스를 클러스터 리소스에 등록한다.
여기에서는 같은 리소스 그룹인 SHARED-LVM 그룹에 등록하도록 하겠다.
# pcs resource create php-fpm systemd:php-fpm --group SHARED-LVM # pcs resource create httpd systemd:httpd --group SHARED-LVM # pcs resource create Zabbix-Server systemd:zabbix-server --group SHARED-LVM # pcs resource create Zabbix-Agent systemd:zabbix-agent --group SHARED-LVM
클러스터 리소스를 확인해 본다.
# pcs resource status * Resource Group: SHARED-LVM: * cluster-vg (ocf::heartbeat:LVM-activate): Started wolf1 * cluster-fs (ocf::heartbeat:Filesystem): Started wolf1 * VirtualIP (ocf::heartbeat:IPaddr2): Started wolf1 * MySQL (ocf::heartbeat:mysql): Started wolf1 * php-fpm (systemd:php-fpm): Started wolf1 * httpd (systemd:httpd): Started wolf1 * Zabbix-Server (systemd:zabbix-server): Started wolf1 * Zabbix-Agent (systemd:zabbix-agent): Started wolf1
리소스가 모두 첫번째 노드에서 실행되고 있는것을 확인 할 수 있다.
이제 다시 웹브라우저를 실행해 접속하고 모니터링하고자 하는 장비를 등록한다. 네트워크 장비 등록은, zabbix 네트워크 스위치 등록를 참고하면 된다.
Active/Passive 클로스터 동작을 확인하기 위해 리소스를 다른 노드로 이동하고 다시 접속해 본다.
# pcs resource move SHARED-LVM wolf2
리소스 이동 확인
# pcs resource * Resource Group: SHARED-LVM: * cluster-vg (ocf::heartbeat:LVM-activate): Started wolf2 * cluster-fs (ocf::heartbeat:Filesystem): Started wolf2 * VirtualIP (ocf::heartbeat:IPaddr2): Started wolf2 * MySQL (ocf::heartbeat:mysql): Started wolf2 * php-fpm (systemd:php-fpm): Started wolf2 * httpd (systemd:httpd): Started wolf2 * Zabbix-Server (systemd:zabbix-server): Started wolf2 * Zabbix-Agent (systemd:zabbix-agent): Started wolf2
두번째 노드에서 접속하면 다시 zabbix 설정화면으로 넘어가는데, 동일하게 설정을 진행하면된다.
이것은 아마도 설정 내용이 공유 스토리지를 사용하는 데이타베이스에 저장되지 않고, zabbix 관련 설정 파일에 저장되기 때문인 것으로 생각된다. 설정을 마치면 첫번째 노드에서 등록했던 호스트도 같이 보인다.
* 클러스터 리소스 관련 기타사항.
현재 마운트 상태.
# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 395M 0 395M 0% /dev tmpfs 410M 53M 357M 13% /dev/shm tmpfs 410M 11M 399M 3% /run tmpfs 410M 0 410M 0% /sys/fs/cgroup /dev/sda1 8.0G 3.7G 4.4G 46% / tmpfs 82M 0 82M 0% /run/user/0 /dev/mapper/shared_vg-shared_lv 8.0G 90M 7.9G 2% /shared_disk
클러스터 리소스 확인.
# pcs resource status * Resource Group: SHARED-LVM: * cluster-vg (ocf::heartbeat:LVM-activate): Started wolf1 * cluster-fs (ocf::heartbeat:Filesystem): Started wolf1 * VirtualIP (ocf::heartbeat:IPaddr2): Started wolf1
리소스 설정 확인
# pcs resource config Group: SHARED-LVM Resource: cluster-vg (class=ocf provider=heartbeat type=LVM-activate) Attributes: activation_mode=exclusive vg_access_mode=system_id vgname=shared_vg Operations: monitor interval=30s timeout=90s (cluster-vg-monitor-interval-30s) start interval=0s timeout=90s (cluster-vg-start-interval-0s) stop interval=0s timeout=90s (cluster-vg-stop-interval-0s) Resource: cluster-fs (class=ocf provider=heartbeat type=Filesystem) Attributes: device=/dev/shared_vg/shared_lv directory=/shared_disk fstype=xfs Operations: monitor interval=20s timeout=40s (cluster-fs-monitor-interval-20s) start interval=0s timeout=60s (cluster-fs-start-interval-0s) stop interval=0s timeout=60s (cluster-fs-stop-interval-0s) Resource: VirtualIP (class=ocf provider=heartbeat type=IPaddr2) Attributes: cidr_netmask=24 ip=192.168.0.30 Operations: monitor interval=30s (VirtualIP-monitor-interval-30s) start interval=0s timeout=20s (VirtualIP-start-interval-0s) stop interval=0s timeout=20s (VirtualIP-stop-interval-0s)
특정 리소스만 확인 하려면 리소스 이름을 명시하면 된다.
# pcs resource config cluster-fs Resource: cluster-fs (class=ocf provider=heartbeat type=Filesystem) Attributes: device=/dev/shared_vg/shared_lv directory=/shared_disk fstype=xfs Operations: monitor interval=20s timeout=40s (cluster-fs-monitor-interval-20s) start interval=0s timeout=60s (cluster-fs-start-interval-0s) stop interval=0s timeout=60s (cluster-fs-stop-interval-0s)
현재 공유디스크는 /shared_disk에 마운트 되어 있다. 이 마운트 포인트를 /mysql_data 로 변경하는 방법
양쪽 노드에서 마운트포인트를 만들어준다.
# mkdir /mysql_data
한쪽 노드에서,
# pcs resource update cluster-fs ocf:heartbeat:Filesystem device=/dev/shared_vg/shared_lv directory=/mysql_data
확인해 보면,
# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 395M 0 395M 0% /dev tmpfs 410M 53M 357M 13% /dev/shm tmpfs 410M 11M 399M 3% /run tmpfs 410M 0 410M 0% /sys/fs/cgroup /dev/sda1 8.0G 3.7G 4.4G 46% / tmpfs 82M 0 82M 0% /run/user/0 /dev/mapper/shared_vg-shared_lv 8.0G 90M 7.9G 2% /mysql_data