Redis 集群搭建与连接
1.Redis 安装
在安装Redis 集群前。应该安装Redis.Redis 的详细安装,请浏览 http://blog.csdn.net/jlh912008548/article/details/51225057
2.Redis 集群介绍
2.1 redis-cluster架构图
edis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
Key:a
计算a的hash值,例如值为100,100这个槽在server1上,所以a应该放到server1.
Key:hello
Hash值:10032,此槽在server2上。Hell可以应该存在server2.
2.2 redis-cluster投票:容错
(1)领着投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.
(2):什么时候整个集群不可用(cluster_state:fail)?
a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.
b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.
ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误
3 Redis集群搭建
3.1 我的集群结构
<span style="font-size:14px;font-weight: normal;">集群中有三个节点的集群,每个节点有一主一备。需要6台虚拟机。
搭建一个伪分布式的集群,使用6个redis实例来模拟。
所有redis 都安装在一个虚拟机里,即共用一个Ip,端口不同。(端口分别为6379,7001,7002,7003,7004,7005,7006)</span>
3.2搭建集群需要的环境
搭建集群需要安装Ruby 和Redis的接口
如果系统没有Ruby,那么 在搭建集群的时候会报如图所示的错误
/usr/bin/env: ruby: No such file or directory
如果系统没有Redis接口,那么在搭建的时候会报这样的错误
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from ./redis-trib.rb:25
3.2.1Ruby 安装
yum install ruby
yum install rubygems
使用gcc编译安装请见:http://www.showerlee.com/archives/1123
3.2.2 Redis接口安装
方法一: 使用命令 gem install redis 。使用gem直接安装可能会出现网络不通,无法安装的情况,故推荐方法二。
方法二:离线安装
下载 redis-3.2.1.gem 这里给一个CSDN 里的资源地址,免积分的:http://download.csdn.net/detail/lihcc/8722699
将redis-3.2.1.gem 包拷贝至 /usr/local 目录下
使用gem命令安装: gem install redis-3.0.0.gem
3.2 Redis集群搭建
3.2.1 创建Redis实例
在Redis 安装目录下拷贝如下文件到一个新的文件夹(我命名为redis01,redis02….以此类推)
修改每个redis下的redis.conf 将 cluster-enabled 后的值设为 yes ,如图所示
在Redis 安装目录下拷贝ruby脚本(redis-trib.rb)拷贝到 redis01 的同级目录下
创建集群
./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003
192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006
192.168.25.103 为虚拟机Ip.
如果没安装Rub 会报错
/usr/bin/env: ruby: No such file or directory
解决方式见上文
创建Redis集群启动与停止文件
vim start.sh
输入以下内容
cd redis01
./redis-server redis.conf
cd ../redis02
./redis-server redis.conf
cd ../redis03
./redis-server redis.conf
cd ../redis04
./redis-server redis.conf
cd ../redis05
./redis-server redis.conf
cd ../redis06
./redis-server redis.conf
cd ..
vim shutdown.sh
输入以下内容
redis01/redis-cli -p 7001 shutdown
redis02/redis-cli -p 7002 shutdown
redis03/redis-cli -p 7003 shutdown
redis04/redis-cli -p 7004 shutdown
redis05/redis-cli -p 7005 shutdown
redis06/redis-cli -p 7006 shutdown
启动 ./start.sh
查看是否启动 命令 ps aux|grep redis 发现有
root 64055 0.0 0.9 137436 9464 ? Ssl 12:44 0:08 ./redis-server *:7001 [cluster]
….
停止 ./shutdown.sh
查看是否停止 命令 ps aux|grep redis 发现没有启动后的内容,则说明停止成功
4 连接Redis
4.1图形化界面客户端 — RedisDesktopManager
缺点:不能连接集群,智能连接一个单独的
4.2 redis-cli
使用Redis 自带的 redis-cli 连接
连接一个单独的Redis :cd 到一个Redis 目录下 使用命令 ./redis-cli -h 192.168.204.131 -p 6379
连接集群则在其后加入一个 -c 即 ./redis-cli -h 192.168.204.131 -p 6379 -c
4.3 Jedis 连接(Java连接)
新建java项目 , 导入jedis.jar 包 下载地址:http://download.csdn.net/detail/teamlet/8914387
然后就是编写代码。这里我写一个小demo 给做个参考
import java.util.HashSet;
import java.util.Set;
import org.junit.Test;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPool;
public class JedisTest {
@Test
public void testJedisSingle() {
//创建jedis对象
Jedis jedis = new Jedis("192.168.204.131", 6379);
//调用jedis对象的方法,方法名称和redis 的命令一致
jedis.set("key2", "jedis test2");
String string = jedis.get("key1");
System.out.println(string);
//关闭jedis
jedis.close();
}
/**
*使用jedis连接池
*/
@Test
public void testJedisPool(){
JedisPool jedisPool = new JedisPool("192.168.204.131", 6379);
//获得jedis 连接对象
Jedis jedis = jedisPool.getResource();
System.out.println(jedis.get("key1"));
jedis.close();
}
/**
* 集群连接测试
*/
@Test
public void testJedisCluster(){
Set<HostAndPort> nodes = new HashSet<>();
nodes.add(new HostAndPort("192.168.204.131", 7001));
nodes.add(new HostAndPort("192.168.204.131", 7002));
nodes.add(new HostAndPort("192.168.204.131", 7003));
nodes.add(new HostAndPort("192.168.204.131", 7004));
nodes.add(new HostAndPort("192.168.204.131", 7005));
nodes.add(new HostAndPort("192.168.204.131", 7006));
JedisCluster cluster = new JedisCluster(nodes );
cluster.set("key1", "1000");
System.out.println(cluster.get("key1"));
}
}
至此,Redis 集群安装测试完结,感谢阅读。
以上为个人在安装配置Redis 时的经验,如有重复,望见谅。
还没有评论,来说两句吧...