この連載では、OSSコンソーシアム データベース部会のメンバーが、さまざまなオープンソースデータベースの毎月の出来事をお伝えしています。
オープンソースカンファレンス(OSC)東京での「多様性時代のDB選択」の開催中止
今回の「取り取り時報」では、オープンソースカンファレンス2020 Tokyo/Spring でのOSSデータベース特集トラック、「 多様性時代のDB選択」の詳しい報告をする予定でしたが、新型コロナウイルスへの警戒が続く中、開催中止となりました。開催できなかったことはもちろん残念なことですが、参加者や関係者の健康と安全に配慮いただいて難しいご判断をされた実行委員会と事務局に敬意を表します。さて、OSSデータベースの発表をまとめる特集トラックの企画は、仕切り直しをして別のOSCの場で開催したいと考えています。次回の東京開催は2020年の秋の予定です。また、それ以前の他地域での開催にて何かできるかもしれません。現時点ではまだ白紙ですが、決まりましたらこの連載にてお知らせしたいと思います。みなさん、次のOSCでお会いしましょう。
[MySQL]2020年2月の主な出来事
2020年2月の製品リリースはありませんでした。1月の原稿締め切り後、商用版のバックアップツールであるMySQL Enterprise Backup 4.1.4, 3.12.5とMySQL NDB Clusterの管理ツールMySQL Cluster Manager 1.4.8の各マイナーバージョンがリリースされました。新型コロナウイルスなどの影響により、開催予定だった複数のMySQL関連イベントがキャンセルされました。代替としてオンラインセミナーなどが計画されている模様です。
MySQL InnoDB ReplicaSetの登場
マイナーバージョンアップでもどんどん新機能を追加してくるMySQL 8.0ですが、連載第54回 にご紹介したとおり、1月にリリースされたMySQL 8.0.19ではMySQL利用者にとっては定番中の定番の機能であるレプリケーションの構築と運用を劇的に刷新するMySQL InnoDB ReplicaSetが登場 しました。
InnoDB ReplicaSetは、MySQLの非同期レプリケーションとMySQL Router、MySQL Shellを組み合わせたパッケージです。グループレプリケーションをベースとしたMySQL InnoDB Clusterと同様に、MySQL Shellでレプリケーション環境の構築や運用を可能にしました。
下記はMySQL Shellからレプリケーション環境を構築した例です。事前にMySQLサーバー(mysqld)やMySQL Router(mysqlrouter), MySQL Shell(mysqlsh)の各実行プログラムへのパスが通っている前提です。MySQL Shellのdba.deploySandboxInstanceメソッドを利用して、TCP/IPのポート番号3310, 3320, 3330の3つのポートを利用するMySQLインスタンスを作成し、3310をマスター、それ以外をスレーブする流れです。
$ mysqlsh
# 3つのインスタンス作成 出力略
MySQL JS > dba.deploySandboxInstance(3310)
MySQL JS > dba.deploySandboxInstance(3320)
MySQL JS > dba.deploySandboxInstance(3330)
# マスターになる端末に接続
MySQL JS > \c root@localhost:3310
# レプリカセットの作成
MySQL localhost:3310 ssl JS > dba.createReplicaSet("repl1")
A new replicaset with instance '127.0.0.1:3310' will be created.
* Checking MySQL instance at 127.0.0.1:3310
This instance reports its own address as 127.0.0.1:3310
127.0.0.1:3310: Instance configuration is suitable.
* Updating metadata...
ReplicaSet object successfully created for 127.0.0.1:3310.
Use rs.addInstance() to add more asynchronously replicated instances to this replicaset and rs.status() to check its status.
<ReplicaSet:repl1>
# レプリカセットへスレーブとなるノードの追加
MySQL localhost:3310 ssl JS > dba.getReplicaSet().addInstance("root@localhost:3320")
You are connected to a member of replicaset 'repl1'.
Adding instance to the replicaset...
* Performing validation checks
This instance reports its own address as 127.0.0.1:3320
127.0.0.1:3320: Instance configuration is suitable.
* Checking async replication topology...
* Checking transaction state of the instance...
〈略〉
Please select a recovery method [C]lone/[I]ncremental recovery/[A]bort (default Clone): C
* Updating topology
Waiting for clone process of the new member to complete. Press ^C to abort the operation.
* Waiting for clone to finish...
NOTE: 127.0.0.1:3320 is being cloned from 127.0.0.1:3310
** Stage DROP DATA: Completed
** Clone Transfer
FILE COPY #################################################### 100% Compl
PAGE COPY #################################################### 100% Compl
REDO COPY ################################################## 100% In Progress
NOTE: 127.0.0.1:3320 is shutting down...
* Waiting for server restart... ready
* 127.0.0.1:3320 has restarted, waiting for clone to finish...
** Stage RESTART: Completed
* Clone process has finished: 61.11 MB transferred in about 1 second (~inf TB/s)
** Configuring 127.0.0.1:3320 to replicate from 127.0.0.1:3310
** Waiting for new instance to synchronize with PRIMARY...
The instance '127.0.0.1:3320' was added to the replicaset and is replicating from 127.0.0.1:3310.
MySQL localhost:3310 ssl JS > dba.getReplicaSet().addInstance("root@localhost:3320")
〈略〉
途中で追加するノードへのデータのコピーをクローンプラグインを利用するか、バイナリログの差分を利用するかの選択をします。データの同期が取れたところでスレーブとなるノードの再起動を行いReplicaSetに参加となります。Cluster.status()メソッドで構成や状況の確認ができます。
MySQL localhost:3310 ssl JS > dba.getReplicaSet().status()
You are connected to a member of replicaset 'repl1'.
{
"replicaSet": {
"name": "repl1",
"primary": "127.0.0.1:3310",
"status": "AVAILABLE",
"statusText": "All instances available.",
"topology": {
"127.0.0.1:3310": {
"address": "127.0.0.1:3310",
"instanceRole": "PRIMARY",
"mode": "R/W",
"status": "ONLINE"
},
"127.0.0.1:3320": {
"address": "127.0.0.1:3320",
"instanceRole": "SECONDARY",
"mode": "R/O",
"replication": {
"applierStatus": "APPLIED_ALL",
"applierThreadState": "Slave has read all relay log; waiting for more updates",
"receiverStatus": "ON",
"receiverThreadState": "Waiting for master to send event",
"replicationLag": null
},
"status": "ONLINE"
},
"127.0.0.1:3330": {
〈略〉
}
}
レプリケーションの遅延はこの出力のreplicationLagで確認できるほか、レシーバースレッド(IOスレッド)やアプライヤースレッド(SQLスレッド)の状態もあわせて確認できます。またCluster.setPrimaryInstance()メソッドでのスレーブのマスターへの昇格、障害などでReplicaSetから外れたインスタンスのCluster.rejoinInstance()メソッドでの復帰、またマスターに障害が発生した場合はCluster.forcePrimaryInstance()メソッドでのフェイルオーバーが可能になっています。
登場から20年近く経つ定番機能のレプリケーションにも構築運用の新しい仕組みが加わり進化を続けています。ぜひお試しください。
[PostgreSQL]2020年2月の主な出来事
2月は中止になるセミナーやイベントが多くあった中で、PostgreSQLエンタープライズ・コンソーシアムの事例セミナーは無事に開催できました。また、PostgreSQL本体や、Pgpool-IIのマイナーバージョンアップがありました。
PostgreSQLエンタープライズ・コンソーシアム/活用事例セミナー
みんな大好き!事例セミナーです。製品の採用を判断するユーザ企業にとっては、他社がどのような判断で採用を決めたのかが気になるのは当然でしょう。開発と構築を行うエンジニアにとっても、どのような課題があってどう解決できたのかなど、先達の経験は絶対に聞いておきたい話です。
このセミナーの発表資料は、PostgreSQLエンタープライズ・コンソーシアム(PGECons)のWebサイト からどなたでも参照することができます。
事例1:PLMパッケージのPostgreSQL対応
PLM(product lifecycle management)は、製品のライフサイクルを管理するために製品情報を包括的に管理して企業戦略に活用するための情報システムです。ポイントは、今回の対象システムが一般的なビジネスアプリケーションと同じ構成になっていることでしょう。つまり、Web UIから実行されるアプリケーションの下にデータベース層が位置づけられる構成です。この発表ではPLMシステムを、異種DBMSからPostgreSQLへの移行を計画し実行していった経験談が語られました。アプリケーションへの影響を考慮して極力避けつつ、PostgreSQL移行を検討する際には、PLM分野に限らずその他のビジネスビジネスアプリケーションでも参考になる発表です。移行元とPostgreSQLとで非互換な点や対応が必要だった作業について、具体的な対応例も提示されていますので、同様の移行案件を担当する際のノウハウになるでしょう。たとえば、C/C++言語での埋め込みSQLの移行方法、非互換なSQLで影響があったもの、トランザクション途中でのエラー発生の場合の挙動の違いなど、技術TIPSとしても有益な内容を含んでいます。
事例2:PostgreSQL 8.3からAmazon Aurora PostgreSQLへの移行事例
IaaS上のDBからマネージドサービスのDBへの移行という、今風のホットな移行事例です。また同時に、PostgreSQLのバージョンが8.3から10.7に大きく変わることになり、これによる移行の難しさと、性能や機能の改善への期待という両面を持っていた点も興味深いところです。さらに、採用事例がインターネットでの一般消費者向けサービスであり、使える移行時間が短い点も気になります。これらの課題を解決するための、移行手段の選択や、制限時間内に移行を完了させるための検証などについて、実際の測定値などまで提示して説明されました。
事例3:大規模監視でPostgreSQLを利用した場合の運用ノウハウ
1000台以上のIT機器を監視するZabbix環境の事例です。Zabbixに限らず、監視対象が多くなると運用監視環境には高い負荷が掛かります。その様なZabbix環境を支えるデータベースにPostgreSQLを採用し、ファイルシステムや、クラスタ構成などで様々な工夫を繰り返してこられた実績が紹介されました。この事例は企業内のプライベートクラウド環境のインフラ運用部隊でのものであり、データベースの専門家がいるわけではありません。その様な制約の中でも、増大するデータ量を受け入れ、厳しい性能要求に応えないといけないという課題は、多くの現場にも共通する事情ではないでしょうか。また技術ノウハウとして、Zabbix用のPostgreSQLがデータを置くファイルシステムにZFSを採用した(OSはCentOS)ことが紹介されました。ファイルシステムの管理(追加など)をしやすくして性能も良いとのことです。
事例4:Amazon.comにおけるPostgreSQLへの移行
AWS(Amazon Web Service)ではなくて、物販サービスAmazon.comを実現するITインフラのデータベースを、PostgreSQLに切り替えていった事例です。2017年時点でOLTP用として7500のDB、データ量75PB、数千種類のアプリケーションがあり、これらのほとんどをAmazon RDSやAuroraのPostgreSQLに移行していったとのこと。紹介された内容には、意外なほど具体的な数値や方法論などが含まれています。移行前のDBMSのスペシャリストを再教育する話には日本的な親近感も感じました。それだけ大人数のスペシャリストが携わっているということでしょう。ただ、いろいろと規模が大きすぎて、どこを参考にしたらいいのかが悩ましいところです。言い換えれば、それほど貴重な事例紹介でもあります。なお、講演時間にまったく収まらないために発表時には割愛されましたが、「 PostgreSQLへ移行する場合の技術的なポイント」として40ページほどの資料も一緒に公開されています。
PostgreSQL 12.2、11.7、10.12、9.6.17、9.5.21、9.4.26がリリース
2月14日にPostgreSQLのマイナーバージョンアップ12.2、11.7、10.12、9.6.17、 9.5.21、 9.4.26 がリリースされています。 今回は主にバグ修正のリリースで、セキュリティ修正も含まれます。詳しい内容は、PostgreSQL Global Development Groupのページ に説明があります。
なお、本連載第52回で既報 の通り、9.4系は今回が最終リリースとなりました。
Pgpool-II 4.1.1、4.0.8、3.7.13、3.6.20、3.5.24、pgpoolAdmin 4.1.0がリリース
Pgpool-IIは、PostgreSQLと組み合わせて利用することで、スケールアウト構成や高負荷のシステムへの対応を可能にするミドルウェアです。2月20日にマイナーバージョンがリリースされました。 最新のPgpool-II 4.1.1は、2つの機能変更(改善)の他は、不具合修正が中心のようです。
2020年3月以降開催予定のセミナーやイベント、ユーザ会の活動
本稿は2月25日時点の公開情報に基づいて記載をしていますが、セミナーやイベント等の開催が中止になるケースが増えています。ここに掲載した下記のイベントも予定が変更になる可能性がありますので、各セミナーやイベントのWebサイトなどにご注意ください。
日程
浜名湖 2020年4月11日(土)10:00-18:00(展示は17:00まで)
名古屋 2020年5月16日(土)10:00-18:00(展示は16:00まで)
北海道 2020年6月27日(土)10:00-18:00(展示は16:00まで)
場所
浜名湖 浜松市市民協働センター 2F ギャラリー
名古屋 名古屋市中小企業振興会館 (OSC受付:3F 第2ファッション展示場)
北海道 ACU札幌 (アスティ45/ACU-A、OSC受付16F)
内容
オープンソースカンファレンスは、オープンソースの「今」を伝える総合イベントとして、東京だけでなく、北は北海道、南は沖縄まで全国各地で開催しています。セミナープログラムはおおむね開催の1ヵ月前には確定し公開されます。OSSデータベース関連のセミナーについては公開されるプログラムをご参照ください。4月の浜名湖(浜松)には、日本PostgreSQLユーザ会などのブース出展が予定されています。また、データベース部会ではありませんがOSSコンソーシアムも出展します(詳細は近日公開予定) 。
主催
オープンソースカンファレンス実行委員会