Redis集群搭建
一、安装ruby环境
本身redis集群的安装是很麻烦了,通过ruby工具,可以非常方便的将一系列命令打包为一个脚本!
1、安装ruby环境:
yum -y install ruby
yum -y install rubygems
2、安装redis gem
redis-3.2.0.gem是一个通过ruby操作redis的插件!
自己下载
gem install --local redis-3.2.0.gem
二、准备redis.conf
主要配置地方:
bind 192.168.88.100
port 6379
daemonize yes #后台守护模式运行
pidfile /var/run/redis_6379.pid #运行进程id 默认
logfile "" #日志的路径
三、准备集群的6个redis配置文件
端口号分别为:6380,6381,6382,6383,6384,6385
每个配置文件的配置如下
1 include /root/redis/base.conf #主配置文件 2 daemonize yes 3 port 6380 4 pidfile "/root/redis/redis_6380.pid" 5 logfile "/root/redis/reds_log_6380.log" 6 dbfilename "dump_6380.rdb" #快照备份的名字,注意只是文件名,不能加路径 7 cluster-enabled yes 8 cluster-config-file nodes-6380.conf #集群节点设置 9 cluster-node-timeout 15000
redis:目录自己创建的
base.conf:刚自己准备的 redis.conf
注意:删除所有快照文件dump
四、分别启动服务
1 redis-server redis_6380.conf 2 redis-server redis_6381.conf 3 redis-server redis_6382.conf 4 redis-server redis_6383.conf 5 redis-server redis_6384.conf 6 redis-server redis_6385.conf
五、加入集群
在/opt/redis-3.2.5/src目录下,执行命令
/opt/module/redis-3.2.5/src/redis-trib.rb create --replicas 1 192.168.88.100:6380 192.168.88.100:6381 192.168.88.100:6382 192.168.88.100:6383 192.168.88.100:6384 192.168.88.100:6385
三主三从,replicas 1 这个1就是一个mater一个slave,redis默认是3个master,要陪两个从机,就要创建9个redis节点
六、查看
1、查看进程
2、查看集群节点
登录其中一个客户端
redis-cli -c -h 192.168.88.100 -p 6380
在redis-cli每次录入、查询键值,redis都会计算出该key应该送往的插槽,如果不是该客户端对应服务器插槽,redis会报错,并告知应前往的redis实例地址和端口。
–c 参数实现自动重定向。如 redis-cli -c –p 6379 登入后,再录入、查询键值对可以自动重定向。
每个slot可以存储一批键值对
myself:自己登录的那个
七、读取键的操作
采用哈希算法后,会自动地分配slot,而 不在一个slot下的键值,是不能使用mget,mset等多键操作。
通过{}来定义组的概念,从而使key中{}内相同内容的键值对放到一个slot中去。
八、集群中读取数据
1、CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上
2、cluster countkeysinslot <slot>返回槽 slot 目前包含的键值对数量
3、CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键
九、集群的jedis开发
1 @Test 2 public void testCluster(){ 3 Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>(); 4 jedisClusterNodes.add(new HostAndPort("192.168.88.100", 6380)); 5 JedisCluster jc = new JedisCluster(jedisClusterNodes); 6 jc.set("foo", "bar"); 7 String value = jc.get("foo"); 8 System.out.println(value); 9 }
只需要写集群中任意的端口,不管是master和slave都能连接,操作集群
十、优缺点
优点:
实现扩容
分摊压力
无中心配置相对简单
缺点:
多键操作是不被支持的
多键的Redis事务是不被支持的(因为slot可能不一样)。lua脚本不被支持。
由于集群方案出现较晚,很多公司已经采用了其他的集群方案,而代理或者客户端分片的方案想要迁移至redis cluster,需要整体迁移而不是逐步过渡,复杂度较大。