首先安装redis:
make&&make install
cp src/redis-trib.rb/usr/local/redis/redis-cluster
cd /usr/local/redis/redis-cluster
mkdir 7000 7001 7002 7003 7004 7005
把redis配置文件分别拷贝到7000—7005目录下
修改下面内容:
port 7000 改成每个redis实例自己的端口
bind 本机ip
daemonize yes 设置为守护进程
pidfile /var/run/redis_7000.pid 改成自己相应的名字
cluster-enabled yes 开启集群
cluster-config-file nodes_7000.conf 集群的配置文件
cluster-node-timeout 15000 集群请求超时时间
appendonlyyes 开启aof持久化
根据不同的配置文件,依次启动不同的redis实例
安装ruby
去ruby官网下载安装包,然后安装
解压后:
./configure
make
make install
然后去下载redis-4.0.1.gem,自己选择版本
https://rubygems.org/gems/redis/网址
gem install -l redis-4.0.1.gem
若gem指令出错,自己百度,一般是ruby安装过程出错,会有..will not be intalled 这些提示。主要是linux环境有问题,包不全导致。建议别用centos nimi
然后执行
./redis-trib.rb create --replicas 1 192.168.94.130:7000 192.168.94.130:7001 192.168.94.130:7002 192.168.94.130:7003 192.168.94.130:7004 192.168.94.130:7005
中间要输入个yes,redis集群采用hash slot来分配,总共16384个slot,计算方法crc16(key)%16384,获取数据时也通过这个算法,所以下面指令会跳端口。
成功启动后登陆,-h指定bind的ip地址,-c表示连接到集群
redis-cli -h 192.168.94.130 -p 7000 -c
//连接redis端口是7000的实例
[root@localhostredis-cluster]# redis-cli -h 192.168.94.130 -p 7000 -c
192.168.94.130:7000>set set3 sss
-> Redirected toslot [11167] located at 192.168.94.130:7002
OK
192.168.94.130:7002>set set4 bbb
-> Redirected toslot [7032] located at 192.168.94.130:7001
OK
192.168.94.130:7001>set set5 aaa
-> Redirected toslot [2905] located at 192.168.94.130:7000
OK
192.168.94.130:7000>cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:481
cluster_stats_messages_pong_sent:450
cluster_stats_messages_sent:931
cluster_stats_messages_ping_received:445
cluster_stats_messages_pong_received:481
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:931
//连接redis端口是7002的实例
[xuhaixing@localhost~]$ redis-cli -h 192.168.94.130 -p 7002 -c
192.168.94.130:7002>set set1 aa
-> Redirected toslot [3037] located at 192.168.94.130:7000
OK
192.168.94.130:7000>set set2 bb
-> Redirected toslot [15294] located at 192.168.94.130:7002
OK
192.168.94.130:7002>exit
[xuhaixing@localhost~]$ redis-cli -h 192.168.94.130 -p 7002 -c
192.168.94.130:7002>get set1
-> Redirected toslot [3037] located at 192.168.94.130:7000
"aa"
192.168.94.130:7000>get set2
-> Redirected toslot [15294] located at 192.168.94.130:7002
"bb"
192.168.94.130:7002>get set3
"sss"
192.168.94.130:7002>get set4
-> Redirected toslot [7032] located at 192.168.94.130:7001
"bbb"
192.168.94.130:7001>get set5
-> Redirected toslot [2905] located at 192.168.94.130:7000
"aaa"
192.168.94.130:7000>
展现奇迹的时刻就出现了:如上面代码所示,应用指令时各redis实例自己切换。
集群中每个节点都是平等的,每个节点都与其他节点连接,每个节点都保存自己的数据和整个集群的状态。这样就保证了连接集群中任何一个节点就能获取整个集群的数据。集群至少有三个主节点,当存活的主节点小于一半时,集群挂掉。