Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 588|回复: 0

redis集群PHP解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-4-19 16:38:37 | 显示全部楼层 |阅读模式

    Redis3.2.4 Cluster集群搭建

    服务器环境:
    192.168.3.229
    192.168.3.193
    每台服务器搭建3个节点,组成3个主节点,3个从节点的redis集群。

    注意:防火墙一定要开放监听的redis端口,否则会创建失败。

    一、redis cluster安装

    1、下载和编译安装

    cd /usr/local/src
    wget http://download.redis.io/releases/redis-3.2.4.tar.gz
    tar -zxvf redis-3.2.4.tar.gz
    cd redis-3.2.4/
    make && make install

     

    2、创建redis节点
    选择2台服务器,分别为:192.168.3.229,192.168.3.193,每台服务器有3个节点,组成3个主节点,3个从节点的redis集群。

    a、首先在192.168.3.229创建3个节点:

    复制代码
    cd /usr/local/src
    mkdir redis_cluster  #创建集群目录
    cd redis_cluster/
    mkdir 7000 7001 7002 #分别代表三个节点,对应端口分别为7000、7001、7002
    
    #redis.conf拷贝到7000目录
    cp redis-3.2.4/redis.conf redis_cluster/7000/
    #redis.conf拷贝到7001目录
    cp redis-3.2.4/redis.conf redis_cluster/7001/
    #redis.conf拷贝到7002目录
    cp redis-3.2.4/redis.conf redis_cluster/7002/
    复制代码

     

    b、分别对7000、7001,7002文件夹中的3个redis.conf文件修改对应的配置:

    复制代码
    daemonize yes                          #redis后台运行
    pidfile   /var/run/redis_7000.pid      #pidfile文件对应7000, 7001, 7002
    port 7000                              #端口7000, 7001, 7002
    cluster-enabled  yes                   #开启集群  把注释#去掉
    cluster-config-file  nodes_7000.conf   #集群的配置  配置文件首次启动自动生成 7000,7001,7002,存在/usr/local/src/redis-3.2.4/src目录
    cluster-node-timeout  5000             #请求超时,设置5秒即可
    appendonly  yes                        #aof日志开启,有需要就开启,它会每次写操作都记录一条日志
    logfile "/home/xm6f/dev/redis_cluster/7000/logs/redis.log"
    bind 192.168.1.105 #绑定当前服务器的IP,否则的话在集群通信的时候会出现:[ERR] Sorry, can't connect to node 192.168.200.140:7001

    dbfilename dump_7000.rdb #存在/home/xm6f/dev/redis-3.2.4/src目录
    appendfilename "appendonly_7000.aof" #存在/home/xm6f/dev/redis-3.2.4/src目录

    requirepass 123456 #设置密码,每个节点的密码都必须一致的

    masterauth 123456

    复制代码

    在192.168.3.193创建3个节点:对应的端口改为7003,7004,7005.配置对应的改一下就可以了。

    3、两台机器启动各节点(两台服务器方式一样)

    复制代码
    cd /usr/local/src/
    redis-server /usr/local/src/redis-3.2.4/redis_cluster/7000/redis.conf
    redis-server /usr/local/src/redis-3.2.4/redis_cluster/7001/redis.conf
    redis-server /usr/local/src/redis-3.2.4/redis_cluster/7002/redis.conf
    redis-server /usr/local/src/redis-3.2.4/redis_cluster/7003/redis.conf
    redis-server /usr/local/src/redis-3.2.4/redis_cluster/7004/redis.conf
    redis-server /usr/local/src/redis-3.2.4/redis_cluster/7005/redis.conf
    复制代码

     

    4、查看服务

    ps -ef | grep redis #查看是否启动成功
    netstat -tnlp | grep redis #可以看到redis监听端口

    5、杀死所有redis进程

    pkill -9 redis

     

    二、创建集群
    前面已经准备好了搭建集群的redis节点,接下来我们要把这些节点都串连起来搭建集群。官方提供了一个工具:redis-trib.rb(/home/xm6f/dev/redis-3.2.4/src/redis-trib.rb) 看后缀就知道这东西不能直接执行,它是用ruby写的一个程序,所以我们还得安装ruby.

    yum -y install ruby ruby-devel rubygems rpm-build

    再用 gem 这个命令来安装 redis 接口,gem是ruby的一个工具包。

    gem install redis //等一会儿就好了

    当然,方便操作,两台Server都要安装。

    注意:在执行gem install redis时,报ERROR:Error installing redis:redis requires Ruby version >= 2.2.2异常。
    点击此处查看解决方案

    上面的步骤完事了,接下来运行一下redis-trib.rb

    redis-trib.rb

    确认所有的节点都启动,接下来使用参数 create 创建 (在192.168.1.160中来创建)

    redis-trib.rb create --replicas 1 192.168.3.229:7000 192.168.3.229:7001 192.168.3.229:7002 192.168.3.193:7003 192.168.3.193:7004 192.168.3.193:7005

    注意:

    a、--replicas 1参数表示为每个主节点创建一个从节点,其他参数是实例的地址集合。

    b、防火墙一定要开放监听的端口,否则会创建失败。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    [root@localhost redis-cluster] #
    redis-trib.rb create --replicas 1 192.168.3.229:7000 192.168.3.229:7001 192.168.3.229:7002 192.168.3.193:7003 192.168.3.193:7004 192.168.3.193:7005
    >>> Creating cluster 
    >>> Performing  hash  slots allocation on 6 nodes... 
    Using 3 masters: 
    127.0.0.1:7001 
    127.0.0.1:7002 
    127.0.0.1:7003 
    Adding replica 127.0.0.1:7004 to 127.0.0.1:7001 
    Adding replica 127.0.0.1:7005 to 127.0.0.1:7002 
    Adding replica 127.0.0.1:7006 to 127.0.0.1:7003 
    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 
    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 
    Can I  set  the above configuration? ( type  'yes'  to accept):  yes 
    >>> Nodes configuration updated 
    >>> Assign a different config epoch to each node 
    >>> Sending CLUSTER MEET messages to  join  the cluster 
    Waiting  for  the cluster to  join ...... 
    >>> Performing Cluster Check (using node 127.0.0.1:7001) 
    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 
    M: ec02c9ef3acee069e8849f143a492db18d4bb06c 127.0.0.1:7004 
        slots: (0 slots) master 
        replicates dfd510594da614469a93a0a70767ec9145aefb1a 
    M: 83e5a8bb94fb5aaa892cd2f6216604e03e4a6c75 127.0.0.1:7005 
        slots: (0 slots) master 
        replicates e02eac35110bbf44c61ff90175e04d55cca097ff 
    M: 10c097c429ca24f8720986c6b66f0688bfb901ee 127.0.0.1:7006 
        slots: (0 slots) master 
        replicates 4385809e6f4952ecb122dbfedbee29109d6bb234 
    [OK] All nodes agree about slots configuration. 
    >>> Check  for  open  slots... 
    >>> Check slots coverage... 
    [OK] All 16384 slots covered.

    上面显示创建成功,有3个主节点,3个从节点,每个节点都是成功连接状态。

           

    php操作redis cluster集群成功实例

                     

    PHP要操作redis cluster集群有两种方式:

    1、使用phpredis扩展,这是个c扩展,性能更高,但是phpredis2.x扩展不行,需升级phpredis到3.0,但这个方案参考资料很少

    2、使用predis,纯php开发,使用了命名空间,需要php5.3+,灵活性高

    我用的是predis,下载地址https://github.com/nrk/predis/zipball/master

    下载好后重命名为predis,

     

    server1:192.168.3.229
    server2:192.168.3.193

    predis.php

     
    1. <?php  
    2. require 'predis/autoload.php';//引入predis相关包  
    3. //redis实例  
    4. $servers = array(  
    5.     'tcp://192.168.3.229:7000',  
    6.     'tcp://192.168.3.229:7001',  
    7.     'tcp://192.168.3.229:7002',  
    8.     'tcp://192.168.3.193:7003',  
    9.     'tcp://192.168.3.193:7004',  
    10.     'tcp://192.168.3.193:7005',  
    11. );  
    12.   
    13. $client = new Predis\Client($servers, array('cluster' => 'redis'));  
    14.   
    15. $client->set("name1", "11");  
    16. $client->set("name2", "22");  
    17. $client->set("name3", "33");  
    18.   
    19. $name1 = $client->get('name1');  
    20. $name2 = $client->get('name2');  
    21. $name3 = $client->get('name3');  
    22. var_dump($name1, $name2, $name3);die;  
    23. ?>  

    name1,name2,name3是3个key,按照算法分配到3个slot上,有可能分到3台服务器上

     

    首先运行predis.php查看结果:

    然后登录到redis客户端进行集群验证:

    server1

     
    1. [root@localhost src]# redis-cli -c -p 7000  
    2. 127.0.0.1:7000> get name1  
    3. -> Redirected to slot [12933] located at 192.168.1.199:7004  
    4. "11"  
    5. 192.168.1.199:7004> get name2  
    6. -> Redirected to slot [742] located at 192.168.1.199:7003  
    7. "22"  
    8. 192.168.1.199:7003> get name3  
    9. "33"  
    10. 192.168.1.199:7003>  

    server2

     
    1. [root@localhost src]# redis-cli -c -p 7003  
    2. 127.0.0.1:7003> get name1  
    3. -> Redirected to slot [12933] located at 192.168.1.199:7004  
    4. "11"  
    5. 192.168.1.199:7004> get name2  
    6. -> Redirected to slot [742] located at 192.168.1.199:7003  
    7. "22"  
    8. 192.168.1.199:7003> get name3  
    9. "33"  
    10. 192.168.1.199:7003>  

    可以看到数据分布在各个服务器上,可以根据ps -ef | grep redis,杀掉其中几个redis实例,再看效果

     

     

     

    参考文献:  redis集群教程   、php操作redis cluster集群成功实例

     

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-16 20:37 , Processed in 0.076460 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表