はじめに
こんばんは、mirukyです。
本記事はLPIC-3 306: High Availability and Storage Clusters(306-300)の 全トピック・全サブトピック を公式試験要項(Objectives V3.0)に基づいて網羅した試験対策記事です。
LPIC-3 306はLinuxにおける高可用性(HA)クラスタと分散ストレージに特化した最上位資格です。
Pacemaker/Corosync、HAProxy、DRBD、GlusterFS、Cephなど、エンタープライズのインフラ基盤を支える技術が出題範囲となります。
LPIC-3 306 試験概要
| 項目 | 内容 |
|---|---|
| 試験コード | 306-300 |
| 試験バージョン | V3.0 |
| 前提条件 | 有効なLPIC-2資格を保有していること |
| 問題数 | 60問 |
| 試験時間 | 90分 |
| 合格ライン | 500点 / 800点満点(約65%) |
| 出題形式 | 選択式・複数選択式・穴埋め式 |
| 有効期間 | 5年 |
| 受験料 | 19,800円(税込)(出典:Pearson VUE公式マーケットプレイス) |
LPIC-3 の位置付け
① LPIC-1(基礎) → LPIC-2(サーバー構築) → LPIC-3(エンタープライズ・専門領域)
- 300: Mixed Environments
- 305: Virtualization & Containerization
- 306: High Availability & Storage Clusters ← 本記事
試験の中心テーマ
- HAクラスタ管理:Pacemaker/Corosync、HAProxy、keepalived、LVS
- HAクラスタストレージ:DRBD、GFS2、OCFS2
- HA分散ストレージ:GlusterFS、Ceph
- 単一ノードHA:RAID、LVM、ネットワークボンディング
Topic 361:高可用性クラスタ管理
361.1 高可用性の概念と理論(Weight: 6)
重要用語
| 用語 | 説明 |
|---|---|
| HA(High Availability) | システムの高可用性。ダウンタイムを最小限にする設計 |
| SLA(Service Level Agreement) | サービスの稼働率保証(例:99.99% = 年間約52分のダウンタイム) |
| MTBF(Mean Time Between Failures) | 故障間の平均時間。長いほど信頼性が高い |
| MTTR(Mean Time To Repair) | 修復までの平均時間。短いほど復旧が速い |
| クォーラム(Quorum) | クラスタの過半数ノードが動作していることの確認。スプリットブレイン防止 |
| フェンシング(Fencing) | 障害ノードをクラスタから強制排除する仕組み。STONITH |
| スプリットブレイン(Split Brain) | クラスタが分断され、各パーティションが独立して動作してしまう状態 |
| フェイルオーバー(Failover) | 障害発生時に別ノードにサービスを自動的に引き継ぐこと |
| フェイルバック(Failback) | 障害復旧後に元のノードにサービスを戻すこと |
| STONITH(Shoot The Other Node In The Head) | 障害ノードを強制的にシャットダウン/リセットする仕組み |
クラスタアーキテクチャ
| アーキテクチャ | 説明 |
|---|---|
| Active/Passive | 1台が稼働、1台が待機。フェイルオーバー時に待機ノードが引き継ぐ |
| Active/Active | 全ノードが同時にサービスを提供。負荷分散 |
| ロードバランスクラスタ | リクエストを複数ノードに分散。LVS、HAProxy等 |
| フェイルオーバークラスタ | 障害時にサービスを自動移行。Pacemaker等 |
| Shared-Nothing | 各ノードが独立したストレージを持つ。DRBDで同期 |
| Shared-Disk | 共有ストレージを使用。GFS2、OCFS2等 |
可用性レベル
| 可用性 | 年間ダウンタイム |
|---|---|
| 99% | 約3日15時間 |
| 99.9% | 約8時間46分 |
| 99.99% | 約52分34秒 |
| 99.999% | 約5分15秒 |
361.2 ロードバランスクラスタ(Weight: 8)
Weight 8 は 本試験で最も出題比率が高い サブトピックの一つです。
LVS(Linux Virtual Server)
LVSの転送モード
| モード | 説明 |
|---|---|
| NAT | パケットのアドレスを書き換えて転送。リアルサーバーはプライベートIP |
| DR(Direct Routing) | MACアドレスを書き換えて転送。応答はクライアントに直接返す |
| TUN(Tunneling) | IPトンネリングで転送。リアルサーバーが地理的に分散可能 |
スケジューリングアルゴリズム
| アルゴリズム | 略称 | 説明 |
|---|---|---|
| Round Robin | rr |
順番に振り分け |
| Weighted Round Robin | wrr |
重み付き順番振り分け |
| Least Connections | lc |
接続数が最も少ないサーバーに転送 |
| Weighted Least Connections | wlc |
重み付き最小接続 |
| Source Hashing | sh |
送信元IPに基づいて固定のサーバーに転送 |
| Destination Hashing | dh |
宛先IPに基づいて転送 |
ipvsadm コマンド集
# 仮想サーバーの追加
ipvsadm -A -t [仮想IP]:[ポート] -s [アルゴリズム]
ipvsadm -A -t 192.168.1.100:80 -s rr # ラウンドロビン
# リアルサーバーの追加
ipvsadm -a -t [仮想IP]:[ポート] -r [リアルIP]:[ポート] -m # NATモード
ipvsadm -a -t [仮想IP]:[ポート] -r [リアルIP]:[ポート] -g # DRモード
ipvsadm -a -t [仮想IP]:[ポート] -r [リアルIP]:[ポート] -i # TUNモード
# 重み付き
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.10:80 -g -w 3 # 重み3
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.11:80 -g -w 1 # 重み1
# 一覧表示
ipvsadm -L -n # 現在のLVS設定を表示
ipvsadm -L -n --stats # 統計付き
ipvsadm -L -n --rate # レート付き
# ルールの削除
ipvsadm -d -t [仮想IP]:[ポート] -r [リアルIP]:[ポート] # リアルサーバー削除
ipvsadm -D -t [仮想IP]:[ポート] # 仮想サーバー削除
ipvsadm -C # 全ルール削除
# 設定の保存・復元
ipvsadm-save > /etc/sysconfig/ipvsadm # 保存
ipvsadm-restore < /etc/sysconfig/ipvsadm # 復元
keepalived
設定例(/etc/keepalived/keepalived.conf)
vrrp_instance VI_1 {
state MASTER # MASTER または BACKUP
interface eth0 # VRRPで使用するインターフェース
virtual_router_id 51 # VRRPルーターID(同一グループで統一)
priority 100 # 優先度(MASTERを高く設定)
advert_int 1 # 広告間隔(秒)
authentication {
auth_type PASS
auth_pass secret123
}
virtual_ipaddress {
192.168.1.100/24 # 仮想IP(VIP)
}
}
virtual_server 192.168.1.100 80 {
delay_loop 6 # ヘルスチェック間隔(秒)
lb_algo rr # スケジューリングアルゴリズム
lb_kind DR # 転送モード(NAT/DR/TUN)
protocol TCP
real_server 192.168.1.10 80 {
weight 1
HTTP_GET {
url {
path /health
status_code 200
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.1.11 80 {
weight 1
HTTP_GET {
url {
path /health
status_code 200
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
コマンド集
systemctl start keepalived # 起動
systemctl enable keepalived # 自動起動有効化
ip addr show # VIPの確認
journalctl -u keepalived # ログ確認
HAProxy
設定例(/etc/haproxy/haproxy.cfg)
global
log /dev/log local0
maxconn 4096
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
retries 3
frontend http_front
bind *:80
default_backend http_back
stats uri /haproxy?stats # 統計画面
stats auth admin:password # 統計画面の認証
backend http_back
balance roundrobin # ロードバランスアルゴリズム
option httpchk GET /health # ヘルスチェック
server web1 192.168.1.10:80 check weight 3
server web2 192.168.1.11:80 check weight 1
server web3 192.168.1.12:80 check backup # バックアップサーバー
listen mysql_cluster
bind *:3306
mode tcp
balance leastconn
option mysql-check user haproxy
server db1 192.168.1.20:3306 check
server db2 192.168.1.21:3306 check backup
コマンド集
systemctl start haproxy # 起動
haproxy -c -f /etc/haproxy/haproxy.cfg # 設定ファイルの構文チェック
haproxy -f /etc/haproxy/haproxy.cfg -sf $(cat /var/run/haproxy.pid) # 無停止リロード
# 統計画面: http://[サーバーIP]/haproxy?stats
ldirectord
設定例(/etc/ha.d/ldirectord.cf)
checktimeout=3
checkinterval=10
autoreload=yes
logfile="/var/log/ldirectord.log"
virtual=192.168.1.100:80
real=192.168.1.10:80 gate
real=192.168.1.11:80 gate
scheduler=rr
protocol=tcp
checktype=negotiate
service=http
request="health"
receive="OK"
361.3 フェイルオーバークラスタ(Weight: 8)
Weight 8 は 361.2と並んで最も出題比率が高い サブトピックです。
Pacemaker / Corosync アーキテクチャ
① Pacemaker(クラスタリソースマネージャ)
- リソースエージェント(RA)の種類:OCF / LSB(init スクリプト) / systemd
② Corosync(クラスタ通信レイヤー) - ノード間のメッセージング・メンバーシップ管理
Corosync 設定(/etc/corosync/corosync.conf)
totem {
version: 2
cluster_name: mycluster
transport: knet
crypto_cipher: aes256
crypto_hash: sha256
}
nodelist {
node {
ring0_addr: 192.168.1.10
name: node1
nodeid: 1
}
node {
ring0_addr: 192.168.1.11
name: node2
nodeid: 2
}
}
quorum {
provider: corosync_votequorum
two_node: 1
}
logging {
to_logfile: yes
logfile: /var/log/corosync/corosync.log
to_syslog: yes
}
pcs コマンド集(Pacemaker管理CLI)
クラスタの構築・管理
# クラスタの初期設定
pcs host auth [ノード1] [ノード2] # ノード認証
pcs cluster setup [クラスタ名] [ノード1] [ノード2] # クラスタのセットアップ
pcs cluster start --all # 全ノードでクラスタ起動
pcs cluster stop --all # 全ノードでクラスタ停止
pcs cluster enable --all # 自動起動有効化
pcs cluster disable --all # 自動起動無効化
pcs cluster destroy # クラスタの破棄
# クラスタ状態確認
pcs status # クラスタ全体の状態
pcs status nodes # ノード状態
pcs status resources # リソース状態
pcs cluster status # クラスタサービス状態
# Corosync認証キーの生成
corosync-keygen # 認証キー生成
リソースの管理
# リソースの作成
pcs resource create [リソース名] [リソースエージェント] [パラメータ...]
pcs resource create vip ocf:heartbeat:IPaddr2 ip=192.168.1.100 cidr_netmask=24
pcs resource create webserver ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf
# リソースの操作
pcs resource show # リソース一覧
pcs resource show [リソース名] # リソース詳細
pcs resource enable [リソース名] # リソース有効化
pcs resource disable [リソース名] # リソース無効化
pcs resource delete [リソース名] # リソース削除
pcs resource restart [リソース名] # リソース再起動
pcs resource move [リソース名] [ノード名] # リソースを特定ノードに移動
pcs resource clear [リソース名] # 移動制約のクリア
pcs resource cleanup [リソース名] # リソースエラー状態のクリア
pcs resource update [リソース名] [パラメータ=値] # パラメータ変更
# リソースグループ
pcs resource group add [グループ名] [リソース1] [リソース2] # グループ作成
制約(Constraints)
# コロケーション制約(同じノードで動かす/動かさない)
pcs constraint colocation add [リソースA] with [リソースB] score=INFINITY
pcs constraint colocation add webserver with vip INFINITY # webserverをvipと同じノードに
# 順序制約(起動順序)
pcs constraint order [リソースA] then [リソースB]
pcs constraint order vip then webserver # vip→webserverの順に起動
# ロケーション制約(ノードの優先度)
pcs constraint location [リソース名] prefers [ノード名]=[スコア]
pcs constraint location vip prefers node1=100 # node1を優先
# 制約の一覧・削除
pcs constraint list --full # 全制約の表示
pcs constraint remove [制約ID] # 制約の削除
フェンシング(STONITH)
# STONITHデバイスの設定
pcs stonith create [デバイス名] [エージェント] [パラメータ...]
pcs stonith create ipmi-fence fence_ipmilan ipaddr=[IPMI IP] login=[ユーザー名] passwd=[パスワード] pcmk_host_list=[ノード名]
# STONITHの管理
pcs stonith show # STONITHデバイス一覧
pcs stonith fence [ノード名] # 手動フェンシング
pcs property set stonith-enabled=true # STONITH有効化(本番では必須)
pcs property set stonith-enabled=false # STONITH無効化(テスト環境のみ)
# クラスタプロパティ
pcs property set no-quorum-policy=ignore # 2ノード構成でのクォーラム無視
pcs property list # 全プロパティの表示
crm コマンド(レガシーCLI)
crm status # クラスタ状態
crm configure show # 設定の表示
crm configure edit # 設定の編集
crm resource start [リソース名] # リソース起動
crm resource stop [リソース名] # リソース停止
crm node standby [ノード名] # ノードをスタンバイに
crm node online [ノード名] # ノードをオンラインに
重要ファイル
-
/etc/corosync/corosync.conf:Corosync設定 -
/etc/corosync/authkey:Corosync認証キー -
/var/lib/pacemaker/cib/cib.xml:クラスタ情報ベース(CIB)
Topic 362:高可用性クラスタストレージ
362.1 DRBD(Distributed Replicated Block Device)(Weight: 6)
DRBDの概念
① ノード1(Primary)← ネットワーク同期 → ノード2(Secondary)
② 各ノードの構成:/dev/drbd0(仮想ブロックデバイス)→ /dev/sda1(実デバイス)
DRBDの動作モード
| モード | 説明 |
|---|---|
| Protocol A | 非同期。ローカル書き込み完了で応答。最も高速 |
| Protocol B | 半同期。リモートバッファ到達で応答 |
| Protocol C | 同期。リモート書き込み完了で応答。最も安全(推奨) |
DRBDのロール
| ロール | 説明 |
|---|---|
| Primary | 読み書き可能。ファイルシステムをマウントする側 |
| Secondary | 直接アクセス不可。レプリケーションを受信 |
| Dual-Primary | 両ノードが同時にPrimary(クラスタFSが必要) |
設定例(/etc/drbd.d/r0.res)
resource r0 {
protocol C;
on node1 {
device /dev/drbd0;
disk /dev/sda1;
address 192.168.1.10:7789;
meta-disk internal;
}
on node2 {
device /dev/drbd0;
disk /dev/sda1;
address 192.168.1.11:7789;
meta-disk internal;
}
}
コマンド集
# DRBD初期設定
drbdadm create-md [リソース名] # メタデータの作成
drbdadm up [リソース名] # リソースの起動
drbdadm down [リソース名] # リソースの停止
# ロール管理
drbdadm primary [リソース名] # Primaryに昇格
drbdadm secondary [リソース名] # Secondaryに降格
# 初回同期
drbdadm -- --overwrite-data-of-peer primary [リソース名] # 強制同期開始
# 状態確認
drbdadm status # 全リソースの状態
drbdadm status [リソース名] # 特定リソースの状態
cat /proc/drbd # 同期状態の確認(レガシー)
drbdsetup status --verbose # 詳細状態
# 設定の適用
drbdadm adjust [リソース名] # 設定変更の適用
# スプリットブレイン解決
# Secondary側で実行:
drbdadm disconnect [リソース名]
drbdadm secondary [リソース名]
drbdadm -- --discard-my-data connect [リソース名]
# Primary側で実行:
drbdadm connect [リソース名]
# drbdsetup(低レベルコマンド)
drbdsetup show [デバイス番号] # デバイス設定の表示
重要ファイル
-
/etc/drbd.conf:DRBDのメイン設定 -
/etc/drbd.d/:リソース定義ファイル -
/etc/drbd.d/global_common.conf:グローバル設定 -
/proc/drbd:DRBD状態(レガシー)
362.2 クラスタストレージアクセス(Weight: 3)
iSCSI
# iSCSIターゲット(サーバー側)
targetcli # targetcli対話式シェル
# /backstores/block create [名前] /dev/sdb
# /iscsi create iqn.2026-03.com.example:storage
# /iscsi/iqn.../tpg1/luns create /backstores/block/[名前]
# /iscsi/iqn.../tpg1/acls create iqn.2026-03.com.example:client
# iSCSIイニシエータ(クライアント側)
iscsiadm -m discovery -t sendtargets -p [ターゲットIP] # ターゲット検出
iscsiadm -m node --login # ログイン
iscsiadm -m session # セッション一覧
iscsiadm -m node --logout # ログアウト
マルチパス(dm-multipath)
# マルチパス設定
multipath -ll # マルチパスデバイスの表示
multipathd show paths # パスの状態表示
systemctl start multipathd # multipathデーモン起動
設定例(/etc/multipath.conf)
defaults {
polling_interval 10
path_grouping_policy multibus
path_selector "round-robin 0"
failback immediate
}
multipaths {
multipath {
wwid [デバイスWWID]
alias mpath0
}
}
重要ファイル
-
/etc/iscsi/iscsid.conf:iSCSIイニシエータ設定 -
/etc/iscsi/initiatorname.iscsi:イニシエータ名 -
/etc/multipath.conf:マルチパス設定
362.3 クラスタファイルシステム(Weight: 4)
GFS2(Global File System 2)
# GFS2ファイルシステムの作成
mkfs.gfs2 -p lock_dlm -t [クラスタ名]:[FS名] -j [ジャーナル数] /dev/[デバイス名]
mkfs.gfs2 -p lock_dlm -t mycluster:myfs -j 2 /dev/drbd0
# マウント
mount -t gfs2 /dev/[デバイス名] /mnt
# ジャーナル管理
gfs2_jadd -j 1 /mnt # ジャーナルの追加(ノード追加時)
# クォータ管理
gfs2_quota list -f /mnt # クォータ一覧
# 修復
fsck.gfs2 -y /dev/[デバイス名] # ファイルシステムチェック(アンマウント状態で)
OCFS2(Oracle Cluster File System 2)
# OCFS2ファイルシステムの作成
mkfs.ocfs2 -N [ノード数] /dev/[デバイス名]
mkfs.ocfs2 -N 2 /dev/drbd0
# マウント
mount -t ocfs2 /dev/[デバイス名] /mnt
# クラスタ設定
o2cb_ctl -C -n [クラスタ名] -o # クラスタの作成
o2cb_ctl -N -n [ノード名] -c [クラスタ名] -o -i [IP] -p [ポート] # ノード追加
# 状態確認
mounted.ocfs2 -f # マウント状態確認
重要ファイル
-
/etc/cluster/cluster.conf:クラスタ設定(RHEL系レガシー) -
/etc/ocfs2/cluster.conf:OCFS2クラスタ設定
Topic 363:高可用性分散ストレージ
363.1 GlusterFS ストレージクラスタ(Weight: 5)
GlusterFS アーキテクチャ
① クライアント
② GlusterFS ボリューム(論理的な統合ストレージ)
- Brick(node1:/data/brick1)
- Brick(node2:/data/brick2)
- Brick(node3:/data/brick3)
ボリュームタイプ
| タイプ | 説明 |
|---|---|
| Distributed | ファイルを複数ブリックに分散配置。容量が合算される |
| Replicated | ファイルを複数ブリックにミラーリング。冗長性あり |
| Striped | ファイルをストライピング。大きなファイルのI/O向上(非推奨) |
| Distributed-Replicated | 分散+ミラーリングの組み合わせ |
| Dispersed | イレイジャーコーディング。RAID5/6的な冗長性 |
コマンド集
# ピア(ノード)管理
gluster peer probe [ノードIP] # ピアの追加
gluster peer detach [ノードIP] # ピアの削除
gluster peer status # ピア状態の確認
gluster pool list # プール内ノード一覧
# ボリューム管理
gluster volume create [ボリューム名] replica 2 [ノード1]:/data/brick1 [ノード2]:/data/brick2
gluster volume create [ボリューム名] disperse 3 redundancy 1 [ノード1]:/brick [ノード2]:/brick [ノード3]:/brick
gluster volume start [ボリューム名] # ボリューム開始
gluster volume stop [ボリューム名] # ボリューム停止
gluster volume delete [ボリューム名] # ボリューム削除
gluster volume info # ボリューム情報
gluster volume info [ボリューム名] # 特定ボリューム情報
gluster volume status # ボリューム状態
gluster volume status [ボリューム名] detail # 詳細状態
# ボリュームの拡張
gluster volume add-brick [ボリューム名] [ノード]:/data/brick3
# ボリュームのリバランス
gluster volume rebalance [ボリューム名] start
gluster volume rebalance [ボリューム名] status
# ヒーリング(データ修復)
gluster volume heal [ボリューム名] # ヒーリング開始
gluster volume heal [ボリューム名] info # ヒーリング状態
gluster volume heal [ボリューム名] full # 完全ヒーリング
# ジオレプリケーション
gluster volume geo-replication [ローカルボリューム] [リモートホスト]::[リモートボリューム] create
gluster volume geo-replication [ローカルボリューム] [リモートホスト]::[リモートボリューム] start
gluster volume geo-replication [ローカルボリューム] [リモートホスト]::[リモートボリューム] status
# クライアントからのマウント
mount -t glusterfs [ノードIP]:[ボリューム名] /mnt
# /etc/fstab の例:
# node1:vol1 /mnt glusterfs defaults,_netdev 0 0
重要ファイル
-
/etc/glusterfs/:GlusterFS設定 -
/var/lib/glusterd/:GlusterFSデーモンのデータ -
/var/log/glusterfs/:GlusterFSログ
363.2 Ceph ストレージクラスタ(Weight: 8)
Weight 8 は 361.2、361.3 と並んで最も出題比率が高い サブトピックです。
Ceph アーキテクチャ
① クライアント
② RADOS(Reliable Autonomic Distributed Object Store)
- MON(Monitor):クラスタマップの管理、クォーラム
- OSD(Object Storage Daemon):データの保存・複製・復旧
- MDS(Metadata Server):CephFSのメタデータ管理
- MGR(Manager):モニタリング・ダッシュボード
Ceph のストレージ方式
| 方式 | 説明 |
|---|---|
| RADOS Block Device(RBD) | ブロックストレージ。VMディスクに最適 |
| CephFS | POSIXファイルシステム。共有ファイルストレージ |
| RADOS Gateway(RGW) | オブジェクトストレージ。S3/Swift互換API |
コマンド集
クラスタ管理
# クラスタ状態
ceph status # クラスタ全体の状態
ceph health # ヘルス状態(HEALTH_OK等)
ceph health detail # ヘルス詳細
ceph -s # ceph statusの短縮形
# モニター管理
ceph mon stat # MON状態
ceph mon dump # MON情報のダンプ
ceph quorum_status # クォーラム状態
# OSD管理
ceph osd tree # OSDツリー(トポロジ)
ceph osd stat # OSD統計
ceph osd dump # OSD情報のダンプ
ceph osd df # OSD使用量
ceph osd out [OSD ID] # OSDをクラスタから外す
ceph osd in [OSD ID] # OSDをクラスタに戻す
ceph osd down [OSD ID] # OSDをdownにする
ceph osd crush reweight osd.[OSD ID] [重み] # OSDの重みを変更
# マネージャー
ceph mgr module enable dashboard # ダッシュボードモジュール有効化
ceph mgr services # マネージャーサービス一覧
プール管理
# プール操作
ceph osd pool create [プール名] [PG数] # プール作成
ceph osd pool delete [プール名] [プール名] --yes-i-really-really-mean-it # プール削除
ceph osd pool ls # プール一覧
ceph osd pool ls detail # プール一覧(詳細)
ceph osd pool get [プール名] size # レプリカ数の確認
ceph osd pool set [プール名] size [数] # レプリカ数の変更
ceph osd pool set [プール名] pg_num [PG数] # PG数の変更
ceph osd pool stats # プール統計
ceph df # クラスタ容量
ceph df detail # 詳細容量
RADOS操作
# RADOSオブジェクト操作
rados -p [プール名] put [オブジェクト名] [ローカルファイルパス] # オブジェクト格納
rados -p [プール名] get [オブジェクト名] [出力ファイルパス] # オブジェクト取得
rados -p [プール名] rm [オブジェクト名] # オブジェクト削除
rados -p [プール名] ls # オブジェクト一覧
rados df # RADOS使用量
RBD(RADOS Block Device)
# RBDイメージ管理
rbd create [イメージ名] --size [サイズMB] --pool [プール名] # イメージ作成
rbd create myimage --size 10240 --pool rbd # 10GBのイメージ
rbd ls [プール名] # イメージ一覧
rbd info [プール名]/[イメージ名] # イメージ情報
rbd rm [プール名]/[イメージ名] # イメージ削除
rbd resize [プール名]/[イメージ名] --size [新サイズMB] # リサイズ
# RBDのマッピング
rbd map [プール名]/[イメージ名] # デバイスにマップ
rbd showmapped # マップ済みデバイス一覧
rbd unmap /dev/rbd0 # アンマップ
# RBDスナップショット
rbd snap create [プール名]/[イメージ名]@[スナップショット名]
rbd snap ls [プール名]/[イメージ名] # スナップショット一覧
rbd snap rollback [プール名]/[イメージ名]@[スナップショット名] # ロールバック
rbd snap rm [プール名]/[イメージ名]@[スナップショット名] # スナップショット削除
CephFS
# CephFSの作成
ceph fs new [FS名] [メタデータプール名] [データプール名]
# CephFSの確認
ceph fs ls # ファイルシステム一覧
ceph fs status # ファイルシステム状態
ceph mds stat # MDS状態
# CephFSのマウント
mount -t ceph [MON IP]:6789:/ /mnt -o name=admin,secret=[シークレットキー]
# FUSE経由
ceph-fuse /mnt
CRUSH マップ
# CRUSHマップの操作
ceph osd crush dump # CRUSHマップのダンプ
ceph osd crush tree # CRUSHツリー表示
ceph osd getcrushmap -o [出力ファイル名] # バイナリ形式でエクスポート
crushtool -d [バイナリファイル] -o [テキストファイル] # デコンパイル
crushtool -c [テキストファイル] -o [バイナリファイル] # コンパイル
ceph osd setcrushmap -i [バイナリファイル] # CRUSHマップの適用
重要ファイル
-
/etc/ceph/ceph.conf:Cephメイン設定 -
/etc/ceph/ceph.client.admin.keyring:管理者キーリング -
/var/lib/ceph/:Cephデータディレクトリ -
/var/log/ceph/:Cephログ
Topic 364:単一ノード高可用性
364.1 ハードウェアとリソースの高可用性(Weight: 2)
冗長化の対象
| 対象 | 冗長化手段 |
|---|---|
| 電源 | 冗長電源ユニット(PSU)、UPS |
| ディスク | RAID |
| ネットワーク | ボンディング/チーミング |
| CPU/メモリ | ホットスワップ(対応ハードウェア) |
コマンド集
# ハードウェアウォッチドッグ
cat /dev/watchdog # ウォッチドッグデバイス
modprobe softdog # ソフトウェアウォッチドッグ
wdctl # ウォッチドッグ情報の表示
# UPS管理(NUT)
upsc [UPS名] # UPS状態確認
upscmd -l [UPS名] # 使用可能なコマンド一覧
364.2 高度なRAID(Weight: 2)
コマンド集
# RAID作成
mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sd[abcd]1 # RAID10
mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sd[abcd]1 # RAID6
# RAID状態確認
cat /proc/mdstat # RAID状態
mdadm --detail /dev/md0 # 詳細情報
mdadm --examine /dev/sda1 # デバイスのRAID情報
# ディスク障害対応
mdadm --manage /dev/md0 --fail /dev/sda1 # ディスクを故障状態にする
mdadm --manage /dev/md0 --remove /dev/sda1 # ディスクの除去
mdadm --manage /dev/md0 --add /dev/sde1 # 新ディスクの追加(リビルド開始)
# スペアディスク
mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 /dev/sd[abcd]1
# RAID設定の保存
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
update-initramfs -u # initramfsの更新(Debian系)
# RAIDの成長(拡張)
mdadm --grow /dev/md0 --raid-devices=4 # ディスク数を増やす
mdadm --grow /dev/md0 --level=6 # RAIDレベルを変更
364.3 高度なLVM(Weight: 3)
コマンド集
# LVMミラーリング
lvcreate --type raid1 -m 1 -L 10G -n [LV名] [VG名] # RAID1ミラー
lvcreate --type raid5 -i 2 -L 10G -n [LV名] [VG名] # RAID5
# ミラーの変換
lvconvert --type raid1 -m 1 /dev/[VG名]/[LV名] # 既存LVをミラーに変換
lvconvert --type linear /dev/[VG名]/[LV名] # ミラーを解除
# シンプロビジョニング
lvcreate --type thin-pool -L 50G -n [シンプール名] [VG名]
lvcreate --type thin -V 100G -n [シンLV名] --thinpool [シンプール名] [VG名]
# 物理50GBのプールから論理100GBのLVを作成(オーバーコミット)
# スナップショット
lvcreate -s -L 5G -n [スナップショット名] /dev/[VG名]/[LV名] # スナップショット作成
lvs # スナップショット使用率確認
lvconvert --merge /dev/[VG名]/[スナップショット名] # スナップショットのマージ(復元)
# LVMキャッシュ
lvcreate --type cache-pool -L 10G -n [キャッシュプール名] [VG名] /dev/ssd1
lvconvert --type cache --cachepool [VG名]/[キャッシュプール名] [VG名]/[LV名]
# 状態確認
pvs # PV一覧
vgs # VG一覧
lvs -a -o +devices # LV一覧(デバイス付き)
364.4 ネットワーク高可用性(Weight: 5)
ボンディングモード
| モード | 番号 | 説明 |
|---|---|---|
| balance-rr | 0 | ラウンドロビン。負荷分散 |
| active-backup | 1 | アクティブ/バックアップ。最も一般的 |
| balance-xor | 2 | XORハッシュベースの分散 |
| broadcast | 3 | 全スレーブに送信 |
| 802.3ad(LACP) | 4 | リンクアグリゲーション。スイッチ側もLACP対応必要 |
| balance-tlb | 5 | 送信負荷分散。スイッチ設定不要 |
| balance-alb | 6 | 送受信負荷分散。スイッチ設定不要 |
コマンド集
# nmcli でボンディング設定
nmcli connection add type bond con-name [ボンド名] ifname bond0 bond.options "mode=active-backup,miimon=100"
nmcli connection add type ethernet con-name [スレーブ1名] ifname [インターフェース1] master bond0
nmcli connection add type ethernet con-name [スレーブ2名] ifname [インターフェース2] master bond0
nmcli connection up [ボンド名]
# ip コマンドでボンディング設定
ip link add bond0 type bond mode active-backup
ip link set [インターフェース1] master bond0
ip link set [インターフェース2] master bond0
ip link set bond0 up
# チーミング(teamd)
nmcli connection add type team con-name [チーム名] ifname team0 config '{"runner": {"name": "activebackup"}}'
nmcli connection add type team-slave con-name [スレーブ1名] ifname [インターフェース1] master team0
nmcli connection add type team-slave con-name [スレーブ2名] ifname [インターフェース2] master team0
teamdctl team0 state # チーム状態の確認
teamnl team0 ports # ポート一覧
# ボンディング状態確認
cat /proc/net/bonding/bond0 # ボンド状態の詳細
# VRRP(keepalived)
# keepalived.confでVRRPインスタンスを設定(361.2参照)
重要ファイル
-
/etc/sysconfig/network-scripts/ifcfg-bond0:ボンディング設定(RHEL系) -
/proc/net/bonding/bond0:ボンディング状態
出題比率(Weight)ランキング
| 順位 | サブトピック | Weight | 内容 |
|---|---|---|---|
| 1 | 361.2 | 8 | ロードバランスクラスタ(LVS/HAProxy/keepalived) |
| 1 | 361.3 | 8 | フェイルオーバークラスタ(Pacemaker/Corosync) |
| 1 | 363.2 | 8 | Cephストレージクラスタ |
| 4 | 361.1 | 6 | 高可用性の概念と理論 |
| 4 | 362.1 | 6 | DRBD |
| 6 | 363.1 | 5 | GlusterFSストレージクラスタ |
| 6 | 364.4 | 5 | ネットワーク高可用性 |
| 8 | 362.3 | 4 | クラスタファイルシステム(GFS2/OCFS2) |
| 9 | 362.2 | 3 | クラスタストレージアクセス |
| 9 | 364.3 | 3 | 高度なLVM |
| 11 | 364.1 | 2 | ハードウェアとリソースの高可用性 |
| 11 | 364.2 | 2 | 高度なRAID |
試験対策のポイント
頻出テーマ 暗記チェックリスト
Topic 361:HAクラスタ管理
- HA用語(クォーラム、フェンシング、スプリットブレイン、STONITH、MTBF、MTTR)
- クラスタアーキテクチャの種類と特徴
-
ipvsadmのオプション(-A,-a,-g,-m,-i,-s) - LVSの転送モード(NAT/DR/TUN)の違い
-
keepalivedの
keepalived.confの構造(VRRP + virtual_server) -
HAProxyの
haproxy.cfgの構造(frontend/backend/listen) -
pcsコマンド体系(cluster/resource/constraint/stonith/property) -
Corosyncの
corosync.confの構造 - リソース制約(colocation/order/location)の設定方法
- STONITHの設定と有効化
Topic 362:HAクラスタストレージ
- DRBDのプロトコル(A/B/C)の違い
- DRBDのロール(Primary/Secondary)管理コマンド
- DRBDのスプリットブレイン解決手順
- iSCSIのターゲット/イニシエータ設定
- マルチパス(dm-multipath)の設定
- GFS2/OCFS2の作成・マウント手順
Topic 363:HA分散ストレージ
- GlusterFSのボリュームタイプ(Distributed/Replicated/Dispersed等)
-
glusterコマンド体系(peer/volume/heal/geo-replication) - Cephのアーキテクチャ(MON/OSD/MDS/MGR)
-
cephコマンド体系(status/osd/pool/fs/health) - RBDの作成・マッピング・スナップショット
- CephFSの作成・マウント
- CRUSHマップの概念
Topic 364:単一ノードHA
- ボンディングモード(active-backup/802.3ad等)と使い分け
-
nmcli/ipでのボンディング設定 - 高度なRAID操作(成長・レベル変更・スペアディスク)
- LVMの高度な機能(ミラー・シンプロビジョニング・キャッシュ・スナップショット)
おわりに
LPIC-3 306は Pacemaker/Corosync、HAProxy/keepalived/LVS、Ceph がWeight 8で最重要です。この3つで試験全体の約40%を占めます。
加えて、DRBD、GlusterFS、ネットワークボンディングもWeight 5〜6と高く、幅広い知識が求められます。
学習の進め方としては:
- 2ノード構成のPacemaker/Corosyncクラスタを構築する(仮想環境推奨)
- HAProxy + keepalivedでロードバランサを構築する
- DRBDで2ノード間のブロックレプリケーションを実践する
- CephクラスタをデプロイしてRBD/CephFSを操作する
- GlusterFSでレプリカボリュームを作成・マウントする
- ネットワークボンディングの各モードを試す
この記事が合格への一助になれば幸いです。
ここまでお読みいただきありがとうございます。
ではまた、お会いしましょう。
