Home » 산딸기 가지고 놀기 » 라즈베리파이 서버 활용 연재강좌 : 02. Riak Cluster 사용법

몇일 전 Riak으로 Raspberry를 Cluster로 사용하기 -1. 설치 – 을 포스팅했죠.

쓰고보니 1,2 로 나눌만한 내용은 아니었네요.

바로 2 Node Clustering을 설정해보겠습니다.

  1. SD 카드 복사
    앞 시간에 설정해 놓은 RPi를 끄고 SD카드를 다른 SD카드에 복사합니다.

그리고 두개의 RPi에 각각 넣고 동일 네트워크에 LAN을 연결한 다음 전원을 넣습니다.

  1. Node 들의 Network 설정
    DHCP가 된다고 가정하고 넘어가겠습니다.

Static은 http://dbpedias.com/blogs/basho_blog/의 Step 6에 설명되어 있습니다.

각각의 RPi(이후 노드라 칭함)의 IP를 확인합니다.

저는 Node 1 : 192.168.0.32, Node 2 : 192.168.0.3 이렇게 되었습니다.

$ ifconfig -a
eth0      Link encap:Ethernet  HWaddr 
...
          inet addr:192.168.0.32  Bcast:192.168.0.255  Mask:255.255.255.0
...

혹시 모르니 Node 2로 ping을 날려봅니다.
아래와 같으면 Node2와 정상적으로 통신이 가능한 상태입니다.

$ ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_req=1 ttl=64 time=1.67 ms
64 bytes from 192.168.0.3: icmp_req=2 ttl=64 time=0.960 ms

Riak을 설치한 Directory로 이동해서 vm.args를 수정합니다.
vi editor 외에 nano나 다른 editor로 수정하시면 됩니다.
수정 내용은 127.0.0.1 로 되어있는 부분은 Node1, Node2 각각 자신의 IP로 바꿔줍니다.

cd /home/pi/riak-1.3.1/rel/riak
vi etc/vm.args

## Name of the riak node
-name riak@192.168.0.32

## Cookie for distributed erlang.  All nodes in the same cluster
## should use the same cookie or they will not be able to communicate.
-setcookie riak

## Heartbeat management; auto-restarts VM if it dies or becomes unresponsive
## (Disabled by default..use with caution!)
##-heart

etc/app.config File에도 IP를 바꿔줍니다.

$ vi etc/app.config

%% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*-
%% ex: ft=erlang ts=4 sw=4 et
[
 %% Riak Client APIs config
 {riak_api, [
...
            %% pb_ip is the IP address that the Riak Protocol Buffers interface
            %% will bind to.  If this is undefined, the interface will not run.
            {pb_ip,   "192.168.0.32" },
...
              %% http is a list of IP addresses and TCP ports that the Riak
              %% HTTP interface will bind.
              {http, [ {"192.168.0.32", 8098 } ]},

              %% https is a list of IP addresses and TCP ports that the Riak
              %% HTTPS interface will bind.
              %{https, [{ "192.168.0.32", 8098 }]},
...

Riak 재실행

$ bin/riak stop;bin/riak start

설정이 잘 되었는지 해당 포트를 확인해보겠습니다.

$ curl http://192.168.0.32:8098/ping

혹시 아래와 같은 메세지가 나오시나요?

curl: (7) couldn't connect to host

그러면 ./data 디렉토리의 내용을 지워보세요.

$ cd data; rm -r *

Riak 재실행

$ bin/riak stop;bin/riak start
$ curl http://192.168.0.32:8098/ping
OK$

OK 가 떴으니 성공했습니다.

지금까지 한 부분은 Node 1,2 각각 작업하셔야 됩니다.

다음은 Node 1에서 작업하겠습니다.

  1. Node 연결하기
    현재 작업하고 있는 Node 1에 Node 2를 추가합니다.
$ ./bin/riak-admin cluster join riak@192.168.0.3
Success: staged join request for 'riak@192.168.0.32' to 'riak@192.168.0.3'
$ ./bin/riak-admin cluster plan
=============================== Staged Changes ================================
Action         Nodes(s)
-------------------------------------------------------------------------------
join           'riak@192.168.0.32'
-------------------------------------------------------------------------------

NOTE: Applying these changes will result in 1 cluster transition

###############################################################################
                         After cluster transition 1/1
###############################################################################

================================= Membership ==================================
Status     Ring    Pending    Node
-------------------------------------------------------------------------------
valid     100.0%     50.0%    'riak@192.168.0.3'
valid       0.0%     50.0%    'riak@192.168.0.32'
-------------------------------------------------------------------------------
Valid:2 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

WARNING: Not all replicas will be on distinct nodes

Transfers resulting from cluster changes: 32
  32 transfers from 'riak@192.168.0.3' to 'riak@192.168.0.32'

pi@raspberrypi:~/riak-1.3.1/rel/riak$ ./bin/riak-admin cluster commit
Cluster changes committed

현재 연결중인 Node를 확인합니다.

$ bin/riak-admin status | grep ring_members
ring_members : ['riak@192.168.0.3','riak@192.168.0.32']
$ ./bin/riak-admin member-status
================================= Membership ==================================
Status     Ring    Pending    Node
-------------------------------------------------------------------------------
valid      50.0%      --      'riak@192.168.0.3'
valid      50.0%      --      'riak@192.168.0.32'
-------------------------------------------------------------------------------
Valid:2 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

위와 같으면 모두 완료된 것입니다.

참고한 사이트에서는 테스트를 이렇게 하더군요.
Node 1에서 다음을 실행합니다.

$ curl -XPOST http://192.168.0.3:8098/riak/druplets -d 'YUM'

이때 Node 2에서 ACK램프가 반짝입니다.
다음명령어를 실행해 보니 두개의 Node에서 작동하고 있습니다.

$ curl http://192.168.0.32:8098/riak/druplets?keys=true | json_pp
$ curl http://192.168.0.3:8098/riak/druplets?keys=true | json_pp

일단 저의 능력은 여기까지 입니다.
Basho Bench로 성능테스트가 가능한 것 같은데 살짝 들여다 보니 겁이나서요..
아직 계획은 없습니다.
다음에는 다른 내용으로 만나겠습니다.

산딸기마을 포스트 검색

공동제작 공동프로젝트 무상후원 기관

산딸기마을 기부하기

산딸기마을 방문자 현황

Flags Countries Visits Page views
South Korea 626063 1845660
United States 10882 26091
Japan 5011 13204
Germany 2755 5151
India 1897 2902
Canada 1729 4640
United Kingdom 1596 2642
Australia 1240 2901
Russia 1219 1677
China 1077 2239
Total Pageviews: 1936700