Redis Cluster 集群 Predis 无密码连接

阅读 (3818)
环境:Centos 6.5 安装包:redis-stable.tar.gz,依赖环境:ruby \ rubygems \ redis 概述:创建无密码Redis集群,主要使用redis src目录下的 ./redis-trib.rb create 创建集群

写在前面的话:无密码连接,适用于当前主机的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集群的方法会另写

1.Redis Cluster 已运行的Redis集群 设置密码 Predis 连接

2.Redis Cluster 待运行的Redis集群 永久加密并远程连接

更新于:2016-12-28 01:18:46
返回顶部