Redis集群搭建
Posted 高迦肆少
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis集群搭建相关的知识,希望对你有一定的参考价值。
1.什么是Redis
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如
下:字符串类型, 散列类型, 列表类型, 集合类型, 有序集合类型。
2.Redis 安装
redis 是C 语言开发, 安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++
注: redis3.0 版本 增加 redis 集群功能。
下载地址: http://download.redis.io/releases/redis-3.0.0.tar.gz
1) 我这里先将下载好的包上传到服务器 /usr/local/src/redis 下
2) 解压 tar -zxvf redis-3.0.0.tar.gz (z: 标识解压格式,x:解压缩,v:显示解压进度,f:解压文件)
3) 进入解压后的目录进行编译
cd /redis-3.0.0
make
4) 安装到指定目录 我这里安装到/usr/local/redis
make PREFIX=/usr/local/redis insatll 注意大写
5) 复制配置文件到安装目录,
redis编译后会有一个默认的配置文件, 安装目录中没有, 我们如果做配置需要把redis默认的配置文件拷贝到redis的安装目录下
cp /usr/local/src/redis/redis-3.0.0/redis.conf /usr/local/redis/bin
3.Redis启动
1) 前端模式启动
在安装目录bin下, 直接运行 ./redis-server 将以前端模式启动,前端模式启动的缺点是ssh命令窗口关闭则redis-server程序结束
这里我们可以看到redis默认端口为 6379, 此时在命令行下面的光标会一直闪烁, 如果此时按下CTRL+C 会关闭服务
2) 后端模式启动
需要将复制过来的redis配置文件 redis.conf 做修改
[root@localhost bin]# vi redis.conf 在 37行 daemonize 改为 yes 以后端模式启动(输入i 进入编辑模式, 修改好以后按一下ESC,输入":wq" 保存并退出)
[root@localhost bin]# ./redis-server redis.conf
这里可以看到redis 启动了, 下面咱们测试一下,
[root@localhost bin]# ./redis-cli 执行命令 进入redis 命令号客户端
输入ping
标识我们的服务启动成功没有问题。
4. 集群搭建
1) 说明
1> 集群中每个redis服务作为一个redis节点, 各个节点之间彼此互联(PING-->PONG 机制)
2> 节点的fail是通过集群中超过半数的节点检测失效时才生效.
3> 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
4> redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,
然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在0-16383 之间的哈希槽,
redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
2) 配置redis集群需要一个ruby 环境
redis集群管理工具redis-trib.rb依赖ruby环境,首先需要安装ruby环境:
安装ruby
yum install ruby
yum install rubygems
我们需要使用redis创建集群的脚本在redis的源码包src中
这个脚本运行需要一个redis-3.0.0.gem 运行环境包,
我这里将这个包放到/usr/local/src/redis 和redis源码文件在一个目录下,
然后 安装执行 gem install /usr/local/redis-3.0.0.gem
3) redis 集群因为内置存在的投票容错机制,即上述说明中的第二点,超过半数的节点检测失效时才生效, 所以我们的redis集群至少有三个节点 ,
这三个节点作为主节点, 当然我们还需要需要三个从节点, 这样我们需要弄出6个redis, 我这里只装了一个虚拟机作为服务器, 那我这里先创建6个redis实例来模拟。
创建redis实例, 这里简要说明一下, 我这里在/usr/local 下面创建一个文件下redis-cluster 文件夹
mkdir redis-cluster
cd /usr/local/redis/bin
cp -r bin ../redis-cluster/redis01
cd /usr/local/redis-cluster/redis01
删除文件夹中dump.rdb 文件删除
修改配置文件
端口改为 7001,
cluster-enabled yes 的注释放开 默认是注释掉的, 指定要做集群,
之后就复制这个redis01 分别命名redis02,redis03,***redis06 同时修改端口分别为7002,7003,****7006 保存
创建实例完成后, 把ruby脚本redis-trib.rb (在redis源码src路径下的) 复制到redis-cluster 目录下
在创建redis集群之前启动这6个redis实例
在/usr/local/redis-cluster 目录下执行
./redis-trib.rb create --replicas 1 IP地址:7001 IP地址:7002 IP地址:7003 IP地址:7004 IP地址:7005 IP地址:7006
提示输入 yes
4) 测试redis集群
因为redis集群是相互连接的, 我没不需要一个个连接, 只需要连接redis实例中的一个就可以 执行以下命令
[root@localhost redis-cluster]# redis01/redis-cli -h IP地址 -p 7001 -c
其中-c表示以集群方式连接redis,-h指定ip地址,-p指定端口号
5) 关闭服务
./redis-cli -p 端口 shutdown
以上是关于Redis集群搭建的主要内容,如果未能解决你的问题,请参考以下文章