fece_dockerを単体で動かしてみます。
Pacemamaker1.0系から使われているglueでは、dockerリソースのfenceは出来ない為、今後、Pacemaker1.1系でdockerのSTONITHを利用する場合には、fence_docckerの利用が必要だと思われます。
今回は、TLS設定による利用は確認していません。
確認した環境
- CentOS 7.2
- Docker 1.9.1
- fence-agents-a04398b16704e626ece91d1d60be77872eab6a7f
事前準備
docker-networkの設定
- fence_dockerではネットワークアクセスが必要となる為、以下のような設定が必要です。
# /etc/sysconfig/docker-network
DOCKER_NETWORK_OPTIONS=-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock
- 設定反映の為に、dockerサービスを再起動します。
- また、proxy環境ではproxyの例外設定が必要な場合もあるようです
[root@ct72-01 opt]# export no_proxy=localhost,127.0.0.1
アクセスの確認
- 設定ネットワークでのdockerコマンドによるimagesの確認します。
[root@ct72-01 opt]# docker -H=tcp://localhost:4243 images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
docker.io/centos 7 28e524afdd05 6 days ago 196.7 MB
- curlでimagesが取得出来ることも念の為、確認してみました。
[root@ct72-01 opt]# curl -X GET http://127.0.0.1:4243/images/json
[{"Id":"28e524afdd052cfa82227c67344c098aabcd51021dd1f3b0c71485abcdd78a86","ParentId":"044c0f15c4d9a7499734b75b73ea5754ceb2c1c22e86d7eaa5ab8098b60c5267","RepoTags":["docker.io/centos:7"],"RepoDigests":[],"Created":1459546102,"Size":0,"VirtualSize":196677849,"Labels":{"build-date":"2016-03-31","license":"GPLv2","name":"CentOS Base Image","vendor":"CentOS"}}]
- 事前にコンテナを起動しておき、起動を確認します。
[root@ct72-01 opt]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2c49d5c99425 centos:7 "/bin/bash" 2 minutes ago Up 2 minutes test1
#動作
- -nオプションには、CONTAINER ID及びNAMESが指定可能です
- 少し古いdockerのバージョンの場合には、api-versionのオプションを変更する必要があると思われます。
リスト取得
[root@ct72-01 opt]# fence_docker -o list -a 127.0.0.1 -u 4243 --api-version 1.12
db7b85bba8160469a1a917a0c381b57a88629e0f41423508eb7988edb365440c,/boring_almeida
2c49d5c99425845e7b523257babbe563e0a0c5a96446b94f579dc2b8258bad28,/test1
add05522089ead63e244ce5ce97f4f5cdbf65d22a6dedf1a396bdcb503942809,/clever_perlman
a51db44e2397022b6ed5664155822f578afe9bb0ec93652b3686d23106734254,/sharp_archimedes
状態取得
[root@ct72-01 opt]# fence_docker -o status -a 127.0.0.1 -u 4243 -n test1 --api-version 1.12
Status: ON
電源OFF
[root@ct72-01 opt]# fence_docker -o off -a 127.0.0.1 -u 4243 -n test1 --api-version 1.12
Success: Powered OFF
[root@ct72-01 opt]# fence_docker -o status -a 127.0.0.1 -u 4243 -n test1 --api-version 1.12
Status: OFF
電源ON
- 「Cannot parse json」と出るが、ONは可能な模様。
[root@ct72-01 opt]# fence_docker -o on -a 127.0.0.1 -u 4243 -n test1 --api-version 1.12
Cannot parse json
Success: Powered ON
[root@ct72-01 opt]# fence_docker -o status -a 127.0.0.1 -u 4243 -n test1 --api-version 1.12
Status: ON
リブート
- 「Cannot parse json」と出るが、Rebootは可能な模様。
[root@ct72-01 opt]# fence_docker -o reboot -a 127.0.0.1 -u 4243 -n test1 --api-version 1.12
Cannot parse json
Success: Rebooted
[root@ct72-01 opt]# fence_docker -o status -a 127.0.0.1 -u 4243 -n test1 --api-version 1.12
Status: ON
その他
- fence_dockerのコマンドラインのオプションは以下になっています。
[root@ct72-01 opt]# fence_docker --help
Usage:
fence_docker [options]
Options:
-a, --ip=[ip] IP address or hostname of fencing device
-n, --plug=[id] Physical plug number on device, UUID or
identification of machine
-m, --method=[method] Method to fence (onoff|cycle) (Default: onoff)
-z, --ssl Use SSL connection with verifying certificate
-u, --ipport=[port] TCP/UDP port to use
(default 80, 443 if --ssl option is used)
-4, --inet4-only Forces agent to use IPv4 addresses only
-6, --inet6-only Forces agent to use IPv6 addresses only
--ssl-secure Use SSL connection with verifying certificate
--ssl-insecure Use SSL connection without verifying certificate
-o, --action=[action] Action: on, off, reboot (default), status, list,
list-status, monitor, metadata or
validate-all
--tlscert Path to client certificate for TLS authentication
--tlskey Path to client key for TLS authentication
--tlscacert Path to CA certificate for TLS authentication
-v, --verbose Verbose mode
-D, --debug-file=[debugfile] Debugging to output file
-V, --version Display version information and exit
-h, --help Display this help and exit
-C, --separator=[char] Separator for CSV created by 'list' operation
--power-timeout=[seconds] Test X seconds for status change after ON/OFF
--shell-timeout=[seconds] Wait X seconds for cmd prompt after issuing command
--login-timeout=[seconds] Wait X seconds for cmd prompt after login
--power-wait=[seconds] Wait X seconds after issuing ON/OFF
--delay=[seconds] Wait X seconds before fencing is started
--retry-on=[attempts] Count of attempts to retry power on
--gnutlscli-path=[path] Path to gnutls-cli binary
--api-version Version of Docker Remote API (default: 1.11)
#PM2.0開発版のクラスタに組み込んでみました。(Bundle機能をdocker RAでマネテ見た感じです)
- 以下の設定では、コンテナ内のDummyリソースをリネームなどすると、fence_dockerによって、コンテナが停止されます。
property no-quorum-policy="ignore" \
stonith-action="off" \
stonith-enabled="true" \
startup-fencing="false" \
rsc_defaults resource-stickiness="INFINITY" \
migration-threshold="1"
#
fencing_topology \
docker-remote: prmStonith1
primitive prmStonith1 stonith:fence_docker \
params pcmk_off_timeout=60s \
ip="127.0.0.1" \
ipport="4243" \
api_version="1.12" \
ssl_insecure=yes \
op start interval="0s" timeout="60s" on-fail="restart" \
op monitor interval="3600s" timeout="60s" on-fail="restart" \
op stop interval="0s" timeout="60s" on-fail="ignore"
primitive docker-remote ocf:pacemaker:remote \
params \ server="192.168.20.189" \
op monitor interval=30s timeout=60s \
primitive vip-Docker ocf:heartbeat:IPaddr2 \
params \
ip="192.168.20.189" \
nic="ens192" \
cidr_netmask="24" \
op start interval="0s" timeout="60s" on-fail="restart" \
op monitor interval="10s" timeout="60s" on-fail="restart" \
op stop interval="0s" timeout="60s" on-fail="block"
primitive container1 ocf:heartbeat:docker \
params \
name="docker-remote" \
run_opts="--restart=no -it -h docker-remote --name docker-remote -e PCMK_remote_port=3121 -v /etc/pacemaker/authkey:/etc/pacemaker/authkey -p 192.168.20.189:3121:3121 -p 192.168.20.189:80:80" \
run_cmd="/usr/sbin/pacemaker_remoted" \
image="pcmktest:http" \
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"
primitive dummy-on-remote ocf:heartbeat:Dummy \
op start interval=0s timeout=60s \
op monitor interval=30s timeout=60s \
op stop interval=0s timeout=60s on-fail="fence"
group grpDocker \
vip-Docker \
container1
location location-1 grpDocker resource-discovery="exclusive" \
rule 100: #uname eq rh74-test
location location-2 docker-remote resource-discovery="exclusive" \
rule 100: #uname eq rh74-test
location location-3 dummy-on-remote resource-discovery="exclusive" \
rule 100: #uname eq docker-remote
### Resource Order ###
colocation col-1 inf: docker-remote grpDocker
order rsc_order-1 inf: grpDocker docker-remote
関連リンク
以上です