MTバージョンアップ

重い腰を上げてようやくMovableType7に上げました。

ついでにOSも最新まで上げたくて、そこから新規で作ったので、かなり手こずりました。
OSをバージョンアップしたことでMySQLも5.7から8に上がったのですが、データがフルバックアップからインポートできず、結局データベース単位でバックアップし直してインポートしたり、Apabheのパッケージで追加するものがわからなかったり。

PHP7.2の仕様変更が原因。
PHP7.0まではcount(NULL)が0だったのですが、PHP7.2では警告が出るため。


/usr/share/zabbix/latest.phpを修正するとエラー表示が消せる。

103 $singleHostSelected = (count($filter['hostids']) == 1);

103 if (!empty($filter['hostids'])) {
104 $singleHostSelected = (count($filter['hostids']) == 1);
105 } else {
106 $singleHostSelected = false;

Arduinoで電子工作1

今更ですがワンチップマイコンボードのArduinoを使って電子工作で遊んでみました。


マイコンは汎用のCPUと違い、組み込みで使われることを想定して作られています。組み込み用途では部品数が多くなると回路が大きくなったり、金額が高くなったりしてしまうので、CPU、メモリ(SRAM)、ストレージ(Flash)、IOまでワンチップになっていること。(ものによってはアナログ入力やアナログ出力も備えている。)処理性能を抑えて低消費電力であること。低発熱であること。非常に低価格(1個数百円)であること、などの違いが挙げられます。

Arduinoって何?って話からになると思いますが、Atmel(現在はMicrochipに合併されてますが)が作っているAVRという8ビットマイコンを搭載したマイコンボード(開発用ボード)でハードウェアもソフトウェアもオープンソースになっています。

開発環境(IDE)も無償で公開されていてC言語によく似た言語で開発が出来るので手を出しやすい(※1)ということとと、アナログ(※2)/デジタル(※3)の入出力、PWM(※4)の出力が容易に扱えるので電子工作素人でも色々なデバイスを制御してみることができる、中国で互換機が作られていて安価に(安いものなら$3程度)入手が出来ます。
また、Arduinoならばワンチップマイコンにプログラムを書き込む装置(プログラマーとかICE)が無くてもUSBで直接パソコンに接続できるように作られています。ですのでパソコンに開発環境をインストールしてマイコンボードを接続すれば、プログラムを作って書き込むことまでできますので、それらと比較してもとても簡単です。

(※1) 少なくともHDL言語を使ってFPGAでハードウェアそのものを作るよりは圧倒的に敷居が低いはず
(※2) ここでは連続的に電圧が変化する電気信号(0V〜5V)の事を指す Wiki
(※3) ここでは0Vと5Vなど2つの状態だけの電気信号を扱う事を指す Wiki
(※4) 日本語ではパルス幅変調という。ここではパルス幅を変化させることでデジタル信号を使ってアナログ信号を作り出す事を指す Wiki

で、そのArduinoを触って遊んでみる・・・ってのが今回の話です。

DRBD9で分散ストレージを作る

Ubuntu 18.04LTSでDRBD9の分散ストレージを作るメモです。

DRBD(Distributed Replicated Block Device)とは、Linux上でネットワークを介したストレージをリアルタイムにミラーリングするためのソフトウェアです。
何が出来るかと言えば、2台〜4台のコンピュータ間のストレージで完全に同期を取ることが出来ます。
Active/Standbyで動作しているActive側でストレージに書き込みが行われると、ネットワークを介してSlave側のストレージにも書き込みが行われることで、データが同期されるという仕組みです。
また、同期はブロック単位でおこなわれるので、スライス(パーティション)がそっくり同期されます。その為、ファイルシステムに依存しない事も特徴です。(ファイル単位での同期ならrsync使うとか、他にも方法は色々あるけれど)

通常クラスタ構成のシステムでは共有ストレージなど「高価なハードウェア」を使うか、レプリケーションソフトで定期的に同期を行う方式が一般的だと思います。レプリケーションソフトの同期では同期のタイミングによって時間差が生まれてしまうため、同期が取れていないタイミングが発生しますが、DRBDではブロック単位の書き込みをそのままネットワークを介して行いますのでほぼリアルタイムの同期が行えます。
(市販のクラスタソフトウェアでも似たような仕組みを備えている製品があるようだ・・・)

Linuxではクラスタ自体はPacemaker(旧 Heartbeat)で行えますので、複数のコントローラ、複数のパスを備えた高価なストレージを使わずにクラスタのシステムが作れる事になります。とはいえネットワークを介して同期するってことは、ネットワークに相当負荷が掛かるということですので、高パフォーマンスを要求されると厳しい気がします。
仕組み自体は昔からあった(カーネル2.6の頃・・・2009年位?・・・に生まれたらしい)のですが、これまで触ってこなかったので、今更ながらちょっと触ってみましょうという感じです。

Ubuntuインストール時にやること(2)

前に書き漏れていた項目

ロケール設定
日本語表示にする

$ sudo localectl list-locales
$ sudo apt-get install language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8

タイムゾーン設定
JSTにする

$ sudo timedatectl list-timezones
$ sudo timedatectl set-timezone Asia/Tokyo

systemd-timesyncdサービスの停止
ntpdが動かなくなるので止める。

$ sudo systemctl stop systemd-timesyncd.service
$ sudo systemctl disable systemd-timesyncd.service

自宅サーバ更新(3)

前回の続き。

HBAというかRaidカードの部分ですが、型落ち(世代前の製品)が安く手に入るようになってきたので、ハードウェアRAIDカードを使う方針です。


色々検討はしたのですが、

  • HDDケースでRAID機能を搭載している製品を使う
  • ESXiのゲストOSにFreeNASを載せて、パススルーでHDDに直接アクセスさせる。その上で、ソフトウェアRAIDを組んでiSCSIまたはNFSでESXiにストレージを見せる方法
  • ハードウェアRAIDカードを搭載する方法
  • ゲストOSの中でRAIDを組む

さて、どれが良いのでしょうか。

自宅サーバ更新(2)

前回の続き、自宅サーバのパーツ選定を終えて発注してそろってからの話。


Active Heatsinkだと思い込んでいたので、まず到着したM/Bを見て・・・あれCPU FANが無ぇ(ファンレス)・・・と。

仕方ないというか、TDP低いしファンレスでも動くでしょという軽い気持ちで仮組みして電源を入れて普通にメモリも認識されてるし・・・と安心してUEFIで設定を見ていたら急に「非常に遅く」なって、 え?いきなり故障? とびっくりしたのですが、CPU温度が100℃まで上がってました。普通にThermal Throttlingが起きただけでした。

こんな状態です。


デザインガイドを見るとリファレンスデザインもファンレスになってましたが、現実的に1Uラックマウントの筐体でなければAIRFLOWを効果的にヒートシンクに集めることはできないと思うので、このマザーを使うにはかなりの風量が居るよ、つまり実際にはファン必須だと思います。

ここから想定外というか、さてどうやって冷やすよという話で、まずCPUクーラーを探してもXeon D用(FCBGA1667用)なんて無いし、純正(Supermicro SNK-C0057A4L)なんて売ってないし。

自宅サーバ更新(1)

2012年にXeon E3で組んだ自宅サーバがもうそろそろ古くなってきました。

Xeonと言っても、Ivy BridgeのE3-1265LV2ですから、最大メモリも32GBまでですし、何よりマザーボードがIntelのS1200KPRですので16GBまでしか載りません。
頑張ってESXi6.7までアップデートして使ってきたのですが、流石にメモリ容量が足りなすぎる・・・ということで組み替えることにしました。
Xeon E3は性能的にはほぼ同世代のCore i5/i7に近く、クロックが抑えてある代わりにECCメモリが使える位。雑に捉えるとXeonでもE5と違いコア数が少なく、クロックが高い傾向にあるため、シングルスレッド性能が高くなっていてマルチスレッド性能は低いということで、ワークステーションや小規模サーバ向きのCPUだと思います。

退役後の使い道は思いつきませんがメモリもそこそこあるし、GPUだけ増設すれば、まだPCとして使うには十分かなと。

それにしても6年前ならば、サーバとはいえメモリ16GBって結構積んでるほうだったと思います。(仮想環境なら96GBとか192GB搭載しているのも普通でしたしDBサーバなども大量にメモリを搭載していましたが、一般事務所などで使う物理サーバなら4〜8GBだったと思います。)