你的位置:首页 > 操作系统

[操作系统]Redis集群搭建

  1.什么是Redis

  Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如

下:字符串类型, 散列类型, 列表类型, 集合类型, 有序集合类型。

2.Redis 安装

  redis 是C 语言开发, 安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++

  注: redis3.0 版本 增加 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指定端口号