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 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. 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を実行する必要がないため、セットアップも非常に楽になります。

MoinMoinのインストールとSELinuxの設定メモ

 article  Comments Off on MoinMoinのインストールとSELinuxの設定メモ
Feb 282015
 

とりあえずCentOS 7にインストールしたときのメモ。

インストール、ファイル配置

# tar xzvf moin-1.9.8.tar.gz
# cd moin-1.9.8
# python setup.py install --record=install.log --prefix=/usr/local
# cp -pr /usr/local/share/moin /var/www
# cp -pr /usr/local/lib/python2.7/site-packages/MoinMoin/web/static/htdocs /var/www/moin/static
# mkdir -p /var/www/index
# mkdir -p /var/log/moin
# chown -R apache: /var/www/moin
# chown -R apache: /var/log/moin

Apache設定

# cat /etc/httpd/conf.d/moin.conf
<IfModule wsgi_module>
  WSGIScriptAlias /moin "/var/www/moin/server/moin.wsgi"
</IfModule>

Alias /moin_static "/var/www/moin/static"
<Directory "/var/www/moin/static">
  Require all granted
</Directory>

moin.wsgi設定

# diff -u /usr/local/share/moin/server/moin.wsgi /var/www/moin/server/moin.wsgi
--- /usr/local/share/moin/server/moin.wsgi      2014-10-18 04:45:33.000000000 +0900
+++ /var/www/moin/server/moin.wsgi      2015-02-27 17:39:02.877357919 +0900
@@ -26,11 +26,14 @@
 # a1) Path of the directory where the MoinMoin code package is located.
 #     Needed if you installed with --prefix=PREFIX or you didn't use setup.py.
 #sys.path.insert(0, 'PREFIX/lib/python2.3/site-packages')
+sys.path.insert(0, '/usr/local/lib/python2.7/site-packages')

 # a2) Path of the directory where wikiconfig.py / farmconfig.py is located.
 #     See wiki/config/... for some sample config files.
 #sys.path.insert(0, '/path/to/wikiconfigdir')
 #sys.path.insert(0, '/path/to/farmconfigdir')
+sys.path.insert(0, '/var/www/moin')
+sys.path.insert(0, '/var/www/moin/config')

 # b) Configuration of moin's logging
 #    If you have set up MOINLOGGINGCONF environment variable, you don't need this!
@@ -38,6 +41,8 @@
 #    See wiki/config/logging/... for some sample config files.
 #from MoinMoin import log
 #log.load_config('/path/to/logging_configuration_file')
+from MoinMoin import log
+log.load_config('/var/www/moin/config/logging/logfile')

 from MoinMoin.web.serving import make_application

wikiconfig設定

# diff -u /usr/local/share/moin/config/wikiconfig.py /var/www/moin/config/wikiconfig.py
--- /usr/local/share/moin/config/wikiconfig.py  2014-10-18 04:45:33.000000000 +0900
+++ /var/www/moin/config/wikiconfig.py  2015-02-27 17:41:43.537342442 +0900
@@ -45,7 +45,7 @@
     # If that's not true, feel free to just set instance_dir to the real path
     # where data/ and underlay/ is located:
     #instance_dir = '/where/ever/your/instance/is'
-    instance_dir = wikiconfig_dir
+    instance_dir = '/var/www/moin'

     # Where your own wiki pages are (make regular backups of this directory):
     data_dir = os.path.join(instance_dir, 'data', '') # path with trailing /
@@ -60,6 +60,7 @@
     # use this setting and it will automatically work.
     # If you run your wiki script at /mywiki, you need to use this:
     #url_prefix_static = '/mywiki' + url_prefix_static
+    url_prefix_static = '/moin_static'


     # Wiki identity ----------------------------------------------------

logging設定

# diff -u /usr/local/share/moin/config/logging/logfile /var/www/moin/config/logging/logfile
--- /usr/local/share/moin/config/logging/logfile        2014-10-18 04:45:33.000000000 +0900
+++ /var/www/moin/config/logging/logfile        2015-02-27 15:07:46.017232307 +0900
@@ -1,7 +1,7 @@
 [DEFAULT]
 # Logfile to create.
 # Make sure the running moin process has create/write rights there.
-logfile=/tmp/moin.log
+logfile=/var/log/moin/moin.log

 # Default loglevel, to adjust verbosity: DEBUG, INFO, WARNING, ERROR, CRITICAL
 loglevel=INFO

SELinux設定

# WIKIROOT=/var/www/moin
# WIKISTATIC=/var/www/moin/static
# WIKISERVER=/var/www/moin/server
# WIKICONFIG=/var/www/moin/config
# WIKICONFIG_LOG=/var/www/moin/config/logging
# WIKILOG=/var/log/moin
# WIKIINDEX=/var/www/moin/index
# semanage fcontext -a -t httpd_sys_script_exec_t "${WIKISERVER}(/.*)?"
# semanage fcontext -a -t httpd_sys_rw_content_t "${WIKICONFIG}(/.*)?"
# semanage fcontext -a -t httpd_sys_content_t "${WIKICONFIG}/.*\.py"
# semanage fcontext -a -t httpd_sys_content_t "${WIKICONFIG_LOG}(/.*)?"
# semanage fcontext -a -t httpd_sys_rw_content_t "${WIKIROOT}/underlay(/.*)?"
# semanage fcontext -a -t httpd_sys_rw_content_t "${WIKIROOT}/data(/.*)?"
# semanage fcontext -a -t httpd_sys_content_t "${WIKIROOT}/data/plugin(/.*)*/.*\.py"
# semanage fcontext -a -t httpd_sys_rw_content_t "${WIKIINDEX}(/.*)?"
# semanage fcontext -a -t httpd_log_t "${WIKILOG}(/.*)?"

SELinux設定内容確認

# cat /etc/selinux/targeted/contexts/files/file_contexts.local
# This file is auto-generated by libsemanage
# Do not edit directly.

/var/www/moin/server(/.*)?    system_u:object_r:httpd_sys_script_exec_t:s0
/var/www/moin/config(/.*)?    system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/moin/config/.*\.py    system_u:object_r:httpd_sys_content_t:s0
/var/www/moin/config/logging(/.*)?    system_u:object_r:httpd_sys_content_t:s0
/var/www/moin/underlay(/.*)?    system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/moin/data(/.*)?    system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/moin/data/plugin(/.*)*/.*\.py    system_u:object_r:httpd_sys_content_t:s0
/var/www/moin/index(/.*)?    system_u:object_r:httpd_sys_rw_content_t:s0
/var/log/moin(/.*)?    system_u:object_r:httpd_log_t:s0

SELinux設定内容反映

# restorecon -rv /var/www/moin
# restorecon -rv /var/log/moin
 Posted by at 12:48 am

Debian LXC on Fedora 20

 article  Comments Off on Debian LXC on Fedora 20
Aug 162014
 

Debian wheezyをFedora 20上のContainerとして動かしてみました。

まずはrootファイルシステムとなるディレクトリを作成します。名前はdebian01としています。

[root@localhost ~]# mkdir -p /var/lib/libvirt/filesystems/debian01

debootstrapを入手して展開、実行します。
展開用にbinutilsに含まれるarコマンド、実行用にperlなどが必要になりますので、インストールします。

[root@localhost ~]# yum install binutils perl wget gnupg

debootstrap自体のインストール手順はD.3. Unix/Linux システムからの Debian GNU/Linux のインストール」の「D.3.2. debootstrap のインストール」を参照ください。
インストールしたdebootstrapを実行します。

[root@localhost ~]# /usr/sbin/debootstrap --arch amd64 stable /var/lib/libvirt/filesystems/debian01

Linux Containerとして起動します。

[root@localhost ~]# virt-install --connect lxc:// --name debian01 --ram 512 --filesystem /var/lib/libvirt/filesystems/debian01/,/

いったん止めます。

[root@localhost ~]# virsh -c lxc:// shutdown debian01

rootパスワードやコンソールログイン許可するttyデバイスを追加します。

[root@localhost ~]# chroot /var/lib/libvirt/filesystems/debian01 /bin/passwd root
[root@localhost ~]# echo "pts/0" >> /var/lib/libvirt/filesystems/debian01/etc/securetty

起動してコンソール接続します。

[root@localhost ~]# virsh -c lxc:// start --console debian01

これで先に設定したrootパスワードでコンソールログインできるはずです。

以下を参考にしました。
Launch secure LXC containers on Fedora 20 using SELinux and sVirt – major.io

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

ZabbixサーバーをHA化

 article  Comments Off on ZabbixサーバーをHA化
Jul 232014
 

CentOS 6.4で、repo.zabbix.comからzabbix-server-mysqlとzabbix-web-mysqlをインストールして稼働している状態から、PacemakerとDRBDを使ったHA化をおこなってみます。

まずはPacamakerの管理対象となるサービスを停止し、自動起動も無効化します。

for s in httpd zabbix-server mysqld; do
 service $s stop
 chkconfig $s off
done

クラスターパッケージ群を導入します。

yum install pacemaker cman pcs ccs resource-agents

DRBDはELrepoから導入します。

pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore
pcs property set migration-threshold=1
pcs property set cluster-recheck-interval=5m

DRBDのリロース設定をおこないます。

pcs -f cfg-drbd resource create drbd0 ocf:linbit:drbd drbd_resource=r0
pcs -f cfg-drbd resource add_operation drbd0 start interval=0 timeout=240s
pcs -f cfg-drbd resource add_operation drbd0 promote interval=0 timeout=90s
pcs -f cfg-drbd resource add_operation drbd0 demote interval=0 timeout=90s
pcs -f cfg-drbd resource add_operation drbd0 noftify interval=0 timeout=90s
pcs -f cfg-drbd resource add_operation drbd0 stop interval=0 timeout=100s
pcs -f cfg-drbd resource add_operation drbd0 monitor interval=20s timeout=20s role=Slave
pcs -f cfg-drbd resource add_operation drbd0 monitor interval=10s timeout=20s role=Master
pcs -f cfg-drbd master drbd0-clone drbd0 master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
pcs push cfg-drbd

DRBD領域をマウントするファイルシステムリソース設定をおこないます(fs-data)。

pcs -f cfg-fs1 resource create fs-data Filesystem device=/dev/drbd/by-res/r0 directory=/data fstype=ext4 options=noatime
pcs -f cfg-fs1 resource add_operation fs-data start interval=0 timeout=60s
pcs -f cfg-fs1 resource add_operation fs-data stop interval=0 timeout=60s
pcs -f cfg-fs1 resource add_operation fs-data monitor interval=20s timeout=40s
pcs -f cfg-fs1 constraint colocation add fs-data drbd0-clone INFINITY with-rsc-role=Master
pcs -f cfg-fs1 constraint order promote drbd0-clone then start fs-data
pcs push cfg-fs1

MySQLデータベースをDRBD領域配下に移動します。

mv /var/lib/mysql /data/
mkdir /var/lib/mysql
chown mysql: /var/lib/mysql
chmod 755 /var/lib/mysql

MYSQLデータベース領域をマウントするファイルシステムリソース設定をおこないます(fs-mysql)。

pcs -f cfg-fs2 resource create fs-mysql Filesystem device=/data/mysql directory=/var/lib/mysql fstype=ext4 options=bind
pcs -f cfg-fs2 resource add_operation fs-mysql start interval=0 timeout=60s
pcs -f cfg-fs2 resource add_operation fs-mysql stop interval=0 timeout=60s
pcs -f cfg-fs2 resource add_operation fs-mysql monitor interval=20s timeout=40s

fs-dataとfs-mysqlリソースが同一ノードで動作するようにgroup設定を施したうえで反映させます。

pcs -f cfg-fs2 resource group add group0 fs-data fs-mysql
pcs push cfg-fs2

—–

pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore
pcs property set migration-threshold=1
pcs property set cluster-recheck-interval=5m

Pacamakerの管理対象となるサービスを停止します。

for s in httpd zabbix-server mysqld; do
 service $s stop
 chkconfig $s off
done

DRBDのリロース設定をおこないます。

pcs -f cfg-drbd resource create drbd0 ocf:linbit:drbd drbd_resource=r0
pcs -f cfg-drbd resource add_operation drbd0 start interval=0 timeout=240s
pcs -f cfg-drbd resource add_operation drbd0 promote interval=0 timeout=90s
pcs -f cfg-drbd resource add_operation drbd0 demote interval=0 timeout=90s
pcs -f cfg-drbd resource add_operation drbd0 noftify interval=0 timeout=90s
pcs -f cfg-drbd resource add_operation drbd0 stop interval=0 timeout=100s
pcs -f cfg-drbd resource add_operation drbd0 monitor interval=20s timeout=20s role=Slave
pcs -f cfg-drbd resource add_operation drbd0 monitor interval=10s timeout=20s role=Master
pcs -f cfg-drbd master drbd0-clone drbd0 master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
pcs push cfg-drbd

DRBD領域をマウントするファイルシステムリソース設定をおこないます(fs-data)。

pcs -f cfg-fs1 resource create fs-data Filesystem device=/dev/drbd/by-res/r0 directory=/data fstype=ext4 options=noatime
pcs -f cfg-fs1 resource add_operation fs-data start interval=0 timeout=60s
pcs -f cfg-fs1 resource add_operation fs-data stop interval=0 timeout=60s
pcs -f cfg-fs1 resource add_operation fs-data monitor interval=20s timeout=40s
pcs -f cfg-fs1 constraint colocation add fs-data drbd0-clone INFINITY with-rsc-role=Master
pcs -f cfg-fs1 constraint order promote drbd0-clone then start fs-data
pcs push cfg-fs1

MySQLデータベースをDRBD領域配下に移動します。

mv /var/lib/mysql /data/
mkdir /var/lib/mysql
chown mysql: /var/lib/mysql
chmod 755 /var/lib/mysql

MYSQLデータベース領域をマウントするファイルシステムリソース設定をおこないます(fs-mysql)。

pcs -f cfg-fs2 resource create fs-mysql Filesystem device=/data/mysql directory=/var/lib/mysql fstype=ext4 options=bind
pcs -f cfg-fs2 resource add_operation fs-mysql start interval=0 timeout=60s
pcs -f cfg-fs2 resource add_operation fs-mysql stop interval=0 timeout=60s
pcs -f cfg-fs2 resource add_operation fs-mysql monitor interval=20s timeout=40s

fs-dataとfs-mysqlリソースが同一ノードで動作するようにgroup設定をおこないます。

pcs -f cfg-fs2 resource group add group0 fs-data fs-mysql
pcs push cfg-fs2

NetXMSお試し(1)

 article  Comments Off on NetXMSお試し(1)
Jan 062014
 

NetXMSという監視ツールを見つけまして試しに入れてみました。
スクリーンショットを見る限り洗練されていそうなのと、監視サーバーをWindowsで稼働させらるのも魅力的です。
OpenNMSもWindowsで稼働させることができますが、あちらはSNMPベースの監視が基本でエージェント監視方式ではありません。

タイトルに(1)と謳っていますが続編を書くかは未定です。

Debian用にはバイナリーパッケージが提供されていますので、そちらを利用します。
エージェントおよびサーバーは1台にまとめて稼働させます。

パッケージインストール

aptでインストールできるようsources.listを用意します。

# cat /etc/apt/sources.list.d/netxms.list
# NetXMS
deb http://www.netxms.org/apt squeeze main

エージェント用パッケージ、サーバー用パッケージを一式インストールします。

# apt-get update
# apt-get install netxms-base netxms-server netxms-agent

設定

エージェント用設定ファイルを用意します。

# cat /etc/nxagentd.conf
Servers = 127.0.0.1
ControlServers = 127.0.0.1
MasterServers = 127.0.0.1
LogFile = /var/log/netxms/nxagentd.log
FileStore = /var/lib/netxms/nxagentd

サーバー用設定ファイルを用意します。

# cat /etc/netxmsd.conf
DBDriver = sqlite.ddr
DBName   = /var/lib/netxms/sqlite.db
LogFile  = /var/log/netxms/netxmsd.log

ディレクトリおよびデータベース作成

ディレクトリを作成します。

# mkdir -p /var/log/netxms
# mkdir -p /var/lib/netxms/nxagentd

DBをSQLiteで作成します。

# nxdbmgr init /usr/share/netxms/sql/dbinit_sqlite.sql
# nxdbmgr check

起動

エージェントを起動します。

# systemctl start nxagentd.service

サーバーを起動します。

# systemctl start netxmsd.service

監視コンソールの起動

監視コンソールはWebアプリケーションで稼働するものとEclipseベースで稼働するものの2種類あります。
今回は手早くEclipseベースものをダウンロードページから入手して起動させます。Windows版の場合、圧縮ファイルを展開するとnxmc.exeというバイナリーがありますのでそちらを実行します。
起動するとサーバー名や認証方式を聞かれますので、
Server: netxmsdが起動しているサーバー(4701/tcpを使用します)
Login: admin
Authentication: Password
Password: netxms
を指定するとNetXMSサーバーに接続されます。

開始直後は監視項目はほとんど設定されていません。
Zabbixのように監視テンプレートが予め提供されているわけでもないようですので、ここから個々の監視項目を設定する必要がありそうです(テンプレート化は可能)。

virt-installでkvmゲストをインストール

 article  Comments Off on virt-installでkvmゲストをインストール
Jul 202013
 

かなり以前にvirt-installで仮想マシンをお手軽セットアップという記事を書きました。
前回はCentOS 5でxenゲストのインストールでしたが、今回はCentOS 6でkvmゲストです。

対話式でCentOSのインストーラーを起動する形式になりますのでコンソールが必要になりますが、グラフィカルな画面なしにシリアルコンソールを使ってインストールを実行します。

virt-install -n centos1 -r 512 --disk /var/lib/libvirt/images/centos1.img,size=8 --graphics none -x 'console=tty0 console=ttyS0,115200n8 serial' -l http://ftp.iij.ad.jp/pub/linux/centos/6/os/x86_64/

ちなみにシリアルコンソールを指定する-xオプション(–extra-args)を使用する場合、-lオプション(–location)が必須です。

インストーラーが起動されますので通常どおりインストールすれば完了。

/boot/grub/grub.confにもシリアルコンソールの設定が含まれるようになるので、次回起動時もシリアルコンソールを利用できます。

serial --unit=0 --speed=115200
terminal --timeout=5 serial console
title CentOS (2.6.32-358.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto console=ttyS0,115200n8 rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
        initrd /initramfs-2.6.32-358.el6.x86_64.img

接続時は

virsh console centos1

切断時は接続時のプロンプトに出るように ^] (Ctrl+^ Ctrl+])で抜けられます。

Zabbix server is not running: the information displayed may not be current

 article  Comments Off on Zabbix server is not running: the information displayed may not be current
Jul 162013
 

CentOS 6.4にrepo.zabbix.comからパッケージを導入して。
zabbix_serverプロセスは動いているし、10051ポートもLISTENしている。
/etc/zabbix/web/zabbix.conf.phpも間違いない。

$ZBX_SERVER                     = 'localhost';
$ZBX_SERVER_PORT                = '10051';

SELinux有効な環境下では(ちなみにtargetedポリシーを素のまま利用)

setsebool -P httpd_can_network_connect=true

を実施する必要があった。

Zabbix server is not running: the information displayed may not be current – ZABBIX Forums

Eclipse Gitでgithub.comにsshでPushできない

 article  Comments Off on Eclipse Gitでgithub.comにsshでPushできない
Jul 012013
 

Eclipseでgithub.comにPushしようと思ったら初回でエラーになりました。
メッセージダイアログを見ているとSSHのホスト鍵を受け入れるか否か(Yes/No)のところでエラーになっている模様です。

ssh://git@github.com:22: org.eclipse.jgit.transport.CredentialItem$YesNoType:  
The authenticity of host 'github.com' can't be established.

ここでYesを入力すればSSH接続が確立されてPushもできるようになるはずですが、入力ダイアログもYes/Noのボタンも出てこないので途方に暮れていたところ、Stack Overflowにもろ回答がありました。
egit – How to push a new project in Github from Eclipse? – Stack Overflow

Git Repository Exploringパースペクティブに切り替えて、Remotesを定義してやることできちんとPushできるようになりました。