<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DRBD &#8211; SRA OSS Tech Blog</title>
	<atom:link href="https://www.sraoss.co.jp/tech-blog/tag/drbd/feed/index.xml" rel="self" type="application/rss+xml" />
	<link>https://www.sraoss.co.jp/tech-blog/</link>
	<description>OSS専門の技術ブログ。PostgreSQL、Zabbixを中心に10種類以上のOSSの解説、アップデート情報、運用ヒントを提供。</description>
	<lastBuildDate>Fri, 30 Oct 2026 08:07:43 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://www.sraoss.co.jp/tech-blog/wp-content/uploads/2018/07/blog-icon-150x150.png</url>
	<title>DRBD &#8211; SRA OSS Tech Blog</title>
	<link>https://www.sraoss.co.jp/tech-blog/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>DRBD9クラスタをLINSTORで管理する</title>
		<link>https://www.sraoss.co.jp/tech-blog/drbd/drbd9-linstor/</link>
		
		<dc:creator><![CDATA[山本 博之 (Hiroyuki Yamamoto)]]></dc:creator>
		<pubDate>Thu, 31 Jan 2019 04:00:58 +0000</pubDate>
				<category><![CDATA[DRBD]]></category>
		<category><![CDATA[OSS]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=1162</guid>

					<description><![CDATA[DRBD9を管理するツールとしてdrbdmanageがありますが、drbdmanageには分散データベース(drbdctrl)の性能や、ノード間の通信に使用しているD-Busプロトコルの安定性など、いくつかの問題を抱えて ...]]></description>
										<content:encoded><![CDATA[<p>DRBD9を管理するツールとしてdrbdmanageがありますが、drbdmanageには分散データベース(drbdctrl)の性能や、ノード間の通信に使用しているD-Busプロトコルの安定性など、いくつかの問題を抱えていました。</p>
<p>この問題を解決するため、DRBD9の新しい管理ツールとして<a href="https://www.linbit.com/en/linstor/">LINSTOR</a>が新たに開発されました。本記事ではLINSTORを使ってDRBD9の3台構成クラスタを管理する方法について紹介します。なお、2019年1月現在LINSTORはβ版という位置づけになります。</p>
<p><span id="more-1162"></span></p>
<h2>1. 導入手順</h2>
<p>本記事では以下の手順で導入を行います。</p>
<ol>
<li>必要なソフトウェアのビルド・インストール</li>
<li>LVMの設定</li>
<li>LINSTORの起動</li>
<li>クラスタへのノードの登録</li>
<li>ボリュームの追加</li>
<li>3台目のノードの追加およびボリュームの追加</li>
</ol>
<h2>2. 前提</h2>
<p>本記事で使用する環境は以下になります。</p>
<p>OS: CentOS 7.4</p>
<table>
<tbody>
<tr>
<th>ホスト名</th>
<th>IPアドレス</th>
<th>DRBD用パーティション</th>
</tr>
<tr>
<td>server1</td>
<td>192.168.1.11</td>
<td>/dev/sdb1</td>
</tr>
<tr>
<td>server2</td>
<td>192.168.1.12</td>
<td>/dev/sdb1</td>
</tr>
<tr>
<td>server3</td>
<td>192.168.1.13</td>
<td>/dev/sdb1</td>
</tr>
</tbody>
</table>
<h2>3. 必要なソフトウェアのインストール</h2>
<h3>ELrepoからDRBD9パッケージをインストール</h3>
<pre># rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# yum install kmod-drbd90 drbd90-utils</pre>
<p>/etc/drbd.d/ 以下に既存の設定がある場合は競合する可能性があるので、すべて退避させて初期状態にしておきます。</p>
<h3>LINSTORのビルド、インストール</h3>
<p>LINSTORは自前でソースコードからrpmをビルドする必要があります。</p>
<p><a href="https://www.linbit.com/en/drbd-community/drbd-download/">https://www.linbit.com/en/drbd-community/drbd-download/</a> よりLINSTORの最新版ソースコード(linstor-client, python-linstor, linstor-serverの3種類)をダウンロードします。</p>
<p>ビルドにはJavaのビルドツールであるgradle(およびそのインストールに必要なSDKMAN)が必要となります。</p>
<pre>$ curl -s get.sdkman.io | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
$ sdk version

SDKMAN 5.7.3+337
$ sdk install gradle

Downloading: gradle 5.0

In progress...

######################################################################## 100.0%

Installing: gradle 5.0
Done installing!


Setting gradle 5.0 as default.</pre>
<p>gradleのインストールが完了したら、rpmをビルドします。なお、ELrepoのDRBDパッケージ名とLINSTOR内の設定ファイルの記述に差異があるため、修正が必要となります。</p>
<h4>linstor-serverのインストール</h4>
<pre>$ sudo yum install rpm-build
$ wget http://www.linbit.com/downloads/linstor/linstor-server-0.7.3.tar.gz
$ tar zxvf linstor-server-0.7.3.tar.gz
$ cd linstor-server-0.7.3
(依存パッケージ名を修正する)
$ vi linstor.spec
(修正前) drbd-utils &gt;= 8.9.9
(修正後) drbd90-utils &gt;= 8.9.9
$ cd ..
$ mv linstor-server-0.7.3.tar.gz linstor-server-0.7.3-orig.tar.gz
$ tar zcf linstor-server-0.7.3.tar.gz linstor-server-0.7.3
$ rpmbuild -tb linstor-server-0.7.3.tar.gz
$ sudo rpm -ivh rpmbuild/RPMS/noarch/*</pre>
<h4>python-linstorのインストール</h4>
<pre>$ sudo yum install protobuf-compiler
$ tar zxvf python-linstor-0.7.2.tar.gz
$ cd python-linstor-0.7.2
$ make rpm
$ sudo rpm -ivh dist/python-linstor-0.7.2-1.noarch.rpm</pre>
<h4>linstor-clientのインストール</h4>
<pre>$ tar zxvf linstor-client-0.7.2.tar.gz
$ cd linstor-client-0.7.2
$ make rpm
$ sudo rpm -ivh dist/linstor-client-0.7.2-1.noarch.rpm</pre>
<p>すべてのノードに上記で作成したrpmをコピーし、同様にインストールします。</p>
<h2>4. LVMの設定</h2>
<p>DRBDで使用するためのLVMの設定をすべてのノードであらかじめ行っておきます。</p>
<pre># pvcreate /dev/sdb1
# vgcreate vg1 /dev/sdb1</pre>
<h2>4. LINSTORの起動</h2>
<p>各ノードでDRBDが起動していない場合は起動しておきます。設定は初期状態(リソースが定義されていない状態)にしておきます。</p>
<pre># systemctl start drbd</pre>
<p>server1でlinstor-controllerおよびlinstor-satelliteを起動します。</p>
<pre># systemctl start linstor-controller
# systemctl start linstor-satellite</pre>
<h2>5. クラスタへのノードの登録</h2>
<p>server1で自身をクラスタのノードとして登録します。</p>
<pre>[root@server1 ~]# linstor node create server1 192.168.1.11
SUCCESS:
Description:
    New node 'server1' registered.
Details:
    Node 'server1' UUID is: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</pre>
<p>ノードが追加されていることを確認します。</p>
<pre>[root@server1 ~]# linstor node list
+-----------------------------------------------------------+
| Node    | NodeType  | Addresses                 | State   |
|-----------------------------------------------------------|
| server1 | SATELLITE | 192.168.1.11:3366 (PLAIN) | <span style="color: #ff0000;"><strong>OFFLINE</strong></span> |
+-----------------------------------------------------------+
</pre>
<p>10秒ほど待つとOnlineになります。</p>
<pre>+----------------------------------------------------------+
| Node    | NodeType  | Addresses                 | State  |
|----------------------------------------------------------|
| server1 | SATELLITE | 192.168.1.11:3366 (PLAIN) | <span style="color: #00ff00;"><strong>Online</strong></span> |
+----------------------------------------------------------+</pre>
<p>server2をクラスタのノードとして追加します。</p>
<pre>[root@server1 ~]# linstor node create server2 192.168.1.12
SUCCESS:
Description:
    New node 'server2' registered.
Details:
    Node 'server2' UUID is: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
[root@server1 ~]# linstor node list
+-----------------------------------------------------------+
| Node    | NodeType  | Addresses                 | State   |
|-----------------------------------------------------------|
| server1 | SATELLITE | 192.168.1.11:3366 (PLAIN) | <span style="color: #00ff00;"><strong>Online</strong></span>  |
| server2 | SATELLITE | 192.168.1.12:3366 (PLAIN) | <span style="color: #ff0000;"><strong>OFFLINE</strong></span> |
+-----------------------------------------------------------+</pre>
<p>server2でlinstor-satelliteを起動し、10秒ほど待つとOnlineになります。</p>
<pre>[root@server2 ~]# systemctl start linstor-satellite
[root@server1 ~]# linstor node list
+----------------------------------------------------------+
| Node    | NodeType  | Addresses                 | State  |
|----------------------------------------------------------|
| server1 | SATELLITE | 192.168.1.11:3366 (PLAIN) | <span style="color: #00ff00;"><strong>Online</strong></span> |
| server2 | SATELLITE | 192.168.1.12:3366 (PLAIN) | <span style="color: #00ff00;"><strong>Online</strong></span> |
+----------------------------------------------------------+</pre>
<h2>6. ボリュームの追加</h2>
<h3>ストレージプールの作成</h3>
<p>「4. LVMの設定」で作成したボリュームグループをストレージプールとして追加します。</p>
<pre>[root@server1 ~]# linstor storage-pool create lvm server1 pool1 vg1
SUCCESS:
Description:
New storage pool 'pool1' on node 'server1' registered.
Details:
Storage pool 'pool1' on node 'server1' UUID is: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SUCCESS:
(server1) Changes applied to storage pool 'pool1'
[root@server1 ~]# linstor storage-pool create lvm server2 pool1 vg1
SUCCESS:
Description:
New storage pool 'pool1' on node 'server2' registered.
Details:
Storage pool 'pool1' on node 'server2' UUID is: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SUCCESS:
(server2) Changes applied to storage pool 'pool1'
</pre>
<p>作成したストレージプールの一覧を表示して確認します。</p>
<pre>[root@server1 ~]# linstor storage-pool list
+-------------------------------------------------------------------------------------------------+
| StoragePool | Node    | Driver    | PoolName | FreeCapacity | TotalCapacity | SupportsSnapshots |
|-------------------------------------------------------------------------------------------------|
| pool1       | server1 | LvmDriver | vg1      |     5.00 GiB |      5.00 GiB | false             |
| pool1       | server2 | LvmDriver | vg1      |     5.00 GiB |      5.00 GiB | false             |
+-------------------------------------------------------------------------------------------------+</pre>
<h3>ボリューム定義の作成</h3>
<p>リソースおよびボリュームの定義を作成します。この時点ではまだ実際のボリュームは確保されていません。</p>
<pre>[root@server1 ~]# linstor resource-definition create vol1
SUCCESS:
Description:
    New resource definition 'vol1' created.
Details:
    Resource definition 'vol1' UUID is: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

[root@server1 ~]# linstor volume-definition create vol1 1G
SUCCESS:
    New volume definition with number '0' of resource definition 'vol1' created.</pre>
<h3>手動配備</h3>
<p>上記で作成したボリューム定義に基づき、各ノードにボリュームを配備します。以下ではserver1とserver2にvol1ボリュームを配備します。</p>
<pre>[root@server1 ~]# linstor resource create server1 vol1 --storage-pool pool1
SUCCESS:
Description:
    New resource 'vol1' on node 'server1' registered.
Details:
    Resource 'vol1' on node 'server1' UUID is: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SUCCESS:
Description:
    Volume with number '0' on resource 'vol1' on node 'server1' successfully registered
Details:
    Volume UUID is: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SUCCESS:
    Created resource 'vol1' on 'server1'
SUCCESS:
Description:
    Resource 'vol1' on 'server1' ready
Details:
    Node(s): 'server1', Resource: 'vol1'
[root@server1 ~]# linstor resource create server2 vol1 --storage-pool pool1
SUCCESS:
Description:
    New resource 'vol1' on node 'server2' registered.
Details:
    Resource 'vol1' on node 'server2' UUID is: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SUCCESS:
Description:
    Volume with number '0' on resource 'vol1' on node 'server2' successfully registered
Details:
    Volume UUID is: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SUCCESS:
    Added peer(s) 'server2' to resource 'vol1' on 'server1'
SUCCESS:
    Created resource 'vol1' on 'server2'
SUCCESS:
Description:
    Resource 'vol1' on 'server2' ready
Details:
    Node(s): 'server2', Resource: 'vol1'
</pre>
<p>配備した分の空き容量(FreeCapacity)が減少していることを確認します。</p>
<pre>[root@server1 ~]# linstor storage-pool list
+-------------------------------------------------------------------------------------------------+
| StoragePool | Node    | Driver    | PoolName | FreeCapacity | TotalCapacity | SupportsSnapshots |
|-------------------------------------------------------------------------------------------------|
| pool1       | server1 | LvmDriver | vg1      |     <strong>3.99 GiB</strong> |      5.00 GiB | false             |
| pool1       | server2 | LvmDriver | vg1      |     <strong>3.99 GiB</strong> |      5.00 GiB | false             |
+-------------------------------------------------------------------------------------------------+</pre>
<h3>自動配備</h3>
<p>上記ではserver1とserver2にボリュームを明示的に配備しましたが、今度は空きのあるストレージプールおよびノードを自動選択して配備します(今回は2ノードのみなので手動配備と同様の結果になります)。</p>
<pre>[root@server1 ~]# linstor resource-definition create vol2
[root@server1 ~]# linstor volume-definition create vol2 1G
[root@server1 ~]# linstor resource create vol2 <strong>--auto-place 2</strong>
SUCCESS:
Description:
    Resource 'vol2' successfully autoplaced on 2 nodes
Details:
    Used storage pool: 'pool1'
    Used nodes: 'server1', 'server2'
SUCCESS:
    Created resource 'vol2' on 'server2'
SUCCESS:
    Created resource 'vol2' on 'server1'
SUCCESS:
Description:
    Resource 'vol2' on 'server1' ready
Details:
    Auto-placing resource: vol2
SUCCESS:
Description:
    Resource 'vol2' on 'server2' ready
Details:
    Auto-placing resource: vol2

[root@server1 ~]# linstor storage-pool list
+-------------------------------------------------------------------------------------------------+
| StoragePool | Node    | Driver    | PoolName | FreeCapacity | TotalCapacity | SupportsSnapshots |
|-------------------------------------------------------------------------------------------------|
| pool1       | server1 | LvmDriver | vg1      |     <strong>2.99 GiB</strong> |      5.00 GiB | false             |
| pool1       | server2 | LvmDriver | vg1      |     <strong>2.99 GiB</strong> |      5.00 GiB | false             |
+-------------------------------------------------------------------------------------------------+
</pre>
<p>リソース一覧、ボリューム定義意一覧を表示し、適切にリソースが配備されていることを確認します。</p>
<pre>[root@server1 ~]# linstor resource list
+---------------------------------------------------+
| ResourceName | Node    | Port | Usage  |    State |
|---------------------------------------------------|
| vol1         | server1 | 7000 | <span style="color: #00ff00;"><strong>Unused</strong></span> | <span style="color: #00ff00;"><strong>UpToDate</strong></span> |
| vol1         | server2 | 7000 | <strong><span style="color: #00ff00;">Unused</span></strong> | <strong><span style="color: #00ff00;">UpToDate</span></strong> |
| vol2         | server1 | 7001 | <strong><span style="color: #00ff00;">Unused</span></strong> | <strong><span style="color: #00ff00;">UpToDate</span></strong> |
| vol2         | server2 | 7001 | <strong><span style="color: #00ff00;">Unused</span></strong> | <strong><span style="color: #00ff00;">UpToDate</span></strong> |
+---------------------------------------------------+
[root@server1 ~]# linstor volume-definition list
+-------------------------------------------------------+
| ResourceName | VolumeNr | VolumeMinor | Size  | State |
|-------------------------------------------------------|
| vol1         | 0        | 1000        | 1 GiB | <strong><span style="color: #00ff00;">ok</span></strong>    |
| vol2         | 0        | 1001        | 1 GiB | <strong><span style="color: #00ff00;">ok</span></strong>    |
+-------------------------------------------------------+</pre>
<h3>作成したボリュームの使用</h3>
<p>作成したボリュームは通常のDRBDボリュームと同様に使用できます。</p>
<pre>[root@server1 ~]# ls -l /dev/drbd1*
brw-rw---- 1 root disk 147, 1000 12月  7 16:29 /dev/drbd1000
brw-rw---- 1 root disk 147, 1001 12月  7 16:34 /dev/drbd1001

[root@server1 ~]# drbdadm status
vol1 role:Secondary
  disk:UpToDate
  server2 role:Secondary
    peer-disk:UpToDate

vol2 role:Secondary
  disk:UpToDate
  server2 role:Secondary
    peer-disk:UpToDate

[root@server1 ~]# mkfs.ext4 /dev/drbd1000
[root@server1 ~]# mkdir /mnt/drbd
[root@server1 ~]# mount /dev/drbd1000 /mnt/drbd
[root@server1 ~]# df
ファイルシス            1K-ブロック    使用   使用可 使用% マウント位置
/dev/drbd1000               1003076    2584   931488    1% /mnt/drb</pre>
<p>なお、以下のDRBD設定ファイルが自動生成されますが、これらはLINSTORが管理しているため手で編集してはいけません。</p>
<pre>[root@server1 ~]# ls -l /var/lib/linstor.d/
合計 12
-rw-r--r-- 1 root root  79 12月  7 15:08 linstor_common.conf
-rw-r--r-- 1 root root 797 12月  7 16:30 vol1.res
-rw-r--r-- 1 root root 797 12月  7 16:34 vol2.res</pre>
<h2>7. 3台目のノードの追加およびボリュームの追加</h2>
<p>新しく3台目のノードを追加する場合も2台目と同様に登録を行います。必要なパッケージは事前にインストールしておきます。</p>
<p>server3でサービスの起動、LVMの作成を行います。</p>
<pre>[root@server3 ~]# systemctl start drbd
[root@server3 ~]# vgcreate vg1 /dev/sdb1
[root@server3 ~]# systemctl start linstor-controller
</pre>
<p>server3をクラスタのノードに追加します。</p>
<pre>[root@server1 ~]# linstor node create server3 192.168.1.13
[root@server1 ~]# linstor node list
+----------------------------------------------------------+
| Node    | NodeType  | Addresses                 | State  |
|----------------------------------------------------------|
| server1 | SATELLITE | 192.168.1.11:3366 (PLAIN) | <span style="color: #00ff00;"><strong>Online</strong></span> |
| server2 | SATELLITE | 192.168.1.12:3366 (PLAIN) | <span style="color: #00ff00;"><strong>Online</strong></span> |
| <strong>server3</strong> | <strong>SATELLITE</strong> | <strong>192.168.1.13:3366 (PLAIN)</strong> | <span style="color: #00ff00;"><strong>Online</strong></span> |
+----------------------------------------------------------+
</pre>
<p>server3のLVMボリュームグループをストレージプールに追加します。</p>
<pre>[root@server1 ~]# linstor storage-pool create lvm server3 pool1 vg1
[root@server1 ~]# linstor storage-pool list
+-------------------------------------------------------------------------------------------------+
| StoragePool | Node    | Driver    | PoolName | FreeCapacity | TotalCapacity | SupportsSnapshots |
|-------------------------------------------------------------------------------------------------|
| pool1       | server1 | LvmDriver | vg1      |     2.99 GiB |      5.00 GiB | false             |
| pool1       | server2 | LvmDriver | vg1      |     2.99 GiB |      5.00 GiB | false             |
| <strong>pool1</strong>       | <strong>server3</strong> | <strong>LvmDriver</strong> | <strong>vg1</strong>      |     <strong>5.00 GiB</strong> |      <strong>5.00 GiB</strong> | <strong>false</strong>             |
+-------------------------------------------------------------------------------------------------+
</pre>
<p>リソース、ボリュームを定義し、server2とserver3に配備します。</p>
<pre>[root@server1 ~]# linstor resource-definition create vol3
[root@server1 ~]# linstor volume-definition create vol3 1G
[root@server1 ~]# linstor resource create <strong>server2</strong> vol3 --storage-pool pool1
[root@server1 ~]# linstor resource create <strong>server3</strong> vol3 --storage-pool pool1
[root@server1 ~]# linstor storage-pool list
+-------------------------------------------------------------------------------------------------+
| StoragePool | Node    | Driver    | PoolName | FreeCapacity | TotalCapacity | SupportsSnapshots |
|-------------------------------------------------------------------------------------------------|
| pool1       | server1 | LvmDriver | vg1      |     2.99 GiB |      5.00 GiB | false             |
| pool1       | server2 | LvmDriver | vg1      |     <strong>1.99 GiB</strong> |      5.00 GiB | false             |
| pool1       | server3 | LvmDriver | vg1      |     <strong>3.99 GiB</strong> |      5.00 GiB | false             |
+-------------------------------------------------------------------------------------------------+
</pre>
<p>リソース一覧を表示し、リソースが配備されているノードおよび状態を確認します。</p>
<pre>[root@server1 ~]# linstor resource list
+-------------------------------------------------------------+
| ResourceName | Node    | Port | Usage  |              State |
|-------------------------------------------------------------|
| vol1         | server1 | 7000 | <strong><span style="color: #00ff00;">Unused</span></strong> |           <strong><span style="color: #00ff00;">UpToDate</span></strong> |
| vol1         | server2 | 7000 | <span style="color: #00ff00;"><strong>Unused</strong></span> |           <strong><span style="color: #00ff00;">UpToDate</span></strong> |
| vol2         | server1 | 7001 | <span style="color: #00ff00;"><strong>Unused</strong></span> |           <strong><span style="color: #00ff00;">UpToDate</span></strong> |
| vol2         | server2 | 7001 | <span style="color: #00ff00;"><strong>Unused</strong></span> |           <strong><span style="color: #00ff00;">UpToDate</span></strong> |
| vol3         | server2 | 7002 | <span style="color: #00ff00;"><strong>Unused</strong></span> |           <strong><span style="color: #00ff00;">UpToDate</span></strong> |
| vol3         | server3 | 7002 | <span style="color: #00ff00;"><strong>Unused</strong></span> | <span style="color: #ffcc00;"><strong>SyncTarget(17.08%)</strong></span> |
+-------------------------------------------------------------</pre>
<h2>8. おわりに</h2>
<p>今回はLINSTORの使い方について簡単に紹介しました。このように、LINSTORを使うことで3台以上のDRBDクラスタを容易に管理することができるようになります。また、LINSTORはDockerのコンテナ管理システムであるKubernetesのバックエンドのストレージシステムとしての利用も想定されており、今後広く使われていくことが期待されます。</p>
<div>
<a href="https://www.sraoss.co.jp/prod_serv/support/oss-pro-support/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-oss" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、各種OSS のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>DRBD9 の 3台構成クラスタ</title>
		<link>https://www.sraoss.co.jp/tech-blog/drbd/drbd9-3nodes-cluster/</link>
		
		<dc:creator><![CDATA[山本 博之 (Hiroyuki Yamamoto)]]></dc:creator>
		<pubDate>Wed, 05 Dec 2018 07:30:34 +0000</pubDate>
				<category><![CDATA[DRBD]]></category>
		<category><![CDATA[OSS]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=929</guid>

					<description><![CDATA[DRBD9では、以前のバージョンに比べて3台以上のクラスタをより簡単に構築できるようになりました。DRBD8では、2台構成のクラスタを階層化するスタック構成を使用して3台以上のクラスタを組むことができましたが、構成が複雑 ...]]></description>
										<content:encoded><![CDATA[<p>DRBD9では、以前のバージョンに比べて3台以上のクラスタをより簡単に構築できるようになりました。DRBD8では、2台構成のクラスタを階層化するスタック構成を使用して3台以上のクラスタを組むことができましたが、構成が複雑になり、柔軟性にも欠けるものでした。<br />
また、drbdmanageにより簡単にDRBDクラスタの管理ができるようになりました。<br />
本記事では、drbdmanageを使用して3台構成のDRBDクラスタを構築する方法について紹介します。</p>
<p>なお、新しい管理ツールとして<a href="https://blog.3ware.co.jp/drbd-users-guide-9.0/p-linstor.html">LINSTOR</a>が現在開発されており(2018年11月現在β版)、将来はLINSTORへの移行が予定されています。LINSTORを用いたDRBDクラスタの構築については後日改めて公開する予定です。</p>
<h2>1. 導入手順</h2>
<p>本記事では以下の手順で導入を行います。</p>
<ol>
<li>必要なソフトウェアのインストール</li>
<li>ssh、LVMの設定</li>
<li>クラスタの初期化</li>
<li>2台目のノードの追加</li>
<li>ボリュームの追加</li>
<li>3台目のノードの追加およびボリュームのアサイン</li>
</ol>
<p><span id="more-929"></span></p>
<h2>2. 前提</h2>
<p>本記事で使用する環境は以下になります。</p>
<p>OS: CentOS 7.4</p>
<table>
<tbody>
<tr>
<th>ホスト名</th>
<th>IPアドレス</th>
<th>DRBD用パーティション</th>
</tr>
<tr>
<td>server1</td>
<td>192.168.1.11</td>
<td>/dev/sdb1</td>
</tr>
<tr>
<td>server2</td>
<td>192.168.1.12</td>
<td>/dev/sdb1</td>
</tr>
<tr>
<td>server3</td>
<td>192.168.1.13</td>
<td>/dev/sdb1</td>
</tr>
</tbody>
</table>
<h2>3. 必要なソフトウェアのインストール</h2>
<h3>ELrepoからDRBD9パッケージをインストール</h3>
<pre># rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# yum install kmod-drbd90 drbd90-utils</pre>
<p>/etc/drbd.d/ 以下に既存の設定がある場合は競合する可能性があるので、すべて退避させて初期状態にしておきます。</p>
<h3>drbdmanage のビルド、インストール</h3>
<p>drbdmanageはELrepoに含まれていないので、自前でrpmをビルドする必要があります。</p>
<p><a href="https://www.linbit.com/en/drbd-community/drbd-download/">https://www.linbit.com/en/drbd-community/drbd-download/</a> よりdrbdmanageの最新版ソースコードをダウンロードします。</p>
<p>ビルドに必要なパッケージをインストールし、rpmをビルドします。なお、ELrepoのDRBDパッケージ名とdrbdmanage内の設定ファイルの記述に差異があるため、修正が必要となります。</p>
<pre>$ sudo yum install pygobject2 help2man rpm-build
$ wget http://www.linbit.com/downloads/drbdmanage/drbdmanage-0.99.18.tar.gz
$ tar zxvf drbdmanage-0.99.18.tar.gz
$ cd drbdmanage-0.99.18
(依存パッケージ名を修正する)
$ vi setup.cfg
(修正前) drbd-utils &gt;= 8.9.9
(修正後) drbd90-utils &gt;= 8.9.9
$ make rpm
(dist/ 以下に rpm が作成される)
$ sudo rpm -ivh dist/drbdmanage-0.99.18-1.noarch.rpm</pre>
<p>すべてのノードにrpmをコピーし、同様にインストールします。</p>
<h2>4. sshの設定</h2>
<p>ノード間でパスワードなしでsshログインできるように設定します。</p>
<pre>[root@server1 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
...
[root@server1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@server2
...
root@server2's password:
...

(server1 -&gt; server2 にパスワードなしでログインできることを確認)
[root@server1 ~]# ssh root@server2

(server2 でも server1 に対して上記を行う)</pre>
<h2>5. LVMの設定</h2>
<p>両ノードでLVMの物理ボリュームおよびボリュームグループを作成します。<br />
drbdmanageはデフォルトでdrbdpoolという名前のボリュームグループを使用します。</p>
<pre># pvcreate /dev/sdb1
# vgcreate drbdpool /dev/sdb1</pre>
<h2>6. クラスタの初期化</h2>
<p>最初に1台目のノードでdrbdmanageクラスタの初期化を実行します。<br />
なお、複数のノードで初期化を行ってしまうと整合性が取れなくなるのでご注意ください。</p>
<pre>[root@server1 ~]# drbdmanage init 192.168.1.11

You are going to initialize a new drbdmanage cluster.
CAUTION! Note that:
  * Any previous drbdmanage cluster information may be removed
  * Any remaining resources managed by a previous drbdmanage installation
    that still exist on this system will no longer be managed by drbdmanage

Confirm:

  yes/no: yes
Empty drbdmanage control volume initialized on '/dev/drbd0'.
Empty drbdmanage control volume initialized on '/dev/drbd1'.
Waiting for server: .
Operation completed successfully</pre>
<p>管理用DRBDボリュームが作成され、1台目のノードがdrbdmanageに登録されたことを確認します。</p>
<pre>[root@server1 ~]# drbdadm status
.drbdctrl role:Primary
  volume:0 disk:UpToDate
  volume:1 disk:UpToDate

[root@server1 ~]# drbdmanage list-nodes
 +----------------------------------------------------------------------+
 | Name    | Pool Size | Pool Free |                            | State |
 |----------------------------------------------------------------------|
 | server1 |      5116 |      5108 |                            |    ok |
 +----------------------------------------------------------------------+
</pre>
<h2>7. 2台目のノードの追加</h2>
<p>2台目のノードを追加します。server1で以下を実行すると、sshでserver2に自動的にログインして必要な操作が行われます。</p>
<pre>[root@server1 ~]# drbdmanage add-node server2 192.168.1.12
Operation completed successfully
Operation completed successfully

Executing join command using ssh.
IMPORTANT: The output you see comes from server2
IMPORTANT: Your input is executed on server2
You are going to join an existing drbdmanage cluster.
CAUTION! Note that:
  * Any previous drbdmanage cluster information may be removed
  * Any remaining resources managed by a previous drbdmanage installation
    that still exist on this system will no longer be managed by drbdmanage

Confirm:

  yes/no: yes
Waiting for server to start up (can take up to 1 min)
Operation completed successfully
Give leader time to contact the new node
Operation completed successfully

[root@server1 ~]# drbdmanage list-nodes
+----------------------------------------------------------------------+
| Name    | Pool Size | Pool Free |                            | State |
|----------------------------------------------------------------------|
| server1 |      5116 |      5108 |                            |    ok |
| <strong>server2</strong> |      <strong>5116</strong> |      <strong>5108</strong> |                            |    ok |
+----------------------------------------------------------------------+</pre>
<h2>8. ボリュームの追加</h2>
<p>上記で作成した2台のDRBDクラスタに新規ボリュームを追加します。<br />
ここではvol1(1GB)、vol2(1GB)の2つのボリュームを2通りの方法で作成します。</p>
<p>1つ目は操作を1つずつ行います。<br />
操作はリソース追加→ボリューム追加→デプロイの順で行います。</p>
<p>リソース vol1 を追加し、1GBのボリュームを割り当てます。</p>
<pre>[root@server1 ~]# drbdmanage list-volumes
No resources defined
[root@server1 ~]# drbdmanage add-resource vol1
Operation completed successfully
[root@server1 ~]# drbdmanage add-volume vol1 1GB
Operation completed successfully</pre>
<p>続いてリソースをデプロイします。以下の場合、最も要件に合致する2ノードを自動的に選択します。<br />
今回は2ノードしかないので単に両方のノードが割り当てられますが、3ノード以上ある場合は空きが多いものから選択されます。<br />
なお、assign-resourceで手動でノードを選択してデプロイすることもできます。</p>
<pre>[root@server1 ~]# drbdmanage deploy-resource vol1 2
Operation completed successfully</pre>
<p>ボリュームがデプロイされ、実際にDRBDリソースが作成されていることを確認します。</p>
<pre>[root@server1 ~]# drbdmanage list-volumes
+----------------------------------------------------------------------+
| Name | Vol ID |       Size | Minor |                         | State |
|----------------------------------------------------------------------|
| <strong>vol1</strong> |      <strong>0</strong> | <strong>953.67 MiB</strong> |   <strong>100</strong> |                         |    ok |
+----------------------------------------------------------------------+
[root@server1 ~]# drbdmanage list-nodes
+----------------------------------------------------------------------+
| Name    | Pool Size | Pool Free |                            | State |
|----------------------------------------------------------------------|
| server1 |      5116 |      <strong>4152</strong> |                            |    ok |
| server2 |      5116 |      <strong>4152</strong> |                            |    ok |
+----------------------------------------------------------------------+
[root@server1 ~]# drbdadm status
.drbdctrl role:Primary
  volume:0 disk:UpToDate
  volume:1 disk:UpToDate
  server2 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate

vol1 role:Secondary
  disk:UpToDate
  server2 role:Secondary
    peer-disk:UpToDate</pre>
<p>リソース追加、ボリューム追加、デプロイを一度に行うことも可能です。ここでは vol2 ボリュームを一度に作成します。</p>
<pre>[root@server1 ~]# drbdmanage new-volume vol2 1GB --deploy 2
Operation completed successfully
Operation completed successfully
[root@server1 ~]# drbdmanage list-volumes
+---------------------------------------------------------------------+
| Name | Vol ID |       Size | Minor |                        | State |
|---------------------------------------------------------------------|
| vol1 |      0 | 953.67 MiB |   100 |                        |    ok |
| <strong>vol2</strong> |      <strong>0</strong> | <strong>953.67 MiB</strong> |   <strong>101</strong> |                        |    ok |
+---------------------------------------------------------------------+
[root@server1 ~]# drbdmanage list-nodes
+---------------------------------------------------------------------+
| Name    | Pool Size | Pool Free |                           | State |
|---------------------------------------------------------------------|
| server1 |      5116 |      <strong>3196</strong> |                           |    ok |
| server2 |      5116 |      <strong>3196</strong> |                           |    ok |
+---------------------------------------------------------------------+
[root@server1 ~]# drbdadm status
...
vol2 role:Secondary
  disk:UpToDate
  server2 role:Secondary
    peer-disk:UpToDate</pre>
<h2>9. ファイルシステムの作成</h2>
<p>ファイルシステム作成対象のデバイスファイルは /dev/drbd100 から順に作成されます。<br />
数字は drbdmanage list-volumes で表示される Minor の値に対応します。</p>
<pre>[root@server1 ~]# mkfs -t ext4 /dev/drbd100
[root@server1 ~]# mkfs -t ext4 /dev/drbd101
[root@server1 ~]# mkdir /mnt/drbd1
[root@server1 ~]# mkdir /mnt/drbd2
[root@server1 ~]# mount /dev/drbd100 /mnt/drbd1
[root@server1 ~]# mount /dev/drbd101 /mnt/drbd2
[root@server1 ~]# df
ファイルシス            1K-ブロック    使用   使用可 使用% マウント位置
...
/dev/drbd100                 944808    2404   877192    1% /mnt/drbd1
/dev/drbd101                 944808    2404   877192    1% /mnt/drbd2</pre>
<h2>10. 3台目のノードの追加</h2>
<p>2台のDRBDクラスタに3台目のノードを追加する場合、3台目のノードで「3. 必要なソフトウェアのインストール」「4. sshの設定」および「5. LVMの設定」を行っておきます。<br />
その後、 server1 で以下を実行します。</p>
<pre>[root@server1 ~]# drbdmanage add-node server3 192.168.1.13
Operation completed successfully
Operation completed successfully
Host key verification failed.
Give leader time to contact the new node
Operation completed successfully
Operation completed successfully

Join command for node server3:
drbdmanage join -p 6999 192.168.1.13 2 server1 192.168.1.11 0 xxxxxxxxxxxxxxxx</pre>
<p>「Join command for node (ホスト名):」で提示されたコマンドを追加するノードで実行します(パスワードなしで ssh ログインできるようにしている場合は server1 から実行できます)。</p>
<pre>[root@server3 ~]# drbdmanage join -p 6999 192.168.1.13 2 server1 192.168.1.11 0 xxxxxxxxxxxxxxxx
You are going to join an existing drbdmanage cluster.
CAUTION! Note that:
  * Any previous drbdmanage cluster information may be removed
  * Any remaining resources managed by a previous drbdmanage installation
    that still exist on this system will no longer be managed by drbdmanage

Confirm:

  yes/no: yes
Waiting for server to start up (can take up to 1 min)
Operation completed successfully</pre>
<pre>drbdmanage list-nodes でノードが追加されていることを確認します。

[root@server1 ~]# drbdmanage list-nodes
+---------------------------------------------------------------------+
| Name    | Pool Size | Pool Free |                           | State |
|---------------------------------------------------------------------|
| server1 |      5116 |      3196 |                           |    ok |
| server2 |      5116 |      3196 |                           |    ok |
| <strong>server3</strong> |      <strong>5116</strong> |      <strong>5108</strong> |                           |    ok |
+---------------------------------------------------------------------+</pre>
<p>ボリューム vol2 を3台目のノードにアサインします。</p>
<pre>[root@server1 ~]# drbdmanage assign-resource vol2 server3
Operation completed successfully</pre>
<p>追加したノードにボリュームが作成され、同期が開始されます。</p>
<pre>[root@server1 ~]# drbdadm status
.drbdctrl role:Primary
  volume:0 disk:UpToDate
  volume:1 disk:UpToDate
  server2 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate
  server3 role:Secondary
    volume:0 peer-disk:UpToDate
    volume:1 peer-disk:UpToDate

vol1 role:Secondary
  disk:UpToDate
  server2 role:Secondary
    peer-disk:UpToDate

vol2 role:Secondary
  disk:UpToDate
  server2 role:Secondary
    peer-disk:UpToDate
  <strong>server3</strong> role:Secondary
    <strong>replication:SyncSource peer-disk:Inconsistent done:0.61</strong></pre>
<p>しばらく待つと同期が完了し、3台目のノードのボリュームが使用されていることを確認します。</p>
<pre>[root@server1 ~]# drbdadm status
...
vol2 role:Secondary
  disk:UpToDate
  server2 role:Secondary
    peer-disk:UpToDate
  server3 role:Secondary
    peer-disk:UpToDate

[root@server1 ~]# drbdmanage list-nodes
+----------------------------------------------------------------------+
| Name    | Pool Size | Pool Free |                            | State |
|----------------------------------------------------------------------|
| server1 |      5116 |      3196 |                            |    ok |
| server2 |      5116 |      3196 |                            |    ok |
| server3 |      5116 |      <strong>4152</strong> |                            |    ok |
+----------------------------------------------------------------------+</pre>
<p>このとき各ボリュームは以下のようにアサインされています。</p>
<pre>+---------+  +---------+  +---------+
| server1 |--| server2 |--| server3 |
+---------+  +---------+  +---------+
+---------+  +---------+ 
|  vol1   |  |  vol1   |
+---------+  +---------+  +---------+
|  vol2   |  |  vol2   |  |  vol2   |
+---------+  +---------+  +---------+</pre>
<div>
<a href="https://www.sraoss.co.jp/prod_serv/support/oss-pro-support/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-oss" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、各種OSS のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>DRBD9 と Pacemaker の構成</title>
		<link>https://www.sraoss.co.jp/tech-blog/pacemaker/drbd9-pacemaker/</link>
		
		<dc:creator><![CDATA[山本 博之 (Hiroyuki Yamamoto)]]></dc:creator>
		<pubDate>Wed, 05 Dec 2018 07:20:03 +0000</pubDate>
				<category><![CDATA[DRBD]]></category>
		<category><![CDATA[Pacemaker]]></category>
		<category><![CDATA[OSS]]></category>
		<guid isPermaLink="false">https://www.sraoss.co.jp/tech-blog/?p=677</guid>

					<description><![CDATA[本記事では、Linuxの分散ストレージシステムであるDRBDの最新版であるDRBD9とPacemakerを組み合わせた構成について、基本的な構成でのインストール手順およびDRBD8の場合との違いなどについて解説していきま ...]]></description>
										<content:encoded><![CDATA[<p>本記事では、Linuxの分散ストレージシステムであるDRBDの最新版であるDRBD9とPacemakerを組み合わせた構成について、基本的な構成でのインストール手順およびDRBD8の場合との違いなどについて解説していきます。</p>
<h2>1. DRBD9について</h2>
<p>DRBDは複数台のLinuxサーバで、ネットワーク経由で共有ストレージを構築するためのシステムです。</p>
<p>DRBD9はDRBD8.xから以下のような機能が強化されています。</p>
<ul>
<li>自動プロモーション機能によりマウント時に自動でプライマリへの昇格・セカンダリへの降格が行えるようになった</li>
<li>drbdmanage コマンドによりノードやボリュームの追加・削除が簡単に行えるようになった</li>
<li>1階層で最大31ノードまでの多ノード構成が可能(DRBD8まではスタック構成のみ可)</li>
</ul>
<p>特に、自動プロモーション機能によりPacemakerでクラスタを組む場合に大幅に設定を簡略化できるようになりました。</p>
<p><span id="more-677"></span></p>
<h2>2. 構成</h2>
<p>本記事では以下のサーバ構成を想定します。</p>
<table>
<tbody>
<tr>
<th>ホスト名</th>
<th>IPアドレス</th>
<th>デバイス</th>
<th>サイズ</th>
</tr>
<tr>
<td>server1</td>
<td>192.168.1.11</td>
<td>/dev/sdb</td>
<td>5GB</td>
</tr>
<tr>
<td>server2</td>
<td>192.168.1.12</td>
<td>/dev/sdb</td>
<td>5GB</td>
</tr>
<tr>
<td>仮想IP</td>
<td>192.168.1.101</td>
</tr>
</tbody>
</table>
<h2>3. パッケージのインストール</h2>
<p>本記事ではELRepoリポジトリ(http://elrepo.org)のrpmパッケージをインストールします。/</p>
<p>両ノードにDRBD9をインストールします。</p>
<pre># rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# yum install kmod-drbd90 drbd90-utils</pre>
<h2>4. 設定ファイルの作成</h2>
<p>drbdmanage を使用せず自分でDRBDのリソースを管理する場合はリソースの設定ファイルを作成します。</p>
<p>/etc/drbd.d/drbd0.res として設定ファイルを作成します。</p>
<pre>resource drbd0 {
        protocol C;

        disk /dev/sdb1;
        device /dev/drbd0;
        meta-disk internal;
        on server1 {
                address 192.168.1.11:7789;
        }
        on server2 {
                address 192.168.1.12:7789;
        }
}</pre>
<p>/etc/drbd.d/global_common.conf に以下の設定を追加します。自動プロモーションはデフォルトで有効のため、「auto-promote yes;」は追加しなくてもOKです。</p>
<pre>global {
        <strong>usage-count no;</strong>
        ...
}

common {
        ...
        options {
                <strong>auto-promote yes;</strong>
        }
        ...
}</pre>
<h2>5. DRBDデバイスの作成</h2>
<p>両ノードのディスクsdbにsdb1パーティションを作成し、先頭を0初期化します。<br />
<strong>※対象のディスクのデータはすべて削除されるので注意!</strong></p>
<pre># cfdisk /dev/sdb
# dd if=/dev/zero of=/dev/sdb1 bs=1M count=1</pre>
<p>両ノードでメタデータを作成します。</p>
<pre># drbdadm create-md drbd0</pre>
<p>リソースを有効化します。</p>
<pre>[root@server1 ~]# drbdadm up drbd0
[root@server1 ~]# drbdadm status drbd0
drbd0 role:Secondary
  disk:Inconsistent
  server2 connection:Connecting

[root@server2 ~]# drbdadm up drbd0
[root@server2 ~]# drbdadm status drbd0
drbd0 role:Secondary
  disk:Inconsistent
  server1 role:Secondary
    peer-disk:Inconsistent

[root@server1 ~]# drbdadm status drbd0
drbd0 role:Secondary
  disk:Inconsistent
  server2 role:Secondary
    peer-disk:Inconsistent</pre>
<p>この時点ではまだデバイスの同期が行われていないため、「Inconsistent」状態になります。</p>
<h2>6. デバイスの初期同期</h2>
<p>server1を同期元として指定し、同期を開始します。</p>
<pre>[root@server1 ~]# drbdadm primary --force drbd0</pre>
<p>同期が完了した場合、両方のディスクが「UpToDate」になります。</p>
<pre>[root@server1 ~]# drbdadm status drbd0
drbd0 role:<strong>Primary</strong>
  disk:<strong>UpToDate</strong>
  server2 role:Secondary
    peer-disk:<strong>UpToDate</strong>

[root@server2 ~]# drbdadm status drbd0
drbd0 role:Secondary
  disk:<strong>UpToDate</strong>
  server1 role:Primary
    peer-disk:<strong>UpToDate</strong></pre>
<p>なお、 DRBD 8.xでは cat /proc/drbd でもステータスを確認できましたが、DRBD9では利用できませんのでご注意ください。</p>
<h2>7. ファイルシステムの作成</h2>
<p>現在プライマリとなっているノードでDRBDデバイス上にファイルシステムを作成します。</p>
<pre>[root@server1 ~]# mkfs.ext4 /dev/drbd0
...

[root@server1 ~]# mkdir /mnt/drbd
[root@server1 ~]# mount /dev/drbd0 /mnt/drbd
[root@server1 ~]# df /mnt/drbd
ファイルシス   1K-ブロック  使用   使用可 使用% マウント位置
/dev/drbd0         5029276 20472  4730288    1% /mnt/drbd</pre>
<p>テストファイルを作成し、プライマリを移動して複製されていることを確認します。</p>
<pre>[root@server1 ~]# echo test &gt; /mnt/drbd/test.txt
[root@server1 ~]# umount /dev/drbd0
[root@server1 ~]# drbdadm secondary drbd0

[root@server2 ~]# drbdadm primary drbd0
[root@server2 ~]# mount /dev/drbd0 /mnt/drbd
[root@server2 ~]# ls /mnt/drbd
lost+found test.txt
[root@server2 ~]# cat /mnt/drbd/test.txt
test
[root@server2 ~]# umount /dev/drbd0
[root@server2 ~]# drbdadm secondary drbd0</pre>
<h2>8. DRBDの自動起動設定</h2>
<p>OS起動時にDRBDが起動するように設定します。</p>
<pre>[root@server1 ~]# systemctl enable drbd
Created symlink from /etc/systemd/system/multi-user.target.wants/drbd.service to /usr/lib/systemd/system/drbd.service.
[root@server2 ~]# systemctl enable drbd
Created symlink from /etc/systemd/system/multi-user.target.wants/drbd.service to /usr/lib/systemd/system/drbd.service.</pre>
<p>両ノードのOSを再起動し、DRBDが両方Secondary状態で起動することを確認します。</p>
<h2>9. 自動プロモーション</h2>
<p>自動プロモーションが有効になっているので、mount操作を実行すると自動的にPrimaryに昇格され、<br />
umountで自動的にSecondaryに降格されます。</p>
<pre>[root@server1 ~]# drbdadm status drbd0
drbd0 role:Secondary
  disk:UpToDate
  server2 role:Secondary
    peer-disk:UpToDate
[root@server1 ~]# mount /dev/drbd0 /mnt/drbd
[root@server1 ~]# drbdadm status drbd0
drbd0 role:<strong>Primary</strong>
  disk:UpToDate
  server2 role:Secondary
    peer-disk:UpToDate</pre>
<p>なお、既にPrimaryになっているノードがある状態でmount実行しようとすると以下のように失敗します。</p>
<pre>drbd drbd0: Auto-promote failed: Multiple primaries not allowed by config</pre>
<p>また、注意点として、一度 drbdadmコマンドで手動でPrimary/Secondaryを切り替えると、自動プロモーションは無効になります。再度有効にするにはDRBDを再起動する必要があります。</p>
<h2>10. Pacemaker/Corosyncの設定</h2>
<p>Pacemaker/CorosyncでDRBDデバイス上のファイルシステムを管理する設定を行います。</p>
<p>DRBDリソースの昇格・降格はDRBDの自動プロモーションにより制御されるため、従来のようにPacemakerでMaster/Slaveリソースを作成する必要がなくなり、設定を大幅に簡略化できます。また、DRBDの管理をDRBD自体に任せることにより、DRBDのスプリットブレインが発生しにくくなるメリットもあります。</p>
<p>ここではFilesystemリソースとIPaddr2(仮想IP)リソースをグループ化して管理します。なお、Pacemaker/Corosyncのインストール自体は完了しているものとします。</p>
<pre># pcs resource create VIP ocf:heartbeat:IPaddr2 
    ip=192.168.1.101 cidr_netmask=24 op monitor interval=10s
# pcs resource create FS ocf:heartbeat:Filesystem 
    device=/dev/drbd0 directory=/mnt/drbd fstype=ext4 
    op start timeout=60s on-fail=restart 
    op stop timeout=60s on-fail=block 
    op monitor interval=10s timeout=60s on-fail=restart
# pcs resource group add Group-FS FS VIP</pre>
<p>ファイルシステムリソースが仮想IPリソースと同じノードで起動し、DRBDリソースがPrimaryとなり実際にマウントされていることを確認します。</p>
<pre># pcs status
  ...
  Resource Group: Group-FS
      FS (ocf::heartbeat:Filesystem):    Started <strong>server1</strong>
      VIP        (ocf::heartbeat:IPaddr2):       Started <strong>server1</strong>

[root@server1 ~]# drbdadm status
drbd0 role:Primary
  disk:UpToDate
  server2 role:Secondary
    peer-disk:UpToDate

[root@server1 ~]# df /mnt/drbd
ファイルシス   1K-ブロック  使用  使用可 使用% マウント位置
/dev/drbd0         5029276 37916 4712844    1% /mnt/drbd</pre>
<p>server1をスタンバイモードにしてserver2にスイッチオーバーすることを確認します。</p>
<pre>[root@server1 ~]# pcs cluster standby server1
[root@server1 ~]# pcs status
...
Node server1: standby
Online: [ server2 ]

Full list of resources:

 Resource Group: Group-FS
     FS (ocf::heartbeat:Filesystem):    Started <strong>server2</strong>
     VIP        (ocf::heartbeat:IPaddr2):       Started <strong>server2</strong>

[root@server2 ~]# drbdadm status
drbd0 role:Primary
  disk:UpToDate
  server1 role:Secondary
    peer-disk:UpToDate

[root@server2 ~]# df /mnt/drbd
ファイルシス   1K-ブロック  使用  使用可 使用% マウント位置
/dev/drbd0         5029276 37916 4712844    1% /mnt/drbd</pre>
<div>
<a href="https://www.sraoss.co.jp/prod_serv/support/oss-pro-support/?utm_source=sraoss-techblog&utm_medium=referral&utm_campaign=under-article-oss" rel="noopener" style="color:initial;" target="_blank" class="no-ext"></p>
<div style="background-color:#DAEFF6; padding:20px; border-radius:8px; text-align:center;">
SRA OSSでは、各種OSS のサポートを提供しております。<br />
詳しくは<strong style="color:#2581c4;">弊社ホームページ</strong>をご覧ください。
</div>
<p></a>
</div>

]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
