下载和解包
|
|
编译安装
|
|
创建redis节点
测试我们选择2台服务器,分别为:192.168.215.129,192.168.215.130.每分服务器有3个节点。
- 我先在192.168.215.129创建3个节点:
|
|
分别对7000,7001、7002文件夹中的3个文件修改对应的配置
|
|
在192.168.1.238创建3个节点:对应的端口改为7003,7004,7005.配置对应的改一下就可以了。
4、两台机启动各节点(两台服务器方式一样)
1234567cd /usr/softwareredis-server redis_cluster/7000/redis.confredis-server redis_cluster/7001/redis.confredis-server redis_cluster/7002/redis.confredis-server redis_cluster/7003/redis.confredis-server redis_cluster/7004/redis.confredis-server redis_cluster/7005/redis.conf
查看服务
|
|
|
|
创建集群
前面已经准备好了搭建集群的redis节点,接下来我们要把这些节点都串连起来搭建集群。官方提供了一个工具:redis-trib.rb(/usr/local/redis-3.2.1/src/redis-trib.rb) 看后缀就知道这鸟东西不能直接执行,它是用ruby写的一个程序,所以我们还得安装ruby.再用 gem 这个命令来安装 redis接口, gem是ruby的一个工具包.
为了方便,两台机器都安装.
注意:这里需要修改gem源,并且淘宝的gem源已经不能用了,坑爹啊,现在要使用ruby-china。
https://gems.ruby-china.org/
添加ruby-china源:
- redis-trib.rb
进入/usr/software/redis-3.2.5/src
运行一下redis-trib.rb
12345678910111213141516171819202122232425262728293031323334353637[root@zk2 src]# ./redis-trib.rbUsage: redis-trib <command> <options> <arguments ...>create host1:port1 ... hostN:portN--replicas <arg>check host:portinfo host:portfix host:port--timeout <arg>reshard host:port--from <arg>--to <arg>--slots <arg>--yes--timeout <arg>--pipeline <arg>rebalance host:port--weight <arg>--auto-weights--use-empty-masters--timeout <arg>--simulate--pipeline <arg>--threshold <arg>add-node new_host:new_port existing_host:existing_port--slave--master-id <arg>del-node host:port node_idset-timeout host:port millisecondscall host:port command arg arg .. argimport host:port--from <arg>--copy--replacehelp (show this help)For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
看到这,应该明白了吧, 就是靠上面这些操作 完成redis集群搭建的.
确认所有的节点都启动,接下来使用参数create 创建 (在192.168.215.129中来创建)注意要关闭防火墙
解释下, –replicas 1 表示 自动为每一个master节点分配一个slave节点 上面有6个节点,程序会按照一定规则生成 3个master(主)3个slave(从)
前面已经提醒过的 防火墙一定要开放监听的端口,否则会创建失败。
检查集群状态:
redis集群中数据分片是通过hash slot的方式实现的
测试集群
- 链接服务器
|
|
- set值12345192.168.215.129:7000> set name lbl-> Redirected to slot [5798] located at 192.168.215.130:7003OK192.168.215.130:7003> get name"lbl"
可见,重定向到了130节点7003端口。
原因是redis采用hash槽的方式分发key到不同节点,算法是crc(16)%16384。详细描述后续会单独写文章描述。
而且你会发现,当一次重定向以后,这个客户端就连接到了130:7003这个节点。
测试其中一个master宕机
将上面设置的
name
所在的130:7003
kill掉,只剩了两个master和3个slave。你会发现cluster_current_epoch
相比之前加了1,这是因为redis的主从关系,重新选了一次主。
然后get name
发现,重定向了129:7002
这个节点。
|
|
之所以会重定向到129:7002
这个节点,是因为在kill之前129:7002
是130:7003
的slave:
下面这是在kill之前拷贝的./redis-trib.rb check
的数据,注意replicates
后的值
好了,今天就到这里,redis具体实现原理后续再讲。