LoginSignup
3
0

More than 5 years have passed since last update.

Pacemaker1.1.17新機能(bundle)

Last updated at Posted at 2017-04-24

bundleの概要

  • dockerコンテナを制御する為のリソースとして新たに作成された種別。(PM1.1.18から、rktランタイムもサポートされています)
  • group/clone/masterと同列にbundleが指定可能。
  • bundleとしては、内部でPacemakerホスト側にIPaddr2、remote、dockerリソースを生成して利用。
  • bundleの内部にprimitiveリソースとして、コンテナで実行するリソースを指定。
  • コンテナ側にはpacemaker_remoteと、必要なライブラリ関係とresource_agent、起動するリソース(リンクの例ではhttp)が必要となる。

Bundle2.png

動作確認

環境

  • 今回は、そろそろ最初のバージョンが出るであろうPM2.0系の開発版を利用して、単ノードで確認してみます。
  • RHEL7.4
  • docker ce版(17.12.1-ce)

準備

  • ホストOS(RHEL7.4)にPacemakerをインストールします
  • docker ce版もインストールします
  • dockerコンテナ内で起動するpacemaker_remoteとの通信用にauthkeyを生成しておきます。
# mkdir /etc/pacemaker
# dd if=/dev/urandom of=/etc/pacemaker/authkey bs=4096 count=1
  • dockerにNetwork設定(/usr/lib/systemd/system/docker.service)をして、再起動しておきます。
(snip)
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock
(snip)
  • centos7のイメージをdockerにpullしておきます
  • [root@rh74-test ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest ff426288ea90 8 weeks ago 207MB
  • 本家のwiki手順に従ってコンテナ用のファイルを準備しておきます
# mkdir -p /root/bundle-walk-through \
  /var/log/pacemaker/bundles/httpd-bundle-{0,1,2} \
  /var/local/containers/httpd-bundle-{0,1,2}
# for i in 0 1 2; do cat >/var/local/containers/httpd-bundle-$i/index.html <<EOF
<html>
<head><title>Bundle test</title></head>
<body>
<h1>httpd-bundle-$i @ $(hostname)</h1>
</body>
</html>
EOF
done
  • 本家のwiki手順に従ってDockerファイルを準備しておきます
# cat >/root/bundle-walk-through/Dockerfile <<EOF
FROM centos:xxxxx
RUN yum update -y
RUN yum install -y httpd bind-utils curl lsof wget which
RUN yum install -y pacemaker pacemaker-remote resource-agents
EOF
  • 本家のwiki手順に従って上のDockerファイルでイメージを作成しておきます
# cd /root/bundle-walk-through
# docker rmi pcmktest:http
# docker build -t pcmktest:http .

[root@rh74-test ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
pcmktest            http                1049e2ef71e9        4 days ago          673MB
centos              latest              ff426288ea90        8 weeks ago         207MB
  • クラスタのプロパティを設定するだけのcrmファイルを準備しておきます
property no-quorum-policy="ignore" \
        stonith-enabled="false" \
        startup-fencing="false"

rsc_defaults resource-stickiness="INFINITY" \
        migration-threshold="INFINITY"
  • Pacemakerで単ノードを起動します
  • 作成しておいたcrmファイルを先に流し込みます
  • 設定ファイルをcibadminコマンドで流し込みます(crmシェルが使えない為、cibadminで流し込みます)
cibadmin --modify --allow-create --scope resources -X '<bundle id="httpd-bundle">
    <docker image="pcmktest:http" replicas="2" replicas-per-host="2" options="--log-driver=journald" />
    <network ip-range-start="192.168.20.188" host-interface="ens192" host-netmask="24">
      <port-mapping id="httpd-port" port="80"/>
    </network>
    <storage>
      <storage-mapping id="httpd-root"
        source-dir-root="/var/local/containers"
        target-dir="/var/www/html"
        options="rw"/>
      <storage-mapping id="httpd-logs"
        source-dir-root="/var/log/pacemaker/bundles"
        target-dir="/etc/httpd/logs"
        options="rw"/>
    </storage>
    <primitive class="ocf" id="httpd" provider="heartbeat" type="apache" >
      <operations>
        <op id="rabbitmq-monitor-interval-10" interval="10" name="monitor" timeout="40"/>
        <op id="rabbitmq-start-interval-0s" interval="0s" name="start" timeout="200s"/>
        <op id="rabbitmq-stop-interval-0s" interval="0s" name="stop" timeout="200s" />
     </operations>
    </primitive>
'

  • 以下のような状態になれば起動は完了です。
[root@rh74-test ~]# crm_mon -1 -Af
Stack: corosync
Current DC: rh74-test (version 2.0.0-f788652cf4) - partition WITHOUT quorum
Last updated: Tue Mar  6 14:36:29 2018
Last change: Tue Mar  6 14:36:08 2018 by root via cibadmin on rh74-test

3 nodes configured
8 resources configured

Online: [ rh74-test ]
GuestOnline: [ httpd-bundle-0@rh74-test httpd-bundle-1@rh74-test ]

Active resources:

 Docker container set: httpd-bundle [pcmktest:http] (unique)
   httpd-bundle-0 (192.168.20.188)      (ocf::heartbeat:apache):        Started rh74-test
   httpd-bundle-1 (192.168.20.189)      (ocf::heartbeat:apache):        Started rh74-test

Node Attributes:
* Node httpd-bundle-0@rh74-test:
* Node httpd-bundle-1@rh74-test:
* Node rh74-test:

Migration Summary:
* Node rh74-test:
* Node httpd-bundle-0@rh74-test:
* Node httpd-bundle-1@rh74-test:
[root@rh74-test ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                      NAMES
eac00211bca3        pcmktest:http       "/usr/sbin/pacemaker…"   14 seconds ago      Up 13 seconds       192.168.20.189:80->80/tcp, 192.168.20.189:3121->3121/tcp   httpd-bundle-docker-1
cea5d42a3404        pcmktest:http       "/usr/sbin/pacemaker…"   14 seconds ago      Up 13 seconds       192.168.20.188:80->80/tcp, 192.168.20.188:3121->3121/tcp   httpd-bundle-docker-0

動作

  • コンテナ内のapacheにアクセスしてみます
[root@rh74-test ~]# curl -X GET http://192.168.20.188                                                                                                                            
<html>
<head><title>Bundle test</title></head>
<body>
<h1>httpd-bundle-0 @ rh74-test</h1>
</body>
</html>
[root@rh74-test ~]# curl -X GET http://192.168.20.189                                                                                                                            
<html>
<head><title>Bundle test</title></head>
<body>
<h1>httpd-bundle-1 @ rh74-test</h1>
</body>
</html>

注意点

  • Bundle内のリソース故障によってフェンシング(STONITH)が実行したいとしても、Bundleリソースの場合には、コンテナ(この設定の場合にはdocker)の停止・開始によって代替えされます。
  • これは、Pacemaker_remoteのKVM WorkthroughのVirtualDomainによるremote管理の場合と同様です。(VirtualDomain管理の場合には、VirtualDomain RAの停止・開始よって代替えされます)
  • 現状、replicasなどのコンテナ(数)のスケールに対応していません。変更した場合には、全てのBundle管理下のコンテナは再起動します。
    • スケールについては、2.0リリース版では、Bundleのadd-hostオプション(false設定)にて対応される予定です。

補足情報

  • bundle(コンテナ)内では、最初にpacemaker_remoteが実行され(起動後pcmk-initに名称変更)、そのプロセスからpacemekre_remoteがforkされて実行されます。
[root@cent7-host1 ~]# docker exec -it httpd-bundle1-docker-1 /bin/bash                                                                                                                                                  
[root@httpd-bundle1-1 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 00:52 ?        00:00:00 pcmk-init
root         9     1  0 00:52 ?        00:00:00 /usr/sbin/pacemaker_remoted
root       102     1  0 00:52 ?        00:00:00 /sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf -c PidFile /var/run//httpd.pid
apache     105   102  0 00:52 ?        00:00:00 /sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf -c PidFile /var/run//httpd.pid
apache     107   102  0 00:52 ?        00:00:00 /sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf -c PidFile /var/run//httpd.pid
apache     108   102  0 00:52 ?        00:00:00 /sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf -c PidFile /var/run//httpd.pid
apache     110   102  0 00:52 ?        00:00:00 /sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf -c PidFile /var/run//httpd.pid
apache     111   102  0 00:52 ?        00:00:00 /sbin/httpd -DSTATUS -f /etc/httpd/conf/httpd.conf -c PidFile /var/run//httpd.pid
root       120     0  3 00:52 ?        00:00:00 /bin/bash
root       132   120  0 00:52 ?        00:00:00 ps -ef

関連リンク

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0