Redis集群部署指南

简介: 本章介绍基于CentOS7的Redis集群搭建,涵盖单机安装、主从复制、哨兵集群及分片集群的配置与测试,详细演示了各节点的角色设置、故障转移与数据同步过程。

本章是基于CentOS7下的Redis集群教程,包括:
单机安装Redis
Redis主从
Redis分片集群

1.单机安装Redis
首先需要安装Redis所需要的依赖:
然后将课前资料提供的Redis安装包上传到虚拟机的任意目录:

redis-6.2.4.tar.gz(2.3 MB)
例如,我放到了/tmp目录:

/TMP

RUN

大小

文件名

SBIN

FONT-UNIX

ICE-UNIX

SRV

TEST-UNIX

SYS

X11-UNIX

TMP

XIM-UNIX

.FONT-UNIX

2.3 MB

REDIS-6.2.4.TAR.GZ

ICE-UNIX


解压缩:
解压后:

/TMP

RUN

文件名

大小

SBIN

FONT-UNIX

SRV

ICE-UNIX

TEST-UNIX

SYS

X11-UNIX

TMP

XIM-UNIX

FONT-UNIX

REDIS-6.2.4

ICE-UNIX


进入redis目录:
运行编译命令:
如果没有出错就安装成功。然后修改redis.conf文件中的一些配置(注意是四个0,不要额外的):
启动Redis:
停止redis服务(ctrl + c也可停止):
2.Redis主从集群
2.1.集群结构
我们搭建的主从集群结构如图:

SLAVE

读操作

REDISCLIENT

MASTER

写操作

读操作

SLAVE


共包含三个节点,一个主两个从。这里我们会在同一台虚拟机中开启3个redis实例,模拟主从集群,信息如下:

IP

PORT

角色

192.168.206.129

7001

master

192.168.206.129

7002

slave

192.168.206.129

7003

slave

2.2.准备实例和配置
要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。
确保下面的配置已经更改(位置也别错)

# LISTENS ON TWO SPECIFIC IPV4 ADDRESSES

# BIND 192.168,

1.100 10.0.0.1

# LISTENS ON LOOPBACK IPV4 AND IPV6

# BIND

127.0.0.1

:1

# LIKE THE DEFAULT, ALL AVAILABLE INTERFACES

# BIND

#

- IF THE COMPUTER RUNNING REDIS IS DIRECTLY EXPOSED TO THE

WARNING

# INTERNET, BINDING TO ALL THE INTERFACES IS DANGEROUS AND WILL E

LLEXPOSETHE

# INSTANCE TO EVERYBODY ON THE INTERNET. SO BY DEFAULT WE UNCOMMENT THE

# FOLLOWING BIND DIRECTIVE, THAT WILL FORCE REDIS TO LISTEN ONLY ON THE

CE ADDRESSES (THIS MEANS REDIS

# IPV4 AND IPV6 (IF AVAILABLE) LOOPBACK INTERFACE AD

# WILL ONLY BE ABLE TO ACCEPT CLIENT CONNECTIONS FROM THE SAME HOST THAT IT IS

# RUNNING ON).

# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES

#

ST COMMENT OUT THE FOLLOWING LINE,

JUST C

BIND 0.0.0.0

# PROTECTED MODE IS A LAYER OF SECURITY PROTECTION, IN ORDER TO AVOID THA

VOID THAT


1)创建目录
我们创建三个文件夹,名字分别叫7001、7002、7003:
如图:

[ROOT@LOCALHOST TMP]# PWD

/TMP

[ROOT@LOCALHOST TMP]# 11

总用量

6月

9

ROOT ROOT

2

30

03:25 7001

DRWXR-XR-X.

6月

6

2 ROOT ROOT

DRWXR-XR-X.

30

03:25 7002

6月

6

3003:257003

2 ROOT ROOT

DRWXR-XR-X.

6月

DRWXRWXR-X.

7 ROOT ROOT 4096

30 03:25 REDIS-6.2.4


2)恢复原始配置
修改redis-6.2.4/redis.conf文件,将其中的持久化模式改为默认的RDB模式,AOF保持关闭状态。
3)拷贝配置文件到每个实例目录
然后将redis-6.2.4/redis.conf文件拷贝到三个目录中(在/tmp目录执行下列命令):
4)修改每个实例的端口、工作目录
修改每个文件夹内的配置文件,将端口分别修改为7001、7002、7003,将rdb文件保存位置都修改为自己所在目录(在/tmp目录执行下列命令):
5)修改每个实例的声明IP(注意IP需要修改)
虚拟机本身有多个IP,为了避免将来混乱,我们需要在redis.conf文件中指定每一个实例的绑定ip信息,格式如下(下面这个只是语法说明,别执行):
每个目录都要改,我们一键完成修改(在/tmp目录执行下列命令):
2.3.启动
为了方便查看日志,我们打开3个ssh窗口,分别启动3个redis实例,启动命令(在/tmp目录执行下列命令):
启动后:

192.168.150.1

LOGIN: WED JUN 30 10:50:36 2021 FROM

LAST

RUNNING IN STANDALONE BODE

[ROOT@IO

@LOCALHOST~]# CD /TMP/

[ROOT@LOCALHOST TMP]# 11

总用量8

HTTOS://REDIS.IO

246月

DRWXR-XR-X. 2 ROOT ROOT

30  09:20  7001

246月

30  09:21 7002

DRWXR-XR-X. 2 ROOT ROOT

246月

7003

30 09:21

DRWXR-XR-X. 2 ROOT ROOT

06月

APPENDONLY.AOF

30 10:18

-RW-R--R--, 1 ROOT ROOT

30 10:13

BOT ROOT40966月

REDIS-6.2.

DRWXRWXR-X. 7 ROOT R

34459:H 30 JUN 2821 10:59:42.988 5 MARNING; THE ICP BACKTOS SETTING OF S1L CANNOT BE ENFORCE /PROC/S/

926月

30 10:19

TEST.RDB

-RW-R-R--, 1 ROOT ROOT

NET/CORE/SONAXCONN IS SET TO THE LOWER VALUE OF 128.

[ROOT@LOCALHOST TMP]# &C

34459:H 30 JUN 2021 10:59:42.600 # SERVER INITIALIZED

[ROOT@LOCALHOST TMP]#

LAMNAND 'SYSCTL VM.OVERCONNIT.NENORYEL' FOR THIS TO TAKE OFFECT.

134459:H 30 JUN 2021 10:59:42.000 + READY TO ACCEPT CONNECTIONS

6.192.168.150.101(ROOT)

17.7001

PUNNING IN STANDALONE MODE

REDIS 6.2.4 (000000008/0) 64 BIT

PORT:7002

PID:34469

HTTPSS//REDIS.IO

HTTOST/RED S.IO

34469:M 30 JUN 2021 10:59:54.949 # WARNING: THE TCP BACKLOG

BACKLOG SETTING OF 511 CANNOT BE ENFORCED BECAUSE /PROC/SYS/N

ET/CORE/SOMAXCONN IS SET TO THE LOWER VALUE OF 128.

34469:M 30 JUN 2021 10:59:54.949 1 SERVER INITIALIZED

KGROUND SAVE NOY FAIL UNDER TAW NEARY CANDITIAN. T

NAND 'SYSCTL VM.OVERCOMMIT_NONORY L' FOR THIS TO TAKE EFFECT.

34469:H 30 JUN 2021 10:59:54.949* READY TO ACCEPT CONNECTIONS

34480:N 36 JUN 2021 11:00:83.745 * READY TO ACCEPT CONNECTIONS

9.7003

8.7002


如果要一键停止,可以运行下面命令:
2.4.开启主从关系
现在三个实例还没有任何关系,要配置主从可以使用replicaof 或者slaveof(5.0以前)命令。
新开窗口执行下述命令,一旦ctrl +c退出后,redis服务将中断
有临时和永久两种模式:
修改配置文件(永久生效)
在redis.conf中添加一行配置:slaveof <masterip> <masterport>
使用redis-cli客户端连接到redis服务,执行slaveof命令(重启后失效):
注意:在5.0以后新增命令replicaof,与salveof效果一致。(注意IP需要修改)
这里我们为了演示方便,使用方式二(在/tmp目录执行下列命令)。通过redis-cli命令连接7002,执行下面命令:
执行完:exit,退出可继续执行后续命令。通过redis-cli命令连接7003,执行下面命令:

一定要在对应节点下面操作

[ROOT@LOCALHOST 7002]# CD ./7003

[ROOT@LOCALHOST 7003]# REDIS-CLI

7003


然后连接 7001节点,查看集群状态:
结果:

REPLICATION

127.0.0.1:7001> INF0

# REPLICATION

ROLE:MASTER

LAVES:2

CONNECTED

ISLAVEO:IP-192.168.150.101,PORT-7002,STATE-ONLINE,OFFSET-322,LAG-1

SLAVEL:IP-192.168.150.101,PORT-7003,S

S,STATEONLINE,OFFSET-322,LAG-0

MASTER_FAILOVER_STATE:NO-FAILOVER

MASTER_REPLID:F1C9374C417136BC462FD61A25EBEF77BB7A41B7

REPLID2:0000000000000000000000000000000000000000000

MASTER

_REPL_OFFSET:336

MASTER

_REPL_OFFSET:-1

SECOND

REPL_BACKLOG_ACTIVE:1

REPL_BACKLOG_SIZE:1048576

REPL_BACKLOG_FIRST_BYTE_OFFSET:1

REPL_BACKLOG_HISTLEN:336


2.5.测试
执行下列操作以测试:
利用redis-cli连接7001,执行set num 123
利用redis-cli连接7002,执行get num,再执行set num 666
利用redis-cli连接7003,执行get num,再执行set num 888
可以发现,只有在7001这个master节点上可以执行写操作,7002和7003这两个slave节点只能执行读操作。
3.搭建哨兵集群
3.1.集群结构
这里我们搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群。如图:

SENTINEL

SENTINEL

SENTINEL

LLLLLLLLLLLLLA

监控集群状态

服务状态

变更通知

SLAVE

数据

REDISCLIENT

MASTER

同步

-

-

SLAVE

IIIIIILLIL


三个sentinel实例信息如下:

节点

IP

PORT

s1

192.168.206.129

27001

s2

192.168.206.129

27002

s3

192.168.206.129

27003

3.2.准备实例和配置
要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。
我们创建三个文件夹,名字分别叫s1、s2、s3:
如图:

11

[ROOT@LOCALHOST THE

TMP]

总用量8

7月

DRWXR-XR-X.

107:11 7001

2

40

ROOT ROOT

40 7月

DRWXR-XR-X.

1 07:11 7002

2

ROOT

ROOT

40 7月

DRWXR-XR-X.

1 07:11 7003

ROOT

2

ROOT

7月

07:21

114

ROOT

1

A.TXT

1

ROOT

-RW-R--R--.

7月

1 07:20 REDIS-6.2.4

DRWXRWXR-X. 7 ROOT ROOT

4096

7月

107:14 S1

2 ROOT ROOT

DRWXR-XR-X.

27

1 07:14 S2

7月

DRWXR-XR-X. 2

27

2 ROOT ROOT

7月

DRWXR-XR-X. 2 ROOT ROOT

107:14S3

27


然后我们在s1目录创建一个sentinel.conf文件,添加下面的内容:
cd /tmp/s1
touch sentinel.conf
vi sentinel.conf
粘贴下述文本
解读:
port 27001:是当前sentinel实例的端口
sentinel monitor mymaster 192.168.206.129 7001 2:指定主节点信息
mymaster:主节点名称,自定义,任意写
192.168.206.129 7001:主节点的ip和端口
2:选举master时的quorum值
然后将s1/sentinel.conf文件拷贝到s2、s3两个目录中(在/tmp目录执行下列命令):
修改s2、s3两个文件夹内的配置文件,将端口分别修改为27002、27003:
3.3.启动
为了方便查看日志,我们打开3个ssh窗口,分别启动3个redis实例,启动命令(在tmp目录执行):
启动后:

35750:X 01 JUL 2021 07:14:12.761

POSIX

LOCK:

CLOCK

MONOTONIC

GETTIME

PROTECTED-MODE NO

+@ALL

USER DEFAULT ON NOPASS ~* &* +@A

REDIS  6.2.4

(00000000/0)64 BIT

SENTINEL MYID 08CDED813704BC5B6A5643922719B90DB230CA61

SENTINEL CONFIG-EPOCH MYMASTER O

RUNNING IN SENTINEL MODE

PORT:27001

SENTINEL LEADER-EPOCH MYMASTER 0

PID:35750

SENTINEL CURRENT-EPOCH 0

STER 192.168.150.101 7002

SENTINEL KNOWN-REPLICA MYMASTER 1928

HTTPS://REDIS.IO

CA MYMASTER 192.168.150.101 7003

SENTINEL KNOWN-REPLICA ME

TER 192.168.150.101 27002 6

SENTINEL KNOWN-SENTINEL ME

6

ET MYMASTER

192.168.150.101 27003

SENTINEL KNOWN-SENTINEL MYMASTER

[ROOT@LOCALHOST TMP]

0]#

17.S1

2.192.168.150.101(ROOT)

135749:X 01 JUL 2021 07:14:12.718 * MONOTONIC CLOCK: POSIX CLOCK-GETTIME

35748:X 01 JUL 2021 07:14:12.505 * MONOTONIC CLOCK: POSIX CLOCK-GETTIME

REDIS 6.2.4(00000000/0)

REDIS 6.2.4 (0000000/0) 64 BIT

0/0) 64 BIT

RUNNING IN SENTINEL MODE

RUNNING IN SENTINET MODE

PORT:27002

PORT:27003

PID:35748

PID:35749

HTTPS://REDIS.IO

HTTPS://REDIS.IO

10.S3

19.S2


3.4.测试
停止7001(当前主节点),此时会在多个哨兵中选举出一个哨兵的master,如下
27001投给27002
27002投给自己
27003投给27002
因此27002变成哨兵master

拖拽

PORT:27002

RUNNING IN SENTINEL MODE

PORT:27003

PID:40774

PORT:   27001

PID:41327

HTTPS://REDIS.IO

HTTPS://REDIS.IO

HTTPS://REDIS.IO

SET TO THE LO

11:5

NNOT

11:5

145C

11:5

001

3.206.130 700

11:5

11:09 # WARNING: THE TCP BACKLOG SETTING OF 511 CANNOT BE ENFORCED BECB4B5

3.206.130 700

ANTNG: THE TCP BACKLOG SETTING OF 511 CAMNOT BE ENFORCED BECA

22 # SENTINEL ID IS 180C5C5BD6461C84420E9DE 59B1099FAL48A5D9

WARNING: THE TCP BACKLOG SETTING OF 511 CANNOT BE ENFORCED L

4MONITOR MASTER MYMASTER 192.168.206.130 7001 QUORUM 2

TINEL ID IS C5E38B9372CC9405104D4397CE4145D2BF8A09EB

ITAR MASTAR MUMASTAR 100 169 108 13A 70AL RAINRIM 7

SENTINEL ID IS 974FE03FBC276E6CLFEB8E8B4B5D50A08661067

138K

10K ENS33

100K

69K

34K

40211:X 02 APR 2023 11:53:27.537 # +SDOWN MASTER MYMASTER 192.168.206.130 7001

本机

OMS

40211:X 02 APR 2023 11:53:27.610 # +NEW-EPOCH 1

0

40211;X 02 APR 2023 11:53:27.616 #+VOTE-FOR-LEADER 180CSC5BD6461C8442989D6E5961099FAL45AL48A5D9 1

40211;X 02 APR 2023 11:53:28.641# FODOWN MASTER MYMASTER 192,160,206,130 7001 #QUORUM 3/2

的BQ都

命令输入(按ALT键提示历史,TAB键路径,ESC键返回,双击CTRL切换)

可用/大小

路径

历史

选项

3.8G/3.8G

/DEV

3.8G/3.8G

/DEV/SHM

命令

文件

3.8G/3.8G

/RUN


主观下线变客观下线

192.168.2

.206.130

2

ANNOUNCE

SENTINEL

3.9.8

3

192.168.206.130

7001

SENTINEL MONITOR

MYMASTER

4

SENTINEL DOWN-AFTER-MILLISECONDS MYMASTER 5000

5

206.

SENTINEL FAILOVER-TIMEOUT MYMASTER 6000

192.168.206.130 7003 @ MYMASTER 192.168.

DIR "/TMP/S1"

6

统信

684420E9D6E59B1099FA148A5D9 192.168.206,130

192.168.206.13

7CE4145D2BF8A09EB

405104D439

解读:

.66,0

PORT 27001:是当前SENTINEL实例的端口

三个都认为主观下线,超过配置的2

SENTINEL MONITOR MYMASTER 192.168.206.129 7001 2:指定主节点信息

所以变成了客观下线:ODOWN

MYMASTER:主节点名称,自定义,任意写

U

192.168.206.129 7001:主节点的IP和端口

1.7ISG

06.1307001

2:选举MASTER时的QUORUM值

1.7IS

1.7SSHD

41327:X 02 APR 2023 11:53:27.616 # +VOTE-FOR-LEADER 180CSC5C56D6A61C8442909D6E59B1099FAL4BA5D9

1.7ISSHD

41327:X 02 APR 2023 11:53:27.649 # +ODOWN MASTER MYMASTER 192,168.206.130 7001 #Q

01 #QUORUM 3/2

41327:X 02 APR 2023 11:53:27.649 # NEXT FAILOVER DELAY: I WILL R

A FAILOVER BEFOR

11:55:2

NOT START A F

OK

ENS33

A5D9 192.

68#+CONFIG-UPDATE-FROM SENTINEL

41327:X 02 APR 2023 11:53:28.668# +0

180C5C5BD6461C84420E9D6E5

6.130 7001


哨兵master自己从当前集群中的slave节点中选出一个新的master,原则是:

L D330N /901 9998020GDGGA38D3 1T3939/ZZQ1603 14/6

JOT D

11:53:27.671 # +ELECTED-LEADER MASTER MYMASTER 192.168.206.130 70

07001

2023

APR

11:53:27,671 # +FAILOVER-STATE-SELEC

APR

2023

ITE-SELECT-SLAVE MASTER MYMASTER 192.168.206.130 7001

哨兵MASTER选举新的主节点

11:53:27.729# +SELECTED-SLAVE SLAY

RE SLAVE 192.168.206.13D:7002 192.168.206.130 7002

APR

02@MYMASTER192.168.206,1307001

2023

ENE 5LAVE 192.168.206.130:7002 192.168.206.130 7002 Q NYMASTER 192,168,206.130 700

11:53:27,729

FAILOVER-ST

2023

LAVEOF-NOONE

APR

STATE-SEND

变成主节点


现有slave节点执行slave of,服从新的master节点

+FAILOVER-STATE-WAIT-PROMOTION SLAVE 192.168.206.130:7002 192.168.206.130 7002

7002 @ MYMASTER 192.168.206.130 7001

# +PROMOTED-SLAVE SLAVE 192.1

192.168.206.130:7002 192.168.206.130 7002  MYMASTER 192.168.206.130 7001

# +FAILOVER-STATE-RECONF-SLAVES MASTER MYMASTER 192.168.206.130 7

3.206,130 7001

NT SLAVE 192,168.206.130:7003 192.168.206.130 7

+SLAVE-RECONF-SENT

MYMASTER 192.168.206.130 7001

807003

+SLAVE-RECONF-INPROG SLAVE 192.168.206.130:7003 192.168.206.130 7

192.168.206.1307

07001

7003@MYMASTER

DONE SLAVE 192.168.206.130:7003 192.168.206.130 7003 Q

+SLAVE-RECONF-DONE SLA

80 7001

192,168.206.130

@MYMASTER 1

存活的7003会执行SLAVEOF变成现有MASTER的从节点

# +FAILOVER-END MASTER MYMASTER 192.168.206.130 7001

# +SWITCH-MASTER MYMASTER 192.168.206.130 7001 192.16

.168.206.130 7002

+SLAVE SLAVE 192.168.206.130:7003 192.168.206.130

7003

@ MYMASTER 192.168.206.130 7002

+SLAVE SLAVE 192.168.206.130:7001 192.168.206.130

7001

01 @ MYMASTER 192.168.206.130 702

192.168.206.130:7001 192.168.206.130 7001 & MYMASTER 192.168.206.130 70

SLAVE

+SDOWN


其余哨兵得到哨兵msater的选举通知

LRONMAN

LRONMAN

X

IRONMAN

X

27001-哨兵(非主节点)

40211:X 02 APR 2023 11

23 11:53:27.537 # +SDOWN MASTER MYMASTER 192.168.206.130 7001

40211:X 02 APR 2023 11:53:27.610 # +NEW-EPOCH 1

40211;X 02 APR 2023 11:53:Z7.616 # +VOTE-FOR-LEADER 180C5C5BU6461C844284420890645961099FAL48ASD9 1

40211:X 02 APR 2023 11;53;28.641 #  +ODOWN NASTER MYMASTER 192,168,206,130 7001 #QUORUM 3/Z

I1:S3:28,641 # NEXT FAILOVER DALAY: I VILL NOT START A FAILOVER BEFORE SUN APR 2 11:55:28 28 2023

40211:X 02 APR 2023 11:53:28.64

002@MYMAS

6.130 7001

40211:X 02 APR 2023 11:53:28.668 # +SWITCH-MA

+SWITCH-MASTER MYMASTER 192.168.206.130 7001 192.168.206.130 7002

492 139 702  402  302  192  38,28,28-     192  192  150,206  192  192 192  139 7003      192  139 709

192.168.206.130:7001 192.168.206.130 7001 Q 7001  MYMASTER 168.206.130 7002

40211:X 02 APR 2023 11:53:33.685 # +SDOWN SLAVE 19

接收哨兵MASTER选举之后的通知,得到7002变成MASTER,7001宏机的消息


此时我们恢复7001,会发现会做一次全量同步

3 LRONMAN

2  LRONMAN

LRONMAN

4 LRONMAN

7001恢复

JUST A PARTIAL TRANSFER.

RONIZE WITH THE NEW MASTER WITH JUST -

TO MASTER 192.168,206,130:7002

129652:S 02 APR 2023 12:04:31.709 * CONNECTING TO

`-REPLICA SYNC STARTED

129652:S 02 APR 2023 12:04:31.709 * MASTER <-> RE

OLL-0 OMEMFOT

8 EVENTSER CMD-EXEC USER-DEFAULT REDIR:-1')

B 12:04:31.714 # CONFIG REWRITE EXECUTED WITH SUCCESS,

2  APR  2023 12:

129652:S 02 A

3 12:04:31.714 * NON BLOCKING CONNECT FOR SYNC FIRED THE EVENT.

129652:S

02

2023 1

APR

312:04:31.714* MASTER REPLIED

129652

TO PING, REPLICATION CAN CONTINUE...

APR 2023 12

02

S

3 12:04+31,714 * TIYING A PARTIAL RESYNCHRONIZATION (REQUEST DC4S2253EC42503661560626ALSB64AB6AB698:D

129652

2023 12:

02

APR

S

2023 12:04:31.750 * FULL RESYNC FROM MASTER; EA6BCABBCAB990CLAD7ADF3261085C4A3CF1LF281656:195891

129652:S

02

APR

3 12:04:31.750 * DISCARDING PREVIOUSLY

ER STATE.

129652:

2023

02

APR

REPLICASYR

200 BYTES FROM MASTER TO DISK

2023 12:04:31.767*MASTER

129652:

02

APR

S

3 12:04:31.767 * MASTER <-> REPLICA SYNC: FLUSHING OLD DATA

129652:

2023 12

02

APR

3 12:04:31.768 * MASTER <-> REPLICA SYNC: LOADING DB IN MEMORY

129652:S

02

2023

APR

12:04:31.770* LOADING RDB PRODUCED BY VERSION 6.2.4.

129652:S

2023

02

APR

尝试与新的MASTER节点做数据同步

RDB AGE 0 SECONDS

APR 2023 12:31.770*******

129652:S

02

2俱是新的节点变成了7002,与当前7001的REPLILD不一致,所以做全量同步

129652:S  02  APR

2023 12:04:31.770 * RDB MEMORY USAGE WHEN CREATED 2

2:S 02 APR 2023 12:04:31.770 * MASTER <> REPLICA SYNC: FINISHED WITH

129652:

SUCCESS


新加入的节点,执行slave of服从当前master(此时是从配置文件中读取)

6

2 LRONMAN X

LRONMAN

X

3 LRONMANX

哨兵MASTER

8.619 # FFAILOVER-STATE-RECONF-SLAVES MASTER MYMASTER 192.168.206.130 7001

40774:X 02  APR 2023 11:53:28.619

+SLAVE-RECONF-SENT SLAVE 192.168.206.130:7003 192.192.168.206.130 7003 ( MYMASTER

2.168.206.130 7001

40774:X 02 APR 2023 11:53:28.667

192.1

+SLAVE-RECONF-INPROQ SLAVE 192.168.206.130:7003 192.168.206.130 7003

40774:X 02 APR 2023 11:53:29,671

192,168,206,130 7001

MYMASTE

ONE SLAVE 192.168.206.130:7003 192.168.206.130 7003

+SLAVE-RECONF-DONE SLA

192.168.206.130 7001

40774:X 02 APR 2023 11:53:29.671

MYMASTER

40774:X 02 APR 2023 11:53:29,727 # +FAIL

# +FAILOVER-END MASTER MYMASTER 192.168.206.130 7001

40774:X 02 APR 2023 11:53:29,727 # +SWITCH-MA

ER 192.168,206,130 7001 192,168,206.130 7002

IMASTER

MYMASTER 1

40774:X 02 APR 2023 11:53:29.727 * +SLAVE S

192.168.206.130:7003 192.168.206.130 7003   MYMASTER 192.168.206.130 7002

SLAVE

40774:X 02 APR 2023 11:53:29,727 * +SLAVE S

E SLAVE 192.168,206.130:7

130 7002

06.130:7001 192,168.206.130 7001 Q MYMASTER 192.168.206.130 7002

40774:X 02 APR 2023 11:53:34,736 # +SDOWN S

WN SLAVE 192.1

168,206,130:7

新加入节点,开始执行SLAVEOF变成当前集群中的从节点

40774:X 02 APR 2023 12:04:21.708

-SDOWN SLAVE 192,168,206,130:7001  192,168,206,130 7001 ( MYMASTER 192,168,206,130 7002

40774:X 02 APR 2023 12:04:31.708

ICONVERT-TO-SLAVE SLAVO 19Z, 168,296:130:730 7001 192,168,205,130 7001 ( MYMASTER 192,168,130 7002


4.搭建分片集群
4.1.集群结构
分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下

SLAVE

数据同步

MASTER

心跳

心跳

心跳

MASTER

MASTER

数据同步

数据同步

SLAVE

SLAVE


这里我们会在同一台虚拟机中开启6个redis实例,模拟分片集群,信息如下:

IP

PORT

角色

192.168.206.129

7001

master

192.168.206.129

7002

master

192.168.206.129

7003

master

192.168.206.129

8001

slave

192.168.206.129

8002

slave

192.168.206.129

8003

slave

4.2.准备实例和配置
停止原来的所有redis服务(哨兵也要停止),同时删除之前的7001、7002、7003这几个目录,重新创建出7001、7002、7003、8001、8002、8003目录:
在/tmp下准备一个新的redis.conf文件,内容如下:
touch redis.conf
vi redis.conf

[ROOT@LOCALHOST TMPL# CAT REDIS.CONF

PORT 6379

#开启集群功能

CLUSTER-ENABLED YES

在TMP路径下CAT,确认一下有下面的配置即可

集群的配置文件名称,不需要我们创建,由REDIS自己维护

CLUSTER-CONFIG-FILE /TMP/6379/NODES.CONF

#节点心跳失败的超时时间

CLUSTER-NODE-TIMEOUT 5000

#持久化文件存放目录

DIR/TMP/6379

#绑定地址(非常重要,别漏也别改)

BIND 0.0.0.0

#让REDIS后台运行

DAEMONIZE YES

#注册的实例IP

REPLICA-ANNOUNCE-IP 192.168.206.130

#保护模式

PROTECTED-MODE NO


将这个文件拷贝到每个目录下:
修改每个目录下的redis.conf,将其中的6379修改为与所在目录一致:
此时可以进到任意目录查看一下,确认是否都存在相关的配置文件
4.3.启动
因为已经配置了后台启动模式,所以可以直接启动服务:
通过ps查看状态:
发现服务都已经正常启动:

[ROOT@LOCALHOST

T TMP.

GREP

REDIS

PS -EF

REDIS-SERVER

[CLUSTER]

2362

0.0.0.0:7001

1 0 09:21

00:00:00

ROOT

[CLUSTER]

2368

1 0 09:21

00:00:00

. ?

-SERVER 0.0.0.0:7002

REDIS

ROOT

[CLUSTER]

-SERVER 0.0.0.0:7003

1 0 09:21

2374

00:00:00

REDIS

ROOT

CLUSTER]

1 0 09:21

REDIS-SERVER 0.0.0.0:8001

2380

00:00:00

ROOT

00:00:00 REDIS-SERVER 0.0.G

1 0 09:21 ?

CLUSTER

0.0.0:8002

2386

ROOT

1 0

00:00:00 REDIS-SERVER 0.0.0

09:21 ?

[CLUSTER]

.0:8003

2392

ROOT


如果要关闭所有进程,可以执行命令:
或者(推荐这种方式):
4.4.创建集群
更多测试细节也可查看:https://www.yuque.com/xiankanpengyouquandisitiaodongtai/diods0/fzoohtlg0r8gz6cd#ecac7084
虽然服务启动了,但是目前每个服务之间都是独立的,没有任何关联。
我们需要执行命令来创建集群,在Redis5.0之前创建集群比较麻烦,5.0之后集群管理命令都集成到了redis-cli中。
1)Redis5.0之前(我们版本是之后,不适用这个)
Redis5.0之前集群命令都是用redis安装包下的src/redis-trib.rb来实现的。因为redis-trib.rb是有ruby语言编写的所以需要安装ruby环境。
然后通过命令来管理集群:
2)Redis5.0以后
我们使用的是Redis6.2.4版本,集群管理以及集成到了redis-cli中,格式如下:
命令说明:
redis-cli --cluster或者./redis-trib.rb:代表集群操作命令
create:代表是创建集群
--replicas 1或者--cluster-replicas 1 :指定集群中每个master的副本个数为1,此时节点总数 ÷ (replicas + 1) 得到的就是master的数量。因此节点列表中的前n个就是master,其它节点都是slave节点,随机分配到不同master
运行后的样子:

--CLUSTER-REPLICAS 1 192.168.150.101:7001 192.168.150.101:7002

[ROOT@LOCALHOST TMP]# REDIS-CLI --CLUSTER CREATE

168.150.101:7003 192:168.150:101:8001 192:168:150:101:8002 168:150:150:15003

>>> PERFORMING HASH SLOTS ALLOCATION ON 6 NODES...

MASTER[0] -> SLOTS 0 - 5460

-> SLOTS 5461 - 10922

MASTER[1]

> SLOTS 10923 - 16383

MASTER[2]

REPLICA 192.168.150.101:8002 TO 192.168.150.101:7001

ADDING

01:8003 TO 192.168.150.101:7002

ADDING REPLICA

192.168.150.101:

192.168.150.101:8001 TO 192.168.150.101:7003

ADDING

REPLICA

ALLOCATION FOR ANTI-AFFINITY

SLAVES

TRYING TO OPTIMIZE

VVY

IN THE SAME HOST AS THEIR MASTER

[WARNING] SOME SLAVES ARE

M: F5FC58DEFBEBB957E47FB0D8327A09DC4F1678F5 192.168.150.101:7001

SLOTS:[0-5460] (5461 SLOTS) MASTER

M: AFAA70D6528FC72490EOF3F7B32731A12C126B8 192.168.150.101:7002

SLOTS:[5461-10922] (5462 SLOTS) MASTER

M: 1C00E5F9E158B169F199F15884AB43BC433B1A06 192

06 192.168.150.101:7003

33) (5461 SLOTS) MASTER

SLOTS:[10923-16383] (!

S: 7B6D5FFC9A985D614DC5AEB2EE3ABACLADFD3E22 192.168.150.101:8001

REPLICATES AFAA70D6528FC72490E0F3F7B32731A12C12C12BB8

S: 6EC60FB5AFD950A465F05C8024BF8F75D809B014 192.168.150.101:8002

REPLICATES 1C00E5F9E158B169F199F15884AB43BC433B1A06

S: 1FA6D68D590827C24C237B1C490B78E5C7FE2CA9 192.168.150.101:8003

REPLICATES F5FC58DEFBEBB957E47FBOD8327A09DC4F1678F5

CAN I SET THE ABOVE CONFIGURATION? (TVPE 'VES'

询问是否要按照上面列出的方式来创建集群?如果没问题,输入YES

S! TO ACCEPT):


这里输入yes,则集群开始创建:

NODES CONFIGURATION UPDATED

ASSIGN A DIFFERENT CONFIG

TO EACH NODE

EPOCH

SENDING

CLUSTER MEET MESSAGES TO JOIN THE CLUSTER

WAITING FOR THE CLUSTER TO JOIN

>>> PERFORMING CLUSTER CHECK (US

(USING NODE 192.168.150.101:7001)

F5FC58DEFBEBB957E47FB0D8327A09DC4F1678F5 192.168.150.101:7001

SLOTS:[0-5460] (5461 SLOTS) MASTER

1 ADDITIONAL REPLICA(S)

AFAA70D6528FC72490E0F3F7B32731A12C12C12BB8 192.168.150.101:7002

M:

SLOTS:[5461-10922] (5462 SLOTS) MASTER

1 ADDITIONAL REPLICA(S)

S: 1FA6D68D590827C24C237B1C490B78E5C7FE2CA9 192.168.150.101:8003

SLOTS: (0 SLOTS) SLAVE

REPLICATES F5FC58DEFBEBB957E47FBOD8327A09DC4F1678F5

S: 6EC60FB5AFD950A465F05C8024BF8F75D809B014 192.168.150.101:8002

SLOTS: (0 SLOTS) SLAVE

REPLICATES 1C00E5F9E158B169F199F15884AB43BC433BLA06

S: 7B6D5FFC9A985D614DC5AEB2EE3ABACLADFD3E22 192.168.150.101:8001

SLOTS: (0 SLOTS) SLAVE

LICATES AFAA70D6528FC72490E0F3F7B32731A12C12BB8

REPLICAT

M: 1C00E5F9E158B169F199F15884AB43BC433BLA06 192.168.150.101:7003

SLOTS:[10923-16383] (5461 SLOTS) MASTER

1

ADDITIONAL REPLICA(S)

UT SLOTS CONFIGURATION.

ABOUT

ALL

[OK]

NODES

AGREE

CHECK

FOR

VVV

SLOTS

OPEN

CHECK

SLOTS

VVV

COVERAGE

SLOTS

ALL

16384

[OK]

COVERED.


:0002

ON 6 NODES.

PERFORMING HASH SLOTS AL

TS ALLOCATION

MASTER[O]

5460

SLOTS

存储数据的HASH插槽

MASTER[1]

5461

SLOTS

10922

16383

MASTER[2]

SLOTS

10923

ADDING REPLICA 192,168.206.130:8002 1

192,168,206,130:7001

TO 1

ADDING REPLICA 197.168.206.130:8003

TO 192:168,206,130:7002

ADDING REPLICA 19

TO 192.168,206,130:7003

CA 192,168/206,130:8001

SLAYES ALLOCATION FOR ANTI-AFFINITY

TRYING TO OPTIMIZE

[WARNING]SOME SLAVES

AS THEIR MASTER

HOST A

AREINTHESAMEH

9FFA5F036ELF741927EEDFEE4ED68161C21E4905 192.192.168.206.130:7001

M:

主节点做插槽分配

SLOTS:[0-5460]/5461/SLOTS) MASTER

(0FE7431901FB715B8261899D08DBA501A5865DOD 192.168.206.130:7002

M:

SLOTS:[5461-10922]

(5462 SLOTS) MASTER

[1A8ABB2D724340DBCA5B8BD4BCFC99D968C6D469 192.168.206.130:7003

SLOTS:[10923-16383] (5461 SLOTS) MASTER

1446AC0C6357F5CCB24726DF6ELFA3F55LE8C47C5 192.168.206.130:8001

|REPLICATES 1A8ABB2D724340DBCA5B8BD4BCFC99D968C6D469

LA51E26ADODC783EBAB3296758840EB651143D171 192.168.206.130:8002

|REPLICATES 9FFA5F036ELF741927EEDFEE4ED68161C21E4905

3E46DAB76BD4F6D7E2526CAE495F9481A38DD137 192.168.206.130:8003

UREPLICATES OFE7431901FB715B8261899D08DBA501A5865DOD

CAN I SET THE ABOVE CONFIGURATION? (TYPE 'YES' TO ACCEPT):

通过命令可以查看集群状态(下面端口可以是集群中的任意端口都行):

0 7001 CLUSTER NODES

[ROOT@LOCALHOST TMP]# REDIS-CLI -P 700

F5FC58DEFBEBB957E47FB0D8327A09DC4F1678F5

192.168.150.101:7001E17001 MYSELF,MASTER - Q 162519145000 1 CONNECTED O-5460

192:105--50-101-101399337893   192519245 1  CON335555555553

1FA6D68D590827C24C237BLC490B78E5C7FE2CA9

7B6D5FFC9A985D614DC5AEB2EE3ABACLADFD3E22

192-168-150-101-101-3001A1261 STAVE AFA370D95528F5724999950F3J73532731A12658 0 192519145200 2 CCONECT

1C00E5F9E158B169F199F15884AB43BC433BLA06 192.168.150.101:7003E17003 MASTER

0 1625191452351 3 CONNECTED 10923-16383


其中的映射关系分析如下图

[ROOTQLOCALHOST TMP]# REDIS-CLI -P 7001 CLUSTER NODES

映射关系这样找

192.168.206.130:7001@17001 MYSELF,MASTER - 0 1680419357000 1 CONN

0001 CONNECTED 0-5460

9FFA5F036E1F741927EEDFEE4ED68161C21E4905 192

55 192, 198, 205, 130: 1301800L SLAVE LABA59353330DBCA558855855CT(995835836D+69 0 1560413358505 3 CO

46AC0C6357F5CCB24726DF6E1FA3F551E8C47C5

LABABB2D724340DBCA5B8BD4BCFC99D968C6D469 192.168.206.130:7003017003

3MASTER-01680419357000

10923-16383

CONNECTED

8002

109.

得到完整分片集群的架构端口映射关系

7001

7002

7003

8003

8001

呈图



4.5.测试
尝试连接7001节点,存储一个数据:

Shell

运行代码复制代码

1

2

3

4

5

6

7

8

# 连接

redis-cli -p 7001

# 存储数据

set num 123

# 读取数据

get num

# 再次存储

set a 1

结果悲剧了:

[ROOT@LOCALHOST TMP]# REDIS-CLI -P 70

7001

127.0.0.1:7001> SET NUM 123

OK

127.0.0.1:7001> GET NUM

"123"

127.0.0.1:7001> SET A 1

(ERROR)

MOVED

15495 192.168.150.101:7003

127.0.0.1:7001>


集群操作时,需要给redis-cli加上-c参数才可以:

Shell

运行代码复制代码

1

redis-cli -c -p 7001

这次可以了:

[ROOT@LOCALHOST TMP]

#[A

REDIS-CLI -C -P 7001

127.0.0.1:7001>

127.0.0.1:7001>

127.0.0.1:7001> GET NUM

"123

127.0.0.1:7001> SET A 1

REDIRECTED TO SLOT [15495] LOCATED AT 192.168.150.101:7003

OK

192.168.150.101:7003>

GET A

1"

192.168.150.101:7003>


相关文章
|
1天前
|
数据采集 人工智能 安全
|
10天前
|
云安全 监控 安全
|
2天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
910 150
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1645 8
|
6天前
|
人工智能 前端开发 文件存储
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择
星哥带你玩转飞牛NAS,部署开源笔记TriliumNext!支持树状知识库、多端同步、AI摘要与代码高亮,数据自主可控,打造个人“第二大脑”。高效玩家的新选择,轻松搭建专属知识管理体系。
365 152
|
7天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
603 152
|
9天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
566 13
|
2天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话