如何实现分布式缓存redis-cluster环境搭建及wishstack调用Jedis,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
redis集群三种方式
1、Redis官方提供的集群解决方案-Redis-cluster (刚发布差不多一年)
2、 Twemproxy ( twitter贡献的) 使用时间比较长,比较成熟,但是有些功能不支持
3、豌豆尖针对Twemproxy 进行改良优化后的解决方案codis
更多分布式缓存方案级别选型请参考博文:http://my.oschina.net/tantexian/blog/685620
redis应用场景:任何需要用到缓存的地方,解决本地缓存数据量太小问题。分布式缓存能有效防止本地缓存失效数据库雪崩现象。 解决分布式应用中缓存不能共用(分布式session保存)。云计算中为客户提供缓存分布式缓存redis服务(青云、UnitedStack等厂商已经具有了)
接下来主要讲解如何搭建Redis-cluster集群环境及wishstack如何使用Jedis调用Redis集群:
mkdir cluster-test
cd cluster-test
mkdir 7000 7001 7002 7003 7004 7005
yum install gcc wget -y
wget http://download.redis.io/releases/redis-3.0.5.tar.gz
tar xzvf redis-3.0.5.tar.gz
cd redis-3.0.5
make(直接make报错则使用make MALLOC=libc)
yum install tcl -y
make test
make install
安装完毕redis-*常规操作命令脚本即被copy到linux bin下面,可以直接使用(当然也可以使用编译完的源码包./redis-3.0.5/src/下面的脚本)
将redis源码包的配置文件复制到7000/
cp redis-3.0.5/redis.conf 7000/
vi 7000/redis.conf
修改配置文件中的下面选项
port 7000
daemonize yes
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
将修改好的7000/redis.conf文件复制到其他文件夹(修改redis.conf 端口port为对于的port)
cp 7000/redis.conf 7001/
cp 7000/redis.conf 7002/
cp 7000/redis.conf 7003/
cp 7000/redis.conf 7004/
cp 7000/redis.conf 7005/
注:7001文件夹下面的redis.conf将端口修改为7001,其他依次类推。
分别启动6个redis实例:
redis-server ./7000/redis.conf
redis-server ./7001/redis.conf
redis-server ./7002/redis.conf
redis-server ./7003/redis.conf
redis-server ./7004/redis.conf
redis-server ./7005/redis.conf
redis-server ./7000/redis.conf && redis-server ./7001/redis.conf && redis-server ./7002/redis.conf && redis-server ./7003/redis.conf && redis-server ./7004/redis.conf&& redis-server ./7005/redis.conf
使用ruby脚本redis-trib.rb执行redis的创建集群命令创建集群
#redis3.0.5源码包中的redis-trib.rb的create子命令构建集群
其中参数–replicas
则指定了Redis Cluster中的每个Master节点配备几个Slave节点
其中节点角色由顺序决定,先master之后是slave
使用redis-trib.rb脚本必须有ruby环境,及redis的ruby接口。
yum -y install ruby ruby-devel rubygems rpm-build
gem install redis(网速不行则使用淘宝的gem源:gem sources –add https://ruby.taobao.org/ –remove https://rubygems.org/)
创建redis集群:
./redis-3.0.5/src/redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
./redis-3.0.5/src/redis-trib.rb create --replicas 1 172.31.2.32:7000 172.31.2.32:7001 172.31.2.32:7002 172.31.2.32:7003 172.31.2.32:7004 172.31.2.32:7005
./redis-3.0.5/src/redis-trib.rb create –replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
这个命令在这里用于创建一个新的集群, 选项--replicas 1
表示我们希望为集群中的每个主节点创建一个从节点。
之后跟着的其他参数则是这个集群实例的地址列表,3个master3个slave
redis-trib 会打印出一份预想中的配置给你看, 如果你觉得没问题的话, 就可以输入 yes , redis-trib 就会将这份配置应用到集群当中,让各个节点开始互相通讯,最后可以得到如下信息:
[OK] All 16384 slots covered
这表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。
测试redis-cluster:
slaveof配置项。
./redis-trib.rb create --replicas添加主从节点???
注:若报上述错误,则使用redis-cli -c -p 7000端口连接,使用dbsize命令,如果不为零,则使用flushall命令清零。如果报是slave不能清零,
则找到该slave对应的master,执行上述操作。知道dbsize为0.
redis-cli -c -p 7000 shutdown && redis-cli -c -p 7001 shutdown && redis-cli -c -p 7002 shutdown && redis-cli -c -p 7003 shutdown && redis-cli -c -p 7004 shutdown &&redis-cli -c -p 7005 shutdown
redis-server ./7000/redis.conf && redis-server ./7001/redis.conf && redis-server ./7002/redis.conf && redis-server ./7003/redis.conf && redis-server ./7004/redis.conf&& redis-server ./7005/redis.conf
./redis-3.0.5/src/redis-trib.rb create --replicas 1 172.31.2.32:7000 172.31.2.32:7001 172.31.2.32:7002 172.31.2.32:7003 172.31.2.32:7004 172.31.2.32:7005
注:del-node之前需要将该节点./redis-trib.rb reshard 127.0.0.1:7003到其他节点,只有空的实例才能被删除。
如果使用keys * 查询到结果为空,说明当前实例保存数据为空,能够使用del-node命令移除。
将127.0.0.1::7000关掉:redis-cli -c -p 7000 shutdown
更多关于redis-cli操作请参考:http://blog.csdn.net/tantexian/article/details/49924873
接下来再172.31.2.33上面重新启动redis-server来讲该节点添加到上述创建好的172.31.2.32的redis集群中。
第一步还是跟上述步骤一样,安装redis基础环境。
将172.31.2.33上面新跑的实例*:8000 及*:8001加入到集群中来。
cluster集群相关命令,更多redis相关命令见文档:http://redis.readthedocs.org/en/latest/
-
集群
-
CLUSTER INFO 打印集群的信息
-
CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。
-
节点
-
CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
-
CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。
-
CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。
-
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
-
槽(slot)
-
CLUSTER ADDSLOTS <slot> [slot …] 将一个或多个槽(slot)指派(assign)给当前节点。
-
CLUSTER DELSLOTS <slot> [slot …] 移除一个或多个槽对当前节点的指派。
-
CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
-
CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
-
CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。
-
CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。
-
CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。
-
键
-
CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。
-
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。
-
CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。
真是场景的redis集群环境部署:
建议至少三台机器:(其实redis.server服务时PING-PONG无中心架构,且,可以在同一台机器上面启动多个master及slave)
node1:172.31.2.31
node2:172.31.2.32
node3:172.31.2.33
三组一主两从设计:
172.31.2.31:7000(主) 172.31.2.32:7000(从) 172.31.2.33:7000(从)
172.31.2.32:7001(主) 172.31.2.31:7001(从) 172.31.2.33:7001(从)
172.31.2.33:7002(主) 172.31.2.31:7002(从) 172.31.2.32:7002(从)
这样就达到了比较高的稳定性。
jedis使用:
https://github.com/xetorthio/jedis
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
原创文章,作者:1402239773,如若转载,请注明出处:https://blog.ytso.com/239949.html