成らぬは人の為さぬなりけり

エンジニアライフをエンジョイする為のブログ

Aerospikeを試す #1 環境構築

最近ちょくちょく見るようになったAerospikeです。 OSSになってからほんとよく見かけますが、あんまり日本語の情報が多くないですね。

WEB+DB PRESS Vol.87

WEB+DB PRESS Vol.87

これのAerospike入門を読んで触発されて触ってみることにしたので、 環境構築からやってみたいなと思います。

今日のテーマ

  • VagrantでAerospike謹製のboxを起動する
  • AMC (Aerospike Management Console)を見てみる
  • 2台のクラスター環境を構築する

環境

VagrantでAerospike謹製のboxを起動する

http://www.aerospike.com/docs/operations/install/vagrant/mac/

ここに書いてある通りなんですけど、今回は2台でクラスタ環境つくりたいので、 vagrant initした後にちょいと書き換えます

vagrant init aerospike/centos-6.5

してVagrantfileをこんな感じに

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  aerospike_box = "aerospike/centos-6.5"

  config.vm.define "node1" do |server|
    server.vm.box = aerospike_box
    server.vm.network :private_network, ip: "192.168.33.101"
    server.vm.network "forwarded_port", guest: 8081, host: 8081
    server.vm.network "forwarded_port", guest: 3000, host: 3000
  end

  config.vm.define "node2" do |server|
    server.vm.box = aerospike_box
    server.vm.network :private_network, ip: "192.168.33.102"
  end
end
  • ゲスト間通信したいので、private_networkでPrivateIPをふる
  • AMCにアクセスしたいのでnode18081ポートをフォワーディング
  • Aerospikeにホストからアクセスしたいので、node13000ポートをフォワーディング

では起動します。

vagrant up

起動したら、中に入って、ちょっと確認してみます。

$ vagrant ssh node1
$ asmonitor -e info
...
1 hosts in cluster: 127.0.0.1:3000
...

てなのが出てればとりあえずOKかな。

AMCを見てみる

Aerospike Management Consoleを見てみます。

この為に8081ポートでアクセスできるようにしたので、下記をブラウザで開きます。

http://localhost:8081/

なんかかっこいい画面が出てきましたね。

  • Disk Usage
  • RAM Usage
  • Cluster Summary
  • Cluster Throughput
  • etc ...

これは良い感じですね。 マジ運用で使う場合は、踏み台経由のポートフォワーディングとかだけ見れるようにしとけば楽そう。

2台のクラスター環境を構築する

さて、ここからが今回のメインです。 クラスター環境を構築してみます。 (今回はAWSではないですが、最終的にAWSに構築する事を前提にしているので、multicastは使わず、meshでやります)

それぞれ以下のようにconfを書き換え

  • node1
network {
        service {
                address any
                port 3000
                access-address 192.168.33.101
                network-interface-name eth1
        }

        heartbeat {
                mode mesh
                port 3002
                address 192.168.33.101
                mesh-seed-address-port 192.168.33.101 3002

                interval 5
                timeout 10
        }

        fabric {
                port 3001
        }

        info {
                port 3003
        }
}
  • node2
network {
        service {
                address any
                port 3000
                access-address 192.168.33.102
                network-interface-name eth1
        }

        heartbeat {
                mode mesh
                port 3002
                address 192.168.33.102
                mesh-seed-address-port 192.168.33.101 3002

                interval 5
                timeout 10
        }

        fabric {
                port 3001
        }

        info {
                port 3003
        }
}

ポイントは - service - access-adressをVagrantfileで指定したIPアドレスに書き換える - network-interface-nameeth1にする - heartbeat - modemeshにする - addressをVagrantfileで指定したIPアドレスにする - mesh-seed-address-portnode1を見るようにする(2台とも) - ここは、両方のconfに両方のIP書いても大丈夫でした

network-interface-nameを変えないといけないことに気づくのにめっちゃ時間かかった...

[vagrant@localhost ~]$ ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:78:30:4D  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe78:304d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3323 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2423 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:267581 (261.3 KiB)  TX bytes:579927 (566.3 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:CA:31:8D  
          inet addr:192.168.33.102  Bcast:192.168.33.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:feca:318d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:27960681 errors:0 dropped:0 overruns:0 frame:0
          TX packets:27846070 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5863570470 (5.4 GiB)  TX bytes:5871987364 (5.4 GiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:7999 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7999 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:5992988 (5.7 MiB)  TX bytes:5992988 (5.7 MiB)

両方再起動して確認

$ sudo /etc/init.d/aerospike restart
$ asmonitor -e info

Enter help for commands

2 hosts in cluster: 192.168.33.101:3000,192.168.33.102:3000
===NODES===
2015-07-10 00:29:19.964079
Sorting by IP, in Ascending order: 
ip:port                 Build   Cluster      Cluster   Free   Free   Migrates              Node         Principal   Replicated    Sys
                            .      Size   Visibility   Disk    Mem          .                ID                ID      Objects   Free
                            .         .            .    pct    pct          .                 .                 .            .    Mem
192.168.33.101:3000    3.5.14         2         true     98     98   (1961,1)   BB98262CE270008   BB98D31CA270008      197,932     87
192.168.33.102:3000    3.5.14         2         true     98     95   (2008,1)   BB98D31CA270008   BB98D31CA270008      197,932     86
Number of nodes displayed: 2


 ===NAMESPACE===
Total (unique) objects in cluster for test : 197,932
Note: Total (unique) objects is an under estimate if migrations are in progress.


ip/namespace           Avail   Evicted    Master     Repl     Stop      Used   Used      Used   Used    hwm   hwm
                         Pct   Objects   Objects   Factor   Writes      Disk   Disk       Mem    Mem   Disk   Mem
                           .         .         .        .        .         .      %         .      %      .     .
192.168.33.101/test       98         0   101,982        2    false   84.42 M      2   36.89 M      2     50    60
192.168.33.102/test       98         0    95,950        2    false   84.42 M      2   84.23 M      5     50    60
Number of rows displayed: 2

2 hosts in cluster: 192.168.33.101:3000,192.168.33.102:3000 2台のクラスタになっていることがわかりますね

AMCから見てみる

img

img

ちゃんと2台いることがわかりますね。

まとめ

  • Aerospikeは手軽にクラスタ環境構築できる
  • AMC便利
  • meshで使う場合にmesh-seed-address-portが1個だとSPOFになってしまう気がする
    • どうするんだろうか?
    • ReverseProxyかませてRoundRobinで数台にしたりするんだろうか
  • 次回以降
    • ReverseProxyかませてみる
    • プログラムからCRUD
    • AQL
    • UDF