Redis学习第四课 --集群-3主3从的6个节点服务

本文详细介绍了在Centos7环境下,使用三台服务器搭建Redis集群的过程,包括虚拟机环境配置、Redis安装、集群配置与测试步骤。同时,解决了在集群创建过程中遇到的常见错误,如Ruby版本与依赖库安装、防火墙设置、节点连接验证等问题。

1、虚拟机环境

使用的Linux环境已经版本:

Centos 7   64位系统

 

主机ip:

192.168.56.180

192.168.56.181

192.168.56.182

每台服务器是1主1从,实验3台服务器课成为3主3从。

Redis安装的项目目录、日志、配置文件等都存放在/root/svr/目录下。

2、下载相关的安装包以及解压

首先在192.168.56.180机器操作:

1

2

3

cd /root/svr

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

tar -zxvf redis-3.2.9.tar.gz

 3、安装

在/root/svr/redis-3.2.9/目录下执行:

1

make install PREFIX=/root/svr/redis-3.2.9

 4、配置信息

创建集群配置、log日志、数据所在的文件夹:

1

2

cd /root/svr/redis-3.2.9/

mkdir cluster-conf

 创建集群端口文件夹:

1

2

3

cd cluster-conf

mkdir 7777

mkdir 8888

 复制配置文件到/root/svr/redis-3.2.9/cluster-conf/7777目录下:

1

cp /root/svr/redis-3.2.9/redis.conf  /root/svr/redis-3.2.9/cluster-conf/7777

修改7777目录下redis.conf配置文件:

(注意:找到相应的信息修改,或者把修改的信息全部注释掉,重新添加下面信息到头部,有利于以后修改和查看)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

#注释掉ip或者设置0.0.0.0都是局域网访问

#bind 127.0.0.1

#端口号

port 7777

 

#指定了记录日志的文件

logfile "/root/svr/redis-3.2.9/cluster-conf/7777/redis.log"

 

#该目录要事先创建好,数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录

dir /root/svr/redis-3.2.9/cluster-conf/7777/

 

#是否开启集群

cluster-enabled yes

 

#集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息,

#这个文件并不需要手动配置,这个配置文件有Redis生成并更新,

#每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突。

cluster-config-file nodes.conf

 

#节点互连超时的阀值。集群节点超时毫秒数

cluster-node-timeout 5000

 

#默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了,

#但是redis如果中途宕机,会导致可能有几分钟的数据丢失,

#根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性,

#Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,

#每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。

appendonly yes

 复制7777目录下redis.conf至8888并修改端口及存储路径:

1

cp /root/svr/redis-3.2.9/cluster-conf/7777/redis.conf /root/svr/redis-3.2.9/cluster-conf/8888

 5、使用scp复制安装和配置好的redis复制到其他服务器上

已经在192.168.56.180机器配置好,复制到181和182机器

在两台新机器上创建文件夹

1

mkdir /root/svr

 复制:

1

2

scp -r /root/svr/redis-3.2.9 root@192.168.56.181:/root/svr/

#输入181机器密码即可传输数据。

1

2

scp -r /root/svr/redis-3.2.9 root@192.168.56.182:/root/svr/

#输入182机器密码即可传输数据。

 6、启动3台机器的redis

3台机器执行启动方式:

1

2

/root/svr/redis-3.2.9/bin/redis-server /root/svr/redis-3.2.9/cluster-conf/7777/redis.conf &

/root/svr/redis-3.2.9/bin/redis-server /root/svr/redis-3.2.9/cluster-conf/8888/redis.conf &

 查看状态是否:

1

ps -ef|grep redis

 

7、创建集群

1

/root/svr/redis-3.2.9/src/redis-trib.rb create --replicas 1 192.168.56.180:7777 192.168.56.180:8888 192.168.56.181:7777 192.168.56.181:8888 192.168.56.182:7777 192.168.56.182:8888

无法创建,提示错误信息:

提示错误,是没有安装ruby这个插件,因为redis

集群创建的程序文件redis-trib,rb是由ruby来编写的,需要安装:

1

yum install ruby

 安装ruby完毕接着执行上面的创建集群命令

报错。这时候需要安装一些和ruby与reids相关程序包和类库

1

2

yum install rubygems

gem install reids

 

报错,提示ruby版本需要大于2.2.2版本。CentOS7 yum库中ruby的版本支持到 2.0.0,可gem 安装redis需要最低是2.2.2

需要安装个高版本的ruby

1

2

3

4

5

6

#安装curl

yum install curl

#安装rvm

#gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3

#curl -L get.rvm.io | bash -s stable

#source /usr/local/rvm/scripts/rvm

 

查看rvm库中已知的ruby版本

1

rvm list known

 

安装一个ruby版本

1

rvm install 2.4.0

 

使用一个ruby版本

1

rvm use  2.4.0

 卸载一个已知版本

1

rvm remove 2.0.0

 查看现在版本

1

ruby --version

 

在重新安装ruby相关的redis就可以了

1

gem install redis

 

更新ruby版本、移除旧版本、重新安装reids完毕。接着执行上面的创建集群命令。

还是出现错误:提示连接不上节点:

这时候需要排查一下错误:

第一:服务器是否关闭防火墙

1

2

systemctl status firewalld.service  #查看防火墙

systemctl stop firewlld.service    #关闭防火墙

 

(我这边已经关闭)

第二:是否所有的节点都启动

1

ps -ef|grep redis

 

(我这边都已经启动并且正常运行)

第三:服务器之间是否ping通

ping 192.168.56.180

ping 192.168.56.181

ping 192.168.56.182

(我这边都能正常ping通过)

第四:是否可以telnet ip port  连接上

1

2

yum install telnet

telbet 192.168.56.180 7777

 出现错误:提示redis是受保护的,需要身份验证才可以进行:

这个问题解决可以有两种方法解决:

(1)修改配置文件redis.conf的权限参数设置为no,就是不需要权限验证

1

protected-mode no

 

(2)修改配置文件redis.conf的权限设置安全密码(密码自定义设置)

1

requirepass “111111”   #权限密码

 

我这里是第一解决方法,不需要权限,先kill启动的6个redis进程,在修改配置文件。在启动reidis服务。

接着执行上面的创建集群命令。

创建集群启动成功。

 

8、测试redis集群

1

2

#登录客户端

./redis-cli -c -p 7777(或者8888)   #-c 参数:表示使用集群模式连接

在192.168.56.181:7777服务set值

 

在192.168.56.182:8888服务上get

 9、数据解析

完整搭建起来,管理的集群以及主从关联都在nodes.conf文件中生成的,我这边集群节点的生成配置文件数据显示

1

2

3

4

5

6

7

8

9

10

主/从                   节点id                       ip     prot   slot槽范围     槽数量     m/s   主从等比例  附近信息(如果是主节点记录为复制功能,如果是从节点,关联相应的主节点id)

 

M: 3f0d98eebfa18364a95ce7a578865ba7a3ef4493 192.168.56.180:7777 slots:0-5460 (5461 slots) master 1 additional replica(s)

S: 54a525c670ad92a45dccfa92164c0a5f220a10bc 192.168.56.180:8888 slots: (0 slots) slave replicates 078973835bb8a36aeef272c2e243a9d9d733ea96

 

M: 078973835bb8a36aeef272c2e243a9d9d733ea96 192.168.56.181:7777 slots:5461-10922 (5462 slots) master 1 additional replica(s)

S: 4e13f9dca80c63079e536b17eaa81cef8fcba624 192.168.56.182:8888 slots: (0 slots) slave replicates 3c0fa46c14e6d25c7e7b01079162baec86bd88e9

 

M: 3c0fa46c14e6d25c7e7b01079162baec86bd88e9 192.168.56.182:7777 slots:10923-16383 (5461 slots) master 1 additional replica(s)

S: d507f34a7dab6dc512a82427e3731967f5a69101 192.168.56.181:8888 slots: (0 slots) slave replicates 3f0d98eebfa18364a95ce7a578865ba7a3ef4493

 

 当节点挂了,nodes.conf会记录新的数据

当主节点挂了,因为集群会一直在监听集群中的主从节点的状态。加入一个主节点挂了,集群监听机制检查到,会对主节点的槽(数据)进行迁移,按照投票机制将主节点关联的从节点进行选举出一个充当主节点,因为我这里一个主节点关联一个从节点,所以只能是那个充当。

10、扩展知识

(1)持久层的配置和原理:rdb和aof

(2)哨兵、数据字段迁移、键空间迁移、在线迁移、redis-trib.rb的详解

(3)集群节点添加,删除

(4)Jedis客户端对集群的数据操作:set、list、key/value、hash等

(5)将key值执行CRC16算法对18384个槽进行取模

(6)压测.........

<think>我们讨论的是Redis Cluster集群模式,三主三从,每个节点部署在独立服务器上。 要指定从关系,需要在启动集群时通过redis-cli --cluster create命令创建集群,并在节点列表中以特定顺序排列:先列出所有节点,再列出每个节点对应的从节点。 但注意:Redis Cluster在创建集群时,会自动分配从关系。如果我们想手动指定,需要在创建集群时明确指定哪些节点是从节点,并指定它们的节点。 步骤: 1. 启动六个Redis节点三主三从),确保每个节点的配置文件已正确配置集群模式。 2. 使用redis-cli --cluster create命令创建集群,并在节点列表中按以下顺序排列:前三个是节点,后三个是从节点,并且后三个节点分别作为前三个节点的从节点。 具体命令格式: redis-cli --cluster create <node1_ip:port> <node2_ip:port> <node3_ip:port> <node4_ip:port> <node5_ip:port> <node6_ip:port> --cluster-replicas 1 但是,这样创建集群时,集群会自动将前三个节点作为节点,然后后三个节点分别作为前三个节点的从节点(即第4个节点是第1个节点的从节点,第5个是第2个的,第6个是第3个的)。 如果我们想指定特定的从节点跟随特定的节点,则不能使用上述自动分配,而需要手动执行以下步骤: 方法一(推荐): 1. 先创建所有节点(三个节点redis-cli --cluster create <master1> <master2> <master3> --cluster-yes 2. 然后逐个添加从节点,并指定节点ID redis-cli --cluster add-node <slave1> <cluster_any_node> --cluster-slave --cluster-master-id <master1_nodeid> redis-cli --cluster add-node <slave2> <cluster_any_node> --cluster-slave --cluster-master-id <master2_nodeid> redis-cli --cluster add-node <slave3> <cluster_any_node> --cluster-slave --cluster-master-id <master3_nodeid> 方法二(创建集群时指定): 在创建集群命令中,按照---从...的顺序排列节点,但这样实际上并不是指定从关系,而是让集群自动分配,且分配规则是:前N个是节点,后面的每个从节点按顺序对应前N个节点(N=节点数量)。所以,如果我们想要指定,可以这样排列节点节点1,节点2,节点3,从节点1(希望跟随节点1),从节点2(希望跟随节点2),从节点3(希望跟随节点3) 然后执行: redis-cli --cluster create <master1> <master2> <master3> <slave1> <slave2> <slave3> --cluster-replicas 1 这样,从节点1就会成为节点1的从节点,从节点2成为节点2的从节点,从节点3成为节点3的从节点。 因此,通过节点在命令中的排列顺序,我们可以间接指定从关系。 注意:在创建集群时,使用--cluster-replicas 1表示每个节点有一个从节点。所以,节点列表的前三个为节点,后三个为从节点,且顺序对应。 详细步骤: 1. 准备六个节点的配置文件,每个配置文件需要开启集群模式,并确保端口和地址正确。 2. 启动六个Redis实例。 3. 执行集群创建命令(假设我们想要指定从对应关系为:slave1跟随master1,slave2跟随master2,slave3跟随master3): redis-cli --cluster create \ master1_ip:port \ master2_ip:port \ master3_ip:port \ slave1_ip:port \ slave2_ip:port \ slave3_ip:port \ --cluster-replicas 1 4. 执行命令后,集群会自动分配槽位给三个节点,并将后三个节点分别设置为前三个节点的从节点。 验证: 使用命令:redis-cli -c -h any_node_ip -p any_node_port cluster nodes 查看每个节点后面是否跟着对应的从节点(同一个节点的从节点会显示相同的slot分配范围,且从节点的记录中会有“slave”字样,并标明其节点的ID)。 如果创建后从关系不符合预期,可以手动调整: 1. 将某个从节点集群中移除:redis-cli --cluster del-node <node_ip:port> <node_id> 2. 然后重新添加为指定节点的从节点redis-cli --cluster add-node <new_slave_ip:port> <any_cluster_node_ip:port> --cluster-slave --cluster-master-id <master_id> 但建议在创建时通过节点顺序指定,避免后续调整。 注意:每个节点必须使用相同的集群配置,如cluster-enabled yes,cluster-config-file nodes.conf等。 下面给出一个示例配置片段(每个节点需要独立配置,如端口、绑定地址等): ``` port 7000 bind 0.0.0.0 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes daemonize yes ``` 创建集群命令示例(假设六个节点分别在6服务器,端口均为7000): ``` redis-cli --cluster create \ 192.168.1.101:7000 \ 192.168.1.102:7000 \ 192.168.1.103:7000 \ 192.168.1.104:7000 \ 192.168.1.105:7000 \ 192.168.1.106:7000 \ --cluster-replicas 1 ``` 执行过程中,会提示槽位分配方案,输入yes接受。 这样,192.168.1.101、102、103成为节点,104是101的从节点,105是102的从节点,106是103的从节点。 如果希望104是102的从节点,那么只需要在命令中把104和105的位置交换一下即可。 因此,通过调整节点在命令中的顺序,可以指定从关系。 结论:在创建集群时,通过控制节点在命令列表中的顺序,可以间接指定每个从节点节点。前N个节点节点,后N个节点为从节点,且第i个从节点(即第N+i个节点)对应第i个节点(i从0开始)。 所以,要指定从关系,只需将节点放在命令中的前三个位置,然后紧接着放置其对应的从节点(即第一个节点的从节点放在第四个,第二个节点的从节点放在第五个,第三个节点的从节点放在第六个)。 这样,我们就可以在创建集群时指定从关系。</think>### Redis集群三主三从架构的从关系指定指南 在Redis集群中,每个节点独立部署在不同服务器时,可通过以下方式指定从关系: #### 核心配置步骤 1. **创建集群时指定从关系** ```bash redis-cli --cluster create \ 192.168.1.101:6379 \ # 节点1 192.168.1.102:6379 \ # 节点2 192.168.1.103:6379 \ # 节点3 192.168.1.104:6379 \ # 从节点1(将绑定节点1) 192.168.1.105:6379 \ # 从节点2(将绑定节点2) 192.168.1.106:6379 \ # 从节点3(将绑定节点3--cluster-replicas 1 # 每个节点配1个从节点 ``` 2. **手动调整从关系(创建后修改)** ```bash # 将104节点设为101的从节点 redis-cli -h 192.168.1.104 -p 6379 CLUSTER REPLICATE <节点101的ID> # 查看节点ID redis-cli -h 192.168.1.101 -p 6379 CLUSTER MYID ``` #### 配置验证方法 ```mermaid graph LR A[节点101] --> B[从节点104] C[节点102] --> D[从节点105] E[节点103] --> F[从节点106] ``` 验证命令: ```bash # 查看集群节点关系 redis-cli --cluster check 192.168.1.101:6379 # 输出示例 192.168.1.101:6379 () slots:0-5460 192.168.1.104:6379 (从) replicates 3ea2... (节点101的ID) ``` #### 关键配置文件 在每个节点的`redis.conf`中确保: ```ini cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 5000 ``` #### 注意事项 1. **节点顺序规则**:创建命令中前N个节点节点(N=总节点数/(replicas+1)),后续节点自动成为从节点 2. **从绑定规则**: - 第1个从节点绑定第1个节点 - 第2个从节点绑定第2个节点 - 依此类推 3. **故障转移**:当节点宕机时,其从节点会自动升级为节点 > **最佳实践**:使用`--cluster-replicas`参数创建集群是最可靠的方式,避免手动配置错误。若需调整,应在集群空闲期操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值