一、下载、安装过程略
1,创建下载目录,下载安装
mkdir -p /usr/local/redis
cd /usr/local/redis
wget http://download.redis.io/releases/redis-stable.tar.gz #下载redis
tar xvzf redis-stable.tar.gz
cd redis-stable
make
make install
1.安装Redis
(1).安装redist需要安装支持包,yum install gcc-c++
(2).redis安装包采取的是在线wget下载.若wget命令不存在,执行 yum -y install wget安装
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
(3).解压在当前目录(我的是家目录)
[root@admin ~]# tar -zxvf redis-5.0.7.tar.gz
(4).编译并安装 (redis安装程序是c语言编写,需要编译转换后才能安装)
[root@admin redis-5.0.7]# make && make PREFIX=/usr/local/redis install
--->1).&&连接两个命令,前面命令的返回值决定是否执行后面的命令
--->2).PREFIX(注意:大写)指定安装目录,若目录不存在,则自动创建
(5).复制配置文件并修改
复制安装包下 redis.conf 到 目录/usr/local/redis下
vim redis.conf
修改: bind 127.0.0.1 ---->bind 自己ip
daemonize no no---->yes
protected-mode yes yes---->no
二、Redis Cluster(Redis集群)简介
redis是一个开源的key value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis5.0.7版本 ;
redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点;
redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例;
为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有这么一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法;
那么如何判断集群是否挂了呢? -> 如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么这个集群就挂了。这是判断集群是否挂了的方法;
那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢? -> 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。
综上所述,每个Redis集群理论上最多可以有16384个节点。
二、集群搭建需要的环境
master:负责读写
slave:master正常运行则不能读取到数据,master挂了之后,角色更改为master
2.1 Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
2.2 要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。因为我没有那么多服务器,也启动不了那么多虚拟机,所在这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的。
2.3 安装ruby(集群的脚本需要用到,高版本redis 采用redis-cli 配置集群 不需要ruby 的脚本方式)
三、集群搭建具体步骤如下(注意要关闭防火墙)
3.1 在usr/local目录下新建redis-cluster目录,用于存放集群节点
3.2 把redis目录下的bin目录下的所有文件复制到/usr/local/redis-cluster/redis01目录下,不用担心这里没有redis01目录,会自动创建的。操作命令如下(注意当前所在路径):
cp -r redis/bin/ redis-cluster/redis01
3.3 删除redis01目录下的快照文件dump.rdb,并且修改该目录下的redis.conf文件,具体修改两处地方:一是端口号修改为7001,二是开启集群创建模式,打开注释即可。分别如下图所示:
删除dump.rdb文件
修改端口号为7001,默认是6379
将cluster-enabled yes 的注释打开,增加cluster-config-file 日志文件输出
3.4 将redis-cluster/redis01文件复制5份到redis-cluster目录下(redis02-redis06),创建6个redis实例,模拟Redis集群的6个节点。然后将其余5个文件下的redis.conf里面的端口号分别修改为7002-7006。分别如下图所示:
创建redis02-06目录
分别修改redis.conf文件端口号为7002-7006
分别修改cluster-config-file nodes-7002.conf 至 nodes-7006.conf
最小修改如下:
port 7002
bind xxx.xxx.xxx.xxx
dir /var/redis/7002
cluster-enabled yes
cluster-config-file nodes-7002.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
protected-mode no
pidfile /var/run/redis_7002.pid
3.5 接着启动所有redis节点,由于一个一个启动太麻烦了,所以在这里创建一个批量启动redis节点的脚本文件,命令为start-allRedis.sh,文件内容如下:
3.6 创建好启动脚本文件之后,需要修改该脚本的权限,使之能够执行,指令如下:
chmod +x start-allRedis.sh
3.7 执行start-allRedis.sh脚本,启动6个redis节点。
检测redis 进程
ps -ef|grep redis
删除redis进程
kill -9 redisPid1 redisPid2 ...
3.8 ok,至此6个redis节点启动成功,接下来正式开启搭建集群,以上都是准备条件。大家不要觉得图片多看起来冗长所以觉得麻烦,其实以上步骤也就一句话的事情:创建6个redis实例(6个节点)并启动。
要搭建集群的话,需要使用一个工具(脚本文件),这个工具在redis解压文件的源代码里。因为这个工具是一个ruby脚本文件,所以这个工具的运行需要ruby的运行环境,就相当于java语言的运行需要在jvm上。所以需要安装ruby,指令如下:
安装ruby 过程简略
yum install ruby
3.9 上一步中已经把ruby工具所需要的运行环境和ruby包安装好了,接下来需要把这个ruby脚本工具复制到usr/local/redis-cluster目录下。那么这个ruby脚本工具在哪里呢?之前提到过,在redis解压文件的源代码里,即redis/src目录下的redis-trib.rb文件。
3.10 将该ruby工具(redis-trib.rb)复制到redis-cluster目录下,指令如下:
cp redis-trib.rb /usr/local/redis-cluster
然后使用该脚本文件搭建集群,指令如下:
./redis-trib.rb create --replicas 1 47.106.219.251:7001 47.106.219.251:7002 47.106.219.251:7003 47.106.219.251:7004 47.106.219.251:7005 47.106.219.251:7006
注意:此处大家应该根据自己的服务器ip输入对应的ip地址!
中途有个地方需要手动输入yes即可.
3.10.1 使用redis-cli搭建redis5.x集群
高版本的redis 不用redis-trib.rb方式,而是直接通过 redis-cli --cluster create ip:port --cluster-replicas 1 方式创建集群环境
至此,Redi集群搭建成功!大家注意最后一段文字,显示了每个节点所分配的slots(哈希槽),这里总共6个节点,其中3个是从节点,所以3个主节点分别映射了0-5460、5461-10922、10933-16383 solts。
3.11 最后连接集群节点,连接任意一个即可:
注意:一定要加上-c,不然节点之间是无法自动跳转的!如下图可以看到,存储的数据(key-value)是均匀分配到不同的节点的:
最后,加上两条redis集群基本命令:
1.查看当前集群信息
cluster info
2.查看集群里有多少个节点
cluster nodes
3.(删除原有集群)并重启:
第一步:先关闭各个Redis节点。
第二步:删除各个Redis安装目录下的节点配置文件nodes.conf、数据文件dump.rdb。
说明:此方式相当于重置到刚刚创建集群的时候了,所以需要删除节点配置文件nodes.conf、还需
要删除数据存储文件dump.rdb。
相关指令:
# 删除节点配置文件
rm nodes-700X.conf dump.rdb
注:节点配置文件nodes-700X.conf、数据文件dump.rdb等可以在redis.conf文件中指定的。承接上文,配置的cluster-config-file
第三步:再启动各个Redis节点。
创建两个.sh 文件直接执行脚本即可,内容如截屏
执行
第四步:(在集群中的任意一个节点)执行集群搭建指令。