2014年6月24日火曜日

CentOS6.5自分メモ【drbd83】

heartbeatの検証をするにあたりクラスタDBnの構築が必要となったためdrbdを構築します。
当然ですがCentOS6.5×2構成です。

クラスタ用ディスク(5GB)を2台のサーバに追加

fdisk /dev/sdb
pvcreate /dev/sdb1
vgcreate db /dev/sdb1
lvcreate -L 4.99G -n dbtest db

【プライマリ/セカンダリ共通】

DRBD83をインストール
wget http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
rpm -Uvh elrepo-release-6-6.el6.elrepo.noarch.rpm
yum install drbd83 kmod-drbd83

uname -n コマンドでホスト名確認

vi /etc/drbd.conf で以下を記載

===
global { usage-count yes; }
common { syncer { rate 10M; } }
resource r0 {
    protocol C;
    startup {
         degr-wfc-timeout 120;
    }
    net {
         cram-hmac-alg sha1;
         shared-secret "FooFunFactory";
    }
    on srv1.localdomain {              ←プライマリCentOSのuname -n コマンドの結果
         device    /dev/drbd0;        
         disk      /dev/db/db;     ←クラスタ用LVMディスク
         address   192.168.182.152:7789;←プライマリCentOSのIPアドレス
         meta-disk  internal;
    }
    on srv2.localdomain {        ←セカンダリCentOSのuname -n コマンドの結果
         device    /dev/drbd0;     
         disk      /dev/db/db;     ←クラスタ用LVMディスク
         address   192.168.182.153:7789;←セカンダリCentOSのIPアドレス
         meta-disk  internal;
    }
}
===

デバイス作成
drbdadm create-md r0

サービス起動
chkconfig drbd on
service drbd start

ステータス確認
/etc/init.d/drbd status


【プライマリで実施】
初期化
drbdadm -- --overwrite-data-of-peer primary all

ファイルシステム作成
mkfs -t ext3 /dev/drbd0

マウントポイント作成
mkdir -p /mnt/drbd0

マウント
mount /dev/drbd0 /mnt/drbd0

セカンダリ準備
umount /dev/drbd0
drbdadm secondary all

【セカンダリで実施】
マウントポイント作成
mkdir -p /mnt/drbd0

マウント
drbdadm primary all
mount /dev/drbd0 /mnt/drbd0

セカンダリ切り替え
umount /dev/drbd0
drbdadm secondary all

【プライマリで実施】
マウント
drbdadm primary all
mount /dev/drbd0 /mnt/drbd0

MSCSより簡単な気がしますね

CentOS6.5自分メモ【keepalived】

CentOSでできる負荷分散(keepalived)設定です。
負荷分散も機器導入せずにソフトウェア導入すればコンパクトに収まるんですけどね
こちらも自分メモ

keepalived のインストール
yum -y install ipvsadm keepalived
/etc/keepalived/keepalived.conf に負荷分散の設定
仮想IP:192.168.182.16
HTTP分散先1:192.168.182.152
HTTP分散先2:192.168.182.153

===

! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth1
    virtual_router_id 1
    priority 100
    advert_int 5
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.182.16
    }
}
virtual_server 192.168.182.16 80 {
    delay_loop 1
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    protocol TCP

    real_server 192.168.182.152 80 {
        weight 1
        HTTP_GET {
            url {
              path /
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.182.153 80 {
        weight 1
        HTTP_GET {
            url {
              path /
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

=
ipforwardの有効化
sysctl -w net.ipv4.ip_forward=1

keepalivedの起動
service keepalived start
chkconfig keepalived on

keepalivedの動作確認
ipvsadm -L -n

分散先のサーバでも以下のコマンドが必要
iptables -t nat -A PREROUTING -d 192.168.182.16 -j REDIRECT

分散先サーバにapache導入してテストページを作成してみました。
上記の場合、更新ボタンを押すたびに1→2→1と切り替わります。

CentOS6.5自分メモ【ソフトウェアRAID】

ソフトウェアRAID設定の覚書です。
おそらく本番で使うことはないだろうと思いますが・・・

fdisk でRAID用のパーティションを作成します。
fdisk /dev/sdb
n → p →  1 →  t →  fdv w の順にLinuxRAID自動検出用パーティションを作成
mdadmコマンドでRAID構築下記はRAID1の例
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd[bc]1

mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? y

mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

cat /proc/mdstat でRAIDフォーマット進捗状況を確認

mdadm --detail --scan >> /etc/mdadm.conf でRAID情報を追記

mkfs -t ext3 /dev/md0 でファイルシステム作成
mount -t ext3 /dev/md0 /data で/dataにマウント

以下はRAIDの解除
umount /data
mdadm --misc --stop /dev/md0
mdadm --misc --zero-superblock /dev/sd[bc]1

CentOS6.5自分メモ【bonding】

チーミング設定の覚書です。

vi /etc/modprobe.d/bonding.conf で以下行を追記
alias bond0 bonding

cd /etc/sysconfig/network-scripts/ に移動してチーミング設定

ifcfg-eth0 ifcfg-eth1

DEVICE=eth0 or eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0 ←チーミング必須
SLAVE=yes ←チーミング必須

ifcfg-bond0

DEVICE=bond0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.182.149
NETMASK=255.255.255.0
NETWORK=192.168.182.0
BROADCATS=192.168.182.255
BONDING_OPTS="miimon=100 mode=active-backup"

service network restart でbonding有効化

cat /proc/net/bonding/bond0 でチーミング状態確認

ifdown/ifupで確認しようかと思いましたがifdown/ifupでは確認できませんでした。

設定はVMwarePlayerで行っているので設定からネットワークアダプタの「接続済み」のチェックを外すことでチーミング設定確認できました。

CentOS6.5自分メモ【LVM】


インストール済みCentOS6.5にディスクを追加してLVM構築までのメモです。

fdisk -l でディスク認識の確認
fdisk /dev/sdc で追加ディスクのフォーマット
n → p → 1 → w の順にフォーマット操作

LVM構築(pv → vg → lvの順)
pvs で現状確認
pvcreate /dev/sdc1 で物理ボリューム作成
pvremove /dev/sdc1 で物理ボリューム削除

vgs で現状確認
vgcreate new_vg /dev/sdc1 でnew_vgボリュームグループ作成
vgremove new_vg  で new_vg でボリュームグループ削除
vgextend vg_gropup /dev/sdc1 でvg_groupにディスク追加

lvs で現状確認
lvcreate -L 10g -n lv_gp vg_group で10GBのlv_gpの論理ボリュームをvg_groupに作成
lvextend -L+1G /dev/vg_group/lv_gp でlv_gpの論理ボリュームに1GB拡張
lvereduce -L-1G /dev/vg_group/lv_gp でlv_gpの論理ボリュームに1GB縮小
lvremove/dev/vg_group/lv_gp でlv_gpの論理ボリュームを削除

あとはファイルシステムを作成してマウント

mkfs -t ext3 /dev/vg_group/lv_gp
mkdir /data
mount -t ext3 /dev/vg_group/lv_gp /data

/etc/fstab に追記して自動マウント

vgextend で追加した場合は以下のコマンドでディスク拡張
resize2fs /dev/vg_group/lv_gp

LVMでスナップショット機能も使えます。
以下のコマンドは10GBのスナップショット領域をsnapで作成します。
スナップショット対象は/dev/vg_group/lv_root
lvcreate -s -L 10G -n snap /dev/vg_group/lv_root

以下の要領でスナップショットをバックアップ
mount -r /dev/vg_group/snap /snap
tar cvf /backup/0 /snapshot
umount /dev/vg_group/snap
lvremove /dev/vg_group/snap

リストアはまた気が向いたら・・・

2014年6月6日金曜日

zabbixでSNMPトラップ監視

ZabbixでSNMPTトラップを受信する手順です。
最初からZabbixがSNMPサーバの機能を持っていると勘違いしたためかなり理解に時間がかかりました。
正確にはSNMPトラップを受信した際にシェルを実行することでzabbixに通知をする、手順となります。

まずsnmp関連のアプリケーションをインストールします。

 yum install net-snmp net-snmp-utils
 yum install vim
 chkconfig snmptrapd on

続いてSNMPトラップ連携するためのzabbix Senderをインストールします。

 yum install zabbix-sender

さらにzabbix-senderを実行するためのshをzabbixのソースファイルから抽出します。

 zabbix-2.2.3.tar.gz の zabbix-2.2.3/misc/snmptrap/snmptrap.sh

/etc/snmp/snmptrapd.conf にSNMPトラップの設定を行います。

 authCommunity  log,execute,net public ←コミュニティに関する設定コミュニティ名「public」からの受信を許可してログ、実行、ネットワーク転送を許可する
 traphandle default /home/zabbix-2.2.3/snmptrap.sh ←デフォルトで全てのホストからトラップ受信した場合に/home/zabbix-2.2.3/snmptrap.shを実行する

snmptrap.sh で以下の設定を行います。

 ZABBIX_SERVER="[zabbixサーバのIP]";
 ZANNIX_SENDER="usr/bin/zabbix_sendaer"; ←zabbix_senderの実行パス

さらにSNMPトラップを受信するためにZabbix管理コンソールでホスト作成を行います。
ホストのIPはzabbixサーバ自身でホスト名は「snmptraps」で作成します。
「snmptraps」はsnmptrap.sh内に記載のある「SNMPTRAP転送先」ホストです。

さらにテンプレート「snmptraps」を作成し、以下のアイテムを作成します。

 名前:SNMPtrapper
 タイプ:Zabbixトラッパー
 キー:snmptraps
 データ型:テキスト
 アプリケーション:SNMPTraps

SNMPトラップを受信した場合に「test」文字列以外はトリガー発行するようにします。

 名前:SNMPTrap
 条件式:{{SNMPtrapper}:snmptraps.str(test)}=0
 障害イベントを継続して生成:有効

上記テンプレートをホスト名「snmptraps」に割り当てます。

ここまでやってやっとSNMPトラップを受信できるのですが日本語のSNMPトラップを受信すると16進数になる!

16進数の文字列については一番最初にインストールしたvimのなかにxxdコマンドが含まれているため16進数を日本語に変換可能です。

ですが、xxdコマンドは16進数以外も自動で変換するため最初の/etc/snmp/snmptrapd.confで日本語のトラップを受信する対象のみxxdコマンド変換するようにする。

 traphandle [mib※] /home/zabbix-2.2.3/xxd-trap.sh

 ※3.6.1.4.1.24769などの文字列、SNMPTrap受信した際に/var/log/messageに記録されます。

/home/zabbix-2.2.3/xxd-trap.sh

 #!/bin/sh
 while read line
 do
  echo  "$line" >> /var/log/syslog/xxd.log
  xxd -r -p /var/log/syslog/xxd.log >> /var/log/syslog/xxd-format.log

で、上記のログをzabbixで監視する。


長い・・・

なんかもっと簡単にできそうな気がするんですが

とここでわざわざzabbix_trapper使わなくてもsnmptrapのログを監視すればいいことに気づく・・・

zabbixでリモートコマンド実行

zabbixで監視エラーを検知した際にリモートでコマンドを実行する手順です。

zabbixエージェントのzabbix.confでリモートコマンドを許可します。

 EnableRemoteCommands=1

アクションで実行内容のタイプを「リモートコマンド」ターゲットを監視対象ホスト名、タイプを「カスタムスクリプト」次で実行を「Zabbixエージェント」としコマンドにリモートコマンドを記載したbatファイルを指定します。
指定したbatファイルは監視対象サーバに格納します。

コマンドは投げっぱなしのため結果がわからないのが少し物足りないですね

zabbixでWindowsの日本語ログ監視

zabbixでログを監視する場合Windowsではzabbixエージェントのzabbix.confで以下の設定を行う必要があります。

 ServerActive=[zabbixサーバ名]

Linuxの場合は上記に加えて監視対象ログの権限を 755などにします。

 
 さらにzabbixではデフォルトでは日本語のログの監視は対応していないため監視アイテム作成時に文字コードを指定する必要があります。

 名前:Windowsログ監視
 タイプ:Zabbixエージェント(アクティブ)
 キー:log["C:\Log\update.log",,SHIFT_JIS]

zabbixのトリガー設定

トリガーの条件式はわかれば簡単ですがわからない場合は意味不明です。
{[ホストorテンプレート]:[アイテム].条件式}というルールなのですが条件式が変に日本語のためやや戸惑いました。
代表的なトリガー式について以下、メモします。

Ping監視:1回応答なし(0)の場合トリガー発動
{TemplateWindows:icmpping.last(#1)}=0

Ping監視:3回応答なし(0)の場合トリガー発動
{TemplateWindows:icmpping.last(#3)}=0

CPU監視:3回とも使用率90%の場合トリガー発動
{TemplateWindows:perf_counter[\Processor(_Total)\% Processor Time,5].last(#3)}>90

メモリ監視:3回とも使用率95%の場合トリガー発動
{TemplateWindows:vm.memory.size[pused].last(#3)}>95

ディスク監視:3回ともCドライブ使用率98%の場合トリガー発動
{TemplateWindows:vfs.fs.size[C:,pused].last(#3)}>98

ログ監視:アプリケーションログに「警告」が記録された場合トリガー発動
{TemplateWindows:eventlog[Application].logseverity(0)}=2

ログ監視:システムログに「エラー」が記録された場合トリガー発動
{TemplateWindows:eventlog[System].logseverity(0)}=4

サービス監視:Spoolerサービスが停止した場合トリガー発動
{TemplateWindows:service_state[spooler].last(#1)}#0

プロセス監視:cmd.exeプロセスが停止した場合トリガー発動
{TemplateWindows:proc.num[cmd.exe].last(#1)}#0

以下はLinux

CPU監視:3回とも使用率90%の場合トリガー発動
{TemplateLinux:system.cpu.util[].last(#3)}>90

ログ監視:/var/log/messagesにwarnログが記録された場合トリガー発動
(({TemplateLinux:log[/var/log/messages].regexp(err)})

zabbixでLinux監視(詳細)

Windows監視に続いてLinux監視

名前、タイプ、キー、データ型、データの形式の順番に掲載


Ping監視(Linux)
シンプルチェック
icmpping
数値(整数)
10進数


CPU監視(Linux)
Zabbixエージェント
system.cpu.util[]
数値 (浮動小数)
%


メモリ監視
Zabbixエージェント
vm.memory.size[pused]
数値 (浮動小数)
%

ディスク監視(Linux)
Zabbixエージェント
vfs.fs.size(/,pused]
数値 (浮動小数)
%

ログ監視(Linux)
Zabbixエージェント(アクティブ)
log[/var/log/messages]
ログ

プロセス監視
Zabbixエージェント
proc.num[(プロセス名)]
数値(整数)
10進数



zabbixでWindows監視(詳細)

以下、備忘録です。

 zabixでPing監視リソース監視する場合のアイテムは以下の通り。
 テンプレート登録すれば自動で収集するのですが、収集項目が多すぎるためある程度取捨選択が必要になるため最低限の項目のみメモ

名前、タイプ、キー、データ型、データの形式の順番に掲載

Ping監視
シンプルチェック
icmpping
数値(整数)
10進数

CPU監視(Windows)
Zabbixエージェント
perf_counter[\Processor(_Total)\% Processor Time,300]
数値 (浮動小数)
%

メモリ監視
Zabbixエージェント
vm.memory.size[pused]
数値 (浮動小数)
%

ディスク監視(Windows C:)
Zabbixエージェント
vfs.fs.sizeC:,pused]
数値 (浮動小数)
%

Windowsログ監視(アプリケーション)
Zabbixエージェント(アクティブ)
eventlog[Application]

ログ

Windowsログ監視(システム)
Zabbixエージェント(アクティブ)
eventlog[System]
ログ

サービス監視
Zabbixエージェント
service_state[(サービス名)]
数値(整数)
10進数

プロセス監視
Zabbixエージェント
proc.num[(プロセス名)]
数値(整数)
10進数

ポート監視
Zabbixエージェント
net.tcp.listen[ポート番号]
数値(整数)
10進数

ログ監視をする場合はzabbixエージェントのzabbix.confでServerActive=[zabbixサーバ名]を指定する必要があります。