Chef11のchef-serverをHA構成にする


Chef11はいままでのChefとはserverの構成がガラリと変わり、APIがRubyからErlangに、バックエンドのCouchDBがPostgreSQLになりました。その他はフロントエンドにはnginx、WebUIにunicorn。RabbitMQとSolrはそのまま。

基本的にそのまま使ってて問題ないのだけども、やはりサーバーは壊れるのでバックアップがないと困るよね、ということで調べてもあんまり情報がなかったので、やってみたメモを残します。めんどいのでrootで作業しています。

# wget https://opscode-omnitruck-release.s3.amazonaws.com/ubuntu/10.04/x86_64/chef-server_11.0.6-1.ubuntu.10.04_amd64.deb
# dpkg -i chef-server_11.0.6-1.ubuntu.10.04_amd64.deb

PrimaryとSecondary、2台のサーバーに入れましょう。

# echo "host replication repl_user SECONDARY_SERVER_IPADDRESS/0 trust" >> /var/opt/chef-server/postgresql/data/pg_hba.conf

次にReplicationの設定。/var/opt/chef-server/postgresql/data/postgresql.conf をエディタで開いて、以下のようにします。hot_standby = onの設定はここでは意味が無いですが、あとでこのファイルがそのままSecondary側にコピーされるのでここで変えておいて問題ないです。

次にPostgreSQLのシェルに入ってユーザーを作りますが、opscode-pgsqlユーザーにならないとシェルに入れないので面倒です。

# su opscode-pgsql -
$ pgsql postgres -c "CREATE ROLE repl_user LOGIN REPLICATION PASSWORD 'P@ssw0Rd'"

ここまでやったらPostgreSQLを再起動。Chef11のコンポーネントたちは、daemontoolsの下で動いているので普通には再起動できません。が、専用の管理コマンドが用意されているのでそいつを使います。

# chef-server-ctl restart postgresql
# chef-server-ctl stop postgresql
# rm -rf /var/opt/chef-server/postgresql/data

消したらPrimaryからデータを持ってきます。PRIMARY_SERVER_IPADDRESSは任意に読み替えてください。

# /opt/chef-server/embedded/bin/pg_basebackup -x -p 5432 -h PRIMARY_SERVER_IPADDRESS -U repl_user -W -D /var/opt/chef-server/postgresql/data --progress --verbose

終わったらrecovery.confを作ります。sampleからコピって書き換えます。

# cp /opt/chef-server/embedded/share/postgresql/recovery.conf.sample /var/opt/chef-server/postgresql/data/recovery.conf

/var/opt/chef-server/postgresql/data/recovery.conf で最低限以下のようにいじる。application_nameは別になんでもいいっぽいです。

あとはrootで作業してしまったのでownerを変えて起動。

# chown -R opscode-pgsql:opscode-pgsql /var/opt/chef-server/postgresql/data
# chef-server-ctl start postgresql

chef-server-ctl tailでログをみたり、chef-server-ctl statusでpostgresqlがrunになっていることを確認できればOKです。また、Primary側で以下のコマンドを叩くことでも確認できます。stateがstreamingになっていればOK。

$ sudo -u opscode-pgsql psql opscode_chef -c "SELECT * FROM pg_stat_replication"

念のためSolrのindexは作りなおしておいたほうがいいです。

# chef-server-ctl reindex
$ /opt/chef-server/embedded/bin/pg_ctl promote -D /var/opt/chef-server/postgresql/data

こんだけ。また2台構成に戻すには、同じ事をやってやればいいはずです。が、時間経ちすぎてWALファイルがなくなっちゃったとか、転送前にコケてて欠落してるとか、そういう場合はその限りではありません。ていうかそれはChefと関係ないんでそっち方面のマニュアルみるなり調べるなりしてください。