Redis集群部署指南

一、       Redis集群方案Redis集群方案采用Redis3.0支持的redis-cluster集群架构:


                                     架构方案:1. 
 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽;2. 
 节点的fail是通过集群中超过半数的节点检测失效时才生效;3. 
 客户端与redis节点直连,不需要中间proxy层,客户端不需要连接集群所有的节点,连接集群中任何一个可用的节点即可。4. 
 redis-cluster把所有的物理节点映射到[0~16383]slot上,cluster负责维护node<->slot<->value。容错机制:


1. 
 redis-cluster的容错机制是通过选举产生master,选择过程是集群中所有的master参与,如果半数以上的master节点与master节点的通信超时(cluster-node-timeout),则认为当前master节点挂掉。
什么时候整个集群不可用(cluster_state:fail),当集群不可用时,所有对集群的操作均不可用,收到ERRORQ错误。


二、       环境准备1     服务器
序号HOSTNAME配置备注
1redis-node1CPU:2*2  内存:16GB

2redis-node2CPU:2*2  内存:16GB
3redis-node3CPU:2*2  内存:16GB

4redis-node4CPU:2*2  内存:16GB
5redis-node5CPU:2*2  内存:16GB

6redis-node6CPU:2*2  内存:16GB

2     服务器设置Step1. 将6379端口在防火墙看开启:[root@redis1 ~]# vi /etc/sysconfig/iptables-A
INPUT -m state --state NEW -m tcp -p tcp--dport 6379 -j ACCEPT

注:必须加在REJECT前面。
Step 2. 修改Selinux参数:[root@redis1 ~]# vi /etc/selinux/configSELINUX=disabled
注:分别在其它几个节点上同样配置防火墙和SELINUX。

三、       软件准备注:本文中演示的Redis版本为Redis 3.2.6(生产上实际使用3.2.8),通用于Redis
3.x的所有版本,如果Redis版本为2.x的,则有所不同。
PS: 开发和生产环境,分别有HTTP服务,目前已经将安装包部署在该HTTP服务器上,可以直接从HTTP服务器上下载:生产环境:wget  
http://download.cloud.pub/redis/redis-3.2.8.tar.gz
<http://download.cloud.pub/redis/redis-3.2.8.tar.gz>开发(测试)环境:wget  
http://portal-doc.paic.com.cn/redis/redis-3.2.8.tar.gz
<http://portal-doc.paic.com.cn/redis/redis-3.2.8.tar.gz>


四、       安装Redis1     安装系统组件Step 1. 安装gcc[root@redis1 ~]# yum install –y
gcc-c++
Step 2. 安装tcl[root@redis1 ~]# yum install –y tcl

2     安装Redis
Step 1. 解压Redis到/usr/local目录下[root@redis1 ~]# tar
-zxvf/root/software/redis-3.2.6.tar.gz -C /usr/local/
Step 2. 在解压后的目录中进行make和make test[root@redis1 ~]# cd /usr/local/redis-3.2.6
[root@redis1 redis-3.2.6]# make[root@redis1 redis-3.2.6]# make test
注:要检查make和make test的结果是否都正确,如果报错,针对性检查并安装系统缺少的组件。


Step 3. 复制redis-server和redis-cli到/usr/local/bin目录下:[root@redis1 redis-3.2.6]#
cd src


[root@redis1 src]# cp redis-server/usr/local/bin/[root@redis1 src]# cp
redis-cli/usr/local/bin/

Step 3. 验证Redis安装是否成功:[root@redis1 ~]# redis-server

[root@redis1 ~]# redis-cli

注:安装其它5台服务器,重复本章节的4.1~4.2。

五、       配置集群模式1     配置redis.confStep 1. 配置redis.conf[root@redis1 ~]# mkdir
/etc/redis[root@redis1 ~]# cd /etc/redis[root@redis ~]# vi redis.confport 6379
daemonize yescluster-enabledyescluster-config-file/etc/redis/nodes.conf
cluster-node-timeout 5000        appendonly yesrequirepass Ab123456

注1:cluster-node-timeout是集群中各节点相互通讯时,允许“失联”的最大毫秒数,本演示中配置的为5秒,如果超过5秒某个节点没有向其它节点汇报成功,认为该节点挂了。

注2:requirepass是Redis访问密码,为了安全起见,该参数建议必须配置,从但客户端Jedis版本必须使用2.8.x以上的版本,否则需要通过扩展JedisCluster来实现对密码访问的支持。此外几个Redis节点的密码应该设置为相同的。
注3:分别在其它几个节点上创建与上面相同的redis.conf文件,内容也相同。
注4:重启/重建Redis集群时,必须删除去/etc/redis/nodes.conf文件。
Step 2. 以次启动所有节点[root@redis1 ~]# redis-server/etc/redis/redis.conf[root@redis2
~]# redis-server/etc/redis/redis.conf[root@redis3 ~]#
redis-server/etc/redis/redis.conf[root@redis4 ~]#
redis-server/etc/redis/redis.conf[root@redis5 ~]#
redis-server/etc/redis/redis.conf[root@redis6 ~]#
redis-server/etc/redis/redis.conf





2     安装Redis集群所需的Ruby工具Step 1. 安装Ruby工具:
Redis集群需要借助其它工具将相关节点加入到Cluster中,而这个工具是由Redis提供一个名为redis-trib.rb的ruby脚本,否则接下来创建cluster会失败。
[root@redis1 ~]# cd /usr/local/redis-3.2.6/src[root@redis1 src]# yum install –y
ruby[root@redis1 src]# yum install -y rubygems[root@redis1 src]# gem install
redis--version 3.0.0[root@redis1 src]# gem list

Step 2. 设置Ruby连接Redis的密码:[root@redis1 ~]# vi
/usr/lib/ruby/gems/1.8/gems/redis-3.0.0/lib/redis/client.rb:password =>
"Ab123456"

注:分别在其它几个节点上用同样的方式安装好Ruby工具。
3     利用redis-trib.rb创建Redis集群Step 1. 在src目录下运行以下脚本:
[root@redis1 ~]# cd /usr/local/redis-3.2.6/src[root@redis1 src]#
./redis-trib.rb create --replicas1 10.50.130.101:6379 10.50.130.102:6379
10.50.130.103:6379 10.50.130.104:637910.50.130.105:6379 10.50.130.106:6379


注1:只需在其中某个个节点执行以上脚本(本例在第一个节点执行)。

注2:利用redis-trib创建Cluster,只需要操作一次即可,假设系统关机、重启,把所有的节点全部关闭之后,下次重启后,即自动进入Cluster模式,不用现次执行redis-trib.rb
cteate命令。
Step 2. 查看Cluster进程:[root@redis1 ~]# ps -ef|grep redis[root@redis2 ~]# ps
-ef|grep redis[root@redis3 ~]# ps -ef|grep redis[root@redis4 ~]# ps -ef|grep
redis[root@redis5 ~]# ps -ef|grep redis[root@redis6 ~]# ps -ef|grep redis

Step 3. 查看节点属性(Master/Slave)[root@redis1 ~]# cd/usr/local/redis-3.2.6/src
[root@redis1 src]# ./redis-trib.rb check10.50.130.101:6379[root@redis1 src]#
./redis-trib.rb check10.50.130.102:6379[root@redis1 src]# ./redis-trib.rb
check10.50.130.103:6379[root@redis1 src]# ./redis-trib.rb
check10.50.130.104:6379[root@redis1 src]# ./redis-trib.rb
check10.50.130.105:6379[root@redis1 src]# ./redis-trib.rb
check10.50.130.106:6379
Step 4. 查看节点/集群信息redis-cli客户端登录到任一个节点,查看:


六、       Jedis测试Redis集群
package com.pingan.cloud.redis;
import java.util.HashSet;import java.util.Set;
importorg.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.HostAndPort;import redis.clients.jedis.JedisCluster;
/***@author Simon.Hoo*@version v1.0.0*@since JDK1.7*/public class RedisTest {
       privatestatic JedisCluster cluster;
       /**        * @param args        */       publicstatic void
main(String[] args) {              HostAndPorthost1 = new
HostAndPort("10.50.130.101", 6379);              HostAndPorthost2 = new
HostAndPort("10.50.130.102", 6379);              HostAndPorthost3 = new
HostAndPort("10.50.130.103", 6379);              HostAndPorthost4 = new
HostAndPort("10.50.130.104", 6379);              HostAndPorthost5 = new
HostAndPort("10.50.130.105", 6379);              HostAndPorthost6 = new
HostAndPort("10.50.130.106", 6379);
              Set<HostAndPort>jedisClusterNode = new HashSet<HostAndPort>(); 
            jedisClusterNode.add(host1);          
   jedisClusterNode.add(host2);              jedisClusterNode.add(host3);    
         jedisClusterNode.add(host4);              jedisClusterNode.add(host5);
              jedisClusterNode.add(host6);
              GenericObjectPoolConfigpoolConfig = new
GenericObjectPoolConfig();              poolConfig.setMaxWaitMillis(-1);       
      poolConfig.setMaxTotal(1000);              poolConfig.setMinIdle(8);    
         poolConfig.setMaxIdle(100);
              intconnectionTimeout=10;              intsoTimeout=10;       int
maxAttempts = 10;       String password="Ab123456";
              cluster= new
JedisCluster(jedisClusterNode,connectionTimeout,soTimeout,maxAttempts,password,poolConfig);
              cluster.set("abcdefg","1234567890");          
   System.out.println(cluster.get("abcdefg"));       }}

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信