环境: Centos 6.1、redis 3.2.4;
注释:查看Centos命令:cat /etc/issue
第一步:下载并解压
cd root目录下,下载redis的jar包:wget http://download.redis.io/releases/redis-3.2.4.tar.gz,解压: tar -zxvf redis-3.2.4.tar.gz
第二步:编译并安装
cd redis-3.2.4
make && make install
第三步:将 redis-trib.rb (这是一个ruby写的管理redis集群的工具)复制到 /usr/local/bin 目录下
cd src
cp redis-trib.rb /usr/local/bin/
第四步:创建redis_cluster目录,并创建节点文件夹:
第五步:将redis.conf文件复制到7001的目录下面,并修改7001目录下的redis.conf文件:
cp redis.conf redis_cluster/7001
redis.conf修改点如下:
1、修改端口号为当前节点:port 7001
2、daemonize yes
3、pidfile /var/run/redis_7001.pid
4、开启AOF:appendonly yes
5、放开redis集群的配置:
cluster-enable是开启redis集群的配置,cluster-config-file不需要自己手动创建,只需要修改一下名称即可,cluster-node-timeout是集群的超时时间,就是当集群中的大部分节点连接不上该节点超过cluster-node-timeout指定的时间之后,将改节点下线,重新选出新的master;
修改完毕后,将7001下的redis.conf文件复制到目录7002、7003、7004、7005、7006目录下,并作相应的修改:
eg: sed -i "s/7001/7003/g" redis.conf
6、一次启动redis的6个节点:
确认各个节点已经正确启动:ps -ef | grep redis
7、在设置集群之前需要先安装ruby:
yum -y install ruby ruby-devel rubygems rpm-build
gem install redis
如果在执行gem install redis时报错,并提示 redis requires Ruby version >= 2.2.2,
按下面步骤执行:
7.1:安装curl
yum install curl
7.2:安装RVM
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
curl -L get.rvm.io | bash -s stable(执行这条命令的时候可能会报错,no public key,这时候我们只要执行返回的
gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB即可导入公钥,再重新执行安装rvm的命令)
find / -name rvm -print
7.3:是配置立即生效:
source /usr/local/rvm/scripts/rvm
7.4:查看rvm中已知版本:
rvm list known
7.5:安装rub一个版本(要高于2.2.2),并卸载老版本
rvm install 2.2.7
rvm use 2.2.7 --default
rvm remove 2.0.0
再重新执行:gem install redis
8、执行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
从这个截图我们可以看到很多信息:
三台master分别是127.0.0.1:7001-7003,三台slave分别是127.0.0.1:7004-7006
其中127.0.0.1:7001的slave是127.0.0.1:7004,然后7001占据的slots是0-5460
其中127.0.0.1:7002的slave是127.0.0.1:7005,然后7002占据的slots是5461-10922
其中127.0.0.1:7003的slave是127.0.0.1:7006,然后7003占据的slots是10922-16383
而每个节点前面的一串字符串是这个节点的id:node-id
redis集群的大致结构就是上图的模样,redis都是按照数据槽分区存储数据的,共有16383个数据槽,三个主节点平分16383个数据槽,当有一个set key命令是,首先将key按照hash确定数据槽的位置,进而确定所在的节点,所以有2种情况,第一种情况是数据槽就在当前节点,第二种情况就是数据槽不在当前节点,还有就是如果master宕机了,那么salve节点就会替代宕机节点成为主节点;
验证:
登陆127.0.0.1:7001节点:redis-cli -c -h 127.0.0.1 -p 7001,注意这里要使用-c表示开启集群模式,如果不加-c那么如果key的数据槽不在当前节点,就会报错:
正确的结果:
从这个返回的结果我们可以看出来,数据储存在127.0.0.1:7003这个节点的14687这个数据槽;
查看集群节点信息: cluster nodes
redis哨兵模式:
配置一台主redis master
配置一台从redis slaver,修改slave的redis.conf文件,增加配置项:slaveof 127.0.0.1 6379,这样配置好了主从模式;
接下来配置哨兵,修改slave的配置文件sentinel.conf
sentinel monitor mymaster 192.168.127.129 6379 1
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 60000
启动哨兵:redis-sentinel
redis-server sentinel.conf --sentinel &