Zabbix 5.0 with SELinux on CentOS 8

 article  Comments Off on Zabbix 5.0 with SELinux on CentOS 8
Mar 142021
 

SELinux環境下で動かそうとしたらいろいろあったので覚書。

前提

環境

  • CentOS 8.3
  • Zabbix 5.0.9
  • PostgreSQL 10.15
  • Apache 2.4

利用テンプレート

  • Template App Zabbix Server
  • Template App Apache by HTTP
  • Template App PHP-FPM by HTTP
  • Template OS Linux by Zabbix agent
  • Template DB PostgreSQL

適用したSELinuxブール値

  • httpd_can_connect_zabbix –> on
  • httpd_can_network_connect_db –> off
  • zabbix_can_network –> on

作成したSELinuxポリシーなど

Zabbix Server用

module zabbix-server_local 1.0;

require {
        type zabbix_t;
        type zabbix_var_run_t;
        type krb5_keytab_t;
        type var_log_t;
        class sock_file create;
        class sock_file unlink;
        class unix_stream_socket connectto;
        class dir search;
        class file open;
        class file read;
}

#============= zabbix_t ==============
allow zabbix_t zabbix_var_run_t:sock_file create;
allow zabbix_t zabbix_var_run_t:sock_file unlink;
allow zabbix_t self:unix_stream_socket connectto;
allow zabbix_t krb5_keytab_t:dir search;
allow zabbix_t var_log_t:file open;
allow zabbix_t var_log_t:file read;

上記ポリシーに加えてdac_overrideも要求されるが、/run/zabbixの所有者権限がzabbix:zabbix 700となっており、厳密なDACとしてはrootでの書き込みが許可されていないため発生している。
dac_overrideは許可したくないので/run/zabbixの権限をzabbix:root 775に変更してrootにも書き込み許可を与えるようにした。サービスユニットファイルを以下のとおり修正している。

[Service]
ExecStartPre=/usr/bin/mkdir -p /run/zabbix
ExecStartPre=/usr/bin/chgrp root /run/zabbix
ExecStartPre=/usr/bin/chmod g+w  /run/zabbix

Apache用

httpd_can_network_connect_dbをoffにしたので、PostgreSQLへの接続のみを明示的に許可している。

module httpd_local 1.0;

require {
        type httpd_t;
        type postgresql_port_t;
        class tcp_socket name_connect;
}

#============= httpd_t ==============
allow httpd_t postgresql_port_t:tcp_socket name_connect;

Zabbix Agent監視用

PostgreSQL監視用に/var/lib/zabbix/.pgpass読み込み(zabbix_var_lib_t)と、system.sw.packagesキーでrpm一覧を取得するためのrpm_exec_t実行権限やvar_lib_rpm_tの読み込み権限が必要だった。

module zabbix-agent_local 1.0;

require {
        type zabbix_agent_t;
        type zabbix_var_lib_t;
        type rpm_exec_t;
        type rpm_var_lib_t;
        type devlog_t;
        type initctl_t;
        type proc_kcore_t;
        class file open;
        class file read;
        class file execute;
        class file execute_no_trans;
        class file map;
        class sock_file getattr;
        class fifo_file getattr;
        class file getattr;
}

#============= zabbix_agent_t ==============
allow zabbix_agent_t zabbix_var_lib_t:file open;
allow zabbix_agent_t zabbix_var_lib_t:file read;
allow zabbix_agent_t rpm_exec_t:file execute;
allow zabbix_agent_t rpm_exec_t:file execute_no_trans;
allow zabbix_agent_t rpm_exec_t:file map;
allow zabbix_agent_t rpm_var_lib_t:file open;
allow zabbix_agent_t rpm_var_lib_t:file read;
allow zabbix_agent_t devlog_t:sock_file getattr;
allow zabbix_agent_t initctl_t:fifo_file getattr;
allow zabbix_agent_t proc_kcore_t:file getattr;

CentOS 7のtomcatパッケージでcatalina.base分離

 article  Comments Off on CentOS 7のtomcatパッケージでcatalina.base分離
Oct 302016
 

以前「CATALINA_BASEを分けてTomcatを複数サービス化」のような記事を書いたのですが、CentOS 7やRed Hat 7のtomcatパッケージでこちらを実装してみます。

CentOS 7/Red Hat 7のtomcatパッケージには2種類のsystemd.execファイルが用意されています。

[root@localhost ~]# ls /usr/lib/systemd/system/tomcat*
/usr/lib/systemd/system/tomcat.service
/usr/lib/systemd/system/tomcat@.service
[root@localhost ~]#

tomcat@.serviceの先頭に以下の記述があり、こちらの手順を模倣するとcatalina.baseの分離ができそうなので早速やってみます。

# Systemd unit file for tomcat instances.
#
# To create clones of this service:
# 0. systemctl enable tomcat@name.service
# 1. create catalina.base directory structure in
# /var/lib/tomcats/name
# 2. profit.

まずはnameにinst1を指定してenableにしてみます。

[root@localhost ~]# systemctl enable tomcat@inst1.service
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat@inst1.service to /usr/lib/systemd/system/tomcat@.service.
[root@localhost ~]#

次に/var/lib/tomcats以下にcatalina.baseディレクトリを用意してパッケージデフォルトの内容をコピーします。

[root@localhost ~]# mkdir /var/lib/tomcats/inst1 && cd /var/lib/tomcats/inst1
[root@localhost inst1]# cp -pr /etc/tomcat conf
[root@localhost inst1]# cp -pr /var/log/tomcat logs
[root@localhost inst1]# cp -pr /var/cache/tomcat/temp .
[root@localhost inst1]# cp -pr /var/cache/tomcat/work .
[root@localhost inst1]# cp -pr /var/lib/tomcat/webapps .

webapps以下の不要なアプリケーションは削除します。

catalina.baseを指定する設定ファイルは/etc/sysconfig/tomcat@inst1として用意します。
これは/etc/tomcat/tomcat.confの先頭に説明があります。

# System-wide configuration file for tomcat services
# This will be loaded by systemd as an environment file,
# so please keep the syntax.
#
# There are 2 “classes” of startup behavior in this package.
# The old one, the default service named tomcat.service.
# The new named instances are called tomcat@instance.service.
#
# Use this file to change default values for all services.
# Change the service specific ones to affect only one service.
# For tomcat.service it’s /etc/sysconfig/tomcat, for
# tomcat@instance it’s /etc/sysconfig/tomcat@instance.

ファイルを作成してCATALINA_BASEとCATALINA_TMPDIRを設定します。

[root@localhost ~]# cp -p /etc/sysconfig/tomcat /etc/sysconfig/tomcat\@inst1
[root@localhost ~]# echo "CATALINA_BASE=\"/var/lib/tomcats/inst1\"" >> /etc/sysconfig/tomcat\@inst1
[root@localhost ~]# echo "CATALINA_TMPDIR=\"/var/lib/tomcats/inst1/temp\"" >> /etc/sysconfig/tomcat\@inst1

サービスを起動してみます。

[root@localhost ~]# systemctl start tomcat@inst1

catalina.baseやjava.io.tmpdirが分離された状態で起動されていることが確認できます。

/usr/lib/jvm/jre/bin/java -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/var/lib/tomcats/inst1 -Dcatalina.home=/usr/share/tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/lib/tomcats/inst1/temp -Djava.util.logging.config.file=/var/lib/tomcats/inst1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start

利用するポート番号変更などインスタンス個別の設定は、/var/lib/tomcats/inst1/conf以下を編集することで対応できます。

CentOS 7.1でZabbix Server 2.4.4がsegfault

 article  Comments Off on CentOS 7.1でZabbix Server 2.4.4がsegfault
Apr 062015
 

CentOS 7で動かしていたZabbix Server 2.4.4が起動しなくなりました。segfaltしている模様です。

[root@localhost ~]# systemctl status zabbix-server.service
zabbix-server.service - Zabbix Server
   Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; disabled)
   Active: failed (Result: start-limit) since Tue 2015-04-05 23:23:56 JST; 7min ago
  Process: 18642 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=killed, signal=SEGV)

Apr 05 23:23:56 localhost systemd[1]: zabbix-server.service: control process exited, code=killed status=11
Apr 05 23:23:56 localhost systemd[1]: Failed to start Zabbix Server.
Apr 05 23:23:56 localhost systemd[1]: Unit zabbix-server.service entered failed state.
Apr 05 23:23:56 localhost systemd[1]: zabbix-server.service holdoff time over, scheduling restart.
Apr 05 23:23:56 localhost systemd[1]: Stopping Zabbix Server...
Apr 05 23:23:56 localhost systemd[1]: Starting Zabbix Server...
Apr 05 23:23:56 localhost systemd[1]: zabbix-server.service start request repeated too quickly, refusing to start.
Apr 05 23:23:56 localhost systemd[1]: Failed to start Zabbix Server.
Apr 05 23:23:56 localhost systemd[1]: Unit zabbix-server.service entered failed state.
[root@localhost ~]# dmesg
[335292.404381] zabbix_server[18567]: segfault at 18 ip 00007fb071057c00 sp 00007fff73f4b3b8 error 4 in libpthread-2.17.so[7fb07104e000+16000]
[335292.405914] zabbix_server[18569]: segfault at 18 ip 00007fb071057c00 sp 00007fff73f4b3b8 error 4 in libpthread-2.17.so[7fb07104e000+16000]
[335292.621060] zabbix_server[18617]: segfault at 18 ip 00007fbb3753ec00 sp 00007fffdcf66fb8 error 4 in libpthread-2.17.so[7fbb37535000+16000]
[335292.626269] zabbix_server[18615]: segfault at 18 ip 00007fbb3753ec00 sp 00007fffdcf66fb8 error 4 in libpthread-2.17.so[7fbb37535000+16000]
[335292.751505] zabbix_server[18628]: segfault at 18 ip 00007f2653115c00 sp 00007fffbaf569e8 error 4 in libpthread-2.17.so[7f265310c000+16000]
[335292.752712] zabbix_server[18630]: segfault at 18 ip 00007f2653115c00 sp 00007fffbaf569e8 error 4 in libpthread-2.17.so[7f265310c000+16000]
[335292.878242] zabbix_server[18635]: segfault at 18 ip 00007f3c927ccc00 sp 00007fffa83ec778 error 4 in libpthread-2.17.so[7f3c927c3000+16000]
[335292.880241] zabbix_server[18637]: segfault at 18 ip 00007f3c927ccc00 sp 00007fffa83ec778 error 4 in libpthread-2.17.so[7f3c927c3000+16000]
[335293.004628] zabbix_server[18642]: segfault at 18 ip 00007f717b2d7c00 sp 00007fffcb6b7db8 error 4 in libpthread-2.17.so[7f717b2ce000+16000]
[335293.005836] zabbix_server[18644]: segfault at 18 ip 00007f717b2d7c00 sp 00007fffcb6b7db8 error 4 in libpthread-2.17.so[7f717b2ce000+16000]
[root@localhost ~]#

以下の状況と同じようです。
[ZBX-7790] zabbix_server_m[13777]: segfault at 18 ip 00007fe6639a8fe0 sp 00007fffbb66e498 error 4 in libpthread-2.18 – crash in "main" process – ZABBIX SUPPORT
trousersパッケージの削除かgnutlsのダウングレードで解決するようですが、trousersを削除するとpacemakerも削除されるので今回はgnutlsをダウングレード。

[root@localhost ~]# rpm -Uvh --force http://ftp.iij.ad.jp/pub/linux/centos/7.0.1406/updates/x86_64/Packages/gnutls-3.1.18-10.el7_0.x86_64.rpm
Retrieving http://ftp.iij.ad.jp/pub/linux/centos/7.0.1406/updates/x86_64/Packages/gnutls-3.1.18-10.el7_0.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:gnutls-3.1.18-10.el7_0           ################################# [ 50%]
Cleaning up / removing...
   2:gnutls-3.3.8-12.el7              ################################# [100%]
[root@localhost ~]#

無事起動しました。

[root@localhost ~]# systemctl start zabbix-server
[root@localhost ~]# systemctl status zabbix-server
zabbix-server.service - Zabbix Server
   Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; enabled)
   Active: active (running) since Tue 2015-04-05 23:42:45 JST; 5s ago
  Process: 30941 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
 Main PID: 30943 (zabbix_server)
   CGroup: /system.slice/zabbix-server.service
           ├─30943 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
           ├─30948 /usr/sbin/zabbix_server: configuration syncer [waiting 60 sec for processes]
           ├─30949 /usr/sbin/zabbix_server: db watchdog [synced alerts config in 0.012501 sec, idle 60 sec]
           ├─30950 /usr/sbin/zabbix_server: poller #1 [got 0 values in 0.000041 sec, idle 5 sec]
           ├─30951 /usr/sbin/zabbix_server: poller #2 [got 0 values in 0.000036 sec, idle 5 sec]
           ├─30952 /usr/sbin/zabbix_server: poller #3 [got 0 values in 0.000050 sec, idle 5 sec]
           ├─30953 /usr/sbin/zabbix_server: poller #4 [got 0 values in 0.000032 sec, idle 5 sec]
           ├─30954 /usr/sbin/zabbix_server: poller #5 [got 0 values in 0.000034 sec, idle 5 sec]
           ├─30955 /usr/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000052 sec, idle 5 sec]
           ├─30956 /usr/sbin/zabbix_server: trapper #1 [processed data in 0.000000 sec, waiting for connection]
           ├─30957 /usr/sbin/zabbix_server: trapper #2 [processed data in 0.000000 sec, waiting for connection]
           ├─30958 /usr/sbin/zabbix_server: trapper #3 [processed data in 0.000000 sec, waiting for connection]
           ├─30959 /usr/sbin/zabbix_server: trapper #4 [processed data in 0.000000 sec, waiting for connection]
           ├─30965 /usr/sbin/zabbix_server: trapper #5 [processed data in 0.000000 sec, waiting for connection]
           ├─30966 /usr/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000007 sec, idle 5 sec]
           ├─30968 /usr/sbin/zabbix_server: alerter [sent alerts: 0 success, 0 fail in 0.000708 sec, idle 30 sec]
           ├─30969 /usr/sbin/zabbix_server: housekeeper [startup idle for 30 minutes]
           ├─30970 /usr/sbin/zabbix_server: timer #1 [processed 0 triggers, 0 events in 0.000000 sec, 0 maintenances in 0.000000 sec, idle 15 sec]
           ├─30971 /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.000903 sec, idle 5 sec]
           ├─30974 /usr/sbin/zabbix_server: discoverer #1 [processed 0 rules in 0.000813 sec, idle 60 sec]
           ├─30975 /usr/sbin/zabbix_server: history syncer #1 [synced 0 items in 0.000002 sec, idle 5 sec]
           ├─30976 /usr/sbin/zabbix_server: history syncer #2 [synced 0 items in 0.000002 sec, idle 5 sec]
           ├─30980 /usr/sbin/zabbix_server: history syncer #3 [synced 0 items in 0.000002 sec, idle 5 sec]
           ├─30981 /usr/sbin/zabbix_server: history syncer #4 [synced 0 items in 0.000002 sec, idle 5 sec]
           ├─30982 /usr/sbin/zabbix_server: escalator [processed 0 escalations in 0.000626 sec, idle 3 sec]
           ├─30985 /usr/sbin/zabbix_server: proxy poller #1 [exchanged data with 0 proxies in 0.000005 sec, idle 5 sec]
           └─30986 /usr/sbin/zabbix_server: self-monitoring [processed data in 0.000006 sec, idle 1 sec]

Apr 05 23:42:45 localhost systemd[1]: Started Zabbix Server.
[root@localhost ~]#

PacemakerでMySQLレプリケーション構成 – CentOS7+MariaDB編

 article  Comments Off on PacemakerでMySQLレプリケーション構成 – CentOS7+MariaDB編
Mar 072015
 

以前書いた「PacemakerでMySQLレプリケーション構成」のCentOS7+MariaDB環境用です。
CentOS7になってMySQLがMariaDBになったこと、pcsコマンドのオプションが若干変更になっていることが主な変更点になります。

最近のmysqlリソースエージェントでは、MySQLデータベースをMaster/Slaveセットとして構成することができます。
DRBD同様、TakeoverによってReplicationのMaster/Slaveを入れ替えることが可能となります。

ということで、CentOS 7のPacemakerを使ってMariaDBデータベースをMaster/Slaveセットとして構成してみました。

セットアップする環境は以下になります。PacemakerとCorosync一式はCentOS提供のパッケージをインストールしクラスター構成済みです。

  • 1号機:pcmk11 (CentOS 7.0.1406 x86_64)
  • 2号機:pcmk12 (CentOS 7.0.1406 x86_64)

レプリケーションの設定

まずはPacemaker範囲外で、MariaDBをインストールしてレプリケーションを構成します。ただしCHANGE MASTER TOは実施しません。
MariaDBのレプリケーション構成手順の詳細は公式ドキュメントを参照してください。
https://mariadb.com/kb/en/mariadb/setting-up-replication/

MariaDBのインストールおよび設定

MariaDBをインストールし設定します。

[root@pcmk11 ~]# yum -y install mariadb-server
[root@pcmk11 ~]# vi /etc/my.cnf

/etc/my.cnfは[mysqld]セクションに以下を追加します。server-idは1とします。

log-bin=mariadb-bin
server-id=1

2号機も同様です。

[root@pcmk12 ~]# yum -y install mysql-server
[root@pcmk12 ~]# vi /etc/my.cnf

/etc/my.cnfは[mysqld]セクションに以下を追加します。server-idは2とします。

log-bin=mariadb-bin
server-id=2

レプリケーションユーザーの作成

1号機側のみで作業します。まずMySQLを起動します。

[root@pcmk11 ~]# systemctl start mariadb.service

レプリケーションユーザーを作成します。

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'slavepass';

アクセス元をもっと厳格に限定したい場合は、ホスト部分を環境にあわせて設定してください。

mysqlリソースエージェントでは、通常のレプリケーション以外にもread-onlyに切り替える権限をもったユーザーが必要になるため、localhostでもレプリケーションユーザーを作成します。

mysql> GRANT PROCESS, SUPER, REPLICATION SLAVE, REPLICATION CLIENT, RELOAD ON *.* TO 'repl'@'localhost' IDENTIFIED BY 'slavepass';

ユーザーを作成したら反映します。

mysql> FLUSH PRIVILEGES;

これらの権限が必要な理由についてはリソースエージェントで以下のように説明されています。

<parameter name="replication_user" unique="0" required="0">
<longdesc lang="en">
MySQL replication user. This user is used for starting and stopping
MySQL replication, for setting and resetting the master host, and for
setting and unsetting read-only mode. Because of that, this user must
have SUPER, REPLICATION SLAVE, REPLICATION CLIENT, and PROCESS
privileges on all nodes within the cluster. Mandatory if you define
a master-slave resource.
</longdesc>
<shortdesc lang="en">MySQL replication user</shortdesc>
<content type="string" default="${OCF_RESKEY_replication_user_default}" />
</parameter>

MariaDBを停止してデータベースファイル一式を2号機にコピーします。

[root@pcmk11 ~]# systemctl stop mariadb.service
[root@pcmk11 ~]# ssh pcmk12 rm -rf /var/lib/mysql
[root@pcmk11 ~]# tar cf - -C /var/lib mysql | ssh pcmk12 tar xpvf - -C /var/lib/ 

クラスターリソースのセットアップ

最初にSlaveとして稼働させる2号機をStandbyにします。

[root@pcmk12 ~]# pcs cluster standby pcmk12

クラスターリソースを登録します。

[root@pcmk11 ~]# pcs cluster cib mysql_repl
[root@pcmk11 ~]# pcs -f mysql_repl resource create mysql ocf:heartbeat:mysql
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql binary=/usr/bin/mysqld_safe
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql datadir=/var/lib/mysql
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql log=/var/log/mariadb/mariadb.log
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql pid=/run/mariadb/mariadb.pid
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql replication_user=repl
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql replication_passwd=slavepass
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql start interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql stop interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql monitor interval=20s timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql monitor interval=10s role=Master timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql monitor interval=30s role=Slave timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql promote interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql demote interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource op add mysql notify interval=0 timeout=90s
[root@pcmk11 ~]# pcs cluster cib-push mysql_repl

operation timeoutの設定はmysql RAの推奨値を設定しています。

Master/Slaveセットを作成します。

[root@pcmk11 ~]# pcs resource master mysql-clone mysql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

クラスターリソースを開始します。

[root@pcmk11 ~]# pcs resource start mysql-clone

1号機がMasterとして起動します。

[root@pcmk11 ~]# crm_mon -1
Last updated: Fri Mar  7 01:26:21 2015
Last change: Fri Mar  7 09:49:24 2015 via crm_attribute on pcmk11
Stack: corosync
Current DC: pcmk11 (1) - partition with quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured
2 Resources configured


Node pcmk12: standby
Online: [ pcmk11 ]

 Master/Slave Set: mysql-clone [mysql]
     Masters: [ pcmk11 ]
     Stopped: [ mysql:1 ]
[root@pcmk11 ~]#

2号機のStandbyを解除します。

[root@pcmk11 ~]# pcs cluster unstandby pcmk12

2号機がSlaveのレプリケーション構成としてMySQLが起動します。

[root@pcmk11 ~]# crm_mon -1
Last updated: Fri Mar  7 01:26:21 2015
Last change: Fri Mar  7 00:49:24 2015 via crm_attribute on pcmk11
Stack: corosync
Current DC: pcmk11 (1) - partition with quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured
2 Resources configured


Online: [ pcmk11 pcmk12 ]

 Master/Slave Set: mysql-clone [mysql]
     Masters: [ pcmk11 ]
     Slaves: [ pcmk12 ]
[root@pcmk11 ~]#

起動時の/var/log/mariadb/mariadb.logを確認すると、CHANGE MASTER TOが実行されていることがわかります。

Version: '5.5.41-MariaDB-log'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server
150306  9:51:04 [Note] Slave SQL thread initialized, starting replication in log 'mariadb-bin.000001' at position 1435816, relay log '/var/lib/mysql/mariadb-relay-bin.000002' position: 1436102
150306  9:51:04 [Note] Slave I/O thread: connected to master 'repl@pcmk11:3306',replication started in log 'mariadb-bin.000001' at position 1435816

あとはpcs cluster standby pcmk11コマンドでMaster側をStandbyにするとMasterが切り替わります。
Masterが切り替わったらpcs cluster unstandby pcmk11してStandby解除するとpcmk11はSlaveとして稼働を開始します。

また、cib.xmlを見てみるとバイナリログの位置情報がcluster_property_setとして記録されていることがわかります。

<cluster_property_set id="mysql_replication">
  <nvpair id="mysql_replication-mysql_REPL_INFO" name="mysql_REPL_INFO" value="pcmk11|mariadb-bin.000002|245"/>
</cluster_property_set>

人手で確認してCHANGE MASTER TOを実行する必要がないため、セットアップも非常に楽になります。

CentOS 7 KVM guest on Fedora 20

 article  Comments Off on CentOS 7 KVM guest on Fedora 20
Aug 132014
 

Fedora 20にKVMゲストとしてCentOS 7をインストールしようとしたところ、768MBではメモリ不足になってしまいました。

[root@localhost ~]# virt-install --connect qemu:///system -n centos7 --memory 768 --disk /dev/vg00/centos7_root --graphics none -x 'console=tty0 console=ttyS0,115200n8 serial' -l http://mirror.centos.org/centos-7/7/os/x86_64/

“gzip invoked oom-killer”となって中断してしまいます。

[  OK  ] Started dracut initqueue hook.
         Starting dracut pre-mount hook...
[  OK  ] Started dracut pre-mount hook.
[  OK  ] Reached target Initrd Root File System.
         Starting Reload Configuration from the Real Root...
[  OK  ] Started Reload Configuration from the Real Root.
[  OK  ] Reached target Initrd File Systems.
         Starting dracut mount hook...
[   77.580372] EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts: (null)
[  OK  ] Started dracut mount hook.
[  OK  ] Reached target Initrd Default Target.
[  100.166000] gzip invoked oom-killer: gfp_mask=0x200da, order=0, oom_score_adj=0
[  100.167946] gzip cpuset=/ mems_allowed=0
[  100.168981] CPU: 0 PID: 927 Comm: gzip Not tainted 3.10.0-123.el7.x86_64 #1
[  100.170716] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
[  100.172176]  ffff88002fad4fa0 00000000602dc3bc ffff8800123a3798 ffffffff815e19ba
[  100.174333]  ffff8800123a3828 ffffffff815dd02d ffffffff810b68f8 ffff88002f57d4b0
[  100.176493]  ffffffff00000202 ffffffff00000000 0000000000000000 ffffffff81102e03
[  100.178655] Call Trace:
[  100.179335]  [] dump_stack+0x19/0x1b
[  100.180646]  [] dump_header+0x8e/0x214

OOMですのでメモリ増やせば回避できます。

[root@localhost ~]# virt-install --connect qemu:///system -n centos7 --memory 1024 --disk /dev/vg00/centos7_root --graphics none -x 'console=tty0 console=ttyS0,115200n8 serial' -l http://mirror.centos.org/centos-7/7/os/x86_64/

にしても「1GBかー」と思ってたら公式にも必要メモリは最低1GBなのですね。
リリースノートの「第3章 能力および制限」にもちゃんと1GBと記載されていました。

CentOS 7のキーボードレイアウト変更

 article  Comments Off on CentOS 7のキーボードレイアウト変更
Jul 312014
 

Red Hat 7になって/etc/sysconfig/keyboardによる設定ではなくなりました。

仮想コンソールのキーボード設定はSystem Administrator’s Guideの1.2. Changing the Keyboard Layoutにあるように、localectlコマンドを使います。
今の設定を確認するにはstatusオプションを使います。

localectl status

指定可能なキーボードレイアウトはlist-keymapsオプションで確認できます。

localectl list-keymaps

例えばjp106キーボードに設定するにはset-keymapオプションを使って以下を実行します。

localectl set-keymap jp106

localectlコマンドで設定した結果は/etc/vconsole.confに保存されます(system-config-keyboardを使った場合も同様)。

ただ、この方法ですと物理コンソール(物理といってよいのかわかりませんが)のキーボードレイアウトは変わりません。
こちらは正確な情報が不明なのですが、kernelオプションで設定できるようなので、grub.cfgを変更してみました。
具体的には/etc/default/grubファイルのGRUB_CMDLINE_LINUXに指定されているvconsole.keymapを変更してgrub2-mkconfigを実行しています。

変更前

GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=auto  vconsole.keymap=us rhgb quiet"

変更後

GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=auto  vconsole.keymap=jp106 rhgb quiet"

そしてgrub2-mkconfig実行。

grub2-mkconfig -o /boot/grub2/grub.cfg

こうすることでkernelのコマンドラインオプションが変更され、初期の物理コンソールから指定したキーボードレイアウトを使用できるようになります。

PacemakerでMySQLレプリケーション構成

 article  Comments Off on PacemakerでMySQLレプリケーション構成
May 262013
 

最近のmysqlリソースエージェントでは、MySQLデータベースをMaster/Slaveセットとして構成することができます。
DRBD同様、TakeoverによってReplicationのMaster/Slaveを入れ替えることが可能となります。

ということで、CentOS 6.4のPacemakerを使ってMySQLデータベースをMaster/Slaveセットとして構成してみました。

セットアップする環境は以下になります。PacemakerとCorosync一式はCentOS提供のパッケージをインストールしクラスター構成済みです。

  • 1号機:pcmk11 (CentOS 6.4 x86_64)
  • 2号機:pcmk12 (CentOS 6.4 x86_64)

レプリケーションの設定

まずはPacemaker範囲外で、MySQLをインストールしてレプリケーションを構成します。ただしCHANGE MASTER TOは実施しません。
MySQLのレプリケーション構成手順の詳細は公式ドキュメントを参照してください。
http://dev.mysql.com/doc/refman/5.1/ja/replication-howto.html

MySQLのインストールおよび設定

MySQLをインストールし設定します。

[root@pcmk11 ~]# yum -y install mysql-server
[root@pcmk11 ~]# vi /etc/my.cnf

/etc/my.cnfは[mysqld]セクションに以下を追加します。server-idは1とします。

log-bin=mysql-bin
server-id=1

2号機も同様です。

[root@pcmk12 ~]# yum -y install mysql-server
[root@pcmk12 ~]# vi /etc/my.cnf

/etc/my.cnfは[mysqld]セクションに以下を追加します。server-idは2とします。

log-bin=mysql-bin
server-id=2

レプリケーションユーザーの作成

1号機側のみで作業します。まずMySQLを起動します。

[root@pcmk11 ~]# service mysqld start

レプリケーションユーザーを作成します。

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'slavepass';

アクセス元をもっと厳格に限定したい場合は、ホスト部分を環境にあわせて設定してください。

mysqlリソースエージェントでは、通常のレプリケーション以外にもread-onlyに切り替える権限をもったユーザーが必要になるため、localhostでもレプリケーションユーザーを作成します。

mysql> GRANT SUPER,REPLICATION SLAVE,REPLICATION CLIENT,PROCESS ON *.* TO 'repl'@'localhost' IDENTIFIED BY 'slavepass';

ユーザーを作成したら反映します。

mysql> FLUSH PRIVILEGES;

これらの権限が必要な理由についてはリソースエージェントで以下のように説明されています。

<parameter name="replication_user" unique="0" required="0">
<longdesc lang="en">
MySQL replication user. This user is used for starting and stopping
MySQL replication, for setting and resetting the master host, and for
setting and unsetting read-only mode. Because of that, this user must
have SUPER, REPLICATION SLAVE, REPLICATION CLIENT, and PROCESS
privileges on all nodes within the cluster.
</longdesc>
<shortdesc lang="en">MySQL replication user</shortdesc>
<content type="string" default="${OCF_RESKEY_replication_user_default}" />
</parameter>

mysqlを停止してデータベースファイル一式を2号機にコピーします。

[root@pcmk11 ~]# service mysqld stop
[root@pcmk11 ~]# ssh pcmk12 rm -rf /var/lib/mysql
[root@pcmk11 ~]# tar cf - -C /var/lib mysql | ssh pcmk12 tar xpvf - -C /var/lib/ 

クラスターリソースのセットアップ

最初にSlaveとして稼働させる2号機をStandbyにします。

[root@pcmk12 ~]# pcs cluster standby pcmk12

クラスターリソースを登録します。

[root@pcmk11 ~]# pcs cluster cib mysql_repl
[root@pcmk11 ~]# pcs -f mysql_repl resource create mysql ocf:heartbeat:mysql binary=/usr/bin/mysqld_safe pid=/var/run/mysqld/mysqld.pid
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql replication_user=repl
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql replication_passwd=slavepass
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql start interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql stop interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql monitor interval=20s timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql monitor interval=10s role=Master timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql monitor interval=30s role=Slave timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql promote interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql demote interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql notify interval=0 timeout=90s
[root@pcmk11 ~]# pcs cluster push cib mysql_repl

operation timeoutの設定はmysql RAの推奨値を設定しています。

Master/Slaveセットを作成します。

[root@pcmk11 ~]# pcs resource master mysql-clone mysql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

クラスターリソースを開始します。

[root@pcmk11 ~]# pcs resource start mysql-clone

1号機がMasterとして起動します。

[root@pcmk11 ~]# crm_mon -1
Last updated: Mon May 25 20:32:52 2013
Last change: Mon May 25 20:07:59 2013 via crm_attribute on pcmk11
Stack: classic openais (with plugin)
Current DC: pcmk11 - partition with quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured, 2 expected votes
2 Resources configured.


Node pcmk12: standby
Online: [ pcmk11 ]

 Master/Slave Set: mysql-clone [mysql]
     Masters: [ pcmk11 ]
     Stopped: [ mysql:1 ]
[root@pcmk11 ~]#

2号機のStandbyを解除します。

[root@pcmk11 ~]# pcs cluster unstandby pcmk12

2号機がSlaveのレプリケーション構成としてMySQLが起動します。

[root@pcmk11 ~]# crm_mon -1
Last updated: Mon May 25 20:46:52 2013
Last change: Mon May 25 20:16:59 2013 via crm_attribute on pcmk11
Stack: classic openais (with plugin)
Current DC: pcmk11 - partition with quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured, 2 expected votes
2 Resources configured.


Online: [ pcmk11 pcmk12 ]

 Master/Slave Set: mysql-clone [mysql]
     Masters: [ pcmk11 ]
     Slaves: [ pcmk12 ]
[root@pcmk11 ~]#

起動時の/var/log/mysqld.logを確認すると、CHANGE MASTER TOが実行されていることがわかります。

130525 21:07:40 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
InnoDB: The InnoDB memory heap is disabled
InnoDB: Mutexes and rw_locks use GCC atomic builtins
InnoDB: Compressed tables use zlib 1.2.3
130525 21:07:40  InnoDB: Initializing buffer pool, size = 128.0M
130525 21:07:41  InnoDB: Completed initialization of buffer pool
130525 21:07:41  InnoDB: highest supported file format is Barracuda.
130525 21:07:41 InnoDB Plugin 5.1.69 started; log sequence number 262393953
130525 21:07:41 [Note] Event Scheduler: Loaded 0 events
130525 21:07:41 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.1.69-log'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  Source distribution
130525 21:07:44 [Note] 'CHANGE MASTER TO executed'. Previous state master_host='', master_port='3306', master_log_file='', master_log_pos='4'. New state master_host='pcmk11', master_port='3306', master_log_file='', master_log_pos='4'.
130525 21:07:44 [Note] Slave SQL thread initialized, starting replication in log 'FIRST' at position 0, relay log '/var/lib/mysql/mysql-relay.000001' position: 4
130525 21:07:44 [Note] Slave I/O thread: connected to master 'repl@pcmk11:3306',replication started in log 'FIRST' at position 4

あとはpcs cluster standby pcmk11コマンドでMaster側をStandbyにするとMasterが切り替わります。
Masterが切り替わったらpcs cluster unstandby pcmk11してStandby解除するとpcmk11はSlaveとして稼働を開始します。

また、cib.xmlを見てみるとバイナリログの位置情報がノードの属性として記録されていることがわかります。

<nodes>
  <node id="pcmk12" uname="pcmk12">
    <instance_attributes id="nodes-pcmk12">
      <nvpair id="nodes-pcmk12-pcmk11-log-file-mysql" name="pcmk11-log-file-mysql" value="mysql-bin.000001"/>
      <nvpair id="nodes-pcmk12-pcmk11-log-pos-mysql" name="pcmk11-log-pos-mysql" value="1320619"/>
    </instance_attributes>
  </node>
  <node id="pcmk11" uname="pcmk11">
    <instance_attributes id="nodes-pcmk11"/>
  </node>
</nodes>

人手で確認してCHANGE MASTER TOを実行する必要がないため、セットアップも非常に楽になります。

CentOS 6.4でvmware-config-tools.plが失敗

 article  Comments Off on CentOS 6.4でvmware-config-tools.plが失敗
May 252013
 

カーネルアップデート後にVMware Toolsの再設定を実施しようとしたら失敗しました。

# vmware-config-tools.pl
:
Creating a new initrd boot image for the kernel.
vmware-tools-thinprint start/running
initctl: Job failed to start
Unable to start services for VMware Tools

Execution aborted.

#

どうもfuse-libsパッケージを削除してしまっていたことが原因のようで、インストールしたらあっさり解決。

# yum -y install fuse-libs
# vmware-config-tools.pl
:
Creating a new initrd boot image for the kernel.
vmware-tools-thinprint start/running
vmware-tools start/running
The configuration of VMware Tools 9.2.3 build-1031360 for Linux for this
running kernel completed successfully.

You must restart your X session before any mouse or graphics changes take
effect.

You can now run VMware Tools by invoking "/usr/bin/vmware-toolbox-cmd" from the
command line.

To enable advanced X features (e.g., guest resolution fit, drag and drop, and
file and text copy/paste), you will need to do one (or more) of the following:
1. Manually start /usr/bin/vmware-user
2. Log out and log back into your desktop session; and,
3. Restart your X session.

Enjoy,

--the VMware team

#

package-cleanup –leavesでリストアップされるので深く考えずに削除してしまったのが敗因です。