哨兵模式java
在redis3.0之前的版本要实现集群通常是借助哨兵sentinel工具来监控master节点的状态,若是master节点异常,则会作主从切换,将某一台slave做为master,哨兵的配置略微复杂,而且性能和高可用性等各方面表现通常,特别是在主从切换的瞬间存在访问瞬断的状况node
高可用集群模式redis
redis集群是一个由多个主从节点群组成的分布式服务器群,它具备复制、高可用和分片特性。Redis集群不须要sentinel哨兵也能完成节点移除和故障转移的功能。须要将每一个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,据官方文档称能够线性扩展到1000节点。redis集群的性能和高可用性均优于以前版本的哨兵模式,且集群配置很是简单ruby
redis安装服务器
下载地址:http://redis.io/download 安装步骤: # 安装gcc yum install gcc # 把下载好的redis-3.0.0-rc2.tar.gz放在/usr/local文件夹下,并解压 tar -zxvf redis-3.0.0-rc2.tar.gz # 进入到解压好的redis-3.0.0目录下,进行编译 make # 进入到redis-3.0.0/src目录下进行安装,安装完成验证src目录下是否已经生成了redis-server 、redis-cil make install # 创建俩个文件夹存放redis命令和配置文件 mkdir -p /usr/local/redis/etc mkdir -p /usr/local/redis/bin # 把redis-3.0.0下的redis.conf复制到/usr/local/redis/etc下 cp redis.conf /usr/local/redis/etc/ # 移动redis-3.0.0/src里的几个文件到/usr/local/redis/bin下 mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin # 启动并指定配置文件 /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf(注意要使用后台启动,因此修改redis.conf里的daemonize改成yes) # 验证启动是否成功 ps -ef | grep redis # 查看是否有redis服务或者查看端口 netstat -tunpl | grep 6379 # 进入redis客户端 /usr/local/redis/bin/redis-cli # 退出客户端 quit # 退出redis服务: (1)pkill redis-server (2)kill 进程号 (3)/usr/local/redis/bin/redis-cli shutdown
redis集群搭建微信
redis集群须要至少要三个master节点,咱们这里搭建三个master节点,而且给每一个master再搭建一个slave节点,总共6个redis节点,因为节点数较多,这里采用在一台机器上建立6个redis实例,并将这6个redis实例配置成集群模式,因此这里搭建的是伪分布式集群模式,固然真正的分布式集群的配置方法几乎同样,搭建伪分布式集群的步骤以下:app
第一步:在/usr/local下建立文件夹redis-cluster,而后在其下面分别建立6个文件夾以下 (1)mkdir -p /usr/local/redis-cluster (2)mkdir 800一、 mkdir 800二、 mkdir 800三、 mkdir 800四、 mkdir 800五、 mkdir 8006 第一步:把以前的redis.conf配置文件copy到8001下,修改以下内容: (1)daemonize yes (2)port 8001(分别对每一个机器的端口号进行设置) (3)bind 192.168.0.61(必需要绑定当前机器的ip,这里方便redis集群定位机器,不绑定可能会出现循环查找集群节点机器的状况) (4)dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必需要指定不一样的目录位置,否则会丢失数据) (5)cluster-enabled yes(启动集群模式) (6)cluster-config-file nodes-8001.conf(这里800x最好和port对应上) (7)cluster-node-timeout 5000 (8)appendonly yes 第三步:把修改后的配置文件,分别 copy到各个文夹下,注意每一个文件要修改第二、四、6项里的端口号 第四步:因为 redis集群须要使用 ruby命令,因此咱们须要安装 ruby (1)yum install ruby (2)yum install rubygems (3)gem install redis --version 3.0.0(安装redis和 ruby的接囗) 第五步:分别启动6个redis实例,而后检查是否启动成功 (1)/usr/local/redis/bin/redis-server /usr/local/redis-cluster/800*/redis.conf (2)ps -ef | grep redis 查看是否启动成功 第六步:在redis的安装目录下执行 redis-trib.rb命令 (1)cd /usr/local/redis-3.0.0/src (2)./redis-trib.rb create --replicas 1 192.168.0.61:8001 192.168.0.61:8002 192.168.0.61:8003 192.168.0.61:8004 192.168.0.61:8005 192.168.0.61:8006 第七步:验证集群: (1)链接任意一个客户端便可:./redis-cli -c -h -p (-c表示集群模式,指定ip地址和端口号)如:/usr/local/redis/bin/redis-cli -c -h 192.168.0.61 -p 800* (2)进行验证: cluster info(查看集群信息)、cluster nodes(查看节点列表) (3)进行数据操做验证 (4)关闭集群则须要逐个进行关闭,使用命令: /usr/local/redis/bin/redis-cli -c -h 192.168.0.61 -p 800* shutdown PS:当出现集群没法启动时,删除redis的临时数据文件,再次从新启动每个redis服务,而后从新构造集群环境。
借助redis的java客户端jedis能够操做以上集群,引用jedis版本的maven坐标以下:maven
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
Java编写访问redis集群的代码很是简单,以下所示:分布式
import java.io.IOException; import java.util.HashSet; import java.util.Set; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; import redis.clients.jedis.JedisPoolConfig; /** * 访问redis集群 * @author aaron.rao * */ public class RedisCluster { public static void main(String[] args) throws IOException { Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>(); jedisClusterNode.add(new HostAndPort("192.168.0.61", 8001)); jedisClusterNode.add(new HostAndPort("192.168.0.61", 8002)); jedisClusterNode.add(new HostAndPort("192.168.0.61", 8003)); jedisClusterNode.add(new HostAndPort("192.168.0.61", 8004)); jedisClusterNode.add(new HostAndPort("192.168.0.61", 8005)); jedisClusterNode.add(new HostAndPort("192.168.0.61", 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("student", "aaron")); System.out.println(jedisCluster.set("age", "18")); System.out.println(jedisCluster.get("student")); System.out.println(jedisCluster.get("age")); jedisCluster.close(); } }
运行效果以下: OK OK aaron 18
更多关于Redis深刻学习的文章请扫描下方二维码关注微信公号“轻风吟”工具