到此,我们的 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、先看下客户端请求数据的轮询结构图:

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

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

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

5、构建代码:

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

准备三个php 文件:

RoundSlave.php:作用轮询

start.php:开始执行的主题

onOFF.php:代码执行开关

这里我们打开四个终端,第一个是用来在宿主机部署代码、第二个是用来检测日志、第三个用来执行代码的开关、第四个是用来在 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);

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

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,程序就会自动关闭

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

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

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

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

  1. docker部署redis集群_Docker部署Redis集群----第六节(docker-redis-sentinel集群的机制)...

    通过前面的三个篇章的认知学习与实践,相信大家搭建自己的docker redis主从应该是没有任何问题了.普通的主从复制到此就结束了,下面我们要来分析讲解,普通主从复制的升级版"哨兵集群&qu ...

  2. docker port如何增加端口_docker部署redis实战

    原创首发于公众号:编程三分钟 " 换电脑的时候不想再搭建开发环境了!--编程三分钟" 什么是docker Docker是一个用来管理容器的应用程序,而容器就是模拟运行应用程序所依赖 ...

  3. docker image设置jdk版本_Docker 部署 Spring Boot

    作者:云天 镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 一.Docker 简介 Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口.它是目前最流行的 Linux 容 ...

  4. 【重识云原生】第六章容器6.1.8节——Docker核心技术UnionFS

    <重识云原生系列>专题索引: 第一章--不谋全局不足以谋一域 第二章计算第1节--计算虚拟化技术总述 第二章计算第2节--主流虚拟化技术之VMare ESXi 第二章计算第3节--主流虚拟 ...

  5. netcore部署到docker 实现excel生成_Docker部署Redis集群----第七节(docker-redis-sentinel集群实现篇)...

    由于工作时间的问题,今天才给大家分享我们的第七篇章,让大家久等了.... 上一篇章,我们了解到了redis主从复制的哨兵集群,简单的一句话就是,"时时对主节点进行监控,一旦发现多个从节点都无 ...

  6. redis哨兵集群部署 docker单机模拟-六节点

    目录 如果有不懂得,私信我就行,十分欢迎交流 一.准备工作 二.拉取redis镜像 三.部署多个容器 四.脚本讲解 1.脚本循环 2.配置文件 3.创建docker容器 五.从节点加入主节点 一.加入 ...

  7. k8s redis集群_基于K8S部署redis哨兵集群

    本 文 主 要 内 容 什么是Kubernetes分布式容器管理平台 PaaS平台redis-sentinel集群架构简介 PaaS平台部署redis哨兵集群 redis-sentinel容器测试及验 ...

  8. linux下,redis 3.2.1双节点集群安装部署

    为什么80%的码农都做不了架构师?>>>    一.环境准备 1.JDK环境准备,需卸载掉自带JDK (1)检查服务器是否自带jdk环境 [root@redis1 /]# rpm - ...

  9. Redis集群模式部署

    以下以Linux(CentOS)系统为例 1.1 下载和编译 $ wget http://download.redis.io/releases/redis-4.0.7.tar.gz $ tar xzf ...

最新文章

  1. 固件安全性—防止内存损坏和注入攻击
  2. 问:PC机上的两个dns,是首用dns的查不到再查 备用的,是么?
  3. php oracle创建临时表,Oracle常用命令笔记
  4. Java虚拟机学习(6):对象访问
  5. 软件设计方法--契约式设计Design by contract
  6. Error: No controllers detected :问题解决
  7. 一道关于String的易错习题
  8. TCP发送端突发性(burst)发送报文的成因
  9. 中文(语音结果)的文本纠错综述 Chinese Spelling Check
  10. 什么是shapefile文件
  11. IBM系统分析——领域建模
  12. usb接口供电不足_分享电脑usb接口供电不足解决方法
  13. php阴阳万年历转换的接口,PHP编程实现阳历转换为阴历的方法实例
  14. HearthBuddy 调试肯瑞托法师寒冰屏障的配合
  15. Thematic Contests -codeforce
  16. openstack删除僵尸卷
  17. 记在拿到cvte的offer之后
  18. Mac下GOPATH配置
  19. 月薪2w运营人必备的120款运营神器
  20. 股票查询接口常见的证券编码规则是怎样的?

热门文章

  1. 度微尔开发者联盟网站
  2. 戴尔游匣7559经常(大概半小时)断电,关机的解决办法
  3. 用calloc()函数分配内存
  4. php报错怎么改,php 怎么设置报错级别 和 控制报错[转]
  5. python3安装cx oracle,[求助]python3安装cx_Oracle 报错
  6. python第十六课——ascii码
  7. redis 系列10 字符串对象
  8. 算法设计之0-1背包问题
  9. NSArray和NSString的联合使用
  10. Js获取当前日期时间及其它操作(转)