赞
踩
1.1 环境准备.三台虚拟机.redis的版本是3.2.9.redis的各个版本下载地址:链接. 三个主节点三个从节点.
①:192.168.199.133.(部署两个Redis服务.)分别在目录redis_cluster7001和7002下.(作为集群控制端,需要编译安装redis,并且安装Ruby环境).
②:192.168.199.136.(部署两个Redis服务.)分别在目录redis_cluster7003和7004下.
③:192.168.199.137.(部署两个Redis服务.)分别在目录redis_cluster7005和7006下.
其中192.168.199.133下载了Redis并且编译安装了.
分别完成另外两台的目录创建.
①:192.168.199.136.
②:192.168.199.137.
1.2 配置文件复制.
192.168.199.133下执行:
scp -r /usr/local/redis/bin root@192.168.199.136:/usr/local/redis(-r递归复制目录)
scp -r /usr/local/redis/bin root@192.168.199.137:/usr/local/redis
1.3 查看复制结果.
①:199.168.199.133.
cp redis.conf /usr/local/redis_cluster/7001
cp redis.conf /usr/local/redis_cluster/7002
②:192.168.199.136.
scp /usr/local/redis-3.2.9/redis.conf root@192.168.199.136:/usr/local/redis_cluster/7003
scp /usr/local/redis-3.2.9/redis.conf root@192.168.199.136:/usr/local/redis_cluster/7004
③:192.168.199.137.(同上)
scp /usr/local/redis-3.2.9/redis.conf root@192.168.199.137:/usr/local/redis_cluster/7005
scp /usr/local/redis-3.2.9/redis.conf root@192.168.199.137:/usr/local/redis_cluster/7006
port 7001 //六个节点配置文件分别是7001-7003
bind 192.168.1.109 //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访,和单机集群有区别
daemonize yes //redis后台运行
pidfile /var/run/redis_7001.pid //pidfile文件对应7001-7003
cluster-enabled yes //开启集群
cluster-config-file nodes_7001.conf //保存节点配置,自动创建,自动更新对应7001-7003
cluster-node-timeout 5000 //集群超时时间,节点超过这个时间没反应就断定是宕机
appendonly yes //存储方式,aof,将写操作记录保存到日志中
7001~7006的6个配置文件都修改一下.根据所在目录修改即可.
①:安装Curl.
sudo yum install curl
查看Curl的版本.curl --version
②:RVM的安装.(直接yum安装会出 现这样的错误.RVM是Ruby的包管理器)
gem install redis
ERROR: Error installing redis:
redis requires Ruby version >= 2.2.2.)
参考这篇文章的解决方式:链接.
下面是自己按照文章中的解决方式走了一遍,是可行的.
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | bash -s stable
find / -name rvm -print
source /usr/local/rvm/scripts/rvm
rvm list known(列出已知的rvm的版本)
rvm install 2.4.1(安装rvm 2.4.1).
rvm use 2.4.1(使用2.4.1的版本).
rvm use 2.4.1 --default(设置ruby的默认版本)
rvm remove 2.0.0(移除ruby2.0.0的版本).
ruby --version(查看ruby的版本).
安装redis.
3.1我三台虚拟机由于没有启动防火墙,如果启动了,做一下这些端口的映射.首先是启动6个Redis服务.
①:192.168.199.133的7001和7002服务.
./redis-server /usr/local/redis_cluster/7001/redis.conf
./redis-server /usr/local/redis_cluster/7002/redis.conf
ps -ef | grep -i redis
② 192.168.199.136
./redis-server /usr/local/redis_cluster/7003/redis.conf
./redis-server /usr/local/redis_cluster/7004/redis.conf
ps -ef | grep -i redis
③ 192.168.199.137
./redis-server /usr/local/redis_cluster/7005/redis.conf
./redis-server /usr/local/redis_cluster/7006/redis.conf
ps -ef | grep -i redis
至此6台Redis服务均已成功启动了.
3.2 Redis的Ruby脚本创建集群.
redis-3.2.9的src目录下有redis-trib.rb脚本.
./redis-trib.rb create --replicas 1 192.168.199.133:7001 192.168.199.136:7003 192.168.199.137:7005 192.168.199.133:7002 192.168.199.136:7004 192.168.199.137:7006 (这里说明一下,按照顺序,前面的是主节点后面三个是从节点,--replicates 1表示一个主节点有三个从节点的.)
三个主节点的Hash槽范围是:一共有16384的hash solt。(0~16383)
7001:(0~5460)
7003:(5461~10922)
7005:(10923~16383)
至此,完成了Linux下的三台机器上三主三从节点的分布式Redis的集群搭建.这里是在虚拟机里面搭建,如果是云服务器上,肯定是开启了防火墙的,注意添加集群的端口开放,以及安全组的相应端口开放,否则会一直Join...添加服务中的.
./redis-cli -h 192.168.199.136 -p 7003 -c(-h是IP,-p是端口,-c是连接集群)
连接集群后和单台操作redis的key一样,这里是设置了一个key,没有跳转是因为分配hash槽是就分配在这个7003主节点上了.
Redis Cluster值分配规则,所以分配key的时候,它会使用CRC16(‘my_name’)%16384算法,来计算,将这个key 放到哪个节点,这里分配到了15118slot 就分配到了7005(10923~16383)这个节点上。所以有这样一个跳转:
-> Redirected to slot [15118] located at 192.168.199.137:7005
看一下下面删除这两个key时,会更清楚一些.7005主节点跳转之7003主节点.5798属于(5461~10922).
①:首先是干掉一个主节点,例如7003.(当这个主节点有从节点的时候)
./redis-trib.rb check 192.168.199.133:7001(check检查集群)7003对应的主节点挂了,则从节点7002升为主节点
cluster nodes(这里连接一个从节点7004).
②:再次干掉一个主节点(当这个主节点没有从节点的时候).直接说就是7002节点.
再次检测集群.
./redis-trib.rb check 192.168.199.133:7001
至此完成了,Linux下的分布式Redis的集群搭建的完整过程.遇到了一些问题,多思考一下,还是比较简单的.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。