Redis集群搭建,伪分布式集群,即一台服务器6个redis节点
一、Redis Cluster(Redis集群)简介
- redis是一个开源的key
value存储系统,受到了广大互联网公司的青睐。redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis3.0.0版本; - 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个节点。
集群搭建需要的环境
- Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
- 要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。
- 搭建伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006)。
- 安装ruby。
二、搭建集群
2.1Redis的安装
首先,在目录/usr/local/下创建个文件夹:software用来存放软件。
cd /usr/locacl/
mkdir software
关闭防火墙,安装c++编译环境:
yum install -y gcc
systemctl stop firewalld.service
systemctl disable firewalld.service
进入到/usr/local/software目录下,下载Redis,并进行解压
cd /usr/local/software
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar zxvf redis-5.0.5.tar.gz
mv redis-5.0.5 redis
cd redis
解压后目录如下:
然后进入到redis安装目录,进行安装:
make && make install
若安装时出现错误:
Allocator
---------
Selecting a non-default memory allocator when building Redis is done by setting
the `MALLOC` environment variable. Redis is compiled and linked against libc
malloc by default, with the exception of jemalloc being the default on Linux
systems. This default was picked because jemalloc has proven to have fewer
fragmentation problems than libc malloc.
To force compiling against libc malloc, use:
% make MALLOC=libc
To compile against jemalloc on Mac OS X systems, use:
% make MALLOC=jemalloc
即:
error:jemalloc/jemalloc.h:No such file or directory
则使用如下命令安装:
make MALLOC=libc
make install
具体参考原因如下链接:
Redis安装报错error:jemalloc/jemalloc.h:No such file or directory解决方法
2.2搭建6台redis服务
安装成功后,进入到/usr/local/software/redis/src 目录下,将 redis-trib.rb 复制到 /usr/local/bin 目录下:
cd /usr/local/software/redis/src
cp redis-trib.rb /usr/local/bin
创建运行目录复制配置文件 创建6个节点redis。
在目录/usr/local 下新建目录文件夹:
cd /usr/local
mkdir redis-cluster
进入到redis-cluster目录下,新建6个节点目录:
cd redis-cluster
mkdir redis1 redis2 redis3 redis4 redis5 redis6
分别进入到每个节点文件目录下,创建data和logs文件目录:
cd redis1
mkdir data logs
# redis2 3 4 5 6同1
复制redis.cof文件到redis1 2 3 4 5 6文件目录下。
cp redis.conf /usr/local/redis-cluster/redis1
cp redis.conf /usr/local/redis-cluster/redis2
cp redis.conf /usr/local/redis-cluster/redis3
cp redis.conf /usr/local/redis-cluster/redis4
cp redis.conf /usr/local/redis-cluster/redis5
cp redis.conf /usr/local/redis-cluster/redis6
进入到redis的src目录,
cp redis.cli redis.server /usr/local/redis-cluster/redis1
cp redis.cli redis.server /usr/local/redis-cluster/redis2
cp redis.cli redis.server /usr/local/redis-cluster/redis3
cp redis.cli redis.server /usr/local/redis-cluster/redis4
cp redis.cli redis.server /usr/local/redis-cluster/redis5
cp redis.cli redis.server /usr/local/redis-cluster/redis6
分别进入到每个节点的redis.conf文件下,修改配置信息:
cd /usr/local/redis-cluster/redis1
vi redis.conf
找到如下信息进行修改:
port 7001 //端口7001,7002,7003,7004,7005,7006
bind 192.168.11.11 //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
daemonize yes //redis后台运行
pidfile /usr/local/redis-cluster/redis1/redis_7001.pid //pidfile文件对应7001,7002,7003
cluster-enabled yes //开启集群 把注释#去掉
cluster-config-file nodes_7001.conf //集群的配置 配置文件首次启动自动生成 7001,7002,7003
cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置
appendonly yes //开启aof
logfile "/usr/local/redis-cluster/redise1/logs/redis_7001.log" //配置日志输入路劲 7000 7001 7002
dir "/usr/local/redis-cluster/redis1/data" //配置数据文件存放路劲
redis2 3 4 5 6下的redis.conf文件同1。
分别运行redis:
cd /usr/local/redis-cluster/redis1
./redis.server redis.conf
cd /usr/local/redis-cluster/redis2
./redis.server redis.conf
cd /usr/local/redis-cluster/redis3
./redis.server redis.conf
cd /usr/local/redis-cluster/redis4
./redis.server redis.conf
cd /usr/local/redis-cluster/redis5
./redis.server redis.conf
cd /usr/local/redis-cluster/redis6
./redis.server redis.conf
检查redis运行是否成功:
ps -ef|grep redis
2.2.1关闭redis服务或集群
若需要关闭redis,可通过kill方式直接干掉
kill -9 PID
关闭redis进程,使用kill -9 ${进程号},如果需要关闭多个进程,进程号之间空格隔开即可:
kill -9 10252 10257 10262 10267 10272 10294
也可执行以下命令来关闭redis进程:
pkill -9 redis
或者
redis.cli shutdown方式
redis-cli -c -h 192.168.11.11 -p 7001 shutdown
2.3创建集群
因为redis集群的创建需要Ruby环境,所以需要先安装Ruby:
yum -y install ruby ruby-devel rubygems rpm-build
redis5.0版本以上,需要的ruby环境版本应该在2.3.0版本以上,若出现提示说Ruby版本太低,百度找方法升级下Ruby版本等级即可。
即出现错误:
ERROR: Error installing redis:
redis requires Ruby version >= 2.3.0.
需要升级Ruby,升级成功后,通过命令查看ruby版本:
rvm -v
若版本>2.3.0以上,则继续以下步骤:
gem install redis
然后安装rubygems:
yum install -y rubygems
2.4测试集群
注意:高版本的redis集群启动命令和之前不一样了,老版本是:
redis-trib.rb create --replicas 1 192.168.11.11:7000 192.168.11.11:7001 192.168.11.11:7002 192.168.11.11:7000 192.168.11.11:7001 192.168.11.11:7002
高版本为:
redis-cli --cluster create 192.168.11.11:7001 192.168.11.11:7002 192.168.11.11:7003 192.168.11.11:7004 192.168.11.11:7005 192.168.11.11:7006 --cluster-replicas 1
- 连接前,需要先关闭防火墙。
- 连接失败。需要将logs和data文件先清空,进入redis flushall 即可。在重启redis。
2.4.1客户端测试连接
注意:必须带-c 。-c即-cluster客户端集群连接方式。
redis-cli -h 192.168.11.11 -c -p 7001
2.4.2redis集群命令
查看当前集群信息
cluster info
查看集群里有多少个节点
cluster nodes
2.4.3redis集群的重新启动
保留原来的数据:
- 逐个关闭redis实例,再逐个的启动即可。
丢弃原来的数据:
- 关闭实例,清空实例中数据存放目录的所有内容,然后逐个启动实例,在任意一个实例上执行集群的创建命令即可,本质上就是创建一个新的集群
- 清空数据存储目录内容:
rm -rf /usr/local/redis-cluster/redis1/data/*
rm -rf /usr/local/redis-cluster/redis2/data/*
3 4 5 6同上
参考相关博文:
redis集群搭建详细过程
centos7 快速搭建redis集群环境
redis集群搭建(非常详细,适合新手)