docker部署redis集群_Docker部署Redis集群----第九节(docker-redis哨兵集群“轮询分流”篇实例一)...

 2023-09-13 阅读 21 评论 0

摘要:到此,我们的 Redis 哨兵集群就结束了,本篇章是第九篇章,也是使用集群方式的实例一来实现php的轮询分流。1、准备工作:在我们上一篇章实现redis 哨兵集群的基础上开始,在服务器上部署php,这里就不使用 yum 一步步安装了,因为

499c224586b57c51f3ca6430dc9c71e0.png

到此,我们的 Redis 哨兵集群就结束了,本篇章是第九篇章,也是使用集群方式的实例一来实现php的轮询分流。

1、准备工作:

在我们上一篇章实现redis 哨兵集群的基础上开始,在服务器上部署php,这里就不使用 yum 一步步安装了,因为这不是本篇章主要内容,请大家按照这个地址https://lnmp.org/install.html的安装步骤一步步开始安装,其中MySQL也一同安装,为下个篇章的实例二做好准备。

版本:mysql5.6、php7.2

安装过程大概需要一个小时左右的时间...

2、检测php是否已安装完成:

执行命令php -v
会看到以下结果:
PHP 7.2.6 (cli) (built: Apr  9 2019 23:55:32) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

3、先看下客户端请求数据的轮询结构图:

docker搭建redis、

d4cf5121f9c18ecd377813ce526a7c54.png

4、安装redis扩展:

会不会有疑问,我们不是已经用docker 搭建集群了吗?怎么还要安装redis扩展呢?是因为我们执行我们的代码案例是在宿主机而不是在docker容器里,所以要在宿主机安装php扩展和redis扩展。

安装redis扩展很简单,跟着我一起做就OK了。

使用git来获取phpredis包,至于放在哪里自己决定,执行以下命令来获取
[root@instance-rttngj1u download]# git clone https://github.com/phpredis/phpredis.git
下载完毕后进入到压缩包
[root@instance-rttngj1u download]# cd phpredis/

注意:在开始编译之前,如果不确定自己的php安装路径,请执行which php然后再确认自己的php版本可以执行 php -v 来查看。在确定好php的安装路径后

执行下面的命令:

[root@instance-rttngj1u /]# which php
/usr/bin/php
[root@instance-rttngj1u /]# /usr/bin/phpize7.2
-bash: /usr/bin/phpize7.2: 没有那个文件或目录
如果我们发现没有phpize7.2没有怎么办?这里就算给大家再普及点本篇章外的姿势吧。

搞技术就是这样,注意方式方法:首先我们的姿势一定要对!!!,姿势不对怎么办?那就来点实操长长见识 。

本篇章外的姿势:
  • 执行安装【再三强调注意自己的php版本】:
[root@instance-rttngj1u bin]# sudo yum install php7.2-dev
已加载插件:langpacks, versionlock
baidu-bcm  
....                                                                                  | 2.5 kB  00:00:00                                                                               | 3.5 kB  00:00:00 
  • 如果出现错误更新下yum源:
因为我的系统是干净的系统,所以我们直接使用yum来安装redis
[root@instance-rttngj1u ~]# yum install -y redis[root@instance-rttngj1u bin]# sudo yum update
更新完成以后再执行第一步的代码,确保无误。安装gcc依赖包
[root@instance-rttngj1u bin]# yum -y install gcc gcc-c++ libxml2-devel m4 autoconf pcre-devel make cmake bison[root@instance-rttngj1u bin]# find phpi*
phpize
这个时候我就会发现有phpize了,注意前面刚刚我们执行的是/usr/bin/phpize7.2 这里没有7.2,不要奇怪
相信自己安装的是对的
继续执行指令
[root@instance-rttngj1u phpredis]# /usr/bin/phpize
如果出现以下错误找不到config.m4
Cannot find config.m4. 
Make sure that you run '/usr/bin/phpize' in the top level source directory of the module没关系 我们全局找下执行指令
[root@instance-rttngj1u /]# find -name config.m4
./home/wwwroot/default/phpmyadmin/vendor/twig/twig/ext/twig/config.m4
./download/phpredis/config.m4
当然你们找到的可能跟我的路径不一样,得注意下
然后copy到我们要执行的phpize同级目录下
[root@instance-rttngj1u /]# cp /home/wwwroot/default/phpmyadmin/vendor/twig/twig/ext/twig/config.m4 /download/phpredis/
进入到phpredis目录再执行phpize
[root@instance-rttngj1u phpredis]# /usr/bin/phpize
Configuring for:
PHP Api Version:         20170718
Zend Module Api No:      20170718
Zend Extension Api No:   320170718
执行指令生成MakeFile
[root@instance-rttngj1u phpredis]# ./configure --with-php-config=/usr/local/php/bin/php-config
最后一步执行安装
[root@instance-rttngj1u phpredis]# make && make install
把扩展加入到php的配置当中去 修改php.ini

b5227fdbd81f3fc637d9fb61ba92c574.png
安装成功以后开启redis扩展
首先我们可以执行php-m来查看有php安装了哪些扩展
当我们安装成功以后就可以看到我们的redis扩展已经开启了如下图:

docker redis 配置文件,

09fe45bca1a41fec641b1237aa65a721.png

篇外姿势就到这了。。。继续我们的主题。

5、构建代码:

扩展一下构建方法这里我们选择两个步骤实现,第一步随机【选择哨兵Sentinel】、第二步轮询【选择从节点Slave】

准备三个php 文件:

RoundSlave.php:作用轮询

start.php:开始执行的主题

onOFF.php:代码执行开关

docker启动redis镜像、这里我们打开四个终端,第一个是用来在宿主机部署代码、第二个是用来检测日志、第三个用来执行代码的开关、第四个是用来在 Docker 容器 master 主机点设置 redis 缓存存储值。以下是具体步骤:

首选做好准备工作:准备好四个终端、在第一个终端建立三个php文件:

1、随机访问一个节点:

  • 组装哨兵节点
include 'RoundSlave.php';
$sentinel = [['ip' => '106.12.212.131','port' => 22536],['ip' => '106.12.212.131','port' => 22537],['ip' => '106.12.212.131','port' => 22538]
];
  • 采用随机访问的方式:
$getSentinel = $sentinel[array_rand($sentinel)];
  • 实例redis,通过ip和端口连接
$redis = new Redis();
$redis->connect($getSentinel['ip'],$getSentinel['port']);
  • 获取从节点列表及其状态信息
$slaveInfo = $redis->rawCommand('SENTINEL','slaves','mymaster');
//var_dump($slaveInfo);

d2ebaebfdea810197add45b916d7dd73.png
  • 循环遍历输出从节点信息
$slaves=[];
foreach ($slaveInfo as $val){$slaves[]=['ip'=>$val[3],'port'=>$val[5]];
}
//var_dump($slaves);

5262d5ab4fe57f7501c97f52e096f5f1.png

2、轮询:

  • 通过上面的循环遍历,开始选择轮询找我们的从节点 类RoundSlave.php
//节点选择方法
class RoundSlave
{static $lastI = 0;//检测轮询次数static $num = 0;public function select($list){$currentI = self::$lastI;$value=$list[$currentI];//在部署哨兵集群时,从几点的键值+1不能大于从节点总数if($currentI+1 > count($list)-1){self::$lastI=0;}else{self::$lastI++;}$setNum = self::$num++;//存入日志file_put_contents('log.log',$setNum);return $value;}
}
  • 用php来实现定时器 start.php
做到每3秒执行一次函数,该函数主要是用来控制,定时器是否生效,一旦生效,定时器永远执行下去,我们的目的
是用来模拟客户端来访问我们的 redis 数据资源。请看下面的代码//设置程序的执行时间没有限制
set_time_limit(0);
//5秒钟执行一次
$sleep_time = 3;
//引用程序执行开关
$switch = include 'onOFF.php';
//逻辑处理执行
while($switch){$switch = include 'onOFF.php';$slave=(new RoundSlave())->select($slaves);try{$redis=new Redis();$redis->connect($slave['ip'],$slave['port']);var_dump(date("Y-m-d",time()),$slave,$redis->get('dos'));}catch (RedisException $e){var_dump($e->getMessage());}//等待时间,循环进行下一次操作。sleep($sleep_time);
}
exit();
  • 创建开关执行程序 onOFF.php
return true;
//return false;
//true:开 默认是打开的
//false:关
注意:开关一旦开启,程序将永远执行下去,所以当你不在调试时,请更改这里配置变成false,程序就会自动关闭

docker mysql集群、好了这个轮询我们就做好了。下面是我一步步整合好经过测试没有问题而发布的一段视频,可以照我的方法,自己来构建下,同时本视频中我在跟目录新建了/www/lunxun目录:所有操作都在这个目录里完成。

a0f77083509d450aa5a1d13dc83bdc7d.png
docker Redis 哨兵集群 轮询分流https://www.zhihu.com/video/1099853632677171200

本篇文章是实力干货,在工作中需要使用docker部署redis哨兵集群,肯定能用到。所谓技不压身,希望有兴趣的踊跃学习,视频主要是讲解轮询分流实现的过程,大晚上了准备了这些。希望大家能学会东西才是我的初衷。最后还是那句话,如果觉得不错,请点击关注我的主页和我的专栏,谢谢。下个篇章我们聊聊百万高并发秒杀。请记得关注。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/49929.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息