首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Redis主从+哨兵模式的实践

大家应该都经历过单机redis的场景,一旦出现单点故障那就扎心了,我们以哨兵模式的经典场景 1主+2从+3哨兵为例,如果避免单主挂掉后的服务可用性。

服务器规划

192.168.52.136 主

192.168.52.137 从

192.168.52.129 从

安装配置

redis.conf主要配置项

slaveof 192.168.52.136 6379

sentinel.conf主要配置项

sentinel monitor mymaster 192.168.52.136 6379 2

sentinel config-epoch mymaster 34

sentinel leader-epoch mymaster 34

sentinel known-slave mymaster 192.168.52.129 6379

sentinel known-slave mymaster 192.168.52.137 6379

sentinel known-sentinel mymaster 192.168.52.129 26379 3ab877a5329c2c3c8353da2f93741d6d832bb2f5

sentinel known-sentinel mymaster 192.168.52.137 26379 6e8792e877b00c4e0d1a916f90366403c9628b50

sentinel current-epoch 34

启用实例

每台服务器上都启动2个redis实例

root 2229 0.2 0.2 133576 2320 pts/0 Sl+ 07:06 0:00 src/redis-server *:6379

root 2256 0.4 0.2 133568 2476 pts/1 Sl+ 07:07 0:00 src/redis-sentinel *:26379 [sentinel]

模拟主挂掉的场景

停掉主192.168.52.136的进程,通过代码来切换到由哨兵选举出来的新主的。代码如下

require_once 'vendor/autoload.php';

use PSRedis\Client;

use PSRedis\HAClient;

use PSRedis\MasterDiscovery;

$sentinel1 = new Client('192.168.52.136', '26379');

$sentinel2 = new Client('192.168.52.137', '26379');

$sentinel3 = new Client('192.168.52.129', '26379');

$masterDiscovery = new MasterDiscovery('wsmaster');

$masterDiscovery->addSentinel($sentinel1);

$masterDiscovery->addSentinel($sentinel2);

$masterDiscovery->addSentinel($sentinel3);

$master = $masterDiscovery->getMaster();

var_export($master->getIpAddress());

var_export($master->getPort());

附切换master的代码库地址 https://github.com/jamescauwelier/PSRedis

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180307G1H65700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券