2015年3月22日日曜日

VMware NSX @SoftLayer - その3 【冗長化DNSサーバー構築】


前回構築したESXi上で動かす、冗長化されたDNSキャッシュサーバーを構築します。Syslogサーバーもついでに構築します。

vSphere ClientでOVFエクスポートやOVFデプロイをしたり、インストーラISOをアップロードしたりするので、手元の操作端末で直接操作するよりも、SoftLayer上にWindows踏み台を先に用意して操作した方が効率的だと思います。構築方法は述べませんが、その前提で話を進めます。

最初に、RHEL6.6 x86_64をインストールし、テンプレートとして利用できるように構築します。その後で、テンプレートから冗長化DNSキャッシュサーバーを構築することにします。

以前、DNS キャッシュ・サーバの冗長化 (http://dba-ha.blogspot.jp/2012/01/dns.html) で作り方を述べましたが、大きな違いは、keepalivedをビルドする必要がなくなったことと、2つのセグメントに接続するのではなく、1つのセグメントにのみ接続することです。その他にも工夫を追加しています。


仮想マシンを作成し、RHEL6.6をインストールします。


【RHEL6インストール】

①Red Hat社のサイトからRed Hat Enterprise Linux 6.6 x86_64インストーラISO
  (rhel-server-6.6-x86_64-dvd.iso) をダウンロードする。

②vSphere Clientにて、mgesxi01にログインする。

③データストアmgesxi01-das01にインストーラISOをアップロードする。

④新規仮想マシンを作成する。
    構成: カスタム
    仮想マシン名: rhel6-template
    ストレージ: mgesxi01-das01
    仮想マシンのバージョン: 8
    ゲストOS: Linux
    バージョン: Red Hat Enterprise Linux 6 (64ビット)
    仮想ソケット数: 1
    仮想ソケットあたりのコアの数: 1
    メモリサイズ: 1GB
    NIC数: 1
    NIC 1: VM Network / VMXNET 3
    SCSIコントローラ: VMware準仮想化
    新規仮想ディスクを作成
    容量: 16GB
    ディスクプロビジョニング: Thin Provision
    場所: 仮想マシンで保存
    仮想デバイスノード: SCSI(0:0)

⑤仮想マシンの設定を編集する。
    CD/DVDドライブ1:
        データストアISOファイル: [mgesxi01-das01] rhel-server-6.6-x86_64-dvd.iso
        パワーオン時に接続
    フロッピードライブ: 削除

⑥必要があれば、MACアドレスを手動設定しておく。

⑦必要があれば、sshにて、mgesxi01にログインし、設定を編集する。
vi /vmfs/volumes/$(hostname -s)-das01/rhel6-template/rhel6-template.vmx

例) Windowsであれば以下を追加する。
isolation.tools.copy.disable = "false"
isolation.tools.paste.disable = "false"

⑧コンソールを開き、仮想マシンの電源をオンにし、RHELをインストールする。
    Disc Found: Skip
    Language: English
    Keyboard: Japanese
    Basic Storage Devices
    Yes, discard any data
    Hostname: localhost.localdomain
    Configure Network
        Wired - System eth0 : Edit
            Connect automatically
            IPv4 Settings
                Method: Manual
                Addresses: Add
                    Address: 10.91.17.246
                    Netmask: 26
                    Gateway: 10.91.17.193
                DNS servers: 10.91.17.251,10.91.17.252
                Search domains: pod1.example.com
    Selected city: Asia/Tokyo : System clock uses UTC
    Root Password: ********
    Create Custom Layout
    Create Partition: Standard Partition
        Mount Point: /boot
        File System Type: ext4
        Size: 500MB
        Force to be a primary partition
    Create Partition: Standard Partition
        File System Type: swap
        Size: 1024MB
    Create Partition: Standard Partition
        Mount Point: /
        File System Type: ext4
        Fill to maximum allowable size
    Format
    Write changes to disk
    Install boot loader on /dev/sda.
    Software: Minimal
    Reboot



テンプレートとして使える状態になるように、初期設定を行います。今回の検証に関係なさそうな部分はだいぶ省略しています。監視設定等、適宜追加していただければと思います。


【RHEL6テンプレート作成】

①sshにて、rootユーザーで、rhel6-templateにログインする

②SELinuxを無効化する。
sed -i -e 's/rhgb quiet/selinux=0/' /boot/grub/grub.conf
sed -i -e 's/^SELINUX=.*$/SELINUX=disabled/' /etc/sysconfig/selinux

③yumリポジトリを登録する。
cat << 'EOF' | tee /etc/yum.repos.d/media.repo
[media]
name=Red Hat Enterprise 6 - Media
baseurl=file:///mnt/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg//RPM-GPG-KEY-redhat-release
EOF

cat << 'EOF' | tee /etc/yum.repos.d/base.repo
[base]
name=Red Hat Enterprise 6 - Base
baseurl=http://repo01.pod1.example.com/repo/rhel6/base/
        http://repo02.pod1.example.com/repo/rhel6/base/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg//RPM-GPG-KEY-redhat-release
[updates]
name=Red Hat Enterprise 6 - Updates
baseurl=http://repo01.pod1.example.com/repo/rhel6/updates/
        http://repo02.pod1.example.com/repo/rhel6/updates/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg//RPM-GPG-KEY-redhat-release
EOF

④仮想マシンにインストーラISOを「接続中」にし、マウントする。
mount /dev/sr0 /mnt

⑤パッケージを追加する。
yum -y --disablerepo=\* --enablerepo=media groupinstall base

yum -y --disablerepo=\* --enablerepo=media install \
 /mnt/LoadBalancer/keepalived-*.rpm \
 /mnt/LoadBalancer/ipvsadm-*.rpm

yum -y --disablerepo=\* --enablerepo=media install \
 dnsmasq \
 nfs-utils

⑥インストーラISOをアンマウントする。
umount /mnt

⑦IPv6を無効化する。
cat << 'EOF' | tee /etc/modprobe.d/disable-ipv6.conf
options ipv6 disable=1
EOF

cat << 'EOF' | tee /etc/sysconfig/network
NETWORKING=yes
NOZEROCONF=yes
NETWORKING_IPV6=no
IPV6INIT=no
IPV6_ROUTER=no
IPV6_AUTOCONF=no
IPV6FORWARDING=no
IPV6TO4INIT=no
IPV6_CONTROL_RADVD=no
IPV4_FAILURE_FATAL=yes
HOSTNAME=localhost.localdomain
EOF

cat << 'EOF' | tee /etc/hosts
127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
EOF

sed -i -e 's/^#AddressFamily any/AddressFamily inet/' /etc/ssh/sshd_config
sed -i -e 's/^udp6/#udp6/' -e 's/^tcp6/#tcp6/' /etc/netconfig

⑧ネットワーク設定を調整する。
cat << 'EOF' | tee /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
MTU=9000
ONBOOT=yes
NM_CONTROLLED=no
DEFROUTE=yes
#BOOTPROTO=dhcp
#PEERROUTE=yes
#PEERDNS=yes
#DHCPRELEASE=yes
#DHCP_CLIENT_ID=
#DHCP_HOSTNAME=
#DOMAIN=
BOOTPROTO=none
PEERDNS=no
IPADDR=10.91.17.246
PREFIX=26
GATEWAY=10.91.17.193
EOF

cat << EOF | tee /etc/resolv.conf
nameserver 10.91.17.251
nameserver 10.91.17.252
search pod1.example.com
options single-request
EOF

sed -i -e 's%^RULES_FILE=*$%RULES_FILE=/dev/null%' /lib/udev/write_net_rules
cat << 'EOF' | tee /etc/udev/rules.d/70-persistent-net.rules
EOF

sed -i -e 's/^net\.bridge/#net.bridge/' /etc/sysctl.conf

cat << 'EOF' | tee /etc/sysconfig/nfs
MOUNTD_NFS_V2="no"
RQUOTAD_PORT=875
#RPCRQUOTADOPTS=""
#LOCKDARG=
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
RPCNFSDARGS="-N 2"
RPCNFSDCOUNT=16
#NFSD_MODULE="noload"
#NFSD_V4_GRACE=90
#RPCMOUNTDOPTS=""
MOUNTD_PORT=892
#STATDARG=""
STATD_PORT=662
STATD_OUTGOING_PORT=2020
RPCIDMAPDARGS=""
#SECURE_NFS="yes"
#RPCGSSDARGS=""
#RPCSVCGSSDARGS=""
RDMA_PORT=20049
EOF

⑨NTPを設定する。
cat << 'EOF' | tee /etc/sysconfig/ntpd
OPTIONS="-4 -x -u ntp:ntp -p /var/run/ntpd.pid -g"
EOF

cat << 'EOF' | tee /etc/ntp.conf
tinker panic 0
driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
server -4 ntp01.pod1.example.com iburst
server -4 ntp02.pod1.example.com iburst
server -4 ntp03.pod1.example.com iburst
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
EOF

⑩自動起動するサービスを設定する。
for i in $(chkconfig --list | grep ^[A-Za-z] | grep -v services: | awk '{print $1}')
do
  case $i in
    atd        ) chkconfig $i on;;
    auditd     ) chkconfig $i on;;
    crond      ) chkconfig $i on;;
    irqbalance ) chkconfig $i on;;
    network    ) chkconfig $i on;;
    ntpd       ) chkconfig $i on;;
    rsyslog    ) chkconfig $i on;;
    sshd       ) chkconfig $i on;;
    * ) chkconfig --del $i;;
  esac
done
grep -q -v ^# /etc/cron.d/raid-check && sed -i -e 's/^/#/' /etc/cron.d/raid-check

⑪Syslogを設定する。
cat << 'EOF' | tee /usr/local/bin/logger_ex
#!/usr/bin/perl
my $ident = $ARGV[0];
my $facility = $ARGV[1];
my $level = $ARGV[2];
use Sys::Syslog qw( :DEFAULT setlogsock );
setlogsock('unix');
openlog($ident, 'pid', $facility);
while ($log = <STDIN>) {
  syslog($level, $log);
}
closelog
EOF
chmod 755 /usr/local/bin/logger_ex

cat << 'EOF' | tee /usr/local/bin/operation_logger
#!/bin/bash
export PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME}" "${PWD/#$HOME/~}";alias l.="ls -d .* --color=auto";alias ll="ls -l --color=auto";alias ls="ls --color=auto";alias vi="vim";alias which="alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde";alias dstat="dstat -Tclmdrn";[ "$PS1" ] && PS1='\''[\u@\[\e[1;41m\]\H\[\e[0m\] \t \w] \n\$ '\'';PROMPT_COMMAND='\''printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME}" "${PWD/#$HOME/~}"'\'
/usr/bin/mkfifo -m 0600 /dev/shm/$USER.$$
(/bin/sed -u -e 's/[^[:graph:]]/ /g' /dev/shm/$USER.$$ | /usr/local/bin/logger_ex $USER.$$ local0 info; /bin/rm -f /dev/shm/$USER.$$) &
exec /usr/bin/script -fq /dev/shm/$USER.$$
EOF
chmod 755 /usr/local/bin/operation_logger

cat << 'EOF' | tee -a /etc/skel/.bash_profile
[ "$PS1" ] && exec /usr/local/bin/operation_logger
EOF

cat << 'EOF' | tee /etc/rsyslog.conf
$umask 0000
$FileCreateMode 0640
$FileOwner root
$FileGroup wheel
$DirCreateMode 0750
$DirOwner root
$DirGroup wheel
$ModLoad imuxsock
$ModLoad imklog
$ModLoad immark
#$ModLoad imudp
#$UDPServerRun 514
#$ModLoad imtcp
#$InputTCPServerRun 514
$RepeatedMsgReduction off
$SystemLogRateLimitInterval 0
$MaxMessageSize 1048576
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
#$ActionFileEnableSync on

$WorkDirectory /var/lib/rsyslog
$ActionQueueFileName fwdRule1
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1

$IncludeConfig /etc/rsyslog.d/*.conf

$template DynamicFileName0,"/var/log/all/operation/%programname:::secpath-replace%.log"
$template DynamicFileName1,"/var/log/all/%$year%%$month%%$day%/all.log"
$template DynamicFileName2,"/var/log/all/%$year%%$month%%$day%/%programname:::secpath-replace%.log"

local0.*                                                ?DynamicFileName0
*.*;local0.none                                         ?DynamicFileName1
*.*;local0.none                                         ?DynamicFileName2

:fromhost-ip, !isequal, "127.0.0.1" ~
*.info @@nsxlog01.pod1.example.com:514
*.info @@nsxlog02.pod1.example.com:514

if $syslogfacility-text == 'kern' and $msg contains 'iptables: ' then /var/log/iptables.log
& ~

*.emerg                                                 *

#kern.*                                                 /dev/console

mail.*                                                  -/var/log/maillog
& ~
authpriv.*                                              /var/log/secure
& ~
cron.*                                                  /var/log/cron
& ~
#local0.*                                                /var/log/operation.log
#& ~
local0.* ~
local1.*                                                /var/log/local1.log
& ~
local2.*                                                /var/log/local2.log
& ~
local3.*                                                /var/log/local3.log
& ~
local4.*                                                /var/log/local4.log
& ~
local5.*                                                /var/log/local5.log
& ~
local6.*                                                /var/log/local6.log
& ~
local7.*                                                /var/log/boot.log
& ~
uucp,news.crit                                          /var/log/spooler
& ~

*.info                                                  /var/log/messages
EOF

cat << 'EOF' | tee /etc/cron.d/rsyslog-delete
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
40 4 * * * root find /var/log/all/ -daystart -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1 || :
EOF

cat << 'EOF' | tee /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/iptables.log
/var/log/operation.log
/var/log/local0.log
/var/log/local1.log
/var/log/local2.log
/var/log/local3.log
/var/log/local4.log
/var/log/local5.log
/var/log/local6.log
/var/log/secure
/var/log/spooler
/var/log/haproxy.log
{
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || :
    endscript
}
EOF

cat << 'EOF' | tee /etc/logrotate.conf
daily
rotate 7
create 0640 root wheel
dateext
#compress
#delaycompress
notifempty
missingok
include /etc/logrotate.d
/var/log/wtmp {
  monthly
  create 0664 root utmp
  minsize 1M
  rotate 1
}
/var/log/btmp {
  missingok
  monthly
  create 0600 root utmp
  rotate 1
}
EOF

⑫一般ユーザを追加する。
sed -i -e '/pam_wheel.so use_uid/ s/^#//' /etc/pam.d/su
echo '%wheel ALL=(ALL) NOPASSWD: ALL' | tee /etc/sudoers.d/wheel
sed -i -e 's/^CREATE_MAIL_SPOOL=.*$/CREATE_MAIL_SPOOL=no/' /etc/default/useradd

groupadd -g 65001 vi-admin
useradd -g vi-admin -G wheel -u 65001 vi-admin
echo vmware | passwd --stdin vi-admin

groupadd -g 65002 vi-user
useradd -g vi-user -u 65002 vi-user
echo vmware | passwd --stdin vi-user

⑬root用の公開鍵、秘密鍵のペアを作成し、rootユーザーでのログインについてはパスワードによる認証を不可とする。
ssh-keygen -q -f /root/.ssh/id_rsa -N ""
mv -f /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys

sed -i -e 's/^#PermitRootLogin .*$/PermitRootLogin without-password/' /etc/ssh/sshd_config

⑭[VMware Tools のインストール/アップグレード] を選択し、インストールする。
mount /dev/sr0 /mnt
cp /mnt/VMwareTools-*.tar.gz .
umount /mnt
tar xzvf VMwareTools-*.tar.gz
./vmware-tools-distrib/vmware-install.pl -d

⑮シャットダウンする。
shutdown -h now

⑯仮想マシンのCD/DVDドライブ1のデバイスタイプをクライアントデバイスにする。

⑰OVFテンプレートのエクスポートを実行する。
名前: rhel6-template
ディレクトリ: 任意
フォーマット: 単一のファイル (OVA)


⑪の設定で、すべての操作ログをSyslogで記録していますが、直接rootユーザーでログインした場合は記録されません。Syslog関連で不具合があった場合には、コンソールから直接rootユーザーでログインし、不具合を修正します。

⑬でrootユーザーのssh用の鍵を作成しています。このまま利用すると、このテンプレートからデプロイした仮想マシンは、全rootユーザーで鍵を共有することになるので、便利ですが危険です。通信要件に合わせ、都度作成する方が良いです。今回は検証目的なので、この鍵をそのまま利用します。


1台目のDNSキャッシュサーバーをデプロイします。
テンプレートのIPアドレスが固定されているので、1台ずつ実施します。


【1台目DNSキャッシュサーバーのデプロイ】

OVFテンプレートのデプロイを実行する。
ファイル: rhel6-template.ova
名前: nsxdns01-real
ストレージ: mgesxi01-das01
ディスクのフォーマット: Thin Provision

必要があればMACアドレスを設定する。

必要があれば、sshにて、mgesxi01にログインし、設定を編集する。
vi /vmfs/volumes/$(hostname -s)-das01/nsxdns01-real/nsxdns01-real.vmx

仮想マシンをパワーオンする。

sshにて、rhel6-templateのIPアドレスに対してvi-adminユーザーでログインする。

IPアドレスとホスト名を書き換える。
sudo sed -i -e 's/^IPADDR=.*$/IPADDR=10.91.17.247/' /etc/sysconfig/network-scripts/ifcfg-eth0
sudo sed -i -e 's/^PREFIX=.*$/PREFIX=26/' /etc/sysconfig/network-scripts/ifcfg-eth0
sudo sed -i -e 's/^GATEWAY=.*$/GATEWAY=10.91.17.193/' /etc/sysconfig/network-scripts/ifcfg-eth0
sudo sed -i -e 's/^HOSTNAME=.*$/HOSTNAME=nsxdns01.pod1.example.com/' /etc/sysconfig/network

本番環境では、rootユーザーの公開鍵、秘密鍵を置き換える。
sudo rm -rf /root/.ssh
sudo ssh-keygen -q -f /root/.ssh/id_rsa -N ""
sudo mv -f /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys

再起動する。
sudo reboot



2台目のDNSキャッシュサーバーをデプロイします。


【2台目DNSキャッシュサーバーのデプロイ】

OVFテンプレートのデプロイを実行する。
ファイル: rhel6-template.ova
名前: nsxdns02-real
ストレージ: mgesxi01-das01
ディスクのフォーマット: Thin Provision

必要があればMACアドレスを設定する。

必要があれば、sshにて、mgesxi01にログインし、設定を編集する。
vi /vmfs/volumes/$(hostname -s)-das01/nsxdns02-real/nsxdns02-real.vmx

仮想マシンをパワーオンする。

sshにて、rhel6-templateのIPアドレスに対してvi-adminユーザーでログインする。

IPアドレスとホスト名を書き換える。
sudo sed -i -e 's/^IPADDR=.*$/IPADDR=10.91.17.248/' /etc/sysconfig/network-scripts/ifcfg-eth0
sudo sed -i -e 's/^PREFIX=.*$/PREFIX=26/' /etc/sysconfig/network-scripts/ifcfg-eth0
sudo sed -i -e 's/^GATEWAY=.*$/GATEWAY=10.91.17.193/' /etc/sysconfig/network-scripts/ifcfg-eth0
sudo sed -i -e 's/^HOSTNAME=.*$/HOSTNAME=nsxdns02.pod1.example.com/' /etc/sysconfig/network

本番環境では、rootユーザーの公開鍵、秘密鍵を置き換える。
※1号機の/root/.ssh/をコピーする。

再起動する。
sudo reboot



dnsmasqの設定を行います。ここからの作業は1号機、2号機の両方で実施します。
sshにてvi-adminユーザーでログインします。上の手順通りだとパスワードは「vmware」です。適宜変更してください。


【dnsmasq設定】

cat << 'EOF' | sudo tee /etc/dnsmasq.conf
conf-dir=/etc/dnsmasq.d
EOF

cat << 'EOF' | sudo tee /etc/dnsmasq.d/domain.conf
#bogus-priv
domain-needed
expand-hosts
local=/pod1.example.com/
domain=pod1.example.com
EOF

sudo mkdir -p /etc/dnsmasq.rr/
cat << 'EOF' | sudo tee /etc/dnsmasq.d/roundrobin.conf
addn-hosts=/etc/dnsmasq.rr/
cache-size=10000
local-ttl=60
#no-negcache
EOF

cat << 'EOF' | sudo tee /etc/dnsmasq.d/resolv.conf
resolv-file=/etc/dnsmasq.resolv.conf
EOF

cat << 'EOF' | sudo tee /etc/dnsmasq.resolv.conf
nameserver 10.0.80.11
nameserver 10.0.80.12
EOF

cat << 'EOF' | sudo tee /etc/resolv.conf
nameserver 127.0.0.1
options single-request
search pod1.example.com
EOF
sudo sed -i -e 's/^hosts:.*$/hosts:      dns files/' /etc/nsswitch.conf

sudo sed -i -e 's/OPTIONS$/OPTIONS --dns-forward-max=1000/' /etc/init.d/dnsmasq
sudo sed -i -e 's/dns-forward-max=[0-9]*/dns-forward-max=1000/' /etc/init.d/dnsmasq

sudo chkconfig --del dnsmasq
sudo chkconfig --add dnsmasq
sudo chkconfig dnsmasq on
sudo /etc/init.d/dnsmasq restart


dnsmasq.confの設定は、/etc/dnsmasq.d/ディレクトリ内の設定ファイルを読み込むように指示しているだけです。
domain.confの設定は、DNSクライアントからホスト名単体で問い合わせが来た場合は、pod1.example.comというドメイン名付きで問い合わされたものとして応答するように指示しています。
roundrobin.confの設定は、/etc/hostsだけではなく/etc/dnsmasq.rr/ディレクトリ内のレコード設定も読み込むよう指示しています。また、キャッシュサイズは最大値である10000レコードをキャッシュするように指示しています。キャッシュの寿命は、60秒としています。ネガティブキャッシュを保持しないように変更したうえでキャッシュ寿命を増やす等、要件に合わせて変更してください。
/etc/dnsmasq.d/resolv.confの設定は、dnsmasqが不知のレコードについてどのアップストリームのDNSサーバーに問い合わせを転送すべきかという情報が書かれたファイル名を指定しています。
dnsmasq.resolv.confの設定は、アップストリームのDNSサーバーを指示しています。複数行書かれている場合、ラウンドロビンで問い合わせ先を選びます。
OSの設定として、DNS問い合わせ先をローカルのdnsmasqとしています。ローカルの/etc/hostsを調べるよりも先にdnsmasqへ問い合わせます。
dnsmasq起動スクリプトを一部書き換えています。アップストリームのDNSサーバーに対し同時に何件まで問い合わせが可能かを指定しています。デフォルト値は150です。状況により調整してください。残念ながら、設定ファイルで指定できないようなので、起動スクリプトで直接指示しています。


レコードを登録します。bindのような面倒臭さはありません。普通に/etc/hostsに登録するだけです。ラウンドロビンで応答したいレコードについては、別ファイルに分けています。


【レコード登録】

cat << 'EOF' | sudo tee /etc/dnsmasq.rr/rac
#sjc01.bcr02a.2237
10.91.96.68     rac-scan.pod1.example.com rac-scan
10.91.96.69     rac-scan.pod1.example.com rac-scan
10.91.96.70     rac-scan.pod1.example.com rac-scan
EOF

cat << 'EOF' | sudo tee /etc/hosts
127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
#softlayer service
10.0.81.11      rs1.service.softlayer.com
10.0.81.11      rs2.service.softlayer.com
10.0.77.54      time.service.networklayer.com
#sjc01.bcr02a.1554 (Native VLAN)
10.91.17.193    gw-mng.pod1.example.com gw-mng
10.91.17.194    gw-mng-01.pod1.example.com gw-mng-01
10.91.17.195    gw-mng-02.pod1.example.com gw-mng-02
10.91.17.196    mgesxi01.pod1.example.com mgesxi01 ntp01.pod1.example.com ntp01
10.91.17.197    mgesxi02.pod1.example.com mgesxi02 ntp02.pod1.example.com ntp02
10.91.17.198    mgesxi03.pod1.example.com mgesxi03 ntp03.pod1.example.com ntp03
10.91.17.199    mgesxi04.pod1.example.com mgesxi04
10.91.17.200    gwesxi01.pod1.example.com gwesxi01
10.91.17.201    gwesxi02.pod1.example.com gwesxi02
10.91.17.202    gwesxi03.pod1.example.com gwesxi03
10.91.17.203    dpesxi01.pod1.example.com dpesxi01
10.91.17.204    dpesxi02.pod1.example.com dpesxi02
10.91.17.205    dpesxi03.pod1.example.com dpesxi03
10.91.17.206    dpesxi04.pod1.example.com dpesxi04
10.91.17.207    dpesxi05.pod1.example.com dpesxi05
10.91.17.208    dpesxi06.pod1.example.com dpesxi06
10.91.17.209    dpesxi07.pod1.example.com dpesxi07
10.91.17.210    dpesxi08.pod1.example.com dpesxi08
10.91.17.211    dpesxi09.pod1.example.com dpesxi09
10.91.17.212    dpesxi10.pod1.example.com dpesxi10
10.91.17.213    dpesxi11.pod1.example.com dpesxi11
10.91.17.214    dpesxi12.pod1.example.com dpesxi12
10.91.17.215    dpesxi13.pod1.example.com dpesxi13
10.91.17.216    dpesxi14.pod1.example.com dpesxi14
10.91.17.217    dpesxi15.pod1.example.com dpesxi15
10.91.17.218    dpesxi16.pod1.example.com dpesxi16
10.91.17.219    dpesxi17.pod1.example.com dpesxi17
10.91.17.220    dpesxi18.pod1.example.com dpesxi18
10.91.17.221    dpesxi19.pod1.example.com dpesxi19
10.91.17.222    dpesxi20.pod1.example.com dpesxi20
10.91.17.223    dpesxi21.pod1.example.com dpesxi21
10.91.17.224    dpesxi22.pod1.example.com dpesxi22
10.91.17.225    dpesxi23.pod1.example.com dpesxi23
10.91.17.226    dpesxi24.pod1.example.com dpesxi24
10.91.17.227    dpesxi25.pod1.example.com dpesxi25
10.91.17.228    dpesxi26.pod1.example.com dpesxi26
10.91.17.229    dpesxi27.pod1.example.com dpesxi27
10.91.17.230    dpesxi28.pod1.example.com dpesxi28
10.91.17.231    dpesxi29.pod1.example.com dpesxi29
10.91.17.232    dpesxi30.pod1.example.com dpesxi30
10.91.17.233    dpesxi31.pod1.example.com dpesxi31
10.91.17.234    dpesxi32.pod1.example.com dpesxi32
10.91.17.235    nsxvca01.pod1.example.com nsxvca01
10.91.17.236    nsxmng01.pod1.example.com nsxmng01
10.91.17.237    nsxctl01.pod1.example.com nsxctl01
10.91.17.238    nsxctl02.pod1.example.com nsxctl02
10.91.17.239    nsxctl03.pod1.example.com nsxctl03
10.91.17.240    vcenter-mng.pod1.example.com vcenter-mng
10.91.17.241    vcenter01.pod1.example.com vcenter01
10.91.17.242    vcenter02.pod1.example.com vcenter02
10.91.17.243    vcenter.pod1.example.com vcenter
10.91.17.244    repo01.pod1.example.com repo01
10.91.17.245    repo02.pod1.example.com repo02
10.91.17.246    rhel6-template.pod1.example.com rhel6-template
10.91.17.247    nsxdns01-real.pod1.example.com nsxdns01-real
10.91.17.248    nsxdns02-real.pod1.example.com nsxdns02-real
10.91.17.249    nsxlog01.pod1.example.com nsxlog01
10.91.17.250    nsxlog02.pod1.example.com nsxlog02
10.91.17.251    nsxdns01.pod1.example.com nsxdns01
10.91.17.252    nsxdns02.pod1.example.com nsxdns02
10.91.17.253    nsxdc01.pod1.example.com nsxdc01
10.91.17.254    nsxdc02.pod1.example.com nsxdc02
#sjc01.bcr02a.1554 (Native VLAN) Primary Address
#10.88.88.193    gw-mng-prim.pod1.example.com gw-mng-prim
#10.88.88.194    gw-mng-01-prim.pod1.example.com gw-mng-01-prim
#10.88.88.195    gw-mng-02-prim.pod1.example.com gw-mng-02-prim
#10.88.88.196    mgesxi01-ipmi.pod1.example.com mgesxi01-ipmi
#10.88.88.197    mgesxi02-ipmi.pod1.example.com mgesxi02-ipmi
#10.88.88.198    mgesxi03-ipmi.pod1.example.com mgesxi03-ipmi
#10.88.88.199    mgesxi04-ipmi.pod1.example.com mgesxi04-ipmi
#10.88.88.200    gwesxi01-ipmi.pod1.example.com gwesxi01-ipmi
#10.88.88.201    gwesxi02-ipmi.pod1.example.com gwesxi02-ipmi
#10.88.88.202    gwesxi03-ipmi.pod1.example.com gwesxi03-ipmi
#10.88.88.203    dpesxi01-ipmi.pod1.example.com dpesxi01-ipmi
#10.88.88.204    dpesxi02-ipmi.pod1.example.com dpesxi02-ipmi
#10.88.88.205    dpesxi03-ipmi.pod1.example.com dpesxi03-ipmi
#10.88.88.206    dpesxi04-ipmi.pod1.example.com dpesxi04-ipmi
#10.88.88.207    dpesxi05-ipmi.pod1.example.com dpesxi05-ipmi
#10.88.88.208    dpesxi06-ipmi.pod1.example.com dpesxi06-ipmi
#10.88.88.209    dpesxi07-ipmi.pod1.example.com dpesxi07-ipmi
#10.88.88.210    dpesxi08-ipmi.pod1.example.com dpesxi08-ipmi
#10.88.88.211    dpesxi09-ipmi.pod1.example.com dpesxi09-ipmi
#10.88.88.212    dpesxi10-ipmi.pod1.example.com dpesxi10-ipmi
#10.88.88.213    dpesxi11-ipmi.pod1.example.com dpesxi11-ipmi
#10.88.88.214    dpesxi12-ipmi.pod1.example.com dpesxi12-ipmi
#10.88.88.215    dpesxi13-ipmi.pod1.example.com dpesxi13-ipmi
#10.88.88.216    dpesxi14-ipmi.pod1.example.com dpesxi14-ipmi
#10.88.88.217    dpesxi15-ipmi.pod1.example.com dpesxi15-ipmi
#10.88.88.218    dpesxi16-ipmi.pod1.example.com dpesxi16-ipmi
#10.88.88.219    dpesxi17-ipmi.pod1.example.com dpesxi17-ipmi
#10.88.88.220    dpesxi18-ipmi.pod1.example.com dpesxi18-ipmi
#10.88.88.221    dpesxi19-ipmi.pod1.example.com dpesxi19-ipmi
#10.88.88.222    dpesxi20-ipmi.pod1.example.com dpesxi20-ipmi
#10.88.88.223    dpesxi21-ipmi.pod1.example.com dpesxi21-ipmi
#10.88.88.224    dpesxi22-ipmi.pod1.example.com dpesxi22-ipmi
#10.88.88.225    dpesxi23-ipmi.pod1.example.com dpesxi23-ipmi
#10.88.88.226    dpesxi24-ipmi.pod1.example.com dpesxi24-ipmi
#10.88.88.227    dpesxi25-ipmi.pod1.example.com dpesxi25-ipmi
#10.88.88.228    dpesxi26-ipmi.pod1.example.com dpesxi26-ipmi
#10.88.88.229    dpesxi27-ipmi.pod1.example.com dpesxi27-ipmi
#10.88.88.230    dpesxi28-ipmi.pod1.example.com dpesxi28-ipmi
#10.88.88.231    dpesxi29-ipmi.pod1.example.com dpesxi29-ipmi
#10.88.88.232    dpesxi30-ipmi.pod1.example.com dpesxi30-ipmi
#10.88.88.233    dpesxi31-ipmi.pod1.example.com dpesxi31-ipmi
#10.88.88.234    dpesxi32-ipmi.pod1.example.com dpesxi32-ipmi
#sjc01.bcr02a.1734
10.90.29.129    gw-vmt.pod1.example.com gw-vmt
10.90.29.130    gw-vmt-01.pod1.example.com gw-vmt-01
10.90.29.131    gw-vmt-02.pod1.example.com gw-vmt-02
10.90.29.132    mgesxi01-vmt.pod1.example.com mgesxi01-vmt
10.90.29.133    mgesxi02-vmt.pod1.example.com mgesxi02-vmt
10.90.29.134    mgesxi03-vmt.pod1.example.com mgesxi03-vmt
10.90.29.135    mgesxi04-vmt.pod1.example.com mgesxi04-vmt
10.90.29.136    gwesxi01-vmt.pod1.example.com gwesxi01-vmt
10.90.29.137    gwesxi02-vmt.pod1.example.com gwesxi02-vmt
10.90.29.138    gwesxi03-vmt.pod1.example.com gwesxi03-vmt
10.90.29.139    dpesxi01-vmt.pod1.example.com dpesxi01-vmt
10.90.29.140    dpesxi02-vmt.pod1.example.com dpesxi02-vmt
10.90.29.141    dpesxi03-vmt.pod1.example.com dpesxi03-vmt
10.90.29.142    dpesxi04-vmt.pod1.example.com dpesxi04-vmt
10.90.29.143    dpesxi05-vmt.pod1.example.com dpesxi05-vmt
10.90.29.144    dpesxi06-vmt.pod1.example.com dpesxi06-vmt
10.90.29.145    dpesxi07-vmt.pod1.example.com dpesxi07-vmt
10.90.29.146    dpesxi08-vmt.pod1.example.com dpesxi08-vmt
10.90.29.147    dpesxi09-vmt.pod1.example.com dpesxi09-vmt
10.90.29.148    dpesxi10-vmt.pod1.example.com dpesxi10-vmt
10.90.29.149    dpesxi11-vmt.pod1.example.com dpesxi11-vmt
10.90.29.150    dpesxi12-vmt.pod1.example.com dpesxi12-vmt
10.90.29.151    dpesxi13-vmt.pod1.example.com dpesxi13-vmt
10.90.29.152    dpesxi14-vmt.pod1.example.com dpesxi14-vmt
10.90.29.153    dpesxi15-vmt.pod1.example.com dpesxi15-vmt
10.90.29.154    dpesxi16-vmt.pod1.example.com dpesxi16-vmt
10.90.29.155    dpesxi17-vmt.pod1.example.com dpesxi17-vmt
10.90.29.156    dpesxi18-vmt.pod1.example.com dpesxi18-vmt
10.90.29.157    dpesxi19-vmt.pod1.example.com dpesxi19-vmt
10.90.29.158    dpesxi20-vmt.pod1.example.com dpesxi20-vmt
10.90.29.159    dpesxi21-vmt.pod1.example.com dpesxi21-vmt
10.90.29.160    dpesxi22-vmt.pod1.example.com dpesxi22-vmt
10.90.29.161    dpesxi23-vmt.pod1.example.com dpesxi23-vmt
10.90.29.162    dpesxi24-vmt.pod1.example.com dpesxi24-vmt
10.90.29.163    dpesxi25-vmt.pod1.example.com dpesxi25-vmt
10.90.29.164    dpesxi26-vmt.pod1.example.com dpesxi26-vmt
10.90.29.165    dpesxi27-vmt.pod1.example.com dpesxi27-vmt
10.90.29.166    dpesxi28-vmt.pod1.example.com dpesxi28-vmt
10.90.29.167    dpesxi29-vmt.pod1.example.com dpesxi29-vmt
10.90.29.168    dpesxi30-vmt.pod1.example.com dpesxi30-vmt
10.90.29.169    dpesxi31-vmt.pod1.example.com dpesxi31-vmt
10.90.29.170    dpesxi32-vmt.pod1.example.com dpesxi32-vmt
#sjc01.bcr02a.1913
10.91.29.65     gw-san.pod1.example.com gw-san
10.91.29.66     gw-san-01.pod1.example.com gw-san-01
10.91.29.67     gw-san-02.pod1.example.com gw-san-02
10.91.29.68     mgesxi01-san.pod1.example.com mgesxi01-san
10.91.29.69     mgesxi02-san.pod1.example.com mgesxi02-san
10.91.29.70     mgesxi03-san.pod1.example.com mgesxi03-san
10.91.29.71     mgesxi04-san.pod1.example.com mgesxi04-san
10.91.29.72     gwesxi01-san.pod1.example.com gwesxi01-san
10.91.29.73     gwesxi02-san.pod1.example.com gwesxi02-san
10.91.29.74     gwesxi03-san.pod1.example.com gwesxi03-san
10.91.29.75     dpesxi01-san.pod1.example.com dpesxi01-san
10.91.29.76     dpesxi02-san.pod1.example.com dpesxi02-san
10.91.29.77     dpesxi03-san.pod1.example.com dpesxi03-san
10.91.29.78     dpesxi04-san.pod1.example.com dpesxi04-san
10.91.29.79     dpesxi05-san.pod1.example.com dpesxi05-san
10.91.29.80     dpesxi06-san.pod1.example.com dpesxi06-san
10.91.29.81     dpesxi07-san.pod1.example.com dpesxi07-san
10.91.29.82     dpesxi08-san.pod1.example.com dpesxi08-san
10.91.29.83     dpesxi09-san.pod1.example.com dpesxi09-san
10.91.29.84     dpesxi10-san.pod1.example.com dpesxi10-san
10.91.29.85     dpesxi11-san.pod1.example.com dpesxi11-san
10.91.29.86     dpesxi12-san.pod1.example.com dpesxi12-san
10.91.29.87     dpesxi13-san.pod1.example.com dpesxi13-san
10.91.29.88     dpesxi14-san.pod1.example.com dpesxi14-san
10.91.29.89     dpesxi15-san.pod1.example.com dpesxi15-san
10.91.29.90     dpesxi16-san.pod1.example.com dpesxi16-san
10.91.29.91     dpesxi17-san.pod1.example.com dpesxi17-san
10.91.29.92     dpesxi18-san.pod1.example.com dpesxi18-san
10.91.29.93     dpesxi19-san.pod1.example.com dpesxi19-san
10.91.29.94     dpesxi20-san.pod1.example.com dpesxi20-san
10.91.29.95     dpesxi21-san.pod1.example.com dpesxi21-san
10.91.29.96     dpesxi22-san.pod1.example.com dpesxi22-san
10.91.29.97     dpesxi23-san.pod1.example.com dpesxi23-san
10.91.29.98     dpesxi24-san.pod1.example.com dpesxi24-san
10.91.29.99     dpesxi25-san.pod1.example.com dpesxi25-san
10.91.29.100    dpesxi26-san.pod1.example.com dpesxi26-san
10.91.29.101    dpesxi27-san.pod1.example.com dpesxi27-san
10.91.29.102    dpesxi28-san.pod1.example.com dpesxi28-san
10.91.29.103    dpesxi29-san.pod1.example.com dpesxi29-san
10.91.29.104    dpesxi30-san.pod1.example.com dpesxi30-san
10.91.29.105    dpesxi31-san.pod1.example.com dpesxi31-san
10.91.29.106    dpesxi32-san.pod1.example.com dpesxi32-san
10.91.29.107    nfs01.pod.example.com nfs01
10.91.29.108    nfs02.pod.example.com nfs02
10.91.29.109    nfs03.pod.example.com nfs03
10.91.29.110    nfs04.pod.example.com nfs04
10.91.29.111    nfs1.pod.example.com nfs1
10.91.29.112    nfs2.pod.example.com nfs2
#sjc01.bcr02a.1981
10.91.142.1     gw-vtp.pod1.example.com gw-vtp
10.91.142.2     gw-vtp-01.pod1.example.com gw-vtp-01
10.91.142.3     gw-vtp-02.pod1.example.com gw-vtp-02
10.91.142.4     gwesxi01-vtp.pod1.example.com gwesxi01-vtp
10.91.142.5     gwesxi02-vtp.pod1.example.com gwesxi02-vtp
10.91.142.6     gwesxi03-vtp.pod1.example.com gwesxi03-vtp
10.91.142.7     dpesxi01-vtp.pod1.example.com dpesxi01-vtp
10.91.142.8     dpesxi02-vtp.pod1.example.com dpesxi02-vtp
10.91.142.9     dpesxi03-vtp.pod1.example.com dpesxi03-vtp
10.91.142.10    dpesxi04-vtp.pod1.example.com dpesxi04-vtp
10.91.142.11    dpesxi05-vtp.pod1.example.com dpesxi05-vtp
10.91.142.12    dpesxi06-vtp.pod1.example.com dpesxi06-vtp
10.91.142.13    dpesxi07-vtp.pod1.example.com dpesxi07-vtp
10.91.142.14    dpesxi08-vtp.pod1.example.com dpesxi08-vtp
10.91.142.15    dpesxi09-vtp.pod1.example.com dpesxi09-vtp
10.91.142.16    dpesxi10-vtp.pod1.example.com dpesxi10-vtp
10.91.142.17    dpesxi11-vtp.pod1.example.com dpesxi11-vtp
10.91.142.18    dpesxi12-vtp.pod1.example.com dpesxi12-vtp
10.91.142.19    dpesxi13-vtp.pod1.example.com dpesxi13-vtp
10.91.142.20    dpesxi14-vtp.pod1.example.com dpesxi14-vtp
10.91.142.21    dpesxi15-vtp.pod1.example.com dpesxi15-vtp
10.91.142.22    dpesxi16-vtp.pod1.example.com dpesxi16-vtp
10.91.142.23    dpesxi17-vtp.pod1.example.com dpesxi17-vtp
10.91.142.24    dpesxi18-vtp.pod1.example.com dpesxi18-vtp
10.91.142.25    dpesxi19-vtp.pod1.example.com dpesxi19-vtp
10.91.142.26    dpesxi20-vtp.pod1.example.com dpesxi20-vtp
10.91.142.27    dpesxi21-vtp.pod1.example.com dpesxi21-vtp
10.91.142.28    dpesxi22-vtp.pod1.example.com dpesxi22-vtp
10.91.142.29    dpesxi23-vtp.pod1.example.com dpesxi23-vtp
10.91.142.30    dpesxi24-vtp.pod1.example.com dpesxi24-vtp
10.91.142.31    dpesxi25-vtp.pod1.example.com dpesxi25-vtp
10.91.142.32    dpesxi26-vtp.pod1.example.com dpesxi26-vtp
10.91.142.33    dpesxi27-vtp.pod1.example.com dpesxi27-vtp
10.91.142.34    dpesxi28-vtp.pod1.example.com dpesxi28-vtp
10.91.142.35    dpesxi29-vtp.pod1.example.com dpesxi29-vtp
10.91.142.36    dpesxi30-vtp.pod1.example.com dpesxi30-vtp
10.91.142.37    dpesxi31-vtp.pod1.example.com dpesxi31-vtp
10.91.142.38    dpesxi32-vtp.pod1.example.com dpesxi32-vtp
#Heartbeat segment for Edge Services Gateway
192.0.2.1       t0001-edge01-0.pod1.example.com t0001-edge01-0
192.0.2.2       t0001-edge01-0.pod1.example.com t0001-edge01-1
#sjc01.bcr02a.2237
10.91.96.65     gw-edg.pod1.example.com gw-edg
10.91.96.66     gw-edg-01.pod1.example.com gw-edg-01
10.91.96.67     gw-edg-02.pod1.example.com gw-edg-02
10.91.96.71     rac01.pod1.example.com rac01
10.91.96.72     rac02.pod1.example.com rac02
10.91.96.73     rac01-vip.pod1.example.com rac01-vip
10.91.96.74     rac02-vip.pod1.example.com rac02-vip
10.91.96.75     t0001-edge01.pod1.example.com t0001-edge01
#sjc01.fcr02a.1234
192.168.0.1     nfs01-prv.pod.example.com nfs01-prv
192.168.0.2     nfs02-prv.pod.example.com nfs02-prv
192.168.0.3     nfs03-prv.pod.example.com nfs03-prv
192.168.0.4     nfs04-prv.pod.example.com nfs04-prv
192.168.0.5     rac01-prv.pod1.example.com rac01-prv
192.168.0.6     rac02-prv.pod1.example.com rac02-prv
EOF

sudo /etc/init.d/dnsmasq reload



keepalivedでVIPを操作し、冗長化します。


【keepalived設定】

[ "nsxdns01" = "$(uname -n | awk -F. '{print $1}')" ] && PRIMARY=1
cat << EOF | sudo tee /etc/keepalived/dns_check.sh
#!/bin/bash
IPs1="gw-mng.pod1.example.com"
EOF
cat << 'EOF' | sudo tee -a /etc/keepalived/dns_check.sh
/usr/bin/dig +time=001 +tries=3 @127.0.0.1 localhost.localdomain
if [ 0 -ne $? ]; then
  /etc/init.d/keepalived stop
  /etc/init.d/dnsmasq stop
  /etc/keepalived/reserve_start.sh &
  exit 1
fi
TRIES=3
while :
do
  for i in $IPs1
  do
    ping -W 1 -c 1 $i && break 2
  done
  TRIES=$((TRIES-1))
  if [ $TRIES -le 0 ]; then
    /etc/init.d/keepalived stop
   /etc/keepalived/reserve_start.sh &
    exit 1
  fi
done
exit 0
EOF
sudo chmod 755 /etc/keepalived/dns_check.sh
cat << EOF | sudo tee /etc/keepalived/reserve_start.sh
#!/bin/bash
sleep 60
/etc/init.d/dnsmasq start
/etc/init.d/keepalived start
EOF
sudo chmod 755 /etc/keepalived/reserve_start.sh

cat << EOF | sudo tee /etc/keepalived/keepalived.conf
vrrp_instance VIP1 {
  state BACKUP
  interface eth0
  garp_master_delay 5
  virtual_router_id 1
  priority $((100+PRIMARY))
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass password
  }
  virtual_ipaddress {
    10.91.17.251/26 dev eth0 label eth0:0
  }
}
vrrp_instance VIP2 {
  state BACKUP
  interface eth0
  garp_master_delay 5
  virtual_router_id 2
  priority $((100-PRIMARY))
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass password
  }
  virtual_ipaddress {
    10.91.17.252/26 dev eth0 label eth0:1
  }
}
virtual_server 127.0.0.1 65053 {
  delay_loop 3
  real_server 127.0.0.1 53 {
    MISC_CHECK {
      misc_path "/etc/keepalived/dns_check.sh"
      misc_timeout 60
    }
  }
}
EOF

sudo chkconfig --del keepalived
sudo chkconfig --add keepalived
sudo chkconfig keepalived on
sudo /etc/init.d/keepalived restart



/etc/hostsに登録されたレコードを1号機から2号機に自動反映するように設定します。


cat << 'EOF' | sudo tee /etc/keepalived/sync-hosts.sh
#!/bin/bash
SYNC_FROM=nsxdns01.pod1.example.com
[ "$SYNC_FROM" = "$(uname -n)" ] && exit 0
scp $SYNC_FROM:/etc/hosts /etc/keepalived/hosts || exit 1
if ! diff /etc/hosts /etc/keepalived/hosts; then
  mv -f /etc/keepalived/hosts /etc/hosts
  cp /etc/hosts /etc/keepalived/hosts
  rsync $SYNC_FROM:/etc/dnsmasq.rr/ /etc/keepalived/dnsmasq.rr/
  rsync /etc/keepalived/dnsmasq.rr/ /etc/dnsmasq.rr/
  /etc/init.d/dnsmasq reload
fi
exit 0
EOF
sudo chmod 755 /etc/keepalived/sync-hosts.sh
sudo mkdir -p /etc/keepalived/dnsmasq.rr/
sudo ln -sf /etc/keepalived/sync-hosts.sh /etc/cron.hourly/sync-hosts.sh

sudo /etc/keepalived/sync-hosts.sh
The authenticity of host 'nsxdns01.pod1.example.com (10.91.17.251)' can't be established.
RSA key fingerprint is ff:17:77:6a:1b:8d:65:b1:e8:cc:53:4c:a1:c3:57:86.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'nsxdns01.pod1.example.com,10.91.17.251' (RSA) to the list of known hosts.
hosts                                         100%   13KB  13.3KB/s   00:00


1号機の/etc/hostsに変更が加えられてから1時間以内に2号機に反映するようにしています。1号機の/etc/dnsmasq.rr/ディレクトリ内のファイルが変更されただけでは反映されません。この辺りは、実装を改善した方が良いものと思われますが、とりあえず手抜きしています。
レコードの変更は、1号機のみで行い、必要があれば/etc/dnsmasq.rr/内のファイルを変更し、/etc/hostsは必ず変更し、設定をreloadします。2号機への反映を急ぎたい場合は、1号機への設定後、2号機でsudo /etc/keepalived/sync-hosts.shを実行します。


dnsmasqの状態を確認します。


sudo tail -f /var/log/messages &
echo
sudo kill -USR1 $(cat /var/run/dnsmasq.pid);fg

Mar 21 09:19:27 nsxdns01 dnsmasq[5069]: time 1426897167
Mar 21 09:19:27 nsxdns01 dnsmasq[5069]: cache size 10000, 0/0 cache insertions re-used unexpired cache entries.
Mar 21 09:19:27 nsxdns01 dnsmasq[5069]: queries forwarded 0, queries answered locally 3714
Mar 21 09:19:27 nsxdns01 dnsmasq[5069]: server 10.0.80.11#53: queries sent 0, retried or failed 0
Mar 21 09:19:27 nsxdns01 dnsmasq[5069]: server 10.0.80.12#53: queries sent 0, retried or failed 0
sudo tail -f /var/log/messages

# Ctrl-C



VIPの状態を確認します。


ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:1b:65:bc brd ff:ff:ff:ff:ff:ff
    inet 10.91.17.247/26 brd 10.91.17.255 scope global eth0
    inet 10.91.17.251/26 scope global secondary eth0:0


次回以降の作業でvCenter構築後、複数のESXiからなるクラスタを組み、2号機を別のESXiにvMotionします。
接続試験、障害試験などはその時に実施すればよいと思います。
ntpdデーモンなど、DNSサーバーが不在であったためにうまく動いていないものがあるので、順次OSごと再起動しておくとよいです。


冗長化Syslogサーバーを構築します。
冗長化といっても、ただ単に2台用意するだけです。
クライアントが2か所のSyslogサーバーに対してSyslog転送するように設定します。

1台目のSyslogサーバーをデプロイします。
テンプレートのIPアドレスが固定されているので、1台ずつ実施します。


【1台目Syslogサーバーのデプロイ】

OVFテンプレートのデプロイを実行する。
ファイル: rhel6-template.ova
名前: nsxlog01
ストレージ: mgesxi01-das01
ディスクのフォーマット: Thin Provision

必要があればMACアドレスを設定する。

必要があれば、sshにて、mgesxi01にログインし、設定を編集する。
vi /vmfs/volumes/$(hostname -s)-das01/nsxlog01/nsxlog01.vmx

仮想マシンをパワーオンする。

sshにて、rhel6-templateのIPアドレスに対してvi-adminユーザーでログインする。

IPアドレスとホスト名を書き換える。
sudo sed -i -e 's/^IPADDR=.*$/IPADDR=10.91.17.249/' /etc/sysconfig/network-scripts/ifcfg-eth0
sudo sed -i -e 's/^PREFIX=.*$/PREFIX=26/' /etc/sysconfig/network-scripts/ifcfg-eth0
sudo sed -i -e 's/^GATEWAY=.*$/GATEWAY=10.91.17.193/' /etc/sysconfig/network-scripts/ifcfg-eth0
sudo sed -i -e 's/^HOSTNAME=.*$/HOSTNAME=nsxlog01.pod1.example.com/' /etc/sysconfig/network

再起動する。
sudo reboot



2台目のSyslogサーバーをデプロイします。


【2台目Syslogサーバーのデプロイ】

OVFテンプレートのデプロイを実行する。
ファイル: rhel6-template.ova
名前: nsxlog02
ストレージ: mgesxi01-das01
ディスクのフォーマット: Thin Provision

必要があればMACアドレスを設定する。

必要があれば、sshにて、mgesxi01にログインし、設定を編集する。
vi /vmfs/volumes/$(hostname -s)-das01/nsxlog02/nsxlog02.vmx

仮想マシンをパワーオンする。

sshにて、rhel6-templateのIPアドレスに対してvi-adminユーザーでログインする。

IPアドレスとホスト名を書き換える。
sudo sed -i -e 's/^IPADDR=.*$/IPADDR=10.91.17.250/' /etc/sysconfig/network-scripts/ifcfg-eth0
sudo sed -i -e 's/^PREFIX=.*$/PREFIX=26/' /etc/sysconfig/network-scripts/ifcfg-eth0
sudo sed -i -e 's/^GATEWAY=.*$/GATEWAY=10.91.17.193/' /etc/sysconfig/network-scripts/ifcfg-eth0
sudo sed -i -e 's/^HOSTNAME=.*$/HOSTNAME=nsxlog02.pod1.example.com/' /etc/sysconfig/network

再起動する。
sudo reboot



Syslogサーバーを設定します。


【Syslogサーバー設定】

本番環境では、rootユーザーの公開鍵、秘密鍵を削除する。
sudo rm -rf /root/.ssh

rsyslogの設定を変更する。
cat << 'EOF' | sudo tee /etc/rsyslog.conf
$umask 0000
$FileCreateMode 0640
$FileOwner root
$FileGroup wheel
$DirCreateMode 0750
$DirOwner root
$DirGroup wheel
$ModLoad imuxsock
$ModLoad imklog
$ModLoad immark
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
$RepeatedMsgReduction off
$SystemLogRateLimitInterval 0
$MaxMessageSize 1048576
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
#$ActionFileEnableSync on

#$WorkDirectory /var/lib/rsyslog
#$ActionQueueFileName fwdRule1
#$ActionQueueMaxDiskSpace 1g
#$ActionQueueSaveOnShutdown on
#$ActionQueueType LinkedList
#$ActionResumeRetryCount -1

$IncludeConfig /etc/rsyslog.d/*.conf

$template DynamicFileName0,"/var/log/all/operation/%programname:::secpath-replace%.log"
$template DynamicFileName1,"/var/log/all/%$year%%$month%%$day%/all.log"
$template DynamicFileName2,"/var/log/all/prog/%$year%%$month%%$day%/%programname:::secpath-replace%.log"
$template DynamicFileName3,"/var/log/all/host/%$year%%$month%%$day%/%hostname:::secpath-replace%.log"

local0.*                                                ?DynamicFileName0
*.*;local0.none                                         ?DynamicFileName1
*.*;local0.none                                         ?DynamicFileName2
*.*;local0.none                                         ?DynamicFileName3

:fromhost-ip, !isequal, "127.0.0.1" ~
*.info @@nsxlog01:514

if $syslogfacility-text == 'kern' and $msg contains 'iptables: ' then /var/log/iptables.log
& ~

*.emerg                                                 *

#kern.*                                                 /dev/console

mail.*                                                  -/var/log/maillog
& ~
authpriv.*                                              /var/log/secure
& ~
cron.*                                                  /var/log/cron
& ~
#local0.*                                                /var/log/operation.log
#& ~
local0.* ~
local1.*                                                /var/log/local1.log
& ~
local2.*                                                /var/log/local2.log
& ~
local3.*                                                /var/log/local3.log
& ~
local4.*                                                /var/log/local4.log
& ~
local5.*                                                /var/log/local5.log
& ~
local6.*                                                /var/log/local6.log
& ~
local7.*                                                /var/log/boot.log
& ~
uucp,news.crit                                          /var/log/spooler
& ~

*.info                                                  /var/log/messages
EOF
[ $(uname -n | awk -F. '{print $1}') = nsxlog01 ] && sudo sed -i -e 's/nsxlog01/nsxlog02/' /etc/rsyslog.conf

再起動する。
sudo /etc/init.d/rsyslog restart


ログローテーションによるログの保存期間を変えたり、圧縮したり、暗号化したり、オブジェクト・ストレージに転送したりするとよいと思います。Syslog転送を暗号化する必要がある場合もあります。今回は検証なのでこのままにしておきます。


次回は、やっとvCenterを導入します。

0 件のコメント:

コメントを投稿