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")); }}
热门工具 换一换