ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Redis] Docker를 이용한 Redis 클러스터링 구성
    오픈소스/redis 2020. 10. 20. 17:01

     

    이번 시간에는 docker 기반의 redis 클러스터링을 구성하는 방법에 대해서 알아보도록 하겠습니다.

     

    최종적으로 구성하려고 하는 구조는 아래와 같습니다.

     

    3대의 서버에 각각 Master, Slave Redis를 설치 후 클러스터링 설정을 진행하도록 하겠습니다.

     

     

    172.21.115.16 서버에 접속하여 Master, Slave Redis를 Docker로 구동

    # Master Redis 구동
    $ docker run -d --name redis-6379-16 --network host -v /redis/redis-6379-16:/data redis:5.0.5-buster redis-server --port 6379 --cluster-enabled yes --cluster-config-file node.conf --cluster-node-timeout 5000 --bind 0.0.0.0
    
    # Slave Redis 구동
    $ docker run -d --name redis-6380-16 --network host -v /redis/redis-6380-16:/data redis:5.0.5-buster redis-server --port 6380 --cluster-enabled yes --cluster-config-file node.conf --cluster-node-timeout 5000 --bind 0.0.0.0

    redis를 docker로 구동 시킬 때 옵션 정보는 다음과 같습니다.

    • --cluster-enabled yes
      • yes는 cluster mode로 시작한다. no로 하면 standalone mode로 시작한다.
    • --cluster-config-file nodes.conf
      • 클러스터의 상태를 기록하는 바이너리 파일
      • 클러스터의 상태가 변경될 때마다 상태를 기록한다.
    • --cluster-node-timeout 3000
      • 레디스 노드가 다운되었는지 판단하는 시간 (단위 : millisecond)

     

    172.21.112.205 서버에 접속하여 Master, Slave Redis를 Docker로 구동

    # Master Redis 구동
    $ docker run -d --name redis-6379-205 --network host -v /redis/redis-6379-205:/data redis:5.0.5-buster redis-server --port 6379 --cluster-enabled yes --cluster-config-file node.conf --cluster-node-timeout 5000 --bind 0.0.0.0
    
    # Slave Redis 구동
    $ docker run -d --name redis-6380-205 --network host -v /redis/redis-6380-205:/data redis:5.0.5-buster redis-server --port 6380 --cluster-enabled yes --cluster-config-file node.conf --cluster-node-timeout 5000 --bind 0.0.0.0

     

    172.21.115.62 서버에 접속하여 Master, Slave Redis를 Docker로 구동

    # Master Redis 구동
    $ docker run -d --name redis-6379-62 --network host -v /redis/redis-6379-62:/data redis:5.0.5-buster redis-server --port 6379 --cluster-enabled yes --cluster-config-file node.conf --cluster-node-timeout 5000 --bind 0.0.0.0
    
    # Slave Redis 구동
    $ docker run -d --name redis-6380-62 --network host -v /redis/redis-6380-62:/data redis:5.0.5-buster redis-server --port 6380 --cluster-enabled yes --cluster-config-file node.conf --cluster-node-timeout 5000 --bind 0.0.0.0

     

    Docker에서 redis-cli 명령으로 클러스터 생성

    --cluster-replicas : slave 개수 설정

    # Redis Clustering
    $ docker run -i --rm --network host redis:5.0.5-buster redis-cli --cluster create 172.21.115.16:6379 172.21.112.205:6379 172.21.115.62:6379 172.21.115.16:6380 172.21.112.205:6380 172.21.115.62:6380 --cluster-replicas 1
    >>> Performing hash slots allocation on 6 nodes...
    Master[0] -> Slots 0 - 5460
    Master[1] -> Slots 5461 - 10922
    Master[2] -> Slots 10923 - 16383
    Adding replica 172.21.112.205:6380 to 172.21.115.16:6379
    Adding replica 172.21.115.62:6380 to 172.21.112.205:6379
    Adding replica 172.21.115.16:6380 to 172.21.115.62:6379
    M: f2de1bc9655b1c16619bd5e6afd629e795f37dcf 172.21.115.16:6379
       slots:[0-5460] (5461 slots) master
    M: 46d2e5f1022839f2d67ee3da503050e0fc857dc9 172.21.112.205:6379
       slots:[5461-10922] (5462 slots) master
    M: b9595ed90a56a68233584463f24ba23ff198bd8a 172.21.115.62:6379
       slots:[10923-16383] (5461 slots) master
    S: b3675e0255f818dc521fbfbeae33f59f7514499e 172.21.115.16:6380
       replicates b9595ed90a56a68233584463f24ba23ff198bd8a
    S: b88aa5e57f189c4f39186726ba935103fe60871d 172.21.112.205:6380
       replicates f2de1bc9655b1c16619bd5e6afd629e795f37dcf
    S: 92ac94181912d2abbcc15934f3f0a8752cdce948 172.21.115.62:6380
       replicates 46d2e5f1022839f2d67ee3da503050e0fc857dc9
    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 172.21.115.16:6379)
    M: f2de1bc9655b1c16619bd5e6afd629e795f37dcf 172.21.115.16:6379
       slots:[0-5460] (5461 slots) master
       1 additional replica(s)
    M: 46d2e5f1022839f2d67ee3da503050e0fc857dc9 172.21.112.205:6379
       slots:[5461-10922] (5462 slots) master
       1 additional replica(s)
    S: b88aa5e57f189c4f39186726ba935103fe60871d 172.21.112.205:6380
       slots: (0 slots) slave
       replicates f2de1bc9655b1c16619bd5e6afd629e795f37dcf
    M: b9595ed90a56a68233584463f24ba23ff198bd8a 172.21.115.62:6379
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
    S: b3675e0255f818dc521fbfbeae33f59f7514499e 172.21.115.16:6380
       slots: (0 slots) slave
       replicates b9595ed90a56a68233584463f24ba23ff198bd8a
    S: 92ac94181912d2abbcc15934f3f0a8752cdce948 172.21.115.62:6380
       slots: (0 slots) slave
       replicates 46d2e5f1022839f2d67ee3da503050e0fc857dc9
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.

     

    클러스터 상태 확인

    # redis-cli로 클러스터로 구성된 서버중 하나에 접속
    $ redis-cli -h 172.21.115.16 -p 6379
    172.21.115.16:6379> cluster nodes
    f2de1bc9655b1c16619bd5e6afd629e795f37dcf 172.21.115.16:6379@16379 myself,master - 0 1603194248000 1 connected 0-5460
    46d2e5f1022839f2d67ee3da503050e0fc857dc9 172.21.112.205:6379@16379 master - 0 1603194247000 2 connected 5461-10922
    b88aa5e57f189c4f39186726ba935103fe60871d 172.21.112.205:6380@16380 slave f2de1bc9655b1c16619bd5e6afd629e795f37dcf 0 1603194249045 5 connected
    b9595ed90a56a68233584463f24ba23ff198bd8a 172.21.115.62:6379@16379 master - 0 1603194248242 3 connected 10923-16383
    b3675e0255f818dc521fbfbeae33f59f7514499e 172.21.115.16:6380@16380 slave b9595ed90a56a68233584463f24ba23ff198bd8a 0 1603194248543 4 connected
    92ac94181912d2abbcc15934f3f0a8752cdce948 172.21.115.62:6380@16380 slave 46d2e5f1022839f2d67ee3da503050e0fc857dc9 0 1603194247240 6 connected

     

    redis-stat 설치 및 확인

    $ docker run --name redis-stat -p 9999:63790 -d insready/redis-stat --server 172.21.115.16:6379 172.21.112.205:6379 172.21.115.62:6379 172.21.115.16:6380 172.21.112.205:6380 172.21.115.62:6380

    9999번 포트를 열어놓았기 때문에 localhost:9999로 접속 시 전체 상태 정보를 확인 할 수 있습니다.

     

     

    이상으로 docker 컨테이너를 이용해서 redis cluster를 설정하는 방법에 대해서 알아보았습니다.

     

    '오픈소스 > redis' 카테고리의 다른 글

    [Redis] centos redis-cli 설치  (0) 2021.06.25
    [Redis] 자료구조  (0) 2020.10.07

    댓글

Designed by Tistory.