トップ ソフト 雑記 日記 リンク

2022年5月14日土曜日

データベースサーバのファイルシステムをzfsからbtrfsに切り替えた

1月末から少しずつ作業をしていて、3月に完全切り替えをして、多分もう大丈夫そうなので書き記しておく。 

2014年11月頃から、2TBのSATA HDD 5台をmdadmによる管理でRAID5化していたのですが、障害が出ることが多く、安定性で評判を聞いていたzfs(ZFS on Linux)によるRAID5に切り替えました。

2016年9月頃から速度に不満が出てきて、1ヶ月毎にSSDに入れ替え、オールSSD化されました。

使っていたSSDは、CrucialのCT2050MX300SSD1。これは、HDDから差し替える際に、2TB・2048GBのディスク領域をそのまま移行できるということで選択されました。

この機種を選択した他の理由として、S.M.A.R.T.による監視でドライブの寿命を予測できたというところです。HDDでも、S.M.A.R.T.による監視はできましたが、どうしても駆動部品があるということで、突然死の心配がありました。SSDは駆動部分がないため安定しており、さらにSSDに使われているメモリの書き換え回数に限界があるということで、ある程度寿命に予測が付くのでしょう。

データベースサーバでは、24時間365日、大量の書き込みを行っており、S.M.A.R.T.で取得できる「寿命値」は一定の間隔で下がってくるという様子でした。

S.M.A.R.T.記録グラフ。ここで50%以下にあるグラフがCT2050MX300SSD1。

しかしこの「寿命値」も調べてみると、あくまでも計算式によるもので、0になった瞬間に壊れるわけではないようです。0になった時点で予測されるメモリチップの書き換え回数を消費したということで、0以降はいつ壊れてもおかしくないという状態だそうです。逆に言うと、性能不足のチップがあった場合は0に達する前に壊れる可能性もあるわけです。

実質2017年から使われてきたSSDも2021年で5年間、残り寿命が30%を切りそろそろ不安を覚えるようになりました。

ドライブ寿命については2年ぐらい前から気にしており、HDDからSSDへ切り替えたときのように、また1台ずつ入れ替えていけば良いだろうと、交換するドライブを見繕ってみるとCT2050MX300SSD1は1台6万円ぐらいしていたのに、2TBのSSDが2万円ぐらいまで下がっていました。量産化効果ってすごいですね。しかし容量が2000GBのドライブばかり出てきます。2TiBと2TBの違いでしょうか。

構成サイズが小さくなるようなドライブ交換は、zfsでは対応していないようです。どうしても一度RAIDを解いて、再度組み直す必要があるようです。しかも容量が小さい方に合わせられてしまう。以前仕事で触ったことのあるSynologyのNASでは、Synology Hybrid RAIDという仕様があり、サイズの異なるドライブを組み合わせて無駄なく領域を使ったRAIDが組めるというものでした。こんな仕組みが有ればいいのにと考えていました。

2022年になって、そろそろ次のストレージ構成を真剣に考えなければということで、再び調査をしてみました。相変わらずzfsでは容量減少は対応しておらず、btrfsのRAID5は動作が怪しい。

しかしbtrfsでは異なるサイズのドライブを組み合わせて容量の無駄を極力抑えた状態でRAIDが組めるという情報を見つけました。RAID5のパリティ計算をするCPU負荷も気になっていたので、この際RAID5はやめて、RAID1あたりで構成してみるか?と検討してみました。

Hyper-Vで環境を作り、サイズの異なるディスクの組み合わせでテストしてみたところ、問題なく動作するようです。障害時の復旧手順なども一通りテストして感覚をつかみました。

ということで2000GBのドライブを購入。今回は、CrucialのCT2000MX500SSD1とWESTERN DIGITALのWD Red SA500 WDS200T1R0Aです。他のメーカーを混ぜてみたのは、最近はNVMeのドライブしか買っていなかったので、2TB SATA SSDの使い心地が分からず、Crucial以外の品質も見ておきたかったためです。

新しい2000GBのドライブ2台でbtrfsのRAID1を組み、そこへzfsのデータをコピー。運用してみて動作に問題ないことを確認した後、zfsのRAID5を解放し、従来の2050GBドライブを1台ずつ2台混ぜて4台のRAID1に変更しました。運用しながらRAID構成を変更できるので便利ですね。

しかし思ったより速度が出ず、space_cacheの設定をv1からv2に切り替えてみたりしたもののずっとディスクが足を引っ張るようになりました。1ヶ月ほど調べてみたものの原因がつかめず、最終的にRAID1からRAID10へ切り替え。btrfs的にどのようなドライブの分け方になっているのか分かりませんが、なんとか処理速度も回復しました。

今後は古いドライブから死んでいくはずなので、RAID10に組み込んでいない残りの2050GBのドライブを順次入れ替えつつ、最終的に全部が新しいドライブに入れ替わる予定です。

zfsを運用していた間は、数回だけドライブを認識しなくなることがありましたが、RAID5に組み込み直すとすぐに復旧できたので、信頼度はかなり高いです。ただしzfsはカーネルアップデートの度にビルドし直す必要があります。手元で運用していたときは、画面上ではアップデートが成功しているのに再起動するとzfs領域を認識できなくなるという状態に毎回なりました。一度モジュールを完全にアンインストールして、再度インストールする必要があったので、そこだけが面倒でしたね。

btrfsはカーネルでのサポートも期待できるので、さらに安定した運用ができそうです。


2022年1月31日月曜日

Bluetoothイヤフォンの途切れを解消した

2021年の2月に、SONYのWF-SP800Nを買ったんですよ。 

ところが使っていると、どうも途切れやすい。プチプチと音が途切れる。場合によっては数秒間途切れて飛ばされたまま続きが再生されるという感じ。 

Bluetoothは2.4GHz帯のWi-Fiと干渉するということで、Wi-Fiアクセスポイントがパソコンのそばにあったので、場所を離したりしたのですが、効果が無い。(プリンタが2.4GHzしか対応していないので停波できない)

そもそも、それまで使っていたSONYのMDR-EX31BNでは途切れたことがないのです。

それまでのMDR-EX31BNはBluetoothのAptXコーデックで通信するようになっていたのですが、新しいWF-SP800NはSBCコーデックとAACコーデックにしか対応していない。 

しかもWindows10はAACに対応していないので、必然的にSBCが使われます。

どうやらこのあたりが原因か?と思ってかなりがっかりしていたのですが、 2021年5月ぐらいに、Windows10 21H2でAACに対応というニュースが流れてきました。

これは逆転か! と思ったのですが、待てど暮らせどAAC対応が更新に降ってこない。みんな気がついてないからニュースになっていないだけか? と思って、なんかWindowsの動作ログからBluetooth接続の詳細を調べてみたら、やはりSBCが選択されている。

SNSで「Win10のAACどうなったんだぁ~」とつぶやいていたら、「Win11対応になったらしい」という情報が。ぐぬぬ、最新版に上げさせる作戦か。わたしのマシンはWin11に対応していないらしく、更新されません。現状でなんとかするか、半導体不足の中マシンをすっくり買い換えるか。

・・・なんとかする方向で考えましょう。

 

そもそもSBCが最低限の接続方法としても、こんな途切れまくるものを製品として売るはずがないので、何らかの問題が環境にあるのでしょう。接続状況を見てみましょう。

この話をSNSですると「帯域足りないのでは?」という話が出てきました。

Microsoftのスマホ接続は、Android端末に届いた通知やSMSや着信をPC側で見られるというものです。多分常に通信しています。

マウスは専用のドングルもあるのですが、Bluetoothの方が電池の持ちが良い感じがします。あと専用ドングルを別マシンに刺して切り替えて使うというのが便利で、PCとはBluetoothで接続したい。

Proコントローラーはゲームをするときだけですが、コントローラーを使うと途切れがさらに大きくなるため、どうやら帯域が足りていないというのが問題なのかもしれません。

Bluetoothはバージョンによって通信速度が違います。それまで使っていた4.xから5.xに更新すると、Bluetooth Low Energy(BLE)の速度は上がるらしいのですが、今使っている機器がBLEで通信しているのか、従来のBluetoothなのか、よく分かりません。まあ最新版にしましょう、ということで5.1対応とかいうドングルを買ってみたのですが、まったく改善されませんでした。

こうなってくると、もうPCのBluetoothを諦めるしかありません。

作業中に聞いているSpotifyをスマホから再生すればいいのですが、PCのメールやSlackなどに届く通知音はキャッチしたいのです。

つまりPCの音をスマホから再生すればいい。

なんかそんなソリューションはないのか~と探したら、ありました。

AudioRelay

PCで起動したサーバへ、スマホのクライアントアプリから接続するというものです。

早速試してみると、ディスプレイへの音声出力を取り込んでスマホに配信するようです。でもディスプレイからも音が出続けている・・・。

ディスプレイ側でボリュームを変えればいいのですが、ディスプレイから音を聞きたいときもあり、しかも音量設定がメニューの最深部にあり、毎回いじるのは苦痛。

PC側で音声出力先を選ぶことは簡単にできるので、もう一つ音声出力先を作って、AudioRelayにはそちらから音を拾ってくれたら解決しそうです。そんなソリューションは~(以下略)、ありました。

VB-CABLE

実際に音が出るわけではないオーディオインターフォースを作成します。

最終的に、以下のような構成になりました。

遅延は10msとのことで、ディスプレイから流したものと比較しても、ずれていることは分かりますが動画を再生しても気にならないレベルです。

真剣に探すと、解決方法はあるものですね。これで1年近く悩んでいたイヤフォン環境が解消しました。


P.S. そういえばBluetoothアダプタを複数刺すというのを試したことがなかったけど、どうなんですかね。

アイコン:icooon-mono

広告