在redis3.0以前的版本要实现集群一般是借助哨兵sentinal工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况
redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要sentinal监控哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展很多个,根据官方文档提供目前可以扩展到1000节点。redis集群的性能和高可用性均优于之前版本的哨兵模式,并且集群配置非常简单,但是也存在瞬断,只能说高可用大大提高了并发量,是相对的,不是绝对的。
下载地址:http://redis.io/download
安装步骤:
#安装gcc
yum install gcc
#把下载好的redis-3.0.0-rc2.tag.gz放在/user/local文件夹下,并解压
tar -zxvf redis-3.0.0-rc2.tag.gz
#进入到解压好的 redis-3.0.0目录下,进行编译
make
#进入到redis-3.0.0/src目录下进行安装,安装完成验证src目录下是否已经生成了redis-server和redis-cil
make install
#建立两个文件夹存放redis命令和配置文件
mkdir -p /user/local/redis/etc
mkdir -p /user/local/redis/bin
#把redis-3.0.0下的redis.conf复制到/user/local/redis/etc下
cp redis.conf /user/local/redis/etc
#移动redis-3.0.0/src里的几个文件到/user/local/redis/bin下
mv mkreleasehdr.sh reids-benchmark redis-check-aof redis-check-dump redis-cil redis-server /user/local/redis/bin
#启动并指定配置文件
/user/local/redis/bin/redis-server /user/local/redis/etc/redis-conf(注意要使用后台启动,修改redis-conf里的daemonize改为yes)
#验证启动是否成功
ps -ef|grep redis
#查看是否有redis服务或者查看端口
netstat -tunpl | grep 6379
#进入redis客户端
/user/local/redis/bin/redis-cil
#退出客户端
quit
#退出redis服务
pkill redis-server
kill 进程号
/user/local/redis/bin/redis-cil shutdown
redis集群需要至少三个master节点(因为要进行选举),我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,由于节点数较多,所以用一台服务器创建6个redis实例,并将这6个redis实例配置为集群模式,所以这里搭建的是伪集群模式,当然真正的分布式集群的配置方法几乎一样,搭建伪集群的步骤如下:
第一步:在/user/local下创建文件夹redis-cluster,然后在其下面分别建6个文件夹如下:
第二步:把之前的erdis.conf配置文件copy到8001,修改内容如下:
第三步:把修改后的配置文件分别copy到各个文件夹下,注意每个文件夹要修改第2、4、6项的端口号
第四步:由于redis集群需要使用ruby命令,所以我们安装ruby
第五步:分别启动6个redis实例,然后检查是否启动成功
第六步:在redis3的安装目录下执行redis-trib.rb命令创建整个reids集群
第七步:验证集群
public class RedisCluster {
public static void main(String[] args) throws IOException{
Set jedisClusterNode = new HasSet();
jedisClusterNode.add(new HostAndPort("192.168.0.60",8001));
jedisClusterNode.add(new HostAndPort("192.168.0.60",8002));
jedisClusterNode.add(new HostAndPort("192.168.0.60",8003));
jedisClusterNode.add(new HostAndPort("192.168.0.60",8004));
jedisClusterNode.add(new HostAndPort("192.168.0.60",8005));
jedisClusterNode.add(new HostAndPort("192.168.0.60",8006));
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(100);
config.setMaxIdle(10);
config.setTestOnBorrow(true);
JedisCluster jedisCluster = new JedisCluster(jedisClusterNode, 6000, 10, config);
System.out.println(jedisCluster.set("name","bob"));
System.out.println(jedisCluster.set("age","18"));
System.out.println(jedisCluster.get("name"));
System.out.println(jedisCluster.get("age"));
jedisCluster.close();
}
}
亲手编写,转自视频:http://www.iqiyi.com/w_19s1iiixkl.html