zookeeperとsheepdogのStorage Clusterをansibleで一気に構築

10GbE環境が出来たので、debian jessieのサーバーに遊びとansibleの勉強も兼ねてsheepdog Clusterを作ってみました。
PlayBookは、以下の通りです。myidはeth0に割り当てられたIPアドレスの第4オクテットから自動生成してくれます。



– hosts: sd_cluster
user: root
tasks:
– name: install sheepdog packages
apt: pkg={{item}} state=present update_cache=yes
with_items:
– zookeeper
– sheepdog
– qemu-utils
– zookeeper-bin
– zookeeperd
– name: copy zoo.cfg
copy: src=~/playbooks/zoo.cfg dest=/etc/zookeeper/conf/zoo.cfg backup=yes
– name: copy sheepdog conf
copy: src=~/playbooks/sheepdog dest=/etc/default/sheepdog backup=yes
– name: set cluster id from host ip address
shell: echo {{ ansible_eth0.ipv4.address }} |cut -d. -f 4 >/etc/zookeeper/conf/myid
– name: create directory
command: mkdir -p /srv/sheepdog

sheepdogは仮想マシン上に作ったので、ライブマイグレーションをしやすくするために、物理マシンのport 7000を仮想マシンのport 7000にルーティングします。
こうすれば、KVMからはローカルサーバーで動いているsheepdogにアクセスしているように見えます。
/etc/iptables/iptables.rule

*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A OUTPUT -m addrtype –src-type LOCAL –dst-type LOCAL -p tcp –dport 7000 -j DNAT –to-destination 192.168.24.51:7000
-A POSTROUTING -m addrtype –src-type LOCAL –dst-type UNICAST -j MASQUERADE
COMMIT

/etc/sysctl.d/routelocal.confにてローカルから外部へのルーティングを許可

net.ipv4.conf.all.route_localnet=1

作ってみたのは3nodeのClusterですが、びっくりするほどパフォーマンスが悪い。特にSheepdogのCPU使用率が凄くて、Sequential Readのスループットが100MB/Secぐらいしか出ないのは、多分node数が少なすぎるのと仮想マシンの一部がCPUの低速なNAS上で動かしているのが原因だと思う。Passmark2000程度のCPU能力だと実用にはほど遠いと思った。