5대 서버에 redis cluster 셋업하기


다운로드 받고 설치

$ wget http://download.redis.io/releases/redis-3.0.7.tar.gz 

$ tar zxvf redis-3.0.7.tar.gz



설정 추가하기 


$ cd redis-3.0.7

$ mkdir 7000

$ cat > cluster.conf

port 7000

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 3000

daemonize yes

appendonly yes

dir ./7000



실행한 redis의 상태를 보면, 7000 번 포트가 떠있고, cluster 상태인지 알 수 있다. 

$ ./src/redis-server cluster.conf

$


$ ps -ef | grep redis

www   11235     1  0 11:25 ?        00:00:00 ./src/redis-server *:7000 [cluster]


cluster.conf 파일에 dir 지시자의 결과 디렉토리(7000)에 다음 파일이 존재하는 것을 확인할 수 있다.

$ ls

appendonly.aof  nodes.conf




만약 cluster.conf 파일에 daemonize yes를 사용하지 않고 데몬을 띄우면, Running in cluster mode 라는 로그를 볼 수 있다. 

$ ./src/redis-server cluster.conf


* No cluster configuration found, I'm d2c520147ed01b7b8dca0509b0ba71e0ba028f6c

                _._

           _.-``__ ''-._

      _.-``    `.  `_.  ''-._           Redis 3.0.7 (00000000/0) 64 bit

  .-`` .-```.  ```\/    _.,_ ''-._

 (    '      ,       .-`  | `,    )     Running in cluster mode

 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 7000

 |    `-._   `._    /     _.-'    |     PID: 27837

  `-._    `-._  `-./  _.-'    _.-'

 |`-._`-._    `-.__.-'    _.-'_.-'|

 |    `-._`-._        _.-'_.-'    |           http://redis.io

  `-._    `-._`-.__.-'_.-'    _.-'

 |`-._`-._    `-.__.-'    _.-'_.-'|

 |    `-._`-._        _.-'_.-'    |

  `-._    `-._`-.__.-'_.-'    _.-'

      `-._    `-.__.-'    _.-'

          `-._        _.-'

              `-.__.-'



한 대의 서버에 레디스 클러스터(src/redis-trib.rb)를 실행한다. 그 전에 먼저 ruby가 설치되었는지 확인하고, redis gem을 설치한다.


만약 아래와 같은 에러가 나면, 권한이 없다는 것이다.(cd /usr/local/lib/ruby/gems/2.1.0 디렉토리에 chmod 또는 chown 명령어를 사용한다).

$ ruby install redis

ERROR:  While executing gem ... (Gem::FilePermissionError)

    You don't have write permissions for the /usr/local/lib/ruby/gems/2.1.0 directory.



$ gem install redis

Fetching: redis-3.3.0.gem (100%)

Successfully installed redis-3.3.0

Parsing documentation for redis-3.3.0

Installing ri documentation for redis-3.3.0

Done installing documentation for redis after 0 seconds

1 gem installed





redis gem을 설치한 서버에서 src/redis-trib.rb 파일을 실행한다.


$ src/redis-trib.rb create 1.1.1.1:7000 1.1.1.2:7000 1.1.1.3:7000 1.1.1.4:7000 1.1.1.5:7000 

>>> Creating cluster

>>> Performing hash slots allocation on 5 nodes...

Using 5 masters:

1.1.1.1:7000

1.1.1.2:7000

1.1.1.3:7000

1.1.1.4:7000

1.1.1.5:7000

M: d2c520147ed01b7b8dca0509b0ba71e0ba028f6c 1.1.1.1:7000

   slots:0-3276 (3277 slots) master

M: 928190fdc1003f6bafc85da34cc23d20ce6cd1b01 1.1.1.2:7000

   slots:3277-6553 (3277 slots) master

M: 7a31e87116846784171dd55c559eaf6f3beef08f 1.1.1.3:7000

   slots:6554-9829 (3276 slots) master

M: bb90967fa662a4ca57d7329a138e86ae48b7b828 1.1.1.4:7000

   slots:9830-13106 (3277 slots) master

M: ffc4b32105d84e1ef0db310afddf70ae6befcf9e 1.1.1.5:7000

   slots:13107-16383 (3277 slots) master

Can I set the above configuration? (type 'yes' to accept): yes

>>> Nodes configuration updated

>>> Assign a different config epoch to each node

>>> Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join..

>>> Performing Cluster Check (using node 1.1.1.1:7000)

M: d2c520147ed01b7b8dca0509b0ba71e0ba028f6 1.1.1.1:7000

   slots:0-3276 (3277 slots) master

M: 928190fdc1003f6bafc85da34cc23d20ce6cd1b0 1.1.1.2:7000

   slots:3277-6553 (3277 slots) master

M: 7a31e87116846784171dd55c559eaf6f3beef08f 1.1.1.3:7000

   slots:6554-9829 (3276 slots) master

M: bb90967fa662a4ca57d7329a138e86ae48b7b828 1.1.1.4:7000

   slots:9830-13106 (3277 slots) master

M: ffc4b32105d84e1ef0db310afddf70ae6befcf9e 1.1.1.5:7000

   slots:13107-16383 (3277 slots) master

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.


hash slot이 제대로 설치되었는지 확인했다.



클러스터 상태로 접근해서 레디스 데이터를 저장하고 삭제해 본다.

$ ./src/redis-cli  -c -p 7000
127.0.0.1:7000> set foo bar
-> Redirected to slot [12182] located at 1.1.1.2:7000
OK
1.1.1.2:7000> get foo
"bar"
1.1.1.2:7000> del foo

(integer) 1 



Posted by 김용환 '김용환'

댓글을 달아 주세요