Redis Cluster 集群 Predis 无密码连接
写在前面的话:无密码连接,适用于当前主机的php连redis,如果需要远程连接,无密码连接显然不太安全。第一次搭建,可用此方法搭建集群进行测试,环境搭建完,再设置密码,参考另外两篇设置密码连接redis集群
要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下
假设本机地址:127.0.0.1, 如果需要搭建远程连接的redis集群,为后面设置密码做准备,这里127.0.0.1改成主机真实IP即可,我的VM虚拟机IP 例:10.10.10.171
127.0.0.1:7000 #主
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 #从
一、下载并按装 Redis 稳定版
1.下载并安装
[root@localhost ~]# wget http://download.redis.io/redis-stable.tar.gz
[root@localhost ~]# tar xvzf redis-stable.tar.gz
[root@localhost ~]# mv redis-stable /usr/local/
[root@localhost ~]# cd /usr/local/redis-stable/
[root@localhost redis-stable]# make
2.在make成功以后,需要make test。在make test出现异常。
[root@localhost redis-stable]# make test
cd src && make test
make[1]: Entering directory `/usr/local/redis-stable/src'
You need tcl 8.5 or newer in order to run the Redis test
make[1]: *** [test] Error 1
make[1]: Leaving directory `/usr/local/redis-stable/src'
make: *** [test] Error 2
异常原因:没有安装tcl
解决方案:yum install -y tcl
[root@localhost redis-stable]# yum install -y tcl
3.在make成功以后,会在src目录下多出一些可执行文件:redis-server,redis-cli等等。
方便期间用cp命令复制到usr目录下运行。
cd src
cp redis-server /usr/local/bin/
cp redis-cli /usr/local/bin/
以上操作后Redis安装完成
二、搭建集群
1. 创建集群需要的目录
[root@localhost redis-stable]# cd /usr/local
[root@localhost local]# mkdir cluster
[root@localhost local]# cd cluster
[root@localhost cluster]# mkdir 7000
[root@localhost cluster]# mkdir 7001
[root@localhost cluster]# mkdir 7002
[root@localhost cluster]# mkdir 7003
[root@localhost cluster]# mkdir 7004
[root@localhost cluster]# mkdir 7005
2.复制一个redis.conf,并编缉,(这个文件只是作为共用配置模版,实际不需要运作)
[root@localhost cluster]# cp /usr/local/redis-stable/redis.conf /usr/local/cluster
[root@localhost cluster]# vim redis.conf
3.修改配置文件中的下面选项,(vim小提示可用"/"、"?"方法查找对应代码,例:/port + 回车,?daemonize + 回车)
#注释bind (允许所有地址连接,如果只在本地测试,则无需注释该行,如果运行在虚拟机,需用不同IP测试环境,可注释,也可在127.0.0.1后 + 空格 +192.168.1.110 类似地址)
# bind 127.0.0.1
# 如果需要允许远程连接服务顺,注释bind的同时,关闭保护模式,否则默认yes即可
protected-mode no
port 7000
daemonize yes
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
:wq 保存并退出vim
4.修改完redis.conf配置文件中的这些配置项之后把这个配置文件分别拷贝到7000/7001/7002/7003/7004/7005目录下面
[root@localhost cluster]# cp /usr/local/cluster/redis.conf /usr/local/cluster/7000
[root@localhost cluster]# cp /usr/local/cluster/redis.conf /usr/local/cluster/7001
[root@localhost cluster]# cp /usr/local/cluster/redis.conf /usr/local/cluster/7002
[root@localhost cluster]# cp /usr/local/cluster/redis.conf /usr/local/cluster/7003
[root@localhost cluster]# cp /usr/local/cluster/redis.conf /usr/local/cluster/7004
[root@localhost cluster]# cp /usr/local/cluster/redis.conf /usr/local/cluster/7005
注意:拷贝完成之后要修改7001/7002/7003/7004/7005目录下面redis.conf文件中的port参数,以及cluster-config-file参数 分别改为对应的文件夹的名称
5.分别启动这6个redis实例
cd /usr/local/cluster/7000
redis-server redis.conf
cd /usr/local/cluster/7001
redis-server redis.conf
cd /usr/local/cluster/7002
redis-server redis.conf
cd /usr/local/cluster/7003
redis-server redis.conf
cd /usr/local/cluster/7004
redis-server redis.conf
cd /usr/local/cluster/7005
redis-server redis.conf
6.查看进程启动是否成功
[root@localhost 7005]# ps -ef|grep redis
上图即表示运行成功
7.创建集群,我的虚拟机IP设置为10.10.10.171,根据你自己配置,自行修改地址,不需要远程连接的,直接用127.0.0.1:端口
[root@localhost src]# ./redis-trib.rb create --replicas 1 10.10.10.171:7000 10.10.10.171:7001 10.10.10.171:7002 10.10.10.171:7003 10.10.10.171:7004 10.10.10.171:7005
错误内容:/usr/bin/env: ruby: No such file or directory
所以需要安装ruby的环境,这里推荐使用yum install ruby安装
yum install ruby
8.再次执行第7.步命令,报错
./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
from ./redis-trib.rb:24
还缺少rubygems环境,继续yum install rubygems安装
yum install rubygems
9.执行第7.步命序,报错
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from ./redis-trib.rb:25
还缺少redis,继续安装(这个镜像安装有点慢,测试时大概停顿了10几秒才有提示安装完成)
gem install redis
10.最后再次执行第7.步命令,正常执行
11. 输入yes,然后配置完成
至此redis集群即搭建成功!
12.使用redis-cli命令进入集群环境测试一下
[root@localhost src]# ./redis-cli -c -h 10.10.10.171 -p 7000
10.10.10.171:7000> keys *
(empty list or set)
10.10.10.171:7000> set foo bar
-> Redirected to slot [12182] located at 10.10.10.171:7002
OK
10.10.10.171:7002> get foo
"bar"
10.10.10.171:7002> keys *
1) "foo"
10.10.10.171:7002>
13.在windows 环境中 Predis 远程连接测试, 如果用的127.0.0.1,就在centos主机环境中搭建lnmp环境,再用127.0.0.1配置,我这里使用远程连接方式,后面会再写一篇给redis集群设置密码并远程连接的文章 (predis:https://github.com/nrk/predis,自行下载)
require __DIR__.'/../autoload.php';
//redis实例
$servers = array(
'10.10.10.171:7000',
'10.10.10.171:7001',
'10.10.10.171:7002',
'10.10.10.171:7003',
'10.10.10.171:7004',
'10.10.10.171:7005',
);
$options = ['cluster' =>'redis'];
$client = new Predis\Client($servers,$options);
$client->set('foo1','11');
$client->set('foo2','22');
$client->set('foo3','33');
// 此方法用于找出所有key名以foo开头的key
$allkeys = [];
$cmdKeys = $client->createCommand('keys', ['foo*']);
foreach ($client->getConnection() as $nodeConnection) {
$nodeKeys = $nodeConnection->executeCommand($cmdKeys);
$allkeys = array_merge($allkeys, $nodeKeys);
}
print_r($allkeys);
至此,无密码redis集群搭建成功,设置密码的情况会遇到一些小问题,但后来也一一解决了,带密码远程连接Redis集群的方法会另写