Redis Cluster集群搭建

释放双眼,带上耳机,听听看~!
Redis Cluster集群搭建

一、简介

Redis Cluster是一个高性能高可用的分布式系统。由多个Redis实例组成的整体,数据按照Slot存储分布在多个Redis实例上,通过Gossip协议来进行节点之间通信。

架构图

Redis Cluster集群搭建插图

在这个图中,每一个蓝色的圈都代表着一个redis的服务器节点。它们任何两个节点之间都是相互连通的。客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其进行存取和其他操作。

1.Redis集群核心的目标:

在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子。最核心的目标有三个:

(1)性能:这是Redis赖以生存的看家本领,增加集群功能后当然不能对性能产生太大影响,所以Redis采取了P2P而非Proxy方式、Master与slave之间使用异步复制(异步replication)、客户端重定向等设计,而牺牲了部分的一致性、使用性。

(2)水平扩展:集群的最重要能力当然是扩展,文档中称可以线性扩展到1000结点。

(3)可用性:在Cluster推出之前,可用性要靠Sentinel保证。有了集群之后也自动具有了Sentinel的监控和自动Failover能力。只要集群中大多数master可达、且失效的master至少有一个slave可达时,集群都可以继续提供服务;同时“replicas migration”可以将那些拥有多个slaves的master的某个slave,迁移到没有slave的master下,即将slaves分布在整个集群相对平衡,尽力确保每个master都有一定数量的slave备份。 (4)数据一致性:客户端容忍一定程度的数据丢失,集群尽可能保存Client write操作的数据,保证数据一致性。集群将会尽可能(best-effort)保存客户端write操作的数据;通常在failover期间,会有短暂时间内的数据丢失(因为异步replication引起);当客户端与少数派的节点处于网络分区时(network partition),丢失数据的可能性会更高。(因为节点有效性检测、failover需要更长的时间)

2.Redis Cluster功能特点如下:

(1)节点自动发现:所有的节点相互连接

(2)集群消息通信通过集群总线通信,集群总线端口大小为客户端服务端口+10000,这个10000是固定值 (3)节点与节点之间通过二进制协议进行通信

(4)客户端和集群节点之间通信和通常一样,通过文本协议进行

(5)集群节点不会代理查询

(6)数据按照Slot存储分布在多个Redis实例上

(7)集群节点挂掉会自动故障转移

(8)可以相对平滑扩/缩容节点

二、集群配置安装

集群实验环境: 三主三从

IP 端口 密码
192.168.2.2 7000 pass
192.168.2.2 7001 pass
192.168.2.3 7002 pass
192.168.2.3 7003 pass
192.168.2.4 7004 pass
192.168.2.4 7005 pass

安装编译redis

三台机器上执行安装:

cd /opt/
wget http://download.redis.io/releases/redis-5.0.9.tar.gz
tar -xf redis-5.0.9.tar.gz
cd redis-5.0.9
make MALLOC=jemalloc
make install PREFIX=/opt/redis
cd /opt/redis

对应三台机器分别建立配置文件

192.168.2.2

mkdir 7000
vim 7000/redis.conf
port 7000
bind 192.168.2.2
daemonize    yes
pidfile  /opt/redis/7000/redis.pid
cluster-enabled  yes
cluster-config-file  /opt/redis/7000/cluster.conf
cluster-node-timeout  15000
appendonly  yes
cluster-require-full-coverage no
logfile /opt/redis/7000/redis.log

mkdir 7001
vim 7001/redis.conf
port 7001
bind 192.168.2.2
daemonize    yes
pidfile  /opt/redis/7001/redis.pid
cluster-enabled  yes
cluster-config-file  /opt/redis/7001/cluster.conf
cluster-node-timeout  15000
appendonly  yes
cluster-require-full-coverage no
logfile /opt/redis/7001/redis.log

其余两台机器分别创建7002 7003 7004 7005 对应的配置文件

修改对应的端口,ip 目录等

配置解读:

集群配置文件路径:

cluster-config-file cluster.conf

这个配置文件不是要我们去配的,而是Redis运行时保存配置的文件,所以我们也不可以修改这个文件。Redis群集节点每次发生更改时自动保留群集配置(基本上为状态)的文件,以便能够在启动时重新读取它。 该文件列出了群集中其他节点,它们的状态,持久变量等等。 由于某些消息的接收,通常会将此文件重写并刷新到磁盘上。

集群超时时间:

cluster-node-timeout 15000 结点超时多久则认为它宕机了。如果主节点超过指定的时间不可达,它将由其从属设备进行故障切换。 此参数控制Redis群集中的其他重要事项。值得注意的是,每个无法在指定时间内到达大多数主节点的节点将停止接受查询。

槽是否全覆盖:

cluster-require-full-coverage no 默认是yes,只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no。 如果将其设置为yes,则默认情况下,如果key的空间的某个百分比未被任何节点覆盖,则集群停止接受写入。 如果该选项设置为no,则即使只处理关于keys子集的请求,群集仍将提供查询。

启动redis并组成集群

启动redis
/opt/redis/bin/redis-server /opt/redis/700x/redis.conf

三台机器分别启动6个redis服务,7000x x为对应的对口号

组成集群
redis-cli --cluster create 192.168.2.2:7000 192.168.2.2:7001 192.168.2.3:7002 192.168.2.3:7003 192.168.2.4:7004 192.168.2.4:7005 --cluster-replicas 1

提示输入yes,稍等后集群组成完毕

检查集群状态:

redis-cli -h 192.168.2.2 -p 7000  -c cluster slots | xargs  -n8 | awk '{print $3":"$4"->"$6":"$7}' | sort -nk2 -t ':'
输出结果:
192.168.2.2:7000->192.168.2.3:7003
192.168.2.3:7002->192.168.2.4:7005
192.168.2.4:7004->192.168.2.2:7001

至此redis-cluster集群已经搭建完毕

人已赞赏
技术杂烩

利用 ELK系统分析Nginx日志并对数据进行可视化展示

2020-9-27 15:12:16

技术杂烩

通过ELK系统监控Web攻击

2020-9-27 19:37:25

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索