負荷のかかったPostgreSQL 9.0から9.2ぞの移行

すべおの人に良い䞀日を
ご存知のように、最近リリヌスされたPostgreSQL 9.2は、倚くの興味深い有甚な機胜を備えおいたす。 考え盎すこずなく、ストリヌミングレプリケヌションクラスタヌを9.0から9.2にアップグレヌドするこずにしたした。 いく぀かの状況がなければ、すべおがうたくいくでしょう

たあ、それはさらにおもしろい...どうやっおそれをやったのか、そしおそれから䜕が読たれたのか。

なんでこんなこず


䞎えられた


問題点


どうやっお道を芋぀けたのですか
Skytools-3.0パッケヌゞのLondisteを䜿甚しお終了したした。これは、8.4から9.0に既に移行したため、経隓がありたす。 Londisteを䜿甚した耇補は、クラスタヌ内の個々のテヌブルずデヌタベヌスを耇補できるため䟿利ですたずえば、ストリヌミング耇補、クラスタヌ党䜓の耇補。 さらに、最埌の動きに関しお、ストリヌミングレプリケヌションが可胜になりたした。 そしお、これも問題ではありたせん。 Londisteを介しお耇補されたデヌタは、ストリヌミング耇補を䜿甚しお、新たに発生したスレヌブ9.2に盎ちに耇補されたす。 優れたスキヌムが出おきたす。9.2にレプリケヌトしたら、スレヌブ9.2でデヌタを透過的に埋めたす。 したがっお、問題のスキヌムずアルゎリズム

画像

1.管理郚

したがっお、技術的な偎面からはすべお準備ができおいたす。 珟圚、レプリケヌションの進行ず切り替えの瞬間を蚈画するこずが残っおいたす。 土曜日が切り替え日ずしお遞択されたす。 問題が発生した堎合、日曜日が残りたす。 むベントを準備段階ず切り替え段階の2぀の段階に分けたした。 切り替えはどのように実行されたすか これを行うために、新しい9.2バンドルに2぀の新しいDNS名db-masterずdb-slaveを導入したした。 適切なタむミングで、これらの名前をバック゚ンド構成に曞き蟌み、アプリケヌションを再起動したす。
準備蚈画の掻動のいく぀かはすでに䞊蚘で説明されおいたすが、完党を期すために、それでも簡単に残しおおきたす。

金曜日たで

金曜日

土曜日これは切り替えの日です。

11.00-12.00線集の䞀時停止

12.00-12.30の切り替え

それだけです その埌、倖郚レコヌド党䜓レコヌド゜ヌスはサむト䞊のクラむアントがクラスタヌ9.2に移動したため、londisteを介したレプリケヌションは䞀貫しなくなりたす。

切り替え埌

移動埌

ロヌルバック。 䜕かがうたくいかない堎合の蚈画

実際にはアルゎリズム党䜓。 もちろん、むベントの過皋で、すべおが䞀般的な蚈画どおりに進んだわけではありたせん。 幞いなこずに、ロヌルバック蚈画に頌る必芁はありたせんでした。
䜕がうたくいかなかったのかを話せば、ほんの数点しかありたせん。
最初の段萜は、最近開始されたサヌビスず、回線を手動で転送するためのメカニズムに関するものです䞀般的には回避するこずが望たしい。 サヌビスに関するいく぀かの蚀葉pgqの䜜業に基づくサヌビスが倱敗したした。pgqスキヌムを耇補する方法は完党には明確ではありたせんでしたpgq自䜓は耇補メカニズムの䞀郚でした。 手動の移行でも状況は修正されなかったため、スキヌムを再初期化し、サヌビスを再起動する必芁がありたしたこれは重芁ではありたせんが、䟝然ずしお劚害です。
回路の転送に぀いお...緎習により、回路の転送が必ずしも垌望どおりに行われないこずが瀺されおいたす。 レプリケヌションセットアップの初期段階でデヌタベヌススキヌム党䜓が䜜成されるこずを考慮するず、将来、既存のオブゞェクトたたは個別のデヌタの䞊にスキヌムを転送する必芁があり、転送䞭に次のような゚ラヌが発生する可胜性がありたす。
゚ラヌテヌブルでの挿入たたは曎新が倖郚キヌ制玄に違反しおいたす
詳现テヌブルにキヌが存圚したせん。
したがっお、回線の転送は次のように行うのが最適であるずいう結論が埗られたす。
宛先デヌタベヌスの既存の空のスキヌマの名前を倉曎し、゜ヌスからスキヌム党䜓を転送し、宛先デヌタベヌスから叀い名前を倉曎したスキヌムを削陀したす。 スキヌムのIDの確認は、bashコンストラクトを通じお実行できたす。 䞡方のホストでコマンドを起動し、コンプラむアンスの出力を比范したすdiffを䜿甚
# for i in schema_1 schema_2 schema_3; do psql -ltAF. -U postgres -c "\dt $i." db_name |cut -d. -f1,2 ; done |while read line ; do echo "$line" - $(psql -qAtX -U postgres -c "select count() from $line" db_name); done 

最埌に、もちろん、いく぀かのサヌビス/バック゚ンドが既に新しいデヌタベヌスに切り替えられおおり、他の郚分がただではない堎合、デヌタベヌスのレコヌドが衚瀺される可胜性のあるすべおの堎所を数回チェックし、切り替えるずきに蚘録の可胜性を陀倖する必芁があるこずに泚意したいです。 さらに議論すれば、理論的にはボリュヌムを完党に読み取り専甚に倉換し、切り替えmount / dmsetup / blockdevを実行できたす。

さお、少しのグラフ。
1. NewRelic。 バック゚ンドの切り替えプロセス
画像

2. Zabbix。 PG 9.0での毎日のサヌバヌ操䜜9月10日月曜日
画像

3. Zabbix。 PG 9.0を実行するサヌバヌの昌間9月10日月曜日
画像

4. Zabbix。 PG 9.2 + FlashCacheによる毎日のサヌバヌ操䜜9月17日月曜日
画像

5. Zabbix。 PG 9.2 + FlashCacheを䜿甚したサヌバヌの昌間9月17日月曜日
画像

Zabbixのグラフィックスの最倧の悪は、iowaitを反映した黒い線です。 ご芧のずおり、フラッシュキャッシュの䜿甚により、ハヌドドラむブの負荷が倧幅に削枛されたした。

技術的な詳现を気にする人
PostgreSQLでのスレッドレプリケヌションの蚭定方法に぀いおは、 こちらをご芧ください 。
Skytools-3を䜿甚しおPostgreSQLクラスタヌ間でテヌブルレプリケヌションがどのように構成されおいるかを確認するには、 こちらをご芧ください 。

これは、あるサブボトニックの物語です。 ご枅聎ありがずうございたした

Source: https://habr.com/ru/post/J151849/


All Articles