2019年11月30日(土) - 22:07 | カテゴリ:
Linux
老朽化した自宅サーバとサービス終了したCloudGarageからの引越し先として、
新サーバの構築を進めているのだが、内部データベースの構成をどうするかが課題だった。
当初、MariaDB Galera Clusterを利用しようと考えていたが、
安定稼働に必要なメモリ容量と、スプリットブレイン対策の奇数台数運用がネックだった。
また、DBが完全停止した時のサービス再起動にも細かい手順が必要だったり、
DBを本職としていない筆者には難易度が高すぎるのでお蔵入りになってしまった。
………
そうなると、レプリケーション構成が候補にあがるのだが、
こっちはこっちで、Master消失時にSlaveをMasterに自動昇格する方法が問題になった。
スクリプトを自作しても良かったが、日々のメンテナンスが辛くなりそうなので没に。
他に使えそうな物がないか調査した所、
MaxScaleを使うとクエリのロードバランスと自動昇格が出来る事が判明。
何処かのパブリッククラウド基盤にも採用していた筈で、稼働実績がありそうなのと、
MariaDB Galera Clusterの構成にMaxScaleも組み込まれている事が多いので、
今後の技術検証にも使えると判断し自鯖バックエンドDBに採用する事にした。
概要図は次の通り。フロントエンドにMaxScaleを動かして、
バックエンドのMariaDBにクエリを分散させる構成にした。
VirtualIPは慣れたVRRPを使いたかったので、KeepaliveでVRRP v3を喋る事にした。

典型的な構成なので枯れていると言えばそれまでだが、
バックエンドのMariaDBを自動で昇格・降格出来るのと、
サービスの接続先がMaxScaleに集約出来るので、
MaxScaleが落ちない限りはセッションが切れず、可用性がかなり高くなった。
実際にSELECTを送りながらバックエンドのMariaDBをダウンさせてみたが、
クエリ停止せずに処理を継続する事が出来た。
流石に、UPDATE系はフェールオーバーするまで通らない事があるが、
3秒程度で収束出来るので自鯖レベルならば大満足の結果に。
チューニングすれば更に可用性を上げられそうだが、
MaxScale本体に負荷がかかるのでバランスを見極める必要がありそう。
………
流石に、エンタープライズ環境だとこんな簡単には行かないが、
アップデート系をクラスタDB、参照系をリードレプリカに分散させれば、
高可用性と負荷分散を両立する事が出来る。
DBクラウド使えばそれまでだが、バックエンドの仕組みを把握するとアプリ構成も最適化出来るのと、
勉強の領域としてデータベースはやる事が多いので、今後もアップグレードしながらテストしようと思う。
« 続きを隠す
2019年11月23日(土) - 23:42 | カテゴリ:
雑談
フィルタリングを集中管理する為に便利なので、sieveプラグインを利用しているが、
sieveプラグインを同梱している”dovecot-pigeonhole”のパッケージがCentOS8に無く、
ネットの海を右往左往したのでその備忘録。
原因は、RHEL8.0をリリースする際にdovecot-pigeonholeパッケージが削除された影響。
CentOS8はRHEL8を元にリビルドしている都合上、
大元となるRHEL8.0に含まれていないパッケージは含まない傾向がある。
ただ、至る所からブーイングが出たのか、
Red Hat Bugzillaで『次期RHEL8には”dovecot-pigeonhole”を含める』とアナウンスがあった。
実際、MBOX Kojiにもdovecot-pigeonholeパッケージが準備されている事を確認。
ただし、何かしらの理由があるのか、まだ403の状態になっていた。
という事で更に調査を進めると、独自ビルドした謎RPMを配布していたり、
自力でビルドしてdovecotと連携させる回避策が出てきた。
今回、メール鯖を刷新するにあたりdovecotが使えないのは致命的過ぎるので、
筆者はdovecot含めて全部独自ビルドする事に。
日頃からソースビルドは良く実行しているので特に苦も無く起動までこぎ着ける事が出来た。
ビルドオプションは次の通り。他にはsystemd.serviceファイルも作成したが、
全部書くとそれなりの量になるので、サーバ刷新が一段落したタイミングで書こうと思う。
◇dovecot
./configure –prefix=/usr/local/dovecot \
–with-pam –with-ldap=yes –with-mysql \
–with-lz4 –with-libcap –with-zlib \
–with-bzlib –with-lzma
make && make install
◇Pigeonhole
./configure –prefix=/usr/local/dovecot \
–with-dovecot=/usr/local/dovecot/lib/dovecot \
–with-ldap=plugin
make && make install
|
これで、残るは起動テストのクリアとメールデータの移行&切り替えになる。
残る作業が一番の山場なので、自鯖と言えども丁寧に切り替えを実施したい。
2019年11月16日(土) - 23:38 | カテゴリ:
雑談
DB用ロードバランサにhaproxyを使うかmaxscaleを使うか最後まで迷ったが、
今回はmaxscaleを採用する事に。
決め手になったのは、レプリケーション構成を取っている時に自動昇格などが出来る点。
とは言っても、haproxyを長く使っている事もあり慣れているので、
他の使い方が出来ないかテストも継続中。
maxscaleを使う上でキモになるのはVirtual IPによる冗長化だが、
今回からデュアルスタック化する予定なので、如何にコンフィグを短くするかに四苦八苦中。
恐らく、vrrp_sync_groupを用いてヘルスチェック指定をまとめるの方法で行けそうだが、
新自鯖のコアになるサーバ・機能なので入念にチェックし、
情報が纏まったらそのうちブログに載せたい。…はよ、構築を進めねば