redis集群
在redis3.0以前,出现了sentinel工具来监控各个Master的状态(能够看上一篇博客)。若是Master异常则会作主从切换。选举一个slave做为新的Master,3.0以后出现了集群。集群的搭建至少须要3个Master
在这里我只在一台装有linux系统装3个Master和3个slave做为测试。
linux主机的ip为192.168.1.229
第一步
1.下载redis安装包解压并安装到linux系统中。
第二步
2.建立redis集群文件夹,用于存放6个redis集群的文件
mkdir /usr/local/redis-cluster
mkdir 7001 ,mkdir 7002,mkdir 7003,mkdir 7004,mkdir 7005,mkdir 7006
建立好上面的6个文件夹。
第三步
3将redis的redis-conf这个文件夹使用cp命令copy到每个redis文件夹中
而后分别修改每个700*文件夹中redis-conf文件。
(1)daemonize yes 说明:开启redis的后台启动
(2)port 7001到7006 说明:更改6个文件夹中的redis.conf文件的每个端口号。
(3)bind 192.168.1.229 700*(*表明对应的1到6)说明:绑定每个redis的机器的ip和端口号(根据本身的机器ip对应修改)。
(4)dir /usr/local/redis-cluster/700*/ 指定数据文件存放的位置,每一个redis对应本身的文件夹就好。每一个redis必须指定不一样的文件夹位置,否则会丢失数据。
(5)cluster-enabled yes 说明:启动集群模式。
(6)cluster-conf-file nodes700*.conf 说明:集群配置文件,最好分别命名为本身的端口号,方便之后查看。
(7)cluster-node-timeout 5000 说明:集群的生效时间
(8)appendonly yes 说明:开启aof模式。
把6个文件夹中每一个文件夹中的文件都作相对应的修改以后。
第四步
4.因为redis集群须要使用ruby命令,因此咱们须要在linux中安装ruby。
(1)yum install ruby
(2)yum install rubygems
(3)gem install redis (安装redis和ruby的接口)
第五步
5.分别启动6个redis实例,而后检查是否启动成功
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7001/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7002/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7003/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7004/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7005/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/7006/redis.conf
都启动后用ps -ef | grep redis检查是否6个redis实例都启动成功
出现上面的提示证实因此实例都启动成功了。可是这一步成功只能说明咱们redis的配置是没问题的,然是咱们尚未把这6个redis实例设置成一个集群
6.建立集群
到redis3.0安装目录下找到src文件夹,而后执行redis-trib.rb命令
redis-trib.rb create --replicas 1 192.168.1.229:7001 192.168.1.229:7002 192.168.1.229:7003 192.168.1.229:7004 192.168.1.229:7005 192.168.1.229:7006
这个命令就表明把这些个redis实例建立为一个集群 上面命令中的1表明主节点和从节点的比值是多少,若是12个主节点,6个从节点那么咱们的比值就是2,那么咱们是3主3从,因此这个比值是1,并且前三个必定是主节点,redis就是这样规定的。
执行这个命令后,会出现个提示问你是否肯定建立集群。咱们直接输入yes,咱们的集群环境就搭建好了。
7.测试集群,登陆到集群的客户端
/usr/local/redis/bin/redis-cli -c -h 192.168.1.229 -p 7001 c表明集群模式 h表明地址 p表明端口号
咱们进入客户端以后,查看下集群信息cluster nodes

给
这样就说明咱们的集群已经搭建好了
咱们发现上面的信息中说7001,7002,7003分别为master 并且都有对应的hash槽。
此时咱们在集群的任何一个客户端中进行set,而后在其余的客户端中均可以get到。
redis集群添加一个新的主从节点7007为主7008为从
咱们一样在redis-cluster文件夹下药建立7007和7008文件夹,一样要把redis.conf文件copy过去而且像上面同样修改对应参数。
而后分别启动这两个实例,而后启动7007和7008,可是此时7007和7008虽然启动了,可是是不属于咱们集群里面的。
一样适用redis安装文件夹下src文件夹下的redis-trib.rb这个命令。
redis-trib.rb add-node 192.168.1.229:7007 192.168.1.229:7001前面的ip和端口号为新添加的节点,后面的为集群中任意一个节点。
此时咱们就把7007这个新的节点加入到了集群中,可是此时7007做为一个Master尚未分配hash槽,咱们还要为他分配hash槽。
redis-trib.rb reshard 192.168.1.229:7001 这个命令的意思是未7007分配hash槽 这个ip要是集群中任意一个主节点的ip和端口。
而后出现一堆提示以后会让你选择添加的槽数,
填写你想添加的槽数而后回车。
而后会让你输入想要被分配槽的节点的id
选择分配槽的方式是all仍是done,咱们选择all
分配成功
redis-trib.rb add-node 192.168.1.229:7008 192.168.1.229:7001一样把7008添加到集群中。
7008为7007的从节点
咱们须要登陆到redis集群客户端
/usr/local/redis/bin/redis-cli -c -h 192.168.1.229 -p 7001
cluster replicate 7007的id 意思就是把7008添加为7007的从节点。
从集群中删除主节点和从节点
最后咱们尝试删除刚刚添加的主节点7007和从节点7008
删除主节点会相对麻烦一些,由于咱们须要把删除主节点的hash槽分配到其余节点中去!而后再进行移除节点操做
redis-trib.rb reshard 192.168.1.229:7007 咱们直接使用这个命令便可
提示填写你移动的槽的个数。
提示输入要移动到的节点的id,输入一个7003的id
选择分配槽的方式是all仍是done,咱们选择done
最后删除redis-trib.rb del-node 192.168.1.229:7007 7007的id
redis-trib.rb del-node 192.168.1.229:7008 7008的id
删除7007和7008节点成功