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 时的经验,如有重复,望见谅。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页