redis集群的搭建
集群中至少应该有奇数个节点,所以至少有三个节点,每个节点至少有一个备份节点,所以下面使用6节点(主节点、备份节点由redis-cluster集群确定)。
主机列表
ip
ip1 7001 ,7002
ip2 7002,7003
ip3 7003 ,7001
1. 3台主机分别安装redis (参考另一个blog)
1> 下载 安装包
redis官网地址:http://www.redis.io/
wget http://download.redis.io/releases/redis-4.0.2.tar.gz
或者
下载tar.gz 后ftp传上linux主机
2> 解压 安装
tar zxvf redis-4.0.2.tar.gz
cd redis-4.0.2
make
make install PREFIX=/data/redis-cluster //默认安装到/usr/local/bin目录下。这里指定安装目录/data/redis-cluster
在/data/redis-cluster 建7001 7002 两个目录,是P1 主机上。
在P2建7002,7003 目录
在P3建 7001 7002目录
3> 修改配置
cp /fox/redis-4.0.2/redis.conf /data/redis-cluster/700*/
daemonize yes #后台启动
port 7001 #修改端口号,从7001到7006
cluster-enabled yes #开启cluster,去掉注释
cluster-config-file nodes-7001.conf //7001-7006替换
cluster-node-timeout 15000
appendonly yes
protected-mode no ////关闭保护模式
dir /data/redis-cluster/7001/data //redis持久化文件路径,默认为当前路径 7001 替换不同的目录
pidfile /var/run/redis_7001.pid //7001 替换
此配置信息复制6份,每一份注意修改700*
红色部分:http://www.cnblogs.com/wangqingyi/articles/5575419.html
可以看到 Protected-mode 是为了禁止公网访问redis cache,加强redis安全的。
它启用的条件,有两个:
1) 没有bind IP
2) 没有设置访问密码
如果启用了,则只能够通过lookback ip(127.0.0.1)访问Redis cache,如果从外网访问,则会返回相应的错误信息:
4> 复制redis解压文件src下的redis-trib.rb文件到redis-cluster目录
5> redis 服务放到bin,方便执行命令
make install PREFIX=/data/redis-cluster
指定了安装目录,所有redis-cli 等服务不再/usr/local/bin。其实可以安装时候去掉prefix指定。
2. 安装ruby环境(以下在一台机器上安装即可)
[root@localhost redis-cluster]# yum install ruby
[root@localhost redis-cluster]# yum install rubygems
3. 升级ruby
redis requires Ruby version >= 2.2.2.
安装: http://www.runoob.com/ruby/ruby-installation-unix.html
$ tar -xvzf ruby-2.2.3.tgz $ cd ruby-2.2.3
- 现在,配置并编译源代码,如下所示:
$ ./configure $ make $ sudo make install
- 安装后,通过在命令行中输入以下命令来确保一切工作正常:
$ruby -v ruby 2.2.3……
4. 安装redis gem
报错:gem install 时报错,no such file to load -- zlib
解决办法是:
- 进入ruby源码文件夹
- 安装ruby自身提供的zlib包
#cd ext/zlib
#ruby ./extconf.rb
#make
#make install
5. 启动所有redis
redis-server redis.conf
6.使用redis-trib.rb创建集群
在安装了ruby 的主机上执行:
./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
使用create命令 --replicas 1 参数表示为每个主节点创建一个从节点,其他参数是实例的地址集合
上面显示创建成功,有3个主节点,3个从节点,每个节点都是成功连接状态。
3个主节点[M]以及分配的哈希卡槽如下:
M: dfd510594da614469a93a0a70767ec9145aefb1a 127.0.0.1:7001
slots:0-5460 (5461 slots) master
M: e02eac35110bbf44c61ff90175e04d55cca097ff 127.0.0.1:7002
slots:5461-10922 (5462 slots) master
M: 4385809e6f4952ecb122dbfedbee29109d6bb234 127.0.0.1:7003
slots:10923-16383 (5461 slots) master
3个从节点[S]以及附属的主节点如下:
S: ec02c9ef3acee069e8849f143a492db18d4bb06c 127.0.0.1:7004
replicates dfd510594da614469a93a0a70767ec9145aefb1a
S: 83e5a8bb94fb5aaa892cd2f6216604e03e4a6c75 127.0.0.1:7005
replicates e02eac35110bbf44c61ff90175e04d55cca097ff
S: 10c097c429ca24f8720986c6b66f0688bfb901ee 127.0.0.1:7006
replicates 4385809e6f4952ecb122dbfedbee29109d6bb234
报错1:
[root@itfirst src]# redis-cli -h 192.168.186.91 -p 7001
192.168.186.91:7001> flushdb
OK
192.168.186.91:7001> quit
[root@itfirst src]# redis-cli -h 192.168.186.91 -p 7002
192.168.186.91:7002> flushdb
OK
192.168.186.91:7002> quit
[root@itfirst src]# redis-cli -h 192.168.186.91 -p 7003
192.168.186.91:7003> flushdb
OK
192.168.186.91:7003> quit
[root@itfirst src]# redis-cli -h 192.168.186.91 -p 7004
192.168.186.91:7004> flushdb
OK
192.168.186.91:7004> quit
[root@itfirst src]# redis-cli -h 192.168.186.91 -p 7005
192.168.186.91:7005> flushdb
OK
192.168.186.91:7005> quit
错误:这是由于之间创建集群没有成功,需要将nodes.conf和dir里面的文件全部删除
解决:删除。重启redis。然后在建集群
7.验证集群
1> 登录集群客户端,-c标识以集群方式登录redis-cli -h 192.168.186.91 -c -p 7002
或者把h 去掉
2> 查看集群信息
192.168.186.91:7002> cluster info
8. 集群挂了
挂了一个,从节点转成主节点,主节点启动后,就变从节点
9.节点操作