SSブログ

CentOS 6.8へのアップデート後にshutdownでエラーメッセージが表示される [CentOS]

1. 発生事象


shutdown 時に、下記のファイルが存在しない旨のメッセージが出力される。
・/var/lib/alsa/asound.state

(補足)
・CentOS 6.7 から CentOS 6.8 へのアップデート後に発生するようになった。
・/etc/init.d/halt 内の alsactl により使用される。
・該当するパッケージ: alsa-utils-1.1.0-8.el6.i686


2. 原因


アップデートにより、alsactl が使用するファイルのパスが変わったためである。

・alsa-utils-1.0.22-9.el6_6.i686 の場合
 /etc/asound.state

・alsa-utils-1.1.0-8.el6.i686 の場合
 /var/lib/alsa/asound.state


3. 対処方法


下記の手順で、当該ファイルを作成する。

# cd /var/lib
# mkdir alsa
# chmod 755 alsa

# cd alsa
# touch asound.state
# chmod 644 asound.state


CentOS 6.8の不具合 [CentOS]

CentOS 6.7 から 6.8 へのアップデート後、以下の不具合が発生するようになってしまった。
・現時点では原因は不明
・対応を検討中

1. ノード名を付けて指定したディスプレイをオープンできない
% xterm -display localhost:0
xterm Xt error: Can't open display: localhost:0

% xterm -display `hostname`:0
xterm Xt error: Can't open display: xxx.xxx.xxx:0

% xterm -display `hostname -i`:0
xterm Xt error: Can't open display: 192.168.0.11:0


(補足)
・当該パッケージ: xorg-x11-server-Xorg-1.17.4-9.el6.centos.i686
・'xhost +' を実行しても状況に変化はない。
・ノード名を付けない場合(-display :0)には、オープンできる。


2. rsh-server が正常に機能しない


(1) 即座にクローズされる。

% rsh `hostname`    … テストのためローカルノード上で実行
rlogin: connection closed.


(2) ログインできても、プロンプトが表示されない。

% rsh `hostname` /bin/bash    … テストのためローカルノード上で実行
exit  ... コマンドの実行は可能


(補足)
・当該パッケージ: rsh-server-0.17-64.el6.i686
・rsh-server のバージョンはアップデート前と同じである。


3. telnet-server が正常に機能しない


・プロンプトの 1 カラム目が表示されない。
・入力がエコーされない(ただし、コマンドの実行、実行結果の出力は可能)。

% telnet `hostname`    … テストのためローカルノード上で実行
Trying 192.168.0.11...
Connected to xxx.xxx.xxx.
Escape character is '^]'.
CentOS release 6.8 (Final)
Kernel 2.6.32-71.29.1.el6.i686 on an i686
ogin: 
      Password: 


(補足)
・当該パッケージ: telnet-server-0.17-48.el6.i686
・telnet-server のバージョンはアップデート前と同じである。


[追記]


CentOS 6.8へのアップデート後にlogrotateでエラーが発生 [CentOS]

1. 発生事象


/etc/cron.daily/logrotate の実行で、下記のエラーが発生する。

error: consolekit:1 duplicate log entry for /var/log/ConsoleKit/history
error: found error in /var/log/ConsoleKit/history , skipping


(補足)
・CentOS 6.7 から CentOS 6.8 へのアップデート後に発生するようになった。
・該当するパッケージ: ConsoleKit-0.4.1-6.el6.i686


2. 原因


/etc/logrotate.d/ に ConsoleKit と consolekit が存在するため。

(補足)
バージョンアップの際に、consolekit が削除されなかったものと思われる。
・ConsoleKit-0.4.1-3.el6.i686: /etc/logrotate.d/consolekit を使用
・ConsoleKit-0.4.1-6.el6.i686: /etc/logrotate.d/ConsoleKit を使用


3. 対処方法


/etc/logrotate.d/consolekit を削除する。



ntpdとchronydの違い [CentOS]

CentOS 7 の初期設定状態では、ntpd に替わり chronyd が使用される。
そこで、ntpd と chronyd について、違いを調べてみた。
なお、以下はドキュメント・ベースでの情報である(chronyd を使用していないため)。

# ソフトウェアのバージョン
・chrony-2.1.1-1.el7.centos.x86_64
・ntp-4.2.6p5-22.el7.centos.1.x86_64

1. chronyd にのみある機能


(1) ハードウェアクロックを同期することができる。

# ハードウェアクロック(RTC) を同期する(11 分毎に実施)。
rtcsync


・/etc/chrony.conf の初期値として設定されている。


(2) step/slew モードの切り替えを細かく指定できる。

(例)
# 時刻のズレが 10 秒よりも大きい場合、最初の 3 回は slew モードの代わりに
# step モードを使用する。
makestep 10 3


・/etc/chrony.conf の初期値として設定されている。


(3) slew モードでの同期速度の指定ができる。

maxslewrate <rate>


・default: 83333.333 (msec/sec)
・ntpd の slew レートは 500 (msec/sec) 固定である。


(4) slew モードで同期できるズレの最大値を指定できる。

(例)
# 最初のクロック更新後に 時刻のズレのチェックを 2 回無視し、その後の
# チェックで 1000 秒よりもがズレが大きい場合に時刻同期を終了する。
maxchange 1000 1 2


(補足)
ntpd の場合には、下記の通りである。
・-x オプションの指定なしの場合: 128 (msec)
・-x オプションの指定ありの場合: 600 (sec)


(5) 使用するポートを指定できる。

port <port-number>


・default: 123
・ntpd での使用ポートは 123 固定である。


2. 備考


(1) CentOS 7 での ntpd の使用


chronyd を停止することにより、ntpd が使用可能となる。

# systemctl stop chronyd
# systemctl disable chronyd
# systemctl start ntpd
# systemctl enable ntpd


(2) 参考情報


access.redhat.com/documentation/
chrony.tuxfamily.org/doc/



DRBDの試用 [CentOS]

Linux において、共有ディスクを使用しない HA クラスタ環境の構築について検討するため、DRBD を試用してみた。
詳細は、以下の通りである。

1. DRBD (Distributed Replicated Block Device) の機能


複数のノード間で、パーティションをミラーリングするソフトウェアである。

・TCP/IP ネットワークを利用して同期(ミラーリング)される。
・特別なハードウェアを必要としない。
・Linux 上で動作するオープンソース・ソフトウェアである。
・クラスタリングソフトと組み合わせて、Shared nothing 型の HA クラスタを構成できる。


2. システム要件


(1) ソフトウェアのバージョン


・OS: CentOS 6.7
・drbd84-utils-8.9.5-1.el6.elrepo.i686
・kmod-drbd84-8.4.7-1_1.el6.elrepo.i686


(2) 使用するノード


・vm1.private.net(192.168.0.21)
・vm4.private.net(192.168.0.24)


(3) 使用するデバイス


・パーティション: /dev/sdb1
・DRBD 用デバイス: /dev/drbd0


3. 導入手順

3-1. 手順-1


関係するすべてのノードで、下記の手順を実施する。

(1) ネットワーク環境の構築

(2) パッケージのインストール


(a) elrepo.org をリポジトリに追加

(b) パッケージのインストール

# yum install drbd84-utils kmod-drbd84


(3) DRBD の設定


(a) /etc/drbd.d/global_common.conf の編集

global {
    usage-count no;
}

common {
    handlers {
    }

    startup {
        wfc-timeout 60;
    }

    options {
    }

    disk {
        resync-rate 50M;
    }

    net {
        protocol C;
        csums-alg sha1;
        verify-alg sha1;
    }
}


・usage-count: DRBD プロジェクトへの情報提供の有無(yes/no)
・wfc-timeout: 起動時の他ノードとの接続タイムアウト(sec)
・resync-rate: 再同期に使用する最大帯域幅(Byte/sec)
・protocol: 同期プロトコルのモード(A:非同期, B:メモリ同期, C:同期)
・csums-alg: 更新の検出に使用するアルゴリズム
・verify-alg: 照合に使用するアルゴリズム


(b) /etc/drbd.d/r0.res の編集

resource r0 {
    meta-disk internal;
    device /dev/drbd0;
    disk /dev/sdb1;

    on vm1.private.net {
        address 192.168.0.21:7788;
    }
    on vm4.private.net {
        address 192.168.0.24:7788;
    }
}


・meta-disk: メタ情報の保存方法
・device: DRBD デバイス
・disk: DRBD デバイスを構成するパーティション
・address: ノードのアドレス、使用するポート


(c) メタデータの作成

# drbdadm create-md r0


(補足)
パーティション内にファイルシステムが存在する場合には、エラーとなる。
(その旨のエラーが出力される。)
この場合には、下記の手順により当該パーティションを 0 クリアする。
# dd if=/dev/zero of=<dev-path> bs=1M count=1


(4) リソースの有効化


(a) リソースの有効化

# drbdadm up r0


(b) 状態の確認

# cat /proc/drbd


正常終了した場合には、下記のように出力される。
cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent


(5) drbd の自動起動の有効化

# chkconfig drbd on

3-2. 手順-2


該当するノードで、下記の手順を実施する。

(1) 初期同期


vm4.private.net(同期先) で下記の手順を実施する。

(a) 現在のデータの破棄

# drbdadm invalidate r0


(b) 状況の確認

# cat /proc/dbrd


同期完了後には、下記のように出力される。
cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate


(2) ファイルシステムの作成


vm1.private.net(同期元) で下記の手順を実施する。

(a) Primary への移行

# drbdadm primary r0


(b) ファイルシステムの作成

# mke2fs -j /dev/drbd0


(補足)
同期されるため、他ノードでの実施は不要である。


4. DRBD デバイスの使用方法


Primary ノードにおいて、通常のデバイスと同様に扱うことができる。

(1) Primary または Secondary ノードへの移行


下記のコマンドを実施する。
ただし、同時に複数のノードが Primary ノードとなることはできない。

[Primary ノードへの移行の場合]
# drbdadm primary 

[Secondary ノードへの移行の場合]
# drbdadm secondary 

(例)
# drbdadm primary r0
# drbdadm secondary r0


(2) 状況の確認


下記のコマンドを実施する。

# cat /proc/drbd


[Primary ノードの場合]
cs:Connected ro:Primary/Secondary と出力される。

[Secondary ノードの場合]
cs:Connected ro:Secondary/Primary と出力される。


5. 参考情報


・http://qiita.com/takehironet/items/13518725ee7c694efe90
・https://blog.3ware.co.jp/drbd-users-guide-8.4/drbd-users-guide.html



Pacemaker + Corosyncでのクラスタ環境の構築 [CentOS]

Pacemaker を使用したクラスタ環境の構築を検討しており、手順の確認等のため、実際に環境を構築してみた。
詳細は、以下の通りである。

1. 要件


(1) ソフトウエアのバージョン


・OS: CentOS 6.7
・pacemaker-1.1.12-8.el6_7.2.i686
・corosync-1.4.7-2.el6.i686


(2) システム要件


(a) インターコネクト用 LAN


サービス LAN を インターコネクト用としても使用する。
(192.168.0.0/24)


(b) クラスタを構成するノード


KVM の VM 上に構築した 2 個のノードでクラスタを構成する。


(c) 共有ディスク


共有ディスク用のディスクイメージを追加し、該当する VM 間で共有する。
(共有ディスク: /dev/sdb)


(d) クラスタリングの対象とするサービス


NFS サーバー


2. 実施手順

2-1. パッケージのインストール


すべてのノードで下記コマンドを実施する。

# yum install pacemaker corosync pcs


・corosync: クラスタ制御
・pacemaker: リソース制御
・pcs: Pacemaker 設定用のコマンドライン・ツール


2-2. Corosync の設定


いずれかのノードで下記の手順を実施し、当該ファイルを他のノードにコピーする。

(1) /etc/corosync/corosync.conf の作成

# cd /etc/corosync
# cp -p corosync.conf.example corosync.conf


(2) /etc/corosync/corosync.conf の編集

# diff corosync.conf corosync.conf.example
25c25
<               bindnetaddr: 192.168.0.0
---
>               bindnetaddr: 192.168.1.0


192.168.0.0 をインターコネクト用 LAN として定義する。


2-3. サービスの起動


すべてのノードで下記の手順を実施する。

(1) サービスの起動

# /etc/init.d/corosync start
# /etc/init.d/pacemaker start

# chkconfig corosync on
# chkconfig pacemaker on


(2) 状態の確認

# crm_mon
Last updated: ...
Last change: ...
Stack: classic openais (with plugin)
Current DC: vm2.private.net - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
0 Resources configured

Online: [ vm2.private.net vm3.private.net ]


(補足)
crm_mon コマンドの終了: Ctrl+C


2-4. クラスタ特性の設定


いずれかのノードで下記の手順を実施する。

(1) クラスタ特性の設定

# pcs property set stonith-enabled=false
# pcs property set no-quorum-policy=ignore


(2) 設定状況の確認

# pcs property list

2-5. リソースの定義

2-5-1. VIP の定義


いずれかのノードで下記の手順を実施する。

(1) リソースの定義

# pcs resource create vip ocf:heartbeat:IPaddr2 \
ip=192.168.0.20 cidr_netmask=24 \
nic="eth0" \
op monitor interval=30s


192.168.0.20/24 をリソースとして定義する。


(2) 状態の確認

# pcs status resources
vip    (ocf::heartbeat:IPaddr2):       Started vm2.private.net

2-5-2. VIPcheck の定義


スプリットブレイン対策として、いずれかのノードで下記の手順を実施する。
ただし、リソース・エージェントの追加はすべてのノードで実施する。

(1) リソース・エージェントの追加


(a) VIPcheck リソース・エージェントの入手

http://sourceforge.jp/projects/linux-ha/downloads/45456/VIPcheck/


(b) リソース・エージェントの追加

# cd /usr/lib/ocf/resource.d
# mkdir additional
# cd additional
# cp -p VIPcheck .
# chown root:root VIPcheck
# chmod 755 VIPcheck
# cd ../heartbeat
# ln -s ../additional/VIPcheck .


(2) リソースの定義

# pcs resource create vip-check ocf:heartbeat:VIPcheck \
target_ip=192.168.0.20 count=1 wait=10 \
op start interval=0s timeout=90s on-fail=restart start-delay=4s

# pcs constraint colocation add vip with vip-check INFINITY ... (注1)
# pcs constraint order vip-check then vip ... (注2)

(注1) 実行するノードの設定
(注2) 実行順序設定


(3) 状態の確認

# pcs constraint
Location Constraints:
Ordering Constraints:
  start vip-check then start vip (kind:Mandatory)
Colocation Constraints:
  vip with vip-check (score:INFINITY)

2-5-3. ファイルシステムの定義


いずれかのノードで下記の手順を実施する。

(1) リソースの定義

# pcs resource create fs-nfs ocf:heartbeat:Filesystem \
device=/dev/sdb1 directory=/share fstype="ext3"

# pcs constraint colocation add fs-nfs with vip INFINITY ... (注1)
# pcs constraint order vip then fs-nfs ... (注2)

(注1) VIP が割り当てられたノードでリソースを有効にするための設定
(注2) VIP が割り当てられた後にリソースを有効にするための設定


/dev/sdb1 をマウントした /share をリソースとして定義する。


(2) 状態の確認

# pcs constraint
Location Constraints:
Ordering Constraints:
  start vip-check then start vip (kind:Mandatory)
  start vip then start fs-nfs (kind:Mandatory)
Colocation Constraints:
  vip with vip-check (score:INFINITY)
  fs-nfs with vip (score:INFINITY)

2-5-4. サービスの定義 (nfsd)


(1)〜(3) の手順をすべてのノードで実施する。
また、いずれかのノードで (4) 以降の手順を実施する。

(1) nfs の自動起動の無効化

# chkconfig nfs off


(2) ファイルシステムの export


(a) /etc/exports の作成

# cat /etc/exports
/share    192.168.0.0/24(rw,no_root_squash,sync)


(b) exportfs の実行

# exportfs -av


(3) nfs のカスタマイズ


系切り替え後の待ち時間を短縮するために、/etc/sysconfig/nfs を編集する。

# cd /etc/sysconfig/
# diff nfs nfs.org
50,52c50,52
< NFSD_V4_GRACE=10
< NFSD_V4_LEASE=10
< NLM_GRACE_PERIOD=10
---
> #NFSD_V4_GRACE=90
> #NFSD_V4_LEASE=90
> #NLM_GRACE_PERIOD=90


(4) リソースの定義

# pcs resource create nfs-server ocf:heartbeat:nfsserver \
nfs_init_script="/etc/init.d/nfs" nfs_ip="192.168.0.20" \
op start interval="0s" timeout="120s" \
op monitor interval="10s" timeout="60s" on-fail="restart" \
op stop interval="0s" timeout="120s"

# pcs constraint colocation add nfs-server with fs-nfs INFINITY ... (注1)
# pcs constraint order fs-nfs then nfs-server ... (注2)

(注1) fs-nfs が割り当てられたノードで nfsd を起動するための設定
(注2) fs-nfs が割り当てられた後に nfsd を起動するための設定


(5) 状態の確認

# pcs constraint
Location Constraints:
Ordering Constraints:
  start vip-check then start vip (kind:Mandatory)
  start vip then start fs-nfs (kind:Mandatory)
  start fs-nfs then start nfs-server (kind:Mandatory)
Colocation Constraints:
  vip with vip-check (score:INFINITY)
  fs-nfs with vip (score:INFINITY)
  nfs-server with fs-nfs (score:INFINITY)

2-6. テスト


(1) テストの準備


・vm2.private.net、vm3.private.net をそれぞれ Active、Standby ノードにする。
・NFS クライアントで、192.168.0.20:/share をマウントする。


(2) テストの実施


(a) test-1


・vm2.private.net 上で nfsd を停止する。
 (# /etc/init.d/nfs stop)
・vm2.private.net 上で nfsd が再起動されることを確認する。


(b) test-2


・vm2.private.net 上で pacemaker を停止する。
 (# /etc/init.d/pacemaker stop)
・すべてのリソースが vm3.private.net 上に移動することを確認する。
・クライアントで 192.168.0.20:/share がマウントできることを確認する。


(c) test-3


・vm2.private.net 上で eth0 を停止する。
 (# ifconfig eth0 down)
・test-2 と同じことを確認する。


(補足)
リソースの状態は、下記のコマンドで確認できる。

# crm_mon -A

2-7. logrotate の設定


下記ログのローテーションを行う設定を追加する。

・/var/log/pacemaker.log
・/var/log/cluster/corosync.log


[備考]


CentOS 6.x上のFirefoxの異常終了 [CentOS]

1. 発生事象


昨年末から CentOS 6.x(32.bit) 上の Firefox が度々異常終了する。
(現在 Firefox 45.0.2 を主に使用しており、上記の事象が発生する。)

(補足)
・mozilla.org からダウンロードした Firefox を使用している。
・Debian 7/8(32bit)、CentOS 7 上では発生しない(またはこれ程酷い状況ではない)。
・Firefox 45.0.2 では発生頻度が低くなったが、まだ発生する。


2. 対処方法


改善されるまで、Firefox 38.7.1esr を使用する。
(http://ftp.mozilla.org/pub/firefox/releases/38.7.1esr/)

(補足)
数日間使用してみたが、現時点では上記事象は発生していない。



Emacs 24でのコマンド引数のファイル名補完 [CentOS]

# Emacs のバージョン
emacs-24.3-11.el7.x86_64
emacs-24.3-18.el7.x86_64

1. 発生事象


inferior shell において、コマンド引数のファイル名補完が想定通りにならないことがある。

(例)
rpm コマンドの引数指定で、指定ディレクトリのファイル名が補完されない。
・インストール済の RPM パッケージが補完対象となる。
 (ミニバッファに "Getting list of installed rpms...done" と表示される。)

% ls -1
fcitx-4.2.8.4-1.fc20.x86_64.rpm
fcitx-anthy-0.2.0-2.fc20.x86_64.rpm

% ls -l fcitx
<= Tab の押下後、カレントディレクトリのファイルで補完される

% rpm -qpi fcitx
<= Tab の押下後、カレントディレクトリのファイルで補完されない

2. 原因


Emacs 24 において、仕様が変更されたためである。


3. 対処方法


上記のような場合には、下記の手順を実施する。

(1) *Completions* バッファを kill-buffer する。

(2) M-? を押下し、補完候補を表示する。


M-? は comint-dynamic-list-filename-completions にバインドされている。


(3) *Completions* バッファ内の補完候補を選択する。


補完候補にカーソルを移動し、Enter を押下する。

または

補完候補をマウスの中ボタンでクリックする。


4. 備考


以前の仕様に近い動作にするためには、~/.emacs に下記の設定を追加する。

(add-hook 'shell-mode-hook
          '(lambda ()
             (add-to-list 'completion-at-point-functions
                          'comint-dynamic-complete-filename)))


(補足)
・ミニバッファに余分なメッセージが表示されることがある。
・コマンド名の補完では、一度 "No match" と表示される。
 (しばらく待つか、再度 Tab を押下すると補完される。)



KVM上のVMへのP2V [CentOS]

先日作成した KVM 上の VM への P2V を行った。
実施した手順は、以下の通りである。

## OS のバージョン
・KVM ホスト: CentOS 7.2
・ゲスト OS: CentOS 6.7
## 方針
可能な限り、OS の提供する機能を使用する。

1. 準備


VM 上にコピーする OS のインストールメディアを用意する。


・rescue モードの command shell を使用するだけなので、minimail.iso で充分である。
・メジャーバージョンが一致すれは問題ないと思われる。


2. 物理サーバーのバックアップの取得


(1) パーティション毎のパックアップ

(例)
# dump -0 -f - /dev/sda1 | gzip > root.dmp.gz
# dump -0 -f - /dev/sda2 | gzip > home.dmp.gz


(2) KVM ホスト上へのバックアップデータのコピー


上記で取得したバックアップデータを KVM ホスト上へコピーする。


3. VM の作成


(1) VM の作成


・ディスクのサイズは、物理サーバーでの設定と同等にする。
・インストールメディアとして、上記で準備したファイルを指定する。


(2) Rescue モードの command shell の起動


(a) [Rescue installed system] の選択

(b) 言語、キーボードタイプの選択


・[Choose a Language] で [English] または [Japanese] を選択する。
・[Keyboard Type] で [jp106] を選択する。


(c) Network I/F の設定


・[Setup Networking] で [Yes] を選択する。
・IP address、Gateway、Name server に適当な設定を行う。


(d) command shell の起動


・[Rescue] で [Skip] を選択する。
・[shell] を選択した状態で、[Ok] を選択する。


4. command shell でのバックアップデータのリストア


(1) パーティションの作成


・fdisk が使用可能である。
・cfdisk を使用する場合には、KVM ホスト経由でコピーする。
 (scp、rcp、ftp が使用可能)
・作成したパーティションには、ファイルシステムを作成する。
 (mke2fs を使用)


(2) バックアップデータのリストア

(例)
# mkdir /tmp/root
# mount -t ext3 /dev/sda1 /tmp/root
# cd /tmp/root
# ssh <kvm_host> gzip -dc /work/root.dmp.gz | restore -rf -
# rm restoresymtable
# umount /tmp/root
(/home についても同様)


(3) デバイスパスの変更


デバイスパスが変わる場合には、下記ファイルの設定を対応させる。

・/etc/fstab
・/boot/grub/grub.conf


(4) GRUB のインストール

(例)
# grub
grub> root (hd0,0)
grub> setup (hd0)
grub> quit


(5) command shell の終了

# exit
その後、[reboot] を選択した状態で、[Ok] を選択する。

5. ゲスト OS での設定


・IP アドレス、ホスト名の変更
・swap の設定



KVMでのマイグレーションの実施 [CentOS]

先日 CentOS 7.2 上に作成した KVM の仮想環境へ、マイグレーションの実行環境を追加した。
実施手順は、以下の通りである。

# IP アドレスに関する情報
・192.168.0.12 … 既存の KVM ホスト、NFS サーバー
・192.168.0.11 … 追加した KVM ホスト

1. パッケージの追加


(1) openssh-askpass (SSH でのパスワードの入力機能)

# yum install openssh-askpass.x86_64

2. マイグレーションの実行環境の構築

2-1. KVM ホストの追加


(1) KVM ホストの複製


(a) 既存の KVM ホストを複製し、2 個目の KVM ホストを作成する。

(b) ホスト名、IP アドレスを変更する。


編集するファイルは、下記の通りである。

・/etc/sysconfig/network-scripts/ifcfg-enp2s0
・/etc/hostname
・/etc/hosts


(2) /etc/hosts の編集


KVM ホスト間で名前解決ができるように、当該ホストの設定を追加する。


2-2. 共有ディスクの設定


2 ノードからアクセスできる外部ディスクがないため、NFS を使用する。
実施手順は、下記の通りである。

(1) NFS サーバーの設定


KVM ホストの一方を NFS サーバーにする。

(a) NFS サービスの自動起動の設定

# systemctl enable nfs


(b) ディスクイメージの保存領域の別パーティション化


・/var/lib/libvirt/images 用のパーティションを作成する。
・上記パーティションを /kvm_data にマウントする。
・/var/lib/libvirt/images を /kvm_data にコピーする。


(c) /etc/exports ファイルの編集 (設定例)

# cat /etc/exports
/kvm_data 192.168.0.0/24(rw,no_root_squash,sync)


(d) /etc/fstab の編集 (設定例、各エントリは一行で設定)

# /kvm_data のマウント
/dev/sdc11  /kvm_data  ext3  defaults  0  2

# /var/lib/libvirt/images の NFS マウント(ローカルディスクの NFS マウント)
192.168.0.12:/kvm_data  /var/lib/libvirt/images  nfs \
defaults,noac,hard,intr  0  0


(e) KVM ホストの再起動


(2) NFS クライアントの設定


他方の KVM ホストで、NFS サーバーの /kvm_data を NFS マウントする。
(NFS サーバーの起動が完了した後に実施する。)

(a) /etc/fstab の編集 (設定例、各エントリは一行で設定)

192.168.0.12:/kvm_data  /var/lib/libvirt/images  nfs \
defaults,noac,hard,intr  0  0


(b) KVM ホストの再起動

(補足)
NFS マウントは、KVM の設定で対応することも可能である。
手順は、下記の通りである。
・KVM の Storage 設定で、netfs タイプの Storage Pool を作成

Name: NFS (任意の名前で可)
Type: netfs
Target Path: /var/lib/libvirt/images
Host Name: NFS サーバーのホスト名
Source Path: /kvm_data (NFS サーバー上のパス)


・Storage Pool の AutoStart 設定の変更
 default(Filesystem Directory) を false に変更
 NFS(Network Exported Directory) を ture に変更


2-3. virt-manager の設定


マイグレーション先の KVM ホストを追加する。

(1) virt-manager の起動

% virt-manager


(2) 接続先の追加


[File] -> [Add Connection] を選択し、接続先を登録する。


(a) 接続先の指定

Hypervisor: QEMU/KVM
Connection to remote host: 選択
Method: SSH
Username: root
Hostname: マイグレーション先のホスト名


(b) [Connect] を選択


接続先での root のパスワードの入力が求められる。


2-4. その他の設定


(1) KVM ホストの UUID の変更


2 ノードで UUID が同じ場合には、下記の手順を実施する。
未実施の場合、同一のホストと判断され、マイグレーションを実施できない。

(a) KVM ホストの UUID の確認


2 ノードで下記のコマンドを実行する。

# dmidecode -s system-uuid


(b) random UUID の取得

# cat /proc/sys/kernel/random/uuid


(c) /etc/libvirt/libvirtd.conf の編集


host_uuid に上記の random UUID の値を設定する。


(d) libvirtd の再起動

# systemctl restart libvirtd


(2) ディスク・キャッシュの設定設定


下記の手順を実施し、キャッシュを none にする。
未実施の場合、下記メッセージが表示され、マイグレーションを実施できない。
(マイグレーション時に、[Allow unsafe] を選択する場合を除く。)

(a) 表示されるメッセージ

Unable to migrate guest:
安全ではないマイグレーション:
ディスクが cache != none を使用していると、マイグレーションにより
データが破損するかもしれません。


(b) 対処方法


VM 毎に下記の手順を実施する。

・メニューのアイコンから [Show virrual hardware details] を実行
・左側の一覧から該当するディスクを選択
・[Performance options] を展開
・[Cache mode] で [none] を選択
・[Apply] を選択
・ゲスト OS を shutdown
・ゲスト OS を 起動


3. マイグレーションの実施


(1) KVM ホストへの接続


マイグレーション元/先となる KVM ホストに接続する。


(2) VM の開始


マイグレーションを行う VM を起動する。


(3) マイグレーションの開始


・VM を選択し、右クリックで [Migrate] を選択
・マイグレーション先の VM ホストを選択



この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。