redis-cluster配置

1、redis使用中遇到的瓶颈

  咱们平常在对于redis的使用中,常常会遇到一些问题node

  一、高可用问题,如何保证redis的持续高可用性。redis

  二、容量问题,单实例redis内存没法无限扩充,达到32G后就进入了64位世界,性能降低。数据库

  三、并发性能问题,redis号称单实例10万并发,但也是有尽头的。vim

2、redis-cluster的优点  

  一、官方推荐,毋庸置疑。ruby

  二、去中心化,集群最大可增长1000个节点,性能随节点增长而线性扩展。架构

  三、管理方便,后续可自行增长或摘除节点,移动分槽等等。并发

  四、简单,易上手。负载均衡

3、redis-cluster名词介绍

  一、master  主节点、分布式

  二、slave   从节点函数

  三、slot    槽,一共有16384数据分槽,分布在集群的全部主节点中。

4、redis-cluster简介

 

redis-cluster

 

 

图中描述的是六个redis实例构成的集群

6379端口为客户端通信端口

16379端口为集群总线端口

集群内部划分为16384(0-16383)个数据分槽,分布在三个主redis中。

从redis中没有分槽,不会参与集群投票,也不会帮忙加快读取数据,仅仅做为主机的备份。

三个主节点中平均分布着16384数据分槽的三分之一,每一个节点中不会存有有重复数据,仅仅有本身的从机帮忙冗余。

问题:在什么状况下考虑使用Redis Cluster

答:Redis ClusterRedis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,能够采用Cluster架构达到负载均衡的目的。

5、Redis数据分区

Redis Cluster采用虚拟槽分区,全部的键根据哈希函数映射到0 ~ 16383,计算公式:slot = CRC16(key)&16383。每个节点负责维护一部分槽以及槽所映射的键值数据。

下图展示一个五个节点构成的集群,每一个节点平均大约负责3276个槽,以及经过计算公式映射到对应节点的对应槽的过程。

 

 

Redis虚拟槽分区的特性:

解耦数据和节点之间的关系,简化了节点扩容和收缩难度。
节点自身维护槽的映射关系,不须要客户端或者代理服务维护槽分区元数据。
支持节点、槽、键之间的映射查询,用于数据路由、在线伸缩等场景。

6、搭建Redis Cluster

(一)准备6个redis数据库实例,准备6个配置文件redis-{7000....7005}配置文件

-rw-r--r-- 1 root root 151 Jan  2 19:26 redis-7000.conf -rw-r--r-- 1 root root 151 Jan  2 19:27 redis-7001.conf -rw-r--r-- 1 root root 151 Jan  2 19:27 redis-7002.conf -rw-r--r-- 1 root root 151 Jan  2 19:27 redis-7003.conf -rw-r--r-- 1 root root 151 Jan  2 19:27 redis-7004.conf -rw-r--r-- 1 root root 151 Jan  2 19:27 redis-7005.conf

redis-7000.conf配置以下

port 7000 daemonize yes dir "/opt/redis/data" logfile "7000.log" dbfilename "dump-7000.rdb" cluster-enabled yes   #开启集群模式
cluster-config-file nodes-7000.conf  #集群内部的配置文件
cluster-require-full-coverage no  #redis cluster须要16384个slot都正常的时候才能对外提供服务,换句话说,只要任何一个slot异常那么整个cluster不对外提供服务。 所以生产环境通常为no

redis支持多实例的功能,咱们在单机演示集群搭建,须要6个实例,三个是主节点,三个是从节点,数量为6个节点才能保证高可用的集群。

每一个节点仅仅是端口运行的不一样!

[root@yugo /opt/redis/config 17:12:30]#ls
redis-7000.conf  redis-7002.conf  redis-7004.conf
redis-7001.conf  redis-7003.conf  redis-7005.conf

#确保每一个配置文件中的端口修改!!

(二)启动6个数据库实例

[root@localhost s15rediscluster]# redis-server redis-7000.conf 
[root@localhost s15rediscluster]# redis-server redis-7001.conf 
[root@localhost s15rediscluster]# redis-server redis-7002.conf 
[root@localhost s15rediscluster]# redis-server redis-7003.conf 
[root@localhost s15rediscluster]# redis-server redis-7004.conf 
[root@localhost s15rediscluster]# redis-server redis-7005.conf 

检查日志文件

cat 7000.log

检查redis服务的端口、进程

netstat -tunlp|grep redis


ps -ef|grep redis

此时集群还不可用,能够经过登陆redis查看

redis-cli -p 7000
set hello world

(error)CLUSTERDOWN The cluster is down

(三)配置ruby语言环境,脚本一键启动redis-cluster 

一、下载ruby语言的源码包,编译安装

wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz

二、解压缩

tar -xvf ruby-2.3.1.tar.gz cd ruby-2.3.1 ./configure --prefix=/opt/ruby/ make && make install

三、配置ruby的环境变量

echo $PATH vim /etc/profile #写入最底行
PATH=$PATH:/opt/ruby/bin/
#读取文件
source /etc/profile

四、下载安装ruby操做redis的模块包

wget http://rubygems.org/downloads/redis-3.3.0.gem gem install -l redis-3.3.0.gem #查看gem有哪些包
gem list -- check redis gem

五、安装redis-trib.rb命令

cp /opt/redis/src/redis-trib.rb /usr/local/bin/

六、一键开启redis-cluster集群

redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

#集群自动分配主从关系 7000、700一、7002为 700三、700四、7005 主动关系

七、查看集群状态

redis-cli -p 7000 cluster info redis-cli -p 7000 cluster nodes  #等同于查看nodes-7000.conf文件节点信息
 集群主节点状态 redis-cli -p 7000 cluster nodes | grep master 集群从节点状态 redis-cli -p 7000 cluster nodes | grep slave

安装完毕后,检查集群状态

[root@yugo /opt/redis/src 18:42:14]#redis-cli -p 7000 cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:10468
cluster_stats_messages_pong_sent:10558
cluster_stats_messages_sent:21026
cluster_stats_messages_ping_received:10553
cluster_stats_messages_pong_received:10468
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:21026

八、测试写入集群数据,登陆集群必须使用redis-cli -c -p 7000必须加上-c参数

127.0.0.1:7000> set name chao     
-> Redirected to slot [5798] located at 127.0.0.1:7001       
OK
127.0.0.1:7001> exit
[root@yugo /opt/redis/src 18:46:07]#redis-cli -c -p 7000
127.0.0.1:7000> ping
PONG
127.0.0.1:7000> keys *
(empty list or set)
127.0.0.1:7000> get name
-> Redirected to slot [5798] located at 127.0.0.1:7001
"chao"

集群ok

相关文章
相关标签/搜索