改訂履歴
2017/02/10 Linux-ha-japanで公開されているpacemaker1.1.15のリポジトリパッケージで再確認した為、内容を更新しました。
resourece-agentにあるdocker RAを利用してみました。
なお、確認は、CentOS7.3上でPacemakerのバージョンは、1.1.15、リソースエージェントは3.9.7を使っています。
準備
dockerをインストールしておきます。確認した時のdockerのバージョンは、1.13.1-rc2でした
[root@docker01 ~]# docker --version
Docker version 1.13.1-rc2, build 54f71fd
[root@docker01 ~]# ps -ef |grep docker
root 908 1 0 16:16 ? 00:00:01 /usr/bin/dockerd
root 1002 908 0 16:16 ? 00:00:00 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc
root 2116 1165 0 16:26 pts/0 00:00:00 grep --color=auto docker
今回は事前にdockerのイメージをローカルに用意しておく方式を取ります。
用意したイメージは、centos:latestです。
[root@docker01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
remote latest 7c4ab4ed16fd 4 days ago 312 MB
busybox latest 7968321274dc 5 weeks ago 1.11 MB
centos latest 67591570dd29 2 months ago 192 MB
内容
CLIファイルの準備
以下の内容でCLIファイルを作成しておきます。
なお、今回はstonithは考慮していません。(dockerのコンテナのSTONITHには、fence_dockerを利用する必要があります)
CLI.crm
property no-quorum-policy="ignore" \
stonith-enabled="false" \
startup-fencing="false" \
rsc_defaults resource-stickiness="INFINITY" \
migration-threshold="1"
primitive container1 ocf:heartbeat:docker \
params \
name="test1" \
run_opts="-t -i" \
run_cmd="/bin/bash" \
image="docker.io/centos:centos7" \
op start interval="0s" timeout="90s" on-fail="restart" \
op monitor interval="3s" timeout="30s" on-fail="restart" \
op stop interval="0s" timeout="90s" on-fail="fence"
起動
Pacemaker(corosyncも)を起動します。
起動後、crmコマンドで先のCLIファイルを投入します。
[root@docker01 ~]# systemctl start pacemaker
[root@docker01 ~]# crm configure load update docker.crm
[root@docker01 ~]# crm_mon -1 -Af
Stack: corosync
Current DC: docker01 (version 1.1.15-1.el7-e174ec8) - partition WITHOUT quorum
Last updated: Mon Feb 20 16:21:58 2017 Last change: Mon Feb 20 16:21:53 2017 by root via cibadmin on docker01
1 node and 1 resource configured
Online: [ docker01 ]
container1 (ocf::heartbeat:docker): Started docker01
Node Attributes:
* Node docker01:
Migration Summary:
* Node docker01:
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a77497bf8c80 centos:latest "/bin/bash" 47 seconds ago Up 46 seconds test1
エラー検知
とりあえず、起動したコンテナをkill(故障)してみます。
[root@docker01 ~]# docker kill test1
test1
[root@docker01 ~]# crm_mon -1 -Af
Stack: corosync
Current DC: docker01 (version 1.1.15-1.el7-e174ec8) - partition WITHOUT quorum
Last updated: Mon Feb 20 16:23:45 2017 Last change: Mon Feb 20 16:21:53 2017 by root via cibadmin on docker01
1 node and 1 resource configured
Online: [ docker01 ]
Node Attributes:
* Node docker01:
Migration Summary:
* Node docker01:
container1: migration-threshold=1 fail-count=1 last-failure='Mon Feb 20 16:23:32 2017'
Failed Actions:
* container1_monitor_3000 on docker01 'not running' (7): call=7, status=complete, exitreason='none',
last-rc-change='Mon Feb 20 16:23:32 2017', queued=0ms, exec=0ms
ちゃんと、エラー検知してますね。
次は、fence_dockerでSTONITHをしてみたいと思います。
- 2015/10/30補足:現状、Pacemakerでfence_dockerでのSTONITHを実行させる為には、dockerコンテナ内でPacemakerクラスタを構成する必要がある。(dockerコンテナ内のリソース故障~STONITH~ホストへfence_dockerでSTONITHを依頼)