>  기사  >  데이터 베이스  >  CentOS7에서 Redis 클러스터를 구축하는 방법

CentOS7에서 Redis 클러스터를 구축하는 방법

WBOY
WBOY앞으로
2023-05-26 13:34:061203검색

1. 수동 구성

1. 노드 준비

CentOS7 및 Redis 설치

완전하고 가용성이 높은 클러스터를 보장하려면 노드 수가 6 이상이어야 합니다.

(1) 디렉터리 구조

cluster
├── 9001
│   ├── data
│   │   ├── appendonly.aof
│   │   └── nodes-9001.conf
│   ├── redis-9001.conf
│   └── redis-9001.log
├── 9002
│   ├── data
│   │   ├── appendonly.aof
│   │   └── nodes-9002.conf
│   ├── redis-9002.conf
│   └── redis-9002.log
...

(2 ) 구성 파일 준비

cd cluster
mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data
cp ../redis-6.0.9/redis.conf 9001/redis-9001.conf
vi 9001/redis-9001.conf
    port 9001
    daemonize yes
    bind 192.168.11.40
    dir /root/cluster/9001/data/
    pidfile /var/run/redis_9001.pid
    cluster-enabled yes  # 集群模式运行
    cluster-config-file nodes-9001.conf
    cluster-node-timeout 15000
    # appendonly yes
    logfile "/root/cluster/9001/redis-9001.log"

복사 및 바꾸기: :%s/9001/9002/g:%s/9001/9002/g

(3) 启动服务

/usr/local/redis/bin/redis-server /root/cluster/9001/redis-9001.conf
...
tail 9001/redis-9001.log
kill `cat /var/run/redis_9001.pid`

启动后会自动在 data 目录创建集群配置文件nodes-9001.conf

(3) 서비스 시작

$ cat 9001/data/nodes-9001.conf
8ccdb0963411ebd05ce21952bdd4b7597825afdc :0@0 myself,master - 0 0 0 connected
vars currentEpoch 0 lastVoteEpoch 0
$ /usr/local/redis/bin/redis-cli -h 192.168.11.40 -p 9001
192.168.11.40:9001> cluster nodes
8ccdb0963411ebd05ce21952bdd4b7597825afdc :9001@19001 myself,master - 0 0 0 connected
시작 후 자동으로 클러스터 구성 파일이 생성됩니다.

데이터 디렉터리 -9001.conf의 노드. 클러스터의 노드 정보가 변경되면 노드는 자동으로 클러스터 상태를 이 구성 파일에 저장합니다. 수동으로 수정하지 않는 것이 가장 좋습니다. 시작 시 클러스터 구성 파일이 있는 경우 노드는 구성 파일 콘텐츠를 사용하여 클러스터 정보

$ /usr/local/redis/bin/redis-cli -h 192.168.11.40 -p 9001
192.168.11.40:9001> cluster meet 192.168.11.40 9002
OK
192.168.11.40:9001> cluster nodes
8ccdb0963411ebd05ce21952bdd4b7597825afdc 192.168.11.40:9001@19001 myself,master - 0 0 0 connected
5786e3237c7fa413ed22465d15be721f95e72cfa 192.168.11.40:9002@19002 master - 0 1620703357871 1 connected

노드 ID

를 초기화합니다. 노드 ID

: 클러스터의 노드를 고유하게 식별하는 데 사용되는 40자리 16진수 문자열입니다. 노드 ID는 한 번만 생성되며 다시 시작할 때마다 실행 ID가 변경됩니다2. 노드 핸드쉐이크

    노드 핸드쉐이크 클러스터 모드에서 실행되는 노드들은 서로를 인식하기 위해 Gossip 프로토콜을 통해 서로 통신합니다
  • 192.168.11.40:9001> set hello world
    (error) CLUSTERDOWN Hash slot not served
    192.168.11.40:9001> cluster info
    cluster_state:fail
    cluster_slots_assigned:0
    cluster_slots_ok:0
    cluster_slots_pfail:0
    cluster_slots_fail:0
    cluster_known_nodes:6
    cluster_size:0
    ...

    cluster Meet는

    Asynchronous
  • 명령으로, 노드끼리 상태 데이터 정보를 교환하고, 실행 후 즉시 반환하며, 내부적으로 대상 노드와 핸드셰이크 통신을 수행하는 기능입니다.
  • Node 9001은 9002 노드 정보를 생성합니다. 로컬로 객체를 전송하고 Meet 메시지를 보냅니다
  • Node 9002 Meet 메시지를 받은 후 9001 노드 정보를 저장하고 pong 메시지에 응답합니다

이후 노드 9001과 9002는 ping/pong을 통해 정기적으로 서로 통신합니다. 메시지

클러스터에서

Any

노드는 클러스터 미팅 명령을 실행할 수 있습니다. 새 노드에 참여하기 위해 핸드셰이크 상태는 메시지를 통해 클러스터 내에 전파됩니다. 다른 노드는 자동으로 새 노드를 검색하고 핸드셰이크 프로세스를 시작합니다

노드가 핸드셰이크를 설정한 후에는 클러스터가 정상적으로 작동할 수 없습니다. 이때 클러스터는 오프라인 상태이며 모든 데이터 읽기 및 쓰기가 금지됩니다. 슬롯이 노드에 할당되지 않았기 때문에 클러스터는 슬롯을 노드에 매핑을 완료할 수 없습니다

/usr/local/redis/bin/redis-cli -h 192.168.11.40 -p 9001 cluster addslots {0..5461}
/usr/local/redis/bin/redis-cli -h 192.168.11.40 -p 9002 cluster addslots {5462..10922}
/usr/local/redis/bin/redis-cli -h 192.168.11.40 -p 9003 cluster addslots {10923..16383}
3. 슬롯 할당

Redis 클러스터는 모든 데이터를

16384

슬롯에 매핑합니다. 모든 슬롯

이 노드에 할당된 경우에만 클러스터가 온라인 상태로 들어갑니다.

슬롯 할당:

192.168.11.40:9001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
...
192.168.11.40:9001> cluster nodes
cebb7ed63d469748d4015ede6b4a0f5ff59c9322 192.168.11.40:9006@19006 master - 0 1620704406746 0 connected
1b7785f80c4712c6ba4abd71cc93027fa85a02f8 192.168.11.40:9005@19005 master - 0 1620704406000 4 connected
8ccdb0963411ebd05ce21952bdd4b7597825afdc 192.168.11.40:9001@19001 myself,master - 0 1620704404000 2 connected 0-5461
9408059de8b2dd712f0a9381a3b7aad561aef206 192.168.11.40:9004@19004 master - 0 1620704407753 5 connected
85ceb9826e8aa003169c46fb4ba115c72002d4f9 192.168.11.40:9003@19003 master - 0 1620704407000 3 connected 10923-16383
5786e3237c7fa413ed22465d15be721f95e72cfa 192.168.11.40:9002@19002 master - 0 1620704408763 1 connected 5462-10922

클러스터 정보 보기:

192.168.11.40:9004> cluster replicate 8ccdb0963411ebd05ce21952bdd4b7597825afdc
OK
192.168.11.40:9005> cluster replicate 5786e3237c7fa413ed22465d15be721f95e72cfa
OK
192.168.11.40:9006> cluster replicate 85ceb9826e8aa003169c46fb4ba115c72002d4f9
OK

슬롯 처리를 담당하는 각 노드에는 슬레이브 노드가 있어야 나중에 복원할 수 있습니다. 자동 장애 조치가 실패합니다

처음 시작한 노드와 슬롯에 할당된 노드가 모두 마스터 노드입니다. 슬레이브 노드는 마스터 노드 슬롯 정보 및 관련 데이터를 복사하는 역할을 담당합니다

192.168.11.40:9001> cluster nodes
cebb7ed63d469748d4015ede6b4a0f5ff59c9322 192.168.11.40:9006@19006 slave 85ceb9826e8aa003169c46fb4ba115c72002d4f9 0 1620704825926 3 connected
1b7785f80c4712c6ba4abd71cc93027fa85a02f8 192.168.11.40:9005@19005 slave 5786e3237c7fa413ed22465d15be721f95e72cfa 0 1620704825000 1 connected
8ccdb0963411ebd05ce21952bdd4b7597825afdc 192.168.11.40:9001@19001 myself,master - 0 1620704824000 2 connected 0-5461
9408059de8b2dd712f0a9381a3b7aad561aef206 192.168.11.40:9004@19004 slave 8ccdb0963411ebd05ce21952bdd4b7597825afdc 0 1620704824921 2 connected
85ceb9826e8aa003169c46fb4ba115c72002d4f9 192.168.11.40:9003@19003 master - 0 1620704824000 3 connected 10923-16383
5786e3237c7fa413ed22465d15be721f95e72cfa 192.168.11.40:9002@19002 master - 0 1620704823914 1 connected 5462-10922
wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.3.tar.gz
tar -zxvf ruby-2.7.3.tar.gz
cd ruby-2.7.3
./configure --prefix=/usr/local/ruby
make
make install
cd /usr/local/ruby
cp bin/ruby /usr/local/bin
cp bin/gem /usr/local/bin

2. redis-trib.rb를 사용합니다. 클러스터 구축(구식)

【Redis5.0 이후 클러스터 구축을 위해 redis-cli 사용】

redis-trib.rb는 Ruby로 구현된 Redis

클러스터 관리 도구

입니다. 클러스터 관련 명령은 클러스터 생성, 검사, 슬롯 마이그레이션 및 밸런싱과 같은 일반적인 운영 및 유지 관리 작업을 단순화하는 데 도움이 되도록 내부적으로 사용됩니다.
wget http://rubygems.org/downloads/redis-4.2.5.gem
gem install -l redis-4.2.5.gem
gem list

해결하세요(openssl(openssl과 유사)

$ gem install -l redis-4.2.5.gem
ERROR:  Loading command: install (LoadError)
	cannot load such file -- zlib
ERROR:  While executing gem ... (NoMethodError)
    undefined method `invoke_with_build_args' for nil:NilClass

redis-trib.rb

yum -y install zlib-devel
cd ruby-2.7.3/ext/zlib
ruby ./extconf.rb
make
make install

2 설치. 클러스터 만들기

cp /{redis_home}/src/redis-trib.rb /usr/local/bin
redis-trib.rb

가 자동으로 노드 핸드셰이크 및 슬롯 할당 프로세스를 완료합니다.

  • 이 마스터 노드와 슬레이브 노드가 동일한 시스템에 할당되지 않도록 하는 것이 가장 좋습니다. 아래 노드 목록의 순서는 마스터-슬레이브 역할을 결정하는 데 사용되며 그 다음은 슬레이브 노드여야 합니다. 슬롯/데이터가 포함되지 않은 노드. 그렇지 않으면 클러스터 생성이 거부됩니다. 3. redis-cli를 사용하여 클러스터를 구축하세요

    # --replicas 1:指定集群中每个主节点配备几个从节点
    redis-trib.rb create --replicas 1 192.168.11.40:9001 192.168.11.40:9002 192.168.11.40:9003 192.168.11.40:9004 192.168.11.40:9005 192.168.11.40:9006
    # 集群完整性检查
    redis-trib.rb check 192.168.11.40:9001

위 내용은 CentOS7에서 Redis 클러스터를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제