イベント, インフォメーション, お知らせ, 勉強会

これは MySQL Casual Advent Calendar 2015 の19日目です

みなさん、肉の日といえば毎月29日を思い浮かべますでしょうか。
焼き肉が安くなったり、いろいろなキャンペーンを行っている、あの日です。
ツチノコの生息地、大手町のお店でも肉の日にランチ焼き肉が安くなったりしているようです。
MySQL界隈で毎月29日といえば、そうです MySQL用全文検索エンジンMroonga 及び Groonga のアップデート日です。さらに、毎年だいたい02/09にメジャーアップデートを行っています。
現在はVer5系、Groongaは5.1.0、Mroongaは5.10が最新バージョンです。
12/29にはそれぞれまたアップデートが来るのではないでしょうか。
また、MySQL5.7において全文検索機能が入ったということで、いろいろと皆さん試しているのではないか、と思います。

そして来年2016/02/09のに、下記イベントが開催されることとなりましたので、そのご案内を致します!

MySQLとPostgreSQLと日本語全文検索

概要

「MySQLとPostgreSQLと日本語全文検索」は次の2つのことについて紹介するイベントです。

MySQLで日本語全文検索する方法とその利用事例
PostgreSQLで日本語全文検索する方法とその利用事例

私しののめも「DMM.comラボでの日本語全文検索の利用事例紹介」として簡単にお話をさせて頂く予定となっております。

また席に余裕があるようですので、ぜひ皆様恵比寿ガーデンプレイスへお越しくださいませ!
また、MySQLでの全文検索利用事例、PostgreSQL向けのPGroongaの利用事例、pg_bigm利用事例も発表者募集中ですので、ぜひよろしくお願いいたします!

イベント概要
https://groonga.doorkeeper.jp/events/35295
MySQLとPostgreSQLと日本語全文検索
日時:2016-02-09(火)20:00 – 22:00
会場:DMM.comラボ 東京都渋谷区恵比寿4-20-3 恵比寿ガーデンプレイスタワー21F

linux, 負荷分散装置, 運用管理

社内では少ないZabbix派のshinonomeです。お久しぶりでございます。

Zabbix派なんですが、実は今までローレベルディスカバリ(以下LLD)を自分で書いたことがなかったので、書いてみることにしました。

LLDとは
Zabbix 2.0から追加された機能で、マシンの構成により変更されることが多いものに対してアイテムやグラフ、トリガーを自動的に構成してくれる機能です。
デフォルトでFilesystemやNIC、SNMPに対して有効化できます。v2.4からはCPUにも対応しました。

そして、今回書いた対象が

LVS – Linux Virtual Server

です。

ツチノコでは一部サーバにLVSを利用してロードバランシングを行っているところがあります。
そのサーバの状況を監視するべく、LLDでやってみようという魂胆です。
LLDにしたのは、LVS配下にあるサーバが頻繁に変更されるためです。

カスタムLLDは、zabbix_agentdに対してUserParameterを設定することで作成します。
たいていはわかりやすいように XXXXXXXX.discovery というキー名を利用するようです。

Zabbixの値取得の基本は、Zabbix ServerがZabbix Agentに対しキー名を叩いた時に、Zabbix AgentはUserParameterのスクリプトを実行、
スクリプトが返した値を、そのキーの値としてZabbix Serverへ返す様になっています。
カスタムLLDを作成するときは、その返り値をテンプレートに渡すJSONとすることで実現できます。
https://www.zabbix.com/documentation/2.2/jp/manual/discovery/low_level_discovery#カスタムlldルールの作成

今回はipvsadm.discoveryをキーとし、VIP、TCP/UDP、Real IPのマクロ化を行いました。
そして、https://www.zabbix.com/forum/showthread.php?t=12086 こちらのPythonスクリプトを叩ける形のテンプレートを用意しました。

LVSをバックエンドとして使っているLdirectordやKeepalivedでも使えますので、ぜひご利用ください。
また、プルリク等もお待ちしております!

コードはこちら:https://github.com/shinonome/zabbix_ipvsadm

hardware, linux, 小ネタ, 運用管理

艦これ」といえばDMMのゲームと言われるほどにまでなりましたが、「城コレ」が今度は控えているようです。約30万人の方が事前登録してくださったという嬉しい悲鳴がところどころで聞かれます。そしてツチノコ部隊も全体の安定稼働へ向けて色々と対応しています。ところで、こういうオンラインゲームは、可愛いキャラクターもさることながら、ブラウザの裏でインターネット越しに必死に動いている「黒子」のようなものたちがいます。いわゆる「ゲームサーバ」と呼ばれるものです。

ゲームサーバは、その基本構成としておおまかに「アプリ(フロント)サーバ」と「データベース(バックエンド)サーバ」に分かれます。今日はその中でも「データベースサーバ」についてのお話です。

DMMでは大抵のデータベースサーバにLinuxとMySQLを使っています。そのデータベースエンジンにInnoDBというのがありまして、設定項目としてメモリ上にバッファをするという設定を行うことができます。

例えば、メモリを128GB搭載したサーバでバッファ用に100GBのメモリを割り当てるとします。さて、実際のメモリの割当はどのようになるでしょうか。最近のXeonを搭載したサーバとして考えてみます。実はCPUの個数により、そのメモリの割り当てられ方が変わってきます。というのも、昔と違い今はメモリのコントローラがCPUに内蔵されているからなのです。

  • シングルCPU構成の場合

すべてのメモリがCPUと直接つながっているので、特に気にする事はありません。

  • マルチCPU構成の場合

CPU0とCPU1…とにそれぞれメモリがつながっています。例えば先ほど128GBとしたメモリが2CPU環境にあるとしましょう。そうするとCPUにごとに64GBのメモリがつながっている事になります。標準ではLinuxはプロセス毎にそのプロセスが動いているCPUにつながったメモリを利用しようとします。つまり、先ほどの100GB割り当てが、MySQLのプロセスが動いている片方のCPUに偏ってしまうのです。その結果、片方のメモリがMySQLに食いつぶされ、そこにもともといたデータがSWAPに吐き出されます。もう片方のCPUにつながっているメモリに空きがあっても、です。

少し詳しい話にしましょう。最近の共有型のマルチプロセッサシステムアーキテクチャは、NUMA(Non-Uniformed Memory Access)というものです。これは、CPUとメモリのまとまりを「ノード」と呼びます。先の例では、CPUと64GB分のメモリのまとまりが”ノード”です。

Linux OS上でプロセスが起動すると、そのプロセスはCPUに割り当てられます。CPUとメモリがまとまっているので、プロセス自体のデータは同じNUMAノードのメモリに置かれます。
先の例の2CPUの環境MySQLが起動したあとメインスレッドがCPU0に割り当てられたとして、そのCPUにぶら下がる64GBのメモリにMySQLのデータが置かれます。しかし、バッファデータのサイズだけで100GBあるので、NUMAノードの64GBをいずれ食いつぶします。そうなると、同じNUMAノード上にある他プロセスのデータがメモリから溢れます。他NUMAノードのメモリはデフォルトではOSが割り当てをしない状態になっているため、あふれたものはスワップへ送られます。もともと64GBのメモリ上にあるものなのでスワップアウトするデータ量も大きくなる傾向があります。なので実際のところスワップが埋まってしまう可能性が非常に高いです。

では、どうすればこの偏りやスワップアウトを抑えることができるのか。

NUMAをOSからコントロールするnumactlというコマンドがあります。
–interleaveオプションは割り当てるNUMAノードを指定します。上記の例では”all”となっているため、すべてのNUMAノードに割り当てを行うことを意味します。

こちらのコマンドで、NUMAに対するプロセスの状況が見られます。
とはいえ、見るのは大変なので、下記のページを参考に、Perlスクリプトを使ってみましょう。
http://blog.jcole.us/2010/09/28/mysql-swap-insanity-and-the-numa-architecture/
numa-maps-summary.pl というスクリプトです。って、実はこれ2010年の記事なんですよね。知りませんでした。

実際にスワップアウトしてスワップを喰い潰してしまったサーバがこちら

同じサーバで、numactlを設定したのがこちら

設定前はNUMAノード分の64GBに近く偏っていたものが、設定後は分散されているのがわかります。
上記のようにプロセスがどかっと大きなメモリを割り当てることでスワップアウトしてしまう現象を”Swap Insanity”といいます。
そして先のブログ記事にもありますが、mysqldのinitスクリプトを改造して、numactlを埋め込んでしまうという手を使うことで、回避ができます。

インフォメーション, 勉強会

ツチノコブログ書くのは初めての東雲です。

さて、このツチノコブログという名前「DMMのエンジニアは勉強会に出てこない。ツチノコか!?」というブログエントリを拝見して勝手にパクったからなのですが、実は勉強会に参加しているメンバーもちらほらといます。自分は昨年6月の入社なので、ツチノコという名前が出てきた直後にDMMの中の人になったわけですが、その前から勉強会へ顔を出させて頂いておりました。

そして、運営として関わっている勉強会に キユーピー3分インフラクッキング#qpstudy というのがあります。

4/19にドワンゴさんをお借りして勉強会をやります、というのを部署に展開したところブログかけば?と親分に言われたので嬉々として宣伝させて頂きます!

– – – – – – – – – – – – – – – – キリハナセマセン – – – – – – – – – – – – – – – –

キユーピー3分インフラクッキング #qpstudy 2014.04
〜俺の屍を超えて行け、でも踏まないで〜

2014/04/19 13:30受付開始

初心者向けの内容となっておりますので、新人にはこれからのインフラエンジニアとして必要な知識を、 中堅以上にはなんとなく覚えていることの確認にどうぞ。
「クラウドではボタン1つできるからいいじゃん」というクラウドゆとり世代に送る、『インフラエンジニアの今すぐ使える基礎』をお送りします。

皆様、是非お誘い合わせの上お越しくださいませ。

– – – – – – – – – – – – – – – – サラニツヅキマセン – – – – – – – – – – – – – – – –

ところで、DMM.comラボではインフラエンジニアの方を大募集中です。

新卒でも!中途でも!ツチノコの仲間になりませんか!?

新卒募集はこちら:http://recruit.dmm.com/
中途募集はこちら:http://www.dmm.com/recruit/

PAGE TOP