ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis5.X集群部署及使用

2021-02-07 18:34:52  阅读:289  来源: 互联网

标签:cluster redis5 redis 192.168 30.130 部署 集群 master 节点


redis5.X集群部署及使用

Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:

基于内存运行,性能高效
支持分布式,理论上可以无限扩展
key-value存储系统
开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

1.介绍

Redis Cluster是Redis官方在Redis 3.0版本正式推出的高可用以及分布式的解决方案。目前redis最新版本已是5.0.x,本文以redis5.0.5版本为例来搭建redis cluster。

官网Cluster介绍 https://redis.io/topics/cluster-tutorial

官网参考文档 https://redis.io/documentation

1.1 cluster架构

redis-cluster架构:

Redis Cluster由多个Redis实例组成的整体,数据按照槽(slot)存储分布在多个Redis实例上,通过Gossip协议来进行节点之间通信。

架构细节:

所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

节点的fail是通过集群中超过半数的节点检测失效时才生效.

客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

redis-cluster选举:

(1)选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉。

(2)什么时候整个集群不可用(cluster_state:fail)? 当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误。

a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态。

b:如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态。

2. 机器规划

角色 版本 IP port 系统
node-1 redis-5.0.5 192.168.30.128 7000,7001 centos7.6
node-2 redis-5.0.5 192.168.30.129 7002,7003 centos7.6
node-3 redis-5.0.5 192.168.30.130 7004,7005 centos7.6

3、部署安装

下载地址: http://download.redis.io/releases/

$cd /home && wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$tar -zxvf redis-5.0.5.tar.gz
$cd redis-5.0.5
#编译安装
$make
$make install
$cd /home && mkdir cluster-test
$cd cluster-test && mkdir 7000 7001 7002 7003 7004 7005
#拷贝redis.conf到6个不同文件7000-7005中
$cp -rf /home/redis-5.0.5/redis.conf /home/cluster-test/7000/
#编辑6个不同文件7000-7005
vim 7000/redis.conf
#监听ip,多个ip用空格分隔
bind 192.168.30.128
#监听端口                                                                      
port 7000
#如旧版本创建集群有问题需要修改关闭保护模式                                                                               
protected-mode no
#允许后台启动                                                                
daemonize yes
#当redis以守护模式启动时edis instance会将进程号pid写入默认文件/var/run/redis.pid可以修改                                                                       
pidfile /var/run/redis_7000.pid
#日志路径                                           
logfile /home/S2B/redis/cluster-test/7000/redis.log
#数据库备份文件存放目录           
dir /home/S2B/redis/redis-cluster/7000/
#slave连接master密码,master可省略  旧版如创建集群有问题需注释掉                               
masterauth 123456
#设置master连接密码,slave可省略      旧版如创建集群有问题需注释掉                                                                
requirepass 123456
#开实列集群模式                                                                
cluster-enabled yes
#保存节点配置文件的路径                                                                
cluster-config-file /home/S2B/redis/cluster-test/7000/nodes-7000.conf
#超时时间                                                
cluster-node-timeout 5000
#在dir指定目录生成appendonly.aof文件,将每一次写操作请求都追加到appendonly.aof 文件中                                                    
appendonly yes

#编译出可执行文件 redis-server , 并将文件复制到 cluster-test 文件夹
$cd /home/redis-5.0.5/src && cp redis-server /home/cluster-test/
$cd /home/cluster-test
#启动服务6个 7000-7005
$./redis-server /home/cluster-test/7000/redis.conf
。。。。。。。。。。

4.创建集群:

./redis-cli --cluster create 192.168.30.128:7000 192.168.30.128:7001 192.168.30.129:7002 192.168.30.129:7003 192.168.30.130:7004 192.168.30.130:7005 --cluster-replicas 1

可以看到:

192.168.30.128:7000是master,它的slave是192.168.30.129:7003;

192.168.30.129:7002是master,它的slave是192.168.30.130:7005;

192.168.30.130:7004是master,它的slave是192.168.30.128:7001;

5.登录集群:

#-c,使用集群方式登录	
redis-cli -c -h 192.168.30.128 -p 7001 -a 123456   

6.查看集群信息:

192.168.30.128:7001> CLUSTER INFO 

7.列出节点信息:

192.168.30.128:7001> CLUSTER NODES

8.写入数据:

192.168.30.128:7001> set key111 aaa
-> Redirected to slot [13680] located at 192.168.30.130:7005                
OK

192.168.30.130:7005> set key222 bbb
-> Redirected to slot [2320] located at 192.168.30.128:7001                
OK

192.168.30.128:7001> set key333 ccc
-> Redirected to slot [7472] located at 192.168.30.129:7003                 
OK

192.168.30.129:7003> get key111
-> Redirected to slot [13680] located at 192.168.30.130:7005
"aaa"

192.168.30.130:7005> get key333
-> Redirected to slot [7472] located at 192.168.30.129:7003
"ccc"

可以看出redis cluster集群是去中心化的,每个节点都是平等的,连接哪个节点都可以获取和设置数据。

当然,平等指的是master节点,因为slave节点根本不提供服务,只是作为对应master节点的一个备份

9.增加节点:

192.168.30.129上增加一节点

192.168.30.130上增加一节点

请参考第三步部署

10.集群中增加节点:

192.168.30.129:7003> CLUSTER MEET 192.168.30.129 7007

192.168.30.129:7003> CLUSTER MEET 192.168.30.130 7008

192.168.30.129:7003> CLUSTER NODES

可以看到,新增的节点都是以master身份加入集群的

11.更换节点身份:

将新增的192.168.30.130:7008节点身份改为192.168.30.129:7007的slave

redis-cli -c -h 192.168.30.130 -p 7008 -a 123456 cluster replicate e51ab166bc0f33026887bcf8eba0dff3d5b0bf14

cluster replicate后面跟node_id,更改对应节点身份。也可以登入集群更改

redis-cli -c -h 192.168.30.130 -p 7008 -a 123456

192.168.30.130:7008> CLUSTER REPLICATE e51ab166bc0f33026887bcf8eba0dff3d5b0bf14
OK

192.168.30.130:7008> CLUSTER NODES

查看相应的nodes.conf文件,可以发现有更改,它记录当前集群的节点信息
cat /data/redis/cluster/redis_7001/nodes-7001.conf

12.删除节点:

192.168.30.130:7008> CLUSTER FORGET 1a1c7f02fce87530bd5abdfc98df1cffce4f1767
(error) ERR I tried hard but I can't forget myself...           #无法删除登录节点

192.168.30.130:7008> CLUSTER FORGET e51ab166bc0f33026887bcf8eba0dff3d5b0bf14
(error) ERR Can't forget my master!                 #不能删除自己的master节点

192.168.30.130:7008> CLUSTER FORGET 6788453ee9a8d7f72b1d45a9093838efd0e501f1
OK              #可以删除其它的master节点

192.168.30.130:7008> CLUSTER NODES

192.168.30.130:7008> CLUSTER FORGET b4d3eb411a7355d4767c6c23b4df69fa183ef8bc
OK              #可以删除其它的slave节点

13.保存配置:

192.168.30.130:7008> CLUSTER SAVECONFIG                 #将节点配置信息保存到硬盘
OK

可以看到,之前删除的节点又恢复了,这是因为对应的配置文件没有删除,执行CLUSTER SAVECONFIG恢复。

14.模拟master节点挂掉:

192.168.30.128节点:
netstat -lntp |grep 7001
kill -9 id
192.168.30.130:7008> CLUSTER NODES

对应7001的一行可以看到,master fail,状态为disconnected;而对应7004的一行,slave已经变成master

重新启动7001节点:
redis-server /usr/local/redis/cluster/redis_7001.conf

192.168.30.130:7008> CLUSTER NODES

可以看到,7001节点启动后为slave节点,并且是7004的slave节点。即master节点如果挂掉,它的slave节点变为新master节点继续对外提供服务,而原来的master节点如果重启,则变为新master节点的slave节点

另外,如果这里是拿7007节点做测试的话,会发现7008节点并不会切换,这是因为7007节点上根本没数据。集群数据被分为三份,采用哈希槽 (hash slot)的方式来分配16384个slot的话,它们三个节点分别承担的slot 区间是:

节点7004覆盖0-5460

节点7003覆盖5461-10922

节点7005覆盖10923-16384

标签:cluster,redis5,redis,192.168,30.130,部署,集群,master,节点
来源: https://www.cnblogs.com/zmh520/p/14386288.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有