今回もStashの高可用性を目指してクラスタを組んでいきたいと思います。
前回までで、サーバーとStashのプロセスの冗長化は一旦完了したので、
今回は一番重要なデータ保存領域の冗長化を目指します。
お知らせ
今までAtlassian Stash を冗長化しようと頑張ってきましたが、つい先日なんとAtlassian Stashがなくなってしまいました。
今度からは生まれ変わった? Bitbucket Server をよろしくお願いします。
・・・閑話休題・・・
それでは、Stash改めBitbucket Serverのストレージを冗長化したいと思います。
Atlassianの公式によるとストレージは GFS2 + DRBD でストレージの冗長化を行っていますが、
今回は個人的な興味で、GlusterFSを使って冗長構成をしてみたいと思います。
事前準備
VagrantにDISKを追加
Virtualbox コンソール経由で、node01,node02 にDISKを追加します。
Stashのデータに使用するので、保存するデータの容量によって大きさを考える必要があります。
今回は仮に8GBとして データ用にパーティション /dev/sdb1 を作成しました。
GlusterFSのインストール(全ノード)
パッケージのインストール
cd /etc/yum.repos.d/ curl -o glusterfs.repo http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-epel.repo yum install glusterfs-server
通信ポートの開放
まずは、通信に必要なポートを開放します。
今回は実験用途なのでどこからでも通信可能に設定してしまいます。
/usr/lib/firewalld/services/glusterfs.xml を以下の内容で作成します。
<service> <short>GlusterFS</short> <description>GlusterFS</description> <port protocol="tcp" port="1111"/> <port protocol="tcp" port="24007-24100"/> <port protocol="tcp" port="49152"/> </service>
作成したファイルをもとにfirewallの設定を変更します。
firewall-cmd --permanent --add-service=glusterfs firewall-cmd --reload
GlusterFS Volumeの作成
次にGlusterFSで使用するディスクの準備をします。
ファイルシステムの作成
GlusterFSは共有するボリュームのファイルシステムをXFSにする必要があります。
まずはデータ用のボリュームをXFSで用意します。
mkfs.xfs /dev/sdb1
/etc/fstab の末尾にエントリを追加します。
/dev/sdb1 /data xfs defaults 0 0
マウントします。
mount -a
GlusterFSの起動
systemctl start glusterd systemctl enable glusterd
GlusterFSのノード登録
node01
gluster peer probe node02
node02
gluster peer probe node01
GlusterFSのVolume作成(任意の1ノードで実行)
mkdir -p /data/atlassian/stash
gluster volume create stash_vol replica 2 node01:/data/atlassian/stash node02:/data/atlassian/stash gluster volume start stash_vol
GlusterFSのマウント
マウントポイントの作成
まずマウントポイントを作成します。
既存のStashのデータディレクトリはあとでGlusterFS上にコピーするためリネームして退避しておきます。
mv /var/atlassian/application-data/stash /var/atlassian/application-data/stash.org mkdir -p /var/atlassian/application-data/stash chown atlstash:atlstash /var/atlassian/application-data/stash
fstabの修正
次に各ノードで /etc/fstab にエントリを追加します。
node01
node01:stash_vol /var/atlassian/application-data/stash glusterfs defaults 0 0
node02
node02:stash_vol /var/atlassian/application-data/stash glusterfs defaults 0 0
ファイルシステムのマウント
次に、両方のノードでglusterfsをマウントします。
mount -a
既存データのコピー
次に、今までのデータをどちらか一方のノードでコピーします
cp -rp /var/atlassian/application-data/stash.org/* /var/atlassian/application-data/stash/.
これで課題だったDISKの冗長化も出来、Stash改めBitbucketServerのクラスタリングが完了しました。
実際の運用では、定期的なデータのバックアップは行う事はあっても、クラスタリングをすることはまれかもしれませんが、
クラスタリングを検討されている方の参考になれば幸いです。
※ このシリーズの記事はあくまで検証用途でクラスタの設定を行っているため、実際の環境では使用に耐えない可能性があります。
実際にHAを構成を行う場合には十分な検証を行うことをおすすめします。