1、先配置redis主从,在从服务器上配置成为主服务器的从机

slaveof 120.26.192.1  #主服务器的IP和端口
masterauth "" #连接密码

  为了后面的自动切换能成功,我们在主服务器也配置好连接从服务器的密码

masterauth ""

  重启之后可以看见是否建立了关系

127.0.0.1:> info replication
# Replication
role:master
connected_slaves:
slave0:ip=121.19.2.1,port=,state=online,offset=,lag=
master_replid:932ba59e06f5481dff1c3ac62ab7458e0ea0aa57
master_replid2:
master_repl_offset:
second_repl_offset:-
repl_backlog_active:
repl_backlog_size:
repl_backlog_first_byte_offset:
repl_backlog_histlen:

2、配置哨兵 sentinel.conf

  

port   
daemonize yes
sentinel monitor mymaster 192.168.251.129 2
sentinel down-after-milliseconds mymaster
sentinel parallel-syncs mymaster
sentinel failover-timeout mymaster
logfile "/var/log/sentinel_log.log"
sentinel auth-pass mymaster 12345#密码
注释:
. port :当前Sentinel服务运行的端口
. dir : Sentinel服务运行时使用的临时文件夹
sentinel monitor mymaster 192.168.251.129 :Sentinel去监视一个名为master的主redis实例,这个主实例的IP地址为本机地址192.168.1.,端口号为6379,而将这个主实例判断为失效至少需要2个 Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行
. sentinel down-after-milliseconds mymaster :指定了Sentinel认为Redis实例已经失效所需的毫秒数。当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行
. sentinel parallel-syncs mymaster :指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
. sentinel failover-timeout mymaster :如果在该时间(ms)内未能完成failover操作,则认为该failover失败

  在主从服务器上都配置好,配置可以一样的,然后启动哨兵

  

redis-sentinel sentinel.conf

  

  通过手动关闭主服务器上的redis,看是否自动切换,如果成功就证明生效。开始配置客户端。

3、用的是TP5框架,改写框架自带的redis类 thinkphp/library/think/cache/driver/Redis.php

//两台服务器都配置好了监控哨兵
//主从配置要设置好密码,两变密码最好一致,因为切换的时候要密码验证
protected $sentinel = array(
array(
'host' => '116.62.111.1',
// redis端口
'port' => 1940,
// 密码
'password' => '123redis',
'select' => 0,
'timeout' => 1,
'expire' => 10000,
'persistent' => false,
'prefix' => 'subs',
'serialize' => true,
),
array(
'host' => '116.62.111.2',
// redis端口
'port' => 1940,
// 密码
'password' => '123redis',
'select' => 0,
'timeout' => 1,
'expire' => 10000,
'persistent' => false,
'prefix' => 'subs',
'serialize' => true,
), );

2、初始化redis的链接配置,通过链接哨兵来获取当前的主从服务器的信息,保证每次都是读的主服务器

 foreach ($this->sentinel as $sentinel){
try{ $this->handler->connect($sentinel['host'], $sentinel['port'], $this->options['timeout']); if ('' != $sentinel['password']) {
$this->handler->auth($sentinel['password']);
}
break;
}catch (\Exception $e){
continue;
}
}

3、测试只要一台服务器死,另外一台从几会自动切换成主机,把死的机子重启之后又会自动变成从机,自动同步关联。  

  

最新文章

  1. Linq表达式、Lambda表达式你更喜欢哪个?
  2. sqlserver中分区函数 partition by的用法
  3. HDU 1754 I Hate It(线段树模板题)
  4. objective-c 通过类名实例化类
  5. 1034. Head of a Gang (30)
  6. js 二维数组定义
  7. Android GLSurfaceView用法详解(二)
  8. bnuoj 31796 键盘上的蚂蚁(搜索模拟)
  9. A Case for Flash Memory SSD in Enterprise Database Applications
  10. Hibernate Validation使用示例及讲解
  11. aix5.1 5.2 5.3 6.1 7.1运维技术总结
  12. [SignalR]异常信息捕获以及处理
  13. Docker的名字空间
  14. Python + PyQt5 实现美剧爬虫可视工具
  15. iBatis第三章:iBatis的基本用法
  16. [Swift]LeetCode333. 最大的二分搜索子树 $ Largest BST Subtree
  17. laravel5实现第三方登录(微信)
  18. Python任意网段Web端口信息探测工具
  19. jsp和servlet有哪些相同点和不同点,它们之间的联系是什么?
  20. 对象 get和set方法

热门文章

  1. vue-cli全局安装
  2. 机器学习---最小二乘线性回归模型的5个基本假设(Machine Learning Least Squares Linear Regression Assumptions)
  3. Java Web乱码原因与解决
  4. 输入法无法切换 win10
  5. 新系统添加sshkey/pexpect基本使用
  6. Docker 基本核心原理
  7. GIT-Linux(CentOS7)系统部署git服务器
  8. Gradle创建项目(IntelliJ IDEA)
  9. 半导体知识:蚀刻(Etch)工艺讲解
  10. E. Vanya and Balloons Codeforces Round #355 (Div. 2)