学习 (前提已经安装过redis)
首先准备集群工具
复制
cd /usr/java
cp redis-3.2.9/src/redis-trib.rb /usr/local/bin
准备建六个文件夹用于启动redis 的节点服务
mkdir redis_crowd
cd redis_crowd
mkdir 7001 7002 7003 7004 7005 7006
复制6份配置文件到各自的文件夹
cd /usr/java
cp redis-3.2.9/redis.conf redis_cluster/7001/
cp redis-3.2.9/redis.conf redis_cluster/7002/
cp redis-3.2.9/redis.conf redis_cluster/7003/
cp redis-3.2.9/redis.conf redis_cluster/7004/
cp redis-3.2.9/redis.conf redis_cluster/7005/
cp redis-3.2.9/redis.conf redis_cluster/7006/
修改配置文件
以7001文件的配置文件为例
port 7001 //六个节点配置文件分别是7001-7006
daemonize yes //redis后台运行
pidfile /var/run/redis_7001.pid //pidfile文件对应7001-7006
cluster-enabled yes //开启集群
cluster-config-file nodes_7001.conf //保存节点配置,自动创建,自动更新对应7001-7006
cluster-node-timeout 5000 //集群超时时间,节点超过这个时间没反应就断定是宕机
appendonly yes //存储方式,aof,将写操作记录保存到日志中
启动节点服务(以第一个节点为例)
/usr/local/redis/bin/redis-server redis_cluster/7001/redis.conf
查看redis启动情况
ps -ef | grep -i redis
但是在使用之前 需要安装ruby,以及redis和ruby连接
yum -y install ruby ruby-devel rubygems rpm-build
gem install redis
之后报错了
Fetching: redis-4.1.0.gem (100%)
ERROR: Error installing redis:
redis requires Ruby version >= 2.2.2.
查了资料总之是ruby的版本太低了
通过安装rvm升级ruby
1、安装RVM(官网 http://rvm.io/ http://rvm.io/rvm/install)
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
\curl -sSL https://get.rvm.io | bash -s stable
\curl -sSL https://get.rvm.io | bash -s stable --rails
find / -name rvm -print
source /usr/local/rvm/scripts/rvm
2、查看rvm库中已知的ruby版本:
rvm list known
3、安装一个ruby版本:
rvm install 2.5.3
4、使用一个ruby版本:
rvm use 2.5.3
5、设置默认版本:(设置ruby2.5.3为默认的ruby)
rvm use 2.5.3 --default
6、卸载一个已知版本:
rvm remove 2.3.4
7、查看ruby版本:
ruby --version
8、安装redis:
gem install redis
问题解决
创建集群
redis-trib.rb create --replicas 1 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 127.0.0.1:7006
集群数据测试
我们先连接任意一个节点,然后添加一个key:
redis-cli是redis默认的客户端工具,启动时加上`-c`参数,`-p`指定端口,就可以连接到集群。
连接任意一个节点端口:
/usr/local/redis/bin/redis-cli -c -p 7002
127.0.0.1:7002>
我们连接7002
127.0.0.1:7002> set xxx 'fdafda'
-> Redirected to slot [4038] located at 127.0.0.1:7001
OK
前面说过Redis Cluster值分配规则,所以分配key的时候,它会使用CRC16(‘my_name’)%16384算法,来计算,将这个key 放到哪个节点,这里分配到了4038slot 就分配到了7001(0-5460)这个节点上。所以有:
Redirected to slot [4038] located at 127.0.0.1:7001
我们从其他集群节点 ,都可以获取到数据
127.0.0.1:7001> exit
[root@localhost ~]# /usr/local/redis/bin/redis-cli -c -p 7005
127.0.0.1:7005> get xxx
-> Redirected to slot [4038] located at 127.0.0.1:7001
"fdafda"
127.0.0.1:7001>