1、Redis集群方案比较
(1)哨兵模式
在redis3.0以前的版本要实现集群一般是借助哨兵sentinal工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况
(2)高可用集群模式
redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要sentinal监控哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展很多个,根据官方文档提供目前可以扩展到1000节点。redis集群的性能和高可用性均优于之前版本的哨兵模式,并且集群配置非常简单,但是也存在瞬断,只能说高可用大大提高了并发量,是相对的,不是绝对的。
2、Redis高可用集群搭建
(1)redis安装
安装步骤:
#安装gcc
centOS的安装方式: yum install gcc
ubuntu 的安装方式:apt-get 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
(2)redis集群搭建
redis集群需要至少三个master节点(因为要进行选举),我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,由于节点数较多,所以用一台服务器创建6个redis实例,并将这6个redis实例配置为集群模式,所以这里搭建的是伪集群模式,当然真正的分布式集群的配置方法几乎一样,搭建伪集群的步骤如下:
第一步:在/user/local下创建文件夹redis-cluster,然后在其下面分别建6个文件夹如下:
- mkdir -p /user/local/redis-cluster
- mkdir 8001、mkdir 8002、mkdir 8003、mkdir 8004、mkdir 8005、mkdir 8006
第二步:把之前的erdis.conf配置文件copy到8001,修改内容如下:
- daemonize yes
- port 8001(分别对每个机器的端口号进行设置)
- bind 192.168.0.60(必须要绑定你当前机器的ip,这里方便redis集群定位到机器,不绑定可能会出现循环查找集群节点机器的情况)
- dir /user/local/redis-cluster/8001(指定数据文件存储位置,必须要指定不同的目录位置,不然会丢失数据)
- cluster-enabled yes(启动集群模式)
- cluster-config-file nodes-8001.conf(这里800x最好和port对应上)
- cluster-node-timeout 5000(超时时间设置)
- appendonly yes
第三步:把修改后的配置文件分别copy到各个文件夹下,注意每个文件夹要修改第2、4、6项的端口号
- 可以批量替换: :%s/源字符串/目的字符串/g
第四步:由于redis集群需要使用ruby命令,所以我们安装ruby
- yum install ruby
- yum install rubygems
- gem install redis --version3.0.0(安装redis和ruby的接口)
第五步:分别启动6个redis实例,然后检查是否启动成功
- /user/local/redis/bin/redis-server /user/local/redis-cluster/800*/redis-conf
- ps -ef | grep redis 查看是否启动成功
第六步:在redis3的安装目录下执行redis-trib.rb命令创建整个reids集群
- cd/user/local/redis3/src
- ./redis-trib.rb create --replicas 1 192.168.0.60:8001 192.168.0.60:8002 192.168.0.60:8003 192.168.0.60:8004 192.168.0.60:8005 192.168.0.60:8006(其中‘1’指的是:master节点/slave
- 节点的比值)
第七步:验证集群
- 连接任意一个客户端即可:./redis-cli -c -h -p(-c表示集群模式,-h指定ip地址和-p端口号)
- 如:/user/local/redis/bin/redis-cli -c -h 192.168.0.60 -p 800*
- 进行验证:cluster info(查看集群信息)、cluster nodes(查看节点列表)
- 进行数据操作验证
- 关闭集群,则需要逐个进行关闭,使用命令:
- 如:/user/local/redis/bin/redis-cli -c -h 192.168.0.60 -p 800* shutdown
(3)。验证代码
public class RedisCluster { public static void main(String[] args) throws IOException{ Set<HostAndPort> jedisClusterNode = new HasSet<HostAndPort>(); 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(); } }