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でリストアップされるので深く考えずに削除してしまったのが敗因です。

CentOS6.4 / RHEL6.4でcrmコマンド

 article  Comments Off on CentOS6.4 / RHEL6.4でcrmコマンド
May 042013
 

Red Hat 6.4からPacemakerのコマンドライン管理ツールがcrmからpcsに変更になりました。
pcsだとシンプルに設定できない項目等もありますので、どうしても慣れ親しんだcrmコマンドを使いたい場合は、openSUSE.orgのリポジトリで提供されているものを導入することができます。

yum install python-dateutil
rpm -Uvh http://download.opensuse.org/repositories/network:/ha-clustering/RedHat_RHEL-6/x86_64/pssh-2.3.1-15.1.x86_64.rpm
rpm -Uvh http://download.opensuse.org/repositories/network:/ha-clustering/RedHat_RHEL-6/x86_64/crmsh-1.2.5-55.3.x86_64.rpm

ちなみに私が設定したかった項目はこれです。
DRBD HowTo 1.0 – ClusterLabs

corosync-notifydでSNMPトラップ送信

 article  Comments Off on corosync-notifydでSNMPトラップ送信
Apr 182013
 

corosync-notifydを使って何が通知されるのか試してみました。

corosync-notifydを-sオプションで起動して、localhostにSNMPトラップを送信するようにします。

[root@pcmk-1 ~]# vi /etc/sysconfig/corosync-notifyd
[root@pcmk-1 ~]# cat /etc/sysconfig/corosync-notifyd
OPTIONS="-s"
[root@pcmk-1 ~]# chkconfig corosync-notifyd on
[root@pcmk-1 ~]# service corosync-notifyd start

snmptrapdをインストールして起動します。
お試しなので認証は無効にして、届いたトラップをそのままメールにするようにしました。
メール送信にはnet-snmp-perlパッケージのtraptoemailを使用します。

[root@pcmk-1 ~]# yum -y install net-snmp net-snmp-perl
[root@pcmk-1 ~]# cp -p /etc/snmp/snmptrapd.conf{,.orig}
[root@pcmk-1 ~]# vi /etc/snmp/snmptrapd.conf
[root@pcmk-1 ~]# cat /etc/snmp/snmptrapd.conf
# Example configuration file for snmptrapd
#
# No traps are handled by default, you must edit this file!
#
# authCommunity   log,execute,net public
# traphandle SNMPv2-MIB::coldStart    /usr/bin/bin/my_great_script cold

disableAuthorization yes
traphandle default /usr/bin/traptoemail root
[root@pcmk-1 ~]# chkconfig snmptrapd on
[root@pcmk-1 ~]# service snmptrapd start

corosync-notifydでノードの停止、起動を検知すると、以下のようなメールが飛びました。

1号機で2号機側の停止を検知した場合

To: root@pcmk-1.localdomain
From: root@pcmk-1.localdomain
Subject: trap received from localhost: SNMPv2-SMI::enterprises.35488.0.1

Host: localhost (UDP: [127.0.0.1]:58523->[127.0.0.1])
DISMAN-EVENT-MIB::sysUpTimeInstance  158:2:59:34.68
          SNMPv2-MIB::snmpTrapOID.0  SNMPv2-SMI::enterprises.35488.0.1
  SNMPv2-SMI::enterprises.35488.1.1  "pcmk-2"
  SNMPv2-SMI::enterprises.35488.1.2  365996224
  SNMPv2-SMI::enterprises.35488.1.4  "192.168.208.102"
  SNMPv2-SMI::enterprises.35488.1.3  "left"

1号機で2号機側の起動を検知した場合

To: root@pcmk-1.localdomain
From: root@pcmk-1.localdomain
Subject: trap received from localhost: SNMPv2-SMI::enterprises.35488.0.1

Host: localhost (UDP: [127.0.0.1]:58523->[127.0.0.1])
DISMAN-EVENT-MIB::sysUpTimeInstance  158:2:59:34.68
          SNMPv2-MIB::snmpTrapOID.0  SNMPv2-SMI::enterprises.35488.0.1
  SNMPv2-SMI::enterprises.35488.1.1  "pcmk-2"
  SNMPv2-SMI::enterprises.35488.1.2  365996224
  SNMPv2-SMI::enterprises.35488.1.4  "192.168.208.102"
  SNMPv2-SMI::enterprises.35488.1.3  "joined"

Tomcat起動スクリプト

 article  Comments Off on Tomcat起動スクリプト
Feb 182013
 

Apache Tomcat 7 (7.0.37) – Tomcat SetupのUnix daemonによりますと、Tomcarデーモンの起動はcommons-daemonプロジェクトのjsvcツールを使うのがよしとされています。
あわせて$CATALINA_HOME/bin/daemon.shが起動用rcスクリプトのテンプレートとして使えるとの情報があるのですが、コピーして加工するのも面倒なので、daemon.shを呼び出す形式での起動用rcスクリプトを用意してみました。CentOS 6で動作することを確認しています。

#!/bin/sh
#
# tomcat       Startup script for the Apache Tomcat Servlet/JSP container.
#
# chkconfig: - 80 10
# description: The Apache Tomcat Servlet/JSP container.
#

# Source function library.
. /etc/init.d/functions

RETVAL=0

JAVA_HOME=/opt/java
CATALINA_HOME=/opt/tomcat
DAEMON=$CATALINA_HOME/bin/daemon.sh
LOCKFILE=/var/lock/subsys/tomcat

start() {
        echo -n $"Starting tomcat: "
        $DAEMON --java-home $JAVA_HOME --catalina-home $CATALINA_HOME start
        RETVAL=$?
        if [ $RETVAL -eq 0 ]; then
                echo_success
                touch $LOCKFILE
        else
                echo failure
        fi
        echo
        return $RETVAL
}

stop() {
        echo -n $"Shutting down tomcat: "
        $DAEMON --java-home $JAVA_HOME --catalina-home $CATALINA_HOME stop
        RETVAL=$?
        if [ $RETVAL -eq 0 ]; then
                echo_success
                rm -f $LOCKFILE
        else
                echo failure
        fi
        echo
        return $RETVAL
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        start
        ;;
  status)
        status $CATALINA_HOME/bin/jsvc
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|status}"
        exit 3
esac

exit $?

daemon.shの引数で起動ユーザーを指定することもできますが、デフォルトtomcatなので未指定にしています。
変更したい場合は–tomcat-userをdaemon.sh呼び出し時の引数に追加してみてください。他にdaemon.sh呼び出し時に指定できる引数は–catalina-baseと–catalina-pidがあります。

daemon.shを追いかけてみるとわかるのですが、catalina.shを使うときと同様にsetenv.shが呼び出されるので、CATALINA_OPTSやLANG等、他に必要な変数をそちらに記述していくことができるので便利かと思っています。

CentOS 6.0のAMI用ディスクイメージ作成

 article  Comments Off on CentOS 6.0のAMI用ディスクイメージ作成
Dec 162012
 

■2013/02/17追記
CentOSコミュニティで公式AMIを提供しはじめましたのでそちらを使ったほうがよいと思います。

CentOS 6.0 x86_64のAMIベースになるディスクイメージを作成してみました。

CentOS 5.0用を作ったときと違ってcloud-initも最初から入れちゃいます。

  1. 作業用のRed Hat 6系列Linuxを環境を準備(EC2上に用意)
  2. 2GiBのEBSボリュームを用意してCentOS 6.0を最小構成インストール
  3. PV-GRUBでブートできるようにinitrdやgrub.confを構成
  4. 仕上がったEBSボリュームのスナップショットを取得しAMIとして登録

5.0のときと違って、最初から最後までEC2上で作業していきます。

今回参考にした情報は以下です。
From a Loopback – Amazon Elastic Compute Cloud
Enabling Your Own Linux Kernels – Amazon Elastic Compute Cloud

作業用マシン準備
EC2標準のRHEL6(x86_64)を起動します。
EBSボリュームマウント先として/mnt/ec2-fsを作成します。

[root@localhost ~]# mkdir /mnt/ec2-fs

selinux関連パッケージにエラーになるため、作業マシンでは無効化しておきます。

[root@localhost ~]# setenforce 0

EBS準備
2GiBのEBSボリュームを用意して/dev/xvdjにマウントします。xvdjにしているのはRHEL6でデバイスファイルが用意されていたから。

[root@localhost ~]# mkfs.ext4 /dev/xvdj
[root@localhost ~]# mount /dev/xvdj /mnt/ec2-fs

yumインストール用の設定ファイルを作成
6.0素の最小構成しますので、baseリポジトリのみ有効(updatesは無効)にしています。
6.0のリポジトリは既にvaultに移っていますので、baseurlではそちらを指定します。

[root@localhost ~]# vi centos-6-0-x86_64-yum.conf
[root@localhost ~]# cat centos-6-0-x86_64-yum.conf
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
exclude=*-debuginfo
gpgcheck=0
obsoletes=1
reposdir=/dev/null

[base]
name=CentOS-6.0 - Base
baseurl=http://vault.centos.org/6.0/os/x86_64/

[updates]
name=CentOS 6.0 - Updates
baseurl=http://vault.centos.org/6.0/updates/x86_64/
enabled=0

必要最低限のパッケージをインストール
パッケージグループCoreをインストールします。
パッケージkerel-xenをインストールします。

[root@localhost ~]# yum -c centos-6-0-x86_64-yum.conf --installroot=/mnt/ec2-fs -y groupinstall Core
:
Install     181 Package(s)

Total download size: 88 M
Installed size: 324 M
:

展開サイズは324Mですので、2GiBのEBSでも十分足ります。

/etc/fstab作成
kernelパッケージのインストール時にinitrdが生成されますが、その際fstabの記述に従ってrootパーティションのマウント指定が決定されますので記述を用意します。
ちなみに作業マシンのRHEL6とほぼ同じになります。

[root@localhost ~]# vi /mnt/ec2-fs/etc/fstab
[root@localhost ~]# cat /mnt/ec2-fs/etc/fstab
LABEL=_/   /         ext4    defaults        1 1
none       /proc     proc    defaults        0 0
none       /sys      sysfs   defaults        0 0
none       /dev/pts  devpts  gid=5,mode=620  0 0
none       /dev/shm  tmpfs   defaults        0 0

fstab指定に合わせてLABELを作成します。

[root@localhost ~]# e2label /dev/xvdj _/
[root@localhost ~]# e2label /dev/xvdj
_/

/etc/modprobe.conf作成
こちらもfstab同様にkernelインストール前に実施しておき、initrdイメージにxen関連のモジュールが含まれるようにします。

[root@localhost ~]# cat >> /mnt/ec2-fs/etc/modprobe.conf << EOF
alias eth0 xennet
alias scsi_hostadapter xenblk
EOF
[root@localhost ~]# tail -2 /mnt/ec2-fs/etc/modprobe.conf
alias eth0 xennet
alias scsi_hostadapter xenblk

パッケージkernelをインストールします。

[root@localhost ~]# yum -c centos-6-0-x86_64-yum.conf --installroot=/mnt/ec2-fs -y install kernel

クリーンアップ

[root@localhost ~]# yum -c centos-6-0-x86_64-yum.conf --installroot=/mnt/ec2-fs clean all

デバイスファイルの作成

[root@localhost ~]# /mnt/ec2-fs/sbin/MAKEDEV -d /mnt/ec2-fs/dev -c /mnt/ec2-fs/etc/makedev.d -x console
[root@localhost ~]# /mnt/ec2-fs/sbin/MAKEDEV -d /mnt/ec2-fs/dev -c /mnt/ec2-fs/etc/makedev.d -x null
[root@localhost ~]# /mnt/ec2-fs/sbin/MAKEDEV -d /mnt/ec2-fs/dev -c /mnt/ec2-fs/etc/makedev.d -x zero

/boot/grub/grub.conf作成
EBS内のkernelで起動できるように用意しておきます。

[root@localhost ~]# vi /mnt/ec2-fs/boot/grub.conf
[root@localhost ~]# cat /mnt/ec2-fs/boot/grub.conf
default=0
timeout=0
hiddenmenu
title CentOS (2.6.32-71.el6)
        root (hd0)
        kernel /boot/vmlinuz-2.6.32-71.el6.x86_64 root=LABEL=_/ ro
        initrd /boot/initramfs-2.6.32-71.el6.x86_64.img
[root@localhost ~]# cd /mnt/ec2-fs/boot
[root@localhost boot]# ln -s grub.conf menu.lst
[root@localhost boot]# cd

/etc/sysconfig/network作成

[root@localhost ~]# vi /mnt/ec2-fs/etc/sysconfig/network
[root@localhost ~]# cat /mnt/ec2-fs/etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no

/etc/sysconfig/network-scripts/ifcfg-eth0作成

[root@localhost ~]# vi /mnt/ec2-fs/etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost ~]# cat /mnt/ec2-fs/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=on

/etc/resolv.conf作成

[root@localhost ~]# touch /mnt/ec2-fs/etc/resolv.conf

SELinux無効化
/etc/selinux/configのSELINUXをdisabledに変更します。

[root@localhost ~]# vi /mnt/ec2-fs/etc/selinux/config
[root@localhost ~]# grep ^SELINUX= /mnt/ec2-fs/etc/selinux/config
SELINUX=disabled

cloud-initパッケージ導入用にEPELリポジトリ設定をインストールし、AMI構築用のyum設定ファイルに結合します。

[root@localhost ~]# rpm --root=/mnt/ec2-fs -Uvh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-7.noarch.rpm
[root@localhost ~]# cat /mnt/ec2-fs/etc/yum.repo.d/epel.repo >> centos-6-0-x86_64-yum.conf

cloud-initパッケージをインストールします。

[root@localhost ~]# yum -c centos-6-0-x86_64-yum.conf --installroot=/mnt/ec2-fs -y install cloud-init

EPELリポジトリは通常利用しないよう無効化しておきます。

[root@localhost ~]# vi /mnt/ec2-fs/etc/yum.repos.d/epel.repo
[root@localhost ~]# grep ^enabled /mnt/ec2-fs/etc/yum.repos.d/epel.repo 
enabled=0
enabled=0
enabled=0

ec2-user作成
cloud-initのデフォルト構成で初回ログインユーザーになるec2-userを作成します。

[root@localhost ~]# chroot /mnt/ec2-fs /usr/sbin/useradd ec2-user
[root@localhost ~]#

EBSボリュームのアンマウント

[root@localhost ~]# umount /mnt/ec2-fs

アンマウントしたEBSボリュームのスナップショットを取得し、AMI登録すれば完了なはず。

CentOS 6でIPv6を無効化する方法

 article  Comments Off on CentOS 6でIPv6を無効化する方法
Sep 232012
 

CentOS 5ではIPv6モジュールを無効化する方法が推奨されていましたが、CentOS 6では異なります。
FAQ/CentOS5 – CentOS Wiki9. How do I disable IPv6?
FAQ/CentOS6 – CentOS Wiki4. How do I disable IPv6?

/etc/sysctl.confに以下を書きましょうとのことです。

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

IPv6モジュールを単純にロードしないようにしてしまうと、SELinuxでエラーが出たり依存モジュールが使えなくなってしまうためです(主だったものはbonding)。手元の環境ですとipv6.koに依存しているモジュールはこれだけありました。

[root@localhost ~]# grep "\/ipv6\.ko" /lib/modules/`uname -r`/modules.dep|grep -v "\/ipv6\.ko: "|cut -d':' -f1
kernel/drivers/scsi/bnx2fc/bnx2fc.ko
kernel/drivers/scsi/bnx2i/bnx2i.ko
kernel/drivers/net/bonding/bonding.ko
kernel/drivers/net/cnic.ko
kernel/drivers/infiniband/core/ib_addr.ko
kernel/drivers/infiniband/core/rdma_cm.ko
kernel/drivers/infiniband/core/rdma_ucm.ko
kernel/drivers/infiniband/ulp/ipoib/ib_ipoib.ko
kernel/drivers/infiniband/ulp/iser/ib_iser.ko
kernel/net/netfilter/xt_TPROXY.ko
kernel/net/netfilter/xt_socket.ko
kernel/net/netfilter/ipvs/ip_vs.ko
kernel/net/netfilter/ipvs/ip_vs_rr.ko
kernel/net/netfilter/ipvs/ip_vs_wrr.ko
kernel/net/netfilter/ipvs/ip_vs_lc.ko
kernel/net/netfilter/ipvs/ip_vs_wlc.ko
kernel/net/netfilter/ipvs/ip_vs_lblc.ko
kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
kernel/net/netfilter/ipvs/ip_vs_dh.ko
kernel/net/netfilter/ipvs/ip_vs_sh.ko
kernel/net/netfilter/ipvs/ip_vs_sed.ko
kernel/net/netfilter/ipvs/ip_vs_nq.ko
kernel/net/netfilter/ipvs/ip_vs_ftp.ko
kernel/net/ipv6/netfilter/ip6table_mangle.ko
kernel/net/ipv6/netfilter/ip6_queue.ko
kernel/net/ipv6/netfilter/nf_conntrack_ipv6.ko
kernel/net/ipv6/netfilter/nf_defrag_ipv6.ko
kernel/net/ipv6/netfilter/ip6t_REJECT.ko
kernel/net/ipv6/ipv6.ko
kernel/net/ipv6/ah6.ko
kernel/net/ipv6/esp6.ko
kernel/net/ipv6/ipcomp6.ko
kernel/net/ipv6/xfrm6_tunnel.ko
kernel/net/ipv6/tunnel6.ko
kernel/net/ipv6/xfrm6_mode_tunnel.ko
kernel/net/ipv6/xfrm6_mode_beet.ko
kernel/net/ipv6/mip6.ko
kernel/net/ipv6/sit.ko
kernel/net/ipv6/ip6_tunnel.ko
kernel/net/sunrpc/xprtrdma/xprtrdma.ko
kernel/net/sunrpc/xprtrdma/svcrdma.ko
kernel/net/dccp/dccp_ipv6.ko
kernel/net/sctp/sctp.ko
kernel/net/rds/rds_rdma.ko
kernel/net/9p/9pnet_rdma.ko
[root@localhost ~]#

他に/etc/modprobe.confd/ipv6.confなどを用意して以下を記述しておく方法もあるのですが(CentOS 5.4以降でも有効)、後述のKBにあるように場合によって動かない場合もあるのかもしれません。

options ipv6 disable=1

The “ipv6 disable=1” option does not seem to work on Red Hat Enterprise Linux 6 system
残念ながらSubscriptionないので見れないんですが。

 Posted by at 1:36 am  Tagged with:

Linuxでファイル行末にCRLFが含まれるか調べる方法

 article  Comments Off on Linuxでファイル行末にCRLFが含まれるか調べる方法
Aug 182012
 

テキストファイルにCRLFが含まれるか1行コマンドで調べようと思ったら、単純なfileコマンドではShell Script等のときはBourne-Again shell scriptと判定されてしまいCRLFまでは確認できません。

$ file test.sh
test.sh: Bourne-Again shell script text executable

でも実行するとShebangにCRが含まれているのでエラーになるのです。

$ ./test.sh
-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory

単純なテキストファイルであれば、以下のようにCRLF含まれるテキストファイルだと報告してくれます。

$ file test.txt
test.txt: ASCII text, with CRLF line terminators

バージョン5以降のfileコマンドであればShebang判定をしないようにmagicファイルに/dev/nullを指定することができるのですが、CentOS 5系列はfileコマンドバージョン4なので使えません。

$ file -m /dev/null test.sh
test.sh: ASCII text, with CRLF line terminators

CentOS 5でも6でも使えそうな、もう少し汎用的な方法がないか調べると、海外ではいろいろと情報が見つかります。

ほとんどgrepですけど。

  1. ‘^M’をgrepする方法。^MはCtrl-V Ctrl-Mで入力します。
    grep '^M'
  2. \r\nをgrepする方法。
    grep `printf '\r\n'`

    Bash shellの場合はprintfを使わず、$’\r’で置き換えることもできるようです。

    grep $'\r'

    ※ほんとは$’\r’$’\n’で検索したいところですが、それだとLF onlyの行末にもマッチしてしまうようなのでとりあえずCRだけ検索する指定にしています。理由はよくわかっていません。

  3. grepでPerl Regexpを使う方法もあります。
    grep -P '\r\n'

    でもCentOS 6では使えなくなったようです。

    -P, --perl-regexp
                  Interpret PATTERN as a Perl regular expression.  This is highly experimental and grep -P may warn of unimplemented features.
    

個人的にはfile -m /dev/nullか、より汎用性を求めるならgrep `printf ‘\r\n’`かと思いました。

 Posted by at 1:52 am  Tagged with:

suとrunuser

 article  Comments Off on suとrunuser
Aug 072012
 

suコマンドはcoreutilsに含まれているものです。CentOS 6.3ではcoreutilsパッケージにrunuserも含まれていますが、coreutilsのオリジナルソースにはrunuser.cのコードは含まれていません。
Red Hatのcoreutilsソースパッケージを眺めてみると、coreutils-5.2.1-runuser.patchというsu.cへのパッチが含まれていて、make時の指定でどちらもビルドできるようになっていました。

なぜrunuserが用意されたのかは下記の作者blogに書かれています。

SELinuxで問題があったためのようですが、suコマンドよりもPAMの処理が取り除かれオーバーヘッドが小さいとのことなので、rootから別ユーザーで処理を起動する場合はsuよりもrunuserを使用したほうが良さそうです。

/etc/pam.d/suと/etc/pam.d/runuserをそれぞれ以下に貼っておきますが、チェックの少なさは一目瞭然です。

# cat /etc/pam.d/su
#%PAM-1.0
auth            sufficient      pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth           required        pam_wheel.so use_uid
auth            include         system-auth
account         sufficient      pam_succeed_if.so uid = 0 use_uid quiet
account         include         system-auth
password        include         system-auth
session         include         system-auth
session         optional        pam_xauth.so
# cat /etc/pam.d/runuser
#%PAM-1.0
auth            sufficient      pam_rootok.so
session         optional        pam_keyinit.so revoke
session         required        pam_limits.so
session         required        pam_unix.so

ちなみにsuはsetuidされていますがrunuserはsetuidされていません。万一setuidされていてもエラーとする処理が含まれています。

 Posted by at 12:29 am  Tagged with:

“Loadbalancer-less clusters on Linux”でした

 article  Comments Off on “Loadbalancer-less clusters on Linux”でした
Jul 182012
 

先日Dual-Primay DRBD + GFS2で「ClusterIPをクローンして2ノードで動かす意味がわからない」と書いていたのですが、なんとなく意味がわかりました。
同じIPを2ノードに振るWindows ServerでいうところのNLBを、netfilterのCLSUTERIPターゲット(ipt_CLUSTERIP)を使って実現していたようです。

実際、WebIPリソース(ClusterIPのクローンセット)がStarted状態のノードでは、INPUTチェインにCLUSTERIPターゲットが追加されています。

[root@pcmk-1 ~]# iptables -L INPUT -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
CLUSTERIP  all  --  0.0.0.0/0            192.168.208.10      CLUSTERIP hashmode=sourceip clustermac=D1:98:71:C8:52:9C total_nodes=2 local_node=1 hash_init=0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  192.168.208.11       0.0.0.0/0
ACCEPT     all  --  192.168.208.12       0.0.0.0/0
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
[root@pcmk-1 ~]#

このNLBみたいなLoadbalancerレス構成ですが、Iptablesチュートリアル 1.2.2CLUSTERIPターゲットに関する説明によるとマルチキャストMACアドレスを使うので、接続するN/W機器によってはWindows NLBのように「静的なARPエントリを追加する」といった手当てが必要になると思われます。

勉強になりました。

同じく、ClusterIPを「clone_node_max=”2″」にする意味もわかっていませんが、同じ質問をしている方がLinux-HAメーリングリストにいらっしゃいました。

質疑部分だけ引用させていただくと以下です。

> I also had a question as well.
> In your document you suggest
> clone_max=2
> and clone_node_max=2
>
> I was under the impression that clone_node_max was the number of
> clones that could appear on one node. Does it make sense for two
> clones to appear on the same node?
>
 
It makes sense in the following scenario: Cluster from two nodes.
One fails and the other one has to take over. Then two clones have to
run on one node.

こちらでのやりとりはこれで終わっているのですが、やはり2つのクローンを1ノードで動かす必要がないのであれば、「clone_node_max=”1″」で問題ないように思えました。1つ動いていれば通信できるはずだし。

 Posted by at 1:09 am  Tagged with:

Dual-Primay DRBD + GFS2

 article  Comments Off on Dual-Primay DRBD + GFS2
Jul 162012
 

CentOS 6.3でDual-Primary DRBDな環境を作ってみたときのメモ。
PacemakerとCorosyncは、そのままyumでインストールするとぞれぞれ1.1.7と1.4.1だったので以下の手順でチャレンジ。
Clusters from Scratch
drbdは8.4.1のソースからrpmをビルドして、drbd-km/drbd-pacemaker/drbd-udev/drbd-utilsをインストールしている。

で、ほぼ問題なく進んだものの、8.5章の部分でWebIPクローンセットが1つのノードで実行されてしまい、Active/Active状態にならない(drbd自体はDual-Primaryで動作している)。
crm_monでリソースをみると以下の状態で、要はWebIPが2号機のほうでStartしないので、WebSiteClone(ApacheのRAクローンセット)も2号機側で動作しない状態となっているようだ。

============
Last updated: Mon Jul 15 22:05:23 2012
Last change: Mon Jul 15 20:35:32 2012 via cibadmin on pcmk-1
Stack: cman
Current DC: pcmk-1 - partition with quorum
Version: 1.1.7-6.el6-148fccfd5985c5590cc601123c6c16e966b85d14
2 Nodes configured, 2 expected votes
8 Resources configured.
============

Online: [ pcmk-1 pcmk-2 ]

 Master/Slave Set: WebDataClone [WebData]
     Masters: [ pcmk-1 pcmk-2 ]
 Clone Set: WebIP [ClusterIP] (unique)
     ClusterIP:0        (ocf::heartbeat:IPaddr2):       Started pcmk-1
     ClusterIP:1        (ocf::heartbeat:IPaddr2):       Started pcmk-1
 Clone Set: WebFSClone [WebFS]
     Started: [ pcmk-1 pcmk-2 ]
 Clone Set: WebSiteClone [WebSite]
     Started: [ pcmk-1 ]
     Stopped: [ WebSite:1 ]

なんでかなーと思っていろいろ悩んだが、結局WebIPクローンセットのclone-node-maxを1に変更してみたらうまくいった。

clone WebIP ClusterIP meta globally-unique="true" clone-max="2" clone-node-max="2"
clone WebIP ClusterIP meta globally-unique="true" clone-max="2" clone-node-max="1"
============
Last updated: Mon Jul 15 23:46:47 2012
Last change: Mon Jul 15 20:35:32 2012 via cibadmin on pcmk-1
Stack: cman
Current DC: pcmk-1 - partition with quorum
Version: 1.1.7-6.el6-148fccfd5985c5590cc601123c6c16e966b85d14
2 Nodes configured, 2 expected votes
8 Resources configured.
============

Online: [ pcmk-1 pcmk-2 ]

 Master/Slave Set: WebDataClone [WebData]
     Masters: [ pcmk-1 pcmk-2 ]
 Clone Set: WebIP [ClusterIP] (unique)
     ClusterIP:0        (ocf::heartbeat:IPaddr2):       Started pcmk-1
     ClusterIP:1        (ocf::heartbeat:IPaddr2):       Started pcmk-2
 Clone Set: WebFSClone [WebFS]
     Started: [ pcmk-1 pcmk-2 ]
 Clone Set: WebSiteClone [WebSite]
     Started: [ pcmk-1 pcmk-2 ]

WebIPのclone-node-maxを1にしてみたのはWebDataCloneを模倣してみたからなのだが自分でも理解不能。。。

そもそもCluster用IPアドレスをクローンして各ノードに付与している意味が理解できない。
普通のHAクラスタならIPはクローンセットせずに1ノードだけに付与するのだけれど。実際の使い方として何が正しいのか、まだまだ勉強が必要です。