Redis搭建集群

一、前言

Redis是现在特别流行的内存非关系型数据库,具备高性能,简单易用的特性,神受广大用户青睐。在我们之前的文章里介绍了Redis单点的安装,但是实际Reids经常以集群的形式部署,这样可以经受更大流量的冲击,也会使得数据多点保存,更加安全。接下来我将展示Redis如何搭建集群,比较麻烦的可能是Ruby的安装。本文需要读者自行安装redis成功,并知悉基本操作命令redis-server,redis-cli等。

二、准备工具

由于Redis集群的搭建需要使用到redis-trib.rb工具,rb就是Ruby,所以我们需要在系统上安装Ruby依赖。这里推荐使用yum方式安装:

安装ruby
      yum install ruby
      yum install rubygems
安装ruby和redis的接口程序
          gem install redis

如果因为各种原因不能使用yum方式,比如机器不允许连外网,没有root用户权限,或者希望指定安装位置,不想覆盖系统环境的话。我们可以下载ruby安装包自行安装(ruby依赖openssl,zlib等,没有也请自行安装)。
最新版的ruby-2.4.1.tar.gz包因为包含了rubygems,所以不需要另外安装,如果后续操作提示没有rubygems,还需要自己安装。将ruby-2.4.1.tar.gz上传至服务器并解压进入:

[pgw@FB-poc-200-133 ~]$ ./configure --prefix==/home/redis/ruby 
[pgw@FB-poc-200-133 ~]$ make
[pgw@FB-poc-200-133 ~]$ make install

修改.bash_profile文件,增加ruby的环境变量,输入ruby -v命令查看是否安装成功。
下载redis-3.2.2.gem(版本依据redis版本下载),并执行gem install redis-3.2.2.gem命令安装

三、建立集群

我们这次先在一台机器上建立六个实例组成集群,分别启7000-7005共6个端口,三主三从。首先在redis目录建立redis-cluster目录,下面建7000-7005文件夹,每个内放入redis-conf文件,如图:
这里写图片描述
其中redis.conf文件中修改如下几个属性:

port  7000                                        //端口7000,7002,7003 
bind 本机ip                                       //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
daemonize    yes                               //redis后台运行
pidfile  /var/run/redis_7000.pid          //pidfile文件对应7000,7001,7002
cluster-enabled  yes                           //开启集群 把注释#去掉
cluster-config-file  nodes_7000.conf   //集群的配置 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout  15000                //请求超时 默认15秒,可自行设置
appendonly  yes                           //aof日志开启 有需要就开启,它会每次写操作都记录一条日志

然后分别执行./redis-server ./redis-cluster/7000/redis.conf 启动redis节点,用ps -ef命令查看是否启动成功

[pgw@FB-poc-200-133 ~]$ ps -ef |grep redis
pgw       7582     1  0 Jul08 ?        00:04:29 ./redis-server 192.9.200.133:7004 [cluster]   
pgw       7586     1  0 Jul08 ?        00:04:12 ./redis-server 192.9.200.133:7003 [cluster]   
pgw       7596     1  0 Jul08 ?        00:04:15 ./redis-server 192.9.200.133:7005 [cluster]   
pgw       8632     1  0 Jul08 ?        00:04:03 ./redis-server 192.9.200.133:7000 [cluster]   
pgw       9200     1  0 Jul08 ?        00:04:34 ./redis-server 192.9.200.133:7001 [cluster]   
pgw       9208     1  0 Jul08 ?        00:04:04 ./redis-server 192.9.200.133:7002 [cluster]   
pgw      22097 14854  0 20:17 pts/2    00:00:00 grep redis

这是进入redis目录下src目录,找到redi-trib.rb命令:
Redis搭建集群_第1张图片
在红圈处填入yes后,集群建立成功

四、验证

连接其中一个节点,使用CLUSTER info命令查看集群信息,state如果是ok就表名创建成功,在可以执行几个简单命令。使用其他节点登录也可以同样取到数据。

[pgw@FB-poc-200-133 redis-3.2.6]$ ./redis-cli -c -h 192.9.200.133 -p 7000
192.9.200.133: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_sent:413
cluster_stats_messages_received:413
192.9.200.133:7000> set redis ok
OK
192.9.200.133:7000> get redis
"ok"
192.9.200.133:7000> 

下述对集群的说明摘自他人:
redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。

Redis 集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的时候看到set 和 get 的时候,直接跳转到了7000端口的节点。

Redis 集群会把数据存在一个 master 节点,然后在这个 master 和其对应的salve 之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的 master 节点获取数据。只有当一个master 挂掉之后,才会启动一个对应的 salve 节点,充当 master 。

需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。

你可能感兴趣的:(Redis)