Redis 고 가용성 모드-마스터-슬레이브 복제, 센티넬 모드, 클러스터 모드 (중요 및 상세)

1. Redis 고 가용성 모드

1. 마스터-슬레이브 복제 : 마스터-슬레이브 복제는 고 가용성 Redis의 기반이며 Sentinel과 클러스터는 모두 마스터-슬레이브 복제를 기반으로 고 가용성을 달성합니다. 마스터-슬레이브 복제는 주로 데이터의 다중 머신 백업뿐만 아니라로드 밸런싱 및 읽기 작업을위한 간단한 장애 복구를 구현합니다.
결함 :
● 장애 복구를 자동화 할 수 없음
● 쓰기 작업을로드 밸런싱 할 수 없음
● 저장 용량이 단일 시스템으로 제한됩니다.
2. Sentinel : 마스터-슬레이브 복제를 기반으로 Sentinel은 자동 장애 복구를 실현합니다.
결함 :
● 쓰기 작업의 부하 분산 불가
● 저장 용량이 단일 시스템에 의해 제한됨
● Sentinel이 슬레이브 노드를 자동으로 장애 조치 할 수 없음 읽기-쓰기 분리 시나리오에서 슬레이브 노드의 장애로 인해 읽기 서비스가 중단됩니다. 사용할 수 없으며 슬레이브 노드는 추가 모니터링 및 스위칭 작업이어야합니다.
3. 클러스터링 : 클러스터링을 통해 Redis는 쓰기 작업이로드 밸런싱 될 수없고 스토리지 용량이 단일 시스템에 의해 제한되는 문제를 해결하고 비교적 완전한 고 가용성 솔루션을 실현합니다.

둘째, Redis 마스터-슬레이브 복제

마스터-슬레이브 복제는 한 Redis 서버의 데이터를 다른 Redis 서버로 복사하는 것을 의미합니다. 전자는 마스터 노드 (Master), 후자는 슬레이브 노드 (Slave)라고합니다.
데이터 복제는 마스터 노드에서 슬레이브 노드로만 단방향입니다.
기본적으로 각 Redis 서버는 마스터 노드이며 마스터 노드는 여러 슬레이브 노드를 가질 수 있지만 (또는 슬레이브 노드 없음) 슬레이브 노드는 하나의 마스터 노드 만 가질 수 있습니다.

2.1 마스터-슬레이브 복제의 역할

● 데이터 이중화 : 마스터-슬레이브 복제는 지속성 외에 데이터 이중화 방법 인 데이터의 핫 백업을 실현합니다.
● 장애 복구 : 마스터 노드에 문제가있을 때 슬레이브 노드는 신속한 장애 복구를 달성하기위한 서비스를 제공 할 수 있으며 실제로 일종의 서비스 중복성입니다.
● 부하 분산 : 마스터-슬레이브 복제를 기반으로 읽기와 쓰기가 분리되어 마스터 노드가 쓰기 서비스를 제공하고 슬레이브 노드가 읽기 서비스를 제공 할 수 있습니다 (즉, 애플리케이션이 마스터 노드에 연결됨). Redis 데이터를 쓸 때 Redis 데이터를 읽을 때 애플리케이션이 슬레이브 노드에 연결) 서버로드를 공유합니다. 특히 쓰기를 줄이고 더 많이 읽는 시나리오에서 여러 슬레이브 노드가 읽기로드를 공유하면 동시성을 크게 높일 수 있습니다. Redis 서버.
● 고 가용성 초석 : 위의 기능 외에도 마스터-슬레이브 복제는 센티넬 및 클러스터 구현의 기반이되므로 마스터-슬레이브 복제는 Redis 고 가용성의 기반입니다.

2.2 마스터-슬레이브 복제 프로세스

(1) 슬레이브 머신 프로세스가 시작되면 마스터 머신에 "동기화 명령"명령을 보내 동기 연결을 요청합니다.
그 첫 번째 연결 또는 재 연결 여부 (2), 마스터 기계는 것이다 백그라운드 프로세스를 시작 받는 데이터 스냅 샷을 저장하는 데이터 파일 합니다 (RDB 조작을 실행)을하고, 마스터는 것입니다 데이터를 수정하는 모든 명령을 기록 하고 데이터 파일에 캐시합니다.
(3) 백그라운드 프로세스가 캐시 작업을 완료 한 후 마스터 머신은 데이터 파일을 슬레이브 머신으로 보내고 슬레이브 머신은 데이터 파일을 하드 디스크에 저장 한 다음 메모리에 로드 한 다음 마스터 머신은 모든 데이터를 수정하고 작업은 슬레이브 머신으로 전송됩니다. 슬레이브에 장애가 발생하여 다운 타임이 발생하면 정상으로 돌아온 후 자동으로 다시 연결됩니다.
(4) 마스터 머신은 슬레이브 측 머신으로부터 연결을 수신 한 후 전체 데이터 파일을 슬레이브 측 머신으로 전송합니다 .Mater가 여러 슬레이브에서 동시에 동기화 요청을 받으면 마스터는 백그라운드 에서 프로세스시작합니다. 저장하려면 모든 슬레이브 측 머신이 정상인지 확인하기 위해 데이터 파일이 모든 슬레이브 측 머신으로 전송됩니다.

셋, Redis 마스터-슬레이브 복제 구축

Master节点: 192. 168.238.10
Slave1节点: 192. 168.238.20
Slave2节点: 192. 168.238.30
#!/bin/bash

#yum源
echo -e "\033[31m =====正在验证当前为仅主机还是NAT模式===== \033[0m"
ping -c1 -W1 www.baidu.com &> /dev/null
if [ $? -eq 0 ];then echo -e "\033[31m 检测当前为NAT模式,为您配置在线yum源 \033[0m"
mkdir -p /etc/yum.repos.d/repo.bak

mv -f /etc/yum.repos.d/* /etc/yum.repos.d/repo.bak &> /dev/null

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo &> /dev/null

yum clean all &> /dev/null
yum list &> /dev/null
echo -e "\033[31m 在线源已配置完成 \033[0m"

else
echo -e "\033[31m 检测当前为仅主机模式,为您配置本地yum源 \033[0m"
mount /dev/sr0 /mnt &> /dev/null
cd /etc/yum.repos.d/
mkdir -p /etc/yum.repos.d/repo.bak

mv -f /etc/yum.repos.d/* /etc/yum.repos.d/repo.bak &> /dev/null

echo '[local]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0' > /etc/yum.repos.d/local.repo
yum clean all &> /dev/null
yum makecache &> /dev/null

df -h | grep "/mnt" 
if [ $? -ne 0 ];then
echo -e "\033[31m 检测当前为仅主机模式,但光盘未连接! \033[0m"
else
echo -e "\033[31m 本地yum源已配置完成 \033[0m"
fi
fi

#关闭防火墙
systemctl stop firewalld
setenforce 0
yum install -y gcc gcc-c++ make
rpm -q expect
rpm -q tcl
yum -y install expect
cd /opt
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
make
make PREFIX=/usr/local/redis install
#由于Redis源码包中直接提供了Makefile 文件,所以在解压完软件包后,不用先执行./configure进行配置,可直接执行make与make install 命令进行安装。

#在/utils里执行软件包提供的install_server.sh脚本文件设置Redis服务所需要的相关配置文件
cd /opt/redis-5.0.7/utils

#开始免交换执行
/usr/bin/expect <<EOF
#expect开始标志
spawn ./install_server.sh
#Please select the redis port for this instance: [6379]
expect "instance"
send "\r" 
#Please select the redis config file name [/etc/redis/6379.conf] 
expect "config"
send "\r"
#Please select the redis log file name [/var/log/redis_6379.log]
expect "log"
send "\r"
#Please select the data directory for this instance [/var/lib/redis/6379]
expect "data"
send "\r"
#Please select the redis executable path []
expect "executable"
send "/usr/local/redis/bin/redis-server\r"
#Is this ok? Then press ENTER to go on or Ctrl-C to abort.
expect "abort"
send "\r"
expect eof
EOF


ln -s /usr/local/redis/bin/* /usr/local/bin/
netstat -natp | grep redis

/etc/init.d/redis_6379 restart     
/etc/init.d/redis_6379 status   

sed -i '/bind 127.0.0.1/c bind 0.0.0.0' /etc/redis/6379.conf
sed -i 's/appendonly no/appendonly yes/' /etc/redis/6379.conf
/etc/redis/6379.conf
 
/etc/init.d/redis_6379 restart
/etc/init.d/redis_6379 status  

서버에서 명령 실행

sed -i '/replicaof <masterip> <masterport>/c replicaof 192.168.238.10 6379' 

Redis 구성 파일 수정 (마스터 노드 작업)

위의 스크립트가이 단계를 수행합니다.

vim /etc/redis/6379.conf
bind 0.0.0.0      			  #70行,修改监听地址为0.0.0.0
daemonize yes       		  #137行,开启守护进程
logfile /var/log/redis_6379.log    #172行,指定日志文件目录.
dir /var/lib/redis/6379            #264行,指定工作目录
appendonly yes           		   #700行,开启AOF持久化功能

/etc/init.d/redis_6379 restart

Redis 구성 파일 수정 (슬레이브 노드 작업)

위의 스크립트가이 단계를 수행합니다.

vim /etc/redis/6379.conf
bind 0.0.0.0		#70行,修改监听地址为0.0.0.0
daemonize yes		#137行,开启守护进程
logfile /var/log/redis_6379.log	#172行,指定日志文件目录
dir /var/lib/redis/6379			#264行,指定工作目录
replicaof 192.168.238.10 6379 		#288行,指定要同步的Master节点IP和端口
appendonly yes		#700行,开启AOF持久化功能

/etc/init.d/redis_6379 restart

마스터-슬레이브 효과 확인

마스터 노드의 로그를보십시오.

tail -f /var/log/redis_6379.log
Replica 192.168.80.11:6379 asks for synchronization
Replica 192.168.80.12:6379 asks for synchronization

여기에 사진 설명 삽입

마스터 노드에서 슬레이브 노드 확인

redis-cli info replication
# Replication
role:master
connected slaves:2
slave0:ip=192.168.80.11, port=6379, state=online, offset=1246, lag=0
slave1:ip=192.168.80.12, port=6379, state=online, offset=1246, lag=1

여기에 사진 설명 삽입
슬레이브 노드에서 슬레이브 노드 확인
여기에 사진 설명 삽입

네, Redis 센티넬 모드

Sentinel의 핵심 기능 : 마스터-슬레이브 복제를 기반으로 Sentinel은 마스터 노드의 자동 장애 조치를 도입합니다.

4.1 센티넬 모드의 원리

센티넬 (Sentinel) : 마스터-슬레이브 구조의 각 서버모니터링 하는 데 사용되는 분산 시스템 으로 장애가 발생하면 투표 메커니즘을 통해 새 마스터를 선택하고 모든 슬레이브를 새 마스터에 연결합니다. 따라서 센티넬을 실행하는 전체 클러스터의 수는 노드 3 개 이상이어야합니다.

4.2 감시 모드의 역할

● 모니터링 : 센트리는 마스터 노드와 슬레이브 노드가 정상적으로 작동하는지 지속적으로 확인합니다.
● 자동 장애 조치 : 마스터 노드가 정상적으로 작동하지 않으면 센티넬은 자동 장애 조치 작업을 시작하여 장애가 발생한 마스터 노드의 슬레이브 노드 중 하나를 새 마스터 노드로 업그레이드하고 다른 슬레이브 노드가 새 마스터를 복사하도록합니다. 노드.
● 알림 (알림) : 센트리는 장애 조치 결과를 클라이언트에 보낼 수 있습니다.

4.3 센티넬 구조는 센티넬 노드와 데이터 노드의 두 부분으로 구성됩니다.

1. 센티넬 노드 : 센티넬 시스템은 하나 이상의 센티넬 노드로 구성되며, 센티넬 노드는 특별한 redis 노드이며 데이터를 저장하지 않습니다.
2. 데이터 노드 : 마스터 노드와 슬레이브 노드는 모두 데이터 노드입니다.

센티넬의 시작은 마스터-슬레이브 모드에 따라 다르므로 센티넬 모드를 수행하기 전에 마스터-슬레이브 모드를 설치해야합니다. 모든 노드는 센티넬 모드를 배포해야합니다. 센티넬 모드는 모든 Redis 작업 노드가 정상인지 여부를 모니터링합니다. 마스터가 등장 할 때 문제가 발생하면 다른 노드가 마스터 노드와 연락이 끊어져서 투표를합니다. 투표의 절반 이상이이 마스터에 문제가 있다고 간주하고 센트리 룸에 통보합니다. , 그러면 슬레이브 중 하나가 새 마스터로 선택됩니다.
객관적 오프라인은 마스터 노드에 고유 한 개념이라는 점에 유의하는 것이 중요합니다. 슬레이브 노드와 센티넬 노드가 실패하면 센티널이 주관적으로 오프라인 된 후 후속 객관적 오프라인 및 장애 조치 작업이 없습니다.

다섯, 센티넬 모드 구성

Master节点: 192.168.238.10
Slave1节点: 192.168.238.20
Slave2节点: 192.168.238.30
systemctl stop firewalld
setenforce 0

Redis 센트리 모드의 구성 파일 수정 (모든 노드 작업)

vim /opt/redis-5.0.7/sentinel.conf
protected-mode no		#17行,关闭保护模式
port 26379			#21行,Redis哨 兵默认的监听端口
daemonize yes		#26行,指定sentine1为后台启动
logfile "/var/log/sentinel.log"		#36行,指定日志存放路径
dir "/var/lib/redis/6379"		#65行,指定数据库存放路径
sentinel monitor mymaster 192.168.80.10 6379 2 		#84行, 修改
#指定该哨兵节点监控192.168.80.10:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 3000 		#113行, 判定服务器down掉的时间周期,默认30000毫秒 (30秒 )
sentinel failover-timeout mymaster 180000		#146行,故障节点的最大超时时间为180000 (180秒)

감시 모드 활성화

먼저 마스터를 시작한 다음 슬레이브를 시작하십시오.

cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &

여기에 사진 설명 삽입

센티넬 정보보기

redis-cli -p 26379 info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.80.10: 6379,slaves=2,sentinels=3

여기에 사진 설명 삽입
여기에 사진 설명 삽입

실패 시뮬레이션

redis-server 프로세스 번호보기

ps -ef | grep redis
root    57031    1    	 0 15:20 ?    		00:00:07 /usr/local/bin/redis-server 0.0.0.0:6379
root    57742    1   	 1 16:05 ?    		00:00:07 redis-sentinel *:26379 [sentinel]
root    57883    57462   0 16:17 pts/1      00:00:00 grep --color=auto redis

主:
root      46721   6605  0 20:30 pts/3    00:00:00 tail -f /var/log/redis_6379.log
root      46768   6605  0 20:34 pts/3    00:00:00 tail -f /var/log/redis_6379.log
root      46790   6605  0 20:36 pts/3    00:00:00 tail -f /var/log/redis_6379.log
root      46832      1  0 20:39 ?        00:00:16 /usr/local/redis/bin/redis-server 0.0.0.0:6379
root      46848   6605  0 20:40 pts/3    00:00:00 tail -f /var/log/redis_6379.log
root      48779      1  0 23:46 ?        00:00:00 redis-sentinel *:26379 [sentinel]
root      48801  48225  0 23:48 pts/2    00:00:00 grep --color=auto redis


从:
[root@localhost redis-5.0.7]#ps -ef | grep redis
root      47386      1  0 20:30 ?        00:00:19 /usr/local/redis/bin/redis-server 0.0.0.0:6379
root      49483      1  0 23:46 ?        00:00:00 redis-sentinel *:26379 [sentinel]
root      49519  48928  0 23:50 pts/1    00:00:00 grep --color=auto redis

#杀死Master 节点上redis- server的进程号
kill -9 57031    #Master节点上redis-server的进程号

여기에 사진 설명 삽입

여기에 사진 설명 삽입

검증 결과

tail -f /var/log/sentinel.log
57742:X 07 Aug 2020 16:19:21.170 # +failover-state-select-slave master mymaster 192.168.80.11 6379
57742:x 07 Aug 2020 16:19:21.170 # -sdown slave 192.168.80.12:6379 192.168.80.12 6379 @ mymaster 192.168.80.11 6379
57742:X 07 Aug 2020 16:19:21.272 # +selected-slave slave 192.168.80.12:6379 192.168.80.12 6379 @ mymaster 192.168.80.11 6379
57742:X 07 Aug 2020 16:19:21.272 ★+failover-state-send-slaveof-noone slave 192.168.80.12:6379 192.168.80.12 6379 @ mymaster 192.168.80.11 6379
57742:X 07 Aug 2020 16:19:21.338 * +failover-state-wait-promotion slave 192.168.80.12:6379 192.168.80.12 6379 @ mymaster 192.168.80.11 6379
57742:X 07 Aug 2020 16:19:21.402 # -failover- abort-slave-timeout master mymaster 192.168.80.11 6379
57742:X 07 Aug 2020 16:19:21.799 # -sdown master mymaster 192.168.80.11 6379
57742:X 07 Aug 2020 16:19:21.826 # +new - epoch 41
57742:X 07 Aug 2020 16:19:21.827 # +vote- for-leader b12178afd9f862e0ead00763c2c7f1ae7f5de22e 41
57742:X 07 Aug 2020 16:19:31.137 * +convert- to- slave slave 192.168.80.12:6379 192.168.80.12 6379 @ mymaster 192.168.80.11 6379
[root@localhost redis-5.0.7]#tail -f /var/log/sentinel.log
48779:X 25 Feb 2021 23:46:57.327 * +sentinel sentinel 0d2634b6bba9148fd0dcc86b6f1b84e345a2c35e 192.168.238.20 26379 @ mymaster 192.168.238.10 6379
48779:X 25 Feb 2021 23:47:13.367 * +sentinel sentinel 4172c90a7e2f5c352bad5df746aa995a4ed8c229 192.168.238.30 26379 @ mymaster 192.168.238.10 6379
48779:X 25 Feb 2021 23:54:22.812 # +sdown master mymaster 192.168.238.10 6379
48779:X 25 Feb 2021 23:54:22.904 # +new-epoch 1
48779:X 25 Feb 2021 23:54:22.904 # +vote-for-leader 4172c90a7e2f5c352bad5df746aa995a4ed8c229 1
48779:X 25 Feb 2021 23:54:23.788 # +config-update-from sentinel 4172c90a7e2f5c352bad5df746aa995a4ed8c229 192.168.238.30 26379 @ mymaster 192.168.238.10 6379
48779:X 25 Feb 2021 23:54:23.788 # +switch-master mymaster 192.168.238.10 6379 192.168.238.30 6379
48779:X 25 Feb 2021 23:54:23.789 * +slave slave 192.168.238.20:6379 192.168.238.20 6379 @ mymaster 192.168.238.30 6379
48779:X 25 Feb 2021 23:54:23.789 * +slave slave 192.168.238.10:6379 192.168.238.10 6379 @ mymaster 192.168.238.30 6379
48779:X 25 Feb 2021 23:54:53.881 # +sdown slave 192.168.238.10:6379 192.168.238.10 6379 @ mymaster 192.168.238.30 6379

여기에 사진 설명 삽입
여기에 사진 설명 삽입

Six, Redis 클러스터 모드

클러스터, 즉 Redis Cluster는 Redis 3.0에 도입 된 분산 스토리지 솔루션입니다.
클러스터는 여러 노드 (노드)로 구성되며 Redis 데이터는 이러한 노드간에 분산됩니다. 클러스터의 노드는 마스터 노드와 슬레이브 노드로 나뉩니다. 마스터 노드 만 읽기 및 쓰기 요청과 클러스터 정보의 유지 관리를 담당하고 슬레이브 노드는 마스터 노드의 데이터 및 상태 정보 만 복제합니다.

6.1 클러스터의 역할은 두 가지로 요약 할 수 있습니다.

(1) 데이터 파티션 : 데이터 파티션 (또는 데이터 분할)은 클러스터의 핵심 기능입니다.
클러스터는 여러 노드에 데이터를 분산합니다. 한편으로는 Redis 단일 머신의 메모리 크기 제한을 돌파하고 스토리지 용량이 크게 증가하는 반면, 각 마스터 노드는 외부 읽기 및 쓰기 서비스를 제공 할 수 있습니다. 클러스터의 응답 성을 크게 향상시킵니다.
Redis 독립 실행 형 메모리 크기 제한은 지속성 및 마스터-슬레이브 복제 도입에서 언급됩니다. 예를 들어 독립 실행 형 메모리가 너무 크면 bgsave 및 bgrewriteaof의 포크 작업으로 인해 마스터 프로세스가 차단 될 수 있습니다. 마스터-슬레이브 환경에서 호스트 전환시 가능할 수 있음 결과적으로 슬레이브 노드는 오랫동안 서비스를 제공 할 수 없으며 전체 복제 단계에서 마스터 노드의 복제 버퍼가 오버플로 될 수 있습니다.
(2) 고 가용성 : 클러스터는 마스터 노드의 마스터-슬레이브 복제 및 자동 장애 조치를 지원합니다 (센티넬과 유사). 노드가 실패하더라도 클러스터는 여전히 외부 서비스를 제공 할 수 있습니다.

6.2 Redis 클러스터의 데이터 샤딩

Redis 클러스터는 해시 슬롯의 개념을 도입했습니다.
Redis 클러스터에는 16384 개의 해시 슬롯 (No. 0-16383)이
있습니다. 클러스터의 각 노드는 해시 슬롯의 일부를 담당합니다.
각 키가 CRC16 에 의해 확인 된 나머지 16384 개 희망 슬롯은이 값을 통해 해당 슬롯에 해당하는 노드를 찾은 다음 액세스 작업을 위해 해당 노드로 자동 점프합니다.

6.3 3 개의 노드로 구성된 클러스터를 예로 들어 보겠습니다.

노드 A에는 해시 슬롯 0 ~
5460이 포함됩니다. 노드 B에는 해시 슬롯 5461 ~ 10922
가 포함됩니다. 노드 C에는 해시 슬롯 10923 ~ 16383이 포함됩니다.

6.4 Redis 클러스터의 마스터-슬레이브 복제 모델

클러스터에는 3 개의 노드 A, B 및 C가 있습니다. 노드 B가 실패하면 5461-10922 범위의 슬롯이 부족하여 전체 클러스터를 사용할 수 없습니다.
각 노드에 대해 슬레이브 노드 A1, B1, C1을 추가합니다. 전체 클러스터는 3 개의 마스터 노드와 3 개의 슬레이브 노드로 구성됩니다. 노드 B에 장애가 발생하면 클러스터는 B1을 기본 노드로 사용하여 마스터 노드를 선택하여 서비스를 계속합니다. B와 B1이 모두 실패하면 클러스터를 사용할 수 없습니다.

일곱, Redis 클러스터 모드 구축

redis 클러스터에는 일반적으로 6 개의 노드, 3 개의 마스터 및 3 개의 슬레이브가 필요합니다. 편의를 위해 여기에있는 모든 노드는 동일한 서버에서 시뮬레이션
됩니다. 포트 번호 : 3 개의 마스터 노드 포트 번호 : 6001/6002/6003 및 해당 슬레이브 노드 포트 번호 : 6004/6005/6006으로 구분됩니다.

cd /etc/redis/
mkdir -p redis-cluster/redis600{
    
    1..6}
for i in {
    
    1..6}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
done

여기에 사진 설명 삽입
여기에 사진 설명 삽입
여기에 사진 설명 삽입

클러스터 기능 켜기

# 다른 5 개 폴더의 설정 파일도 같은 방식으로 수정되며 6 개 포트는 모두 다릅니다.

cd /etc/redis/redis-cluster/redis 6001
vim redis.conf
bind 127.0.0.1
#69行,注释掉bind项,默认监听所有网卡
protected-mode no
#88行,修改,关闭保护模式
port 6001
#92行,修改,redis监听端口,
daemonize yes
#136行,开启守护进程,以独立进程启动
cluster-enabled yes
#832行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf
#840行,取消注释,群集名称文件设置
cluster-node-timeout 15000
#846行,取消注释群集超时时间设置
appendonly yes
#700行,修改,开启AOF持久化

여기에 사진 설명 삽입
여기에 사진 설명 삽입

redis 노드 시작

6 개의 폴더를 입력하고 redis-server redis.conf 명령을 실행하여 redis 노드를 시작합니다.

cd /etc/redis/redis-cluster/redis6001
redis-server redis.conf
for d in {
    
    1..6}
do
cd /etc/redis/redis-cluster/redis600$d
redis-server redis.conf
done
ps -ef | grep redis

여기에 사진 설명 삽입

클러스터 시작

redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1

# 6 개의 인스턴스는 3 개의 그룹으로 나뉘며, 각 그룹에는 마스터와 슬레이브가 하나씩 있고 앞면이 마스터 노드이고 뒷면이 슬레이브 노드입니다. 다음 상호 작용을 생성하려면 yes를 입력해야합니다.
-Replicas 1은 각 마스터 노드에 1 개의 슬레이브 노드가 있음을 의미합니다.

여기에 사진 설명 삽입
여기에 사진 설명 삽입

# 테스트 클러스터

redis-cli -p 6001 -c         #加-c参数,节点之,间就可以互相跳转
127.0.0.1:6001> cluster slots    #查看节点的哈希槽编号范围
1) 1) (integer) 5461
   2) (integer) 10922        #哈希槽编号范围
   3) 1) "127.0.0.1"
      2) (integer) 6003        #主节点IP和端口号
      3) " fdca661922216dd69a63a7c9d3c4540cd6baef44"
   4) 1) "127.0.0.1"
      2) (integer) 6004        #从节点IP和端口号
     3) " a2c0c32aff0f38980accd2b63d6d952812e44740"
2) 1) (integer) 0
   2) (integer) 5460
   3) 1) "127.0.0.1"
      2) (integer) 6001
      3) "0e5873747a2e26bdc935bc76c2bafb19d0a54b11"
      4) 1) "127.0.0.1"
         2) (integer) 6006
         3) "8842ef5584a85005e135fd0ee59e5a0d67b0cf8e"
3) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 6002
      3) "81 6ddaa3d1469540b2ffbcaaf9aa867646846b30"
   4) 1) "127.0.0.1"
      2) (integer) 6005
      3) " f847077bfe6722466e96178ae8cbb09dc8b4d5eb"
127.0.0.1:6001> set name zhangsan
-> Redi rected to slot [5798] located at 127.0.0.1:6003 
OK
127.0.0.1:6001> cluster keyslot name    #查看name键的槽编号
127.0.0.1:6001> cluster slots
1) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 6003
      3) "f466e92c2487cea57aeca1ac74065e976f23bf0e"
   4) 1) "127.0.0.1"
      2) (integer) 6004
      3) "451dda82fd262ad6f3eaca5d39a4847b7c2b635c"
2) 1) (integer) 5461
   2) (integer) 10922
   3) 1) "127.0.0.1"
      2) (integer) 6002
      3) "1cbb5bdda47f98adb4193da8cc7b801ef76ac08e"
   4) 1) "127.0.0.1"
      2) (integer) 6006
      3) "fb71c49ba37aa0e2495160b6979d8c79b56f123f"
3) 1) (integer) 0
   2) (integer) 5460
   3) 1) "127.0.0.1"
      2) (integer) 6001
      3) "7696a844322b9a2c8d23125228afd25097885546"
   4) 1) "127.0.0.1"
      2) (integer) 6005
      3) "87412db1a80e4f8064205efdb581d34e0af80c2e"
      127.0.0.1:6001> set name xyw
-> Redirected to slot [5798] located at 127.0.0.1:6002
OK
127.0.0.1:6002> cluster keyslot name
(integer) 5798

여기에 사진 설명 삽입
여기에 사진 설명 삽입

추천

출처blog.csdn.net/IvyXYW/article/details/114086575