测试redis+keepalived实现简单的主备切换

转自:

测试redis+keepalived实现简单的主备切换 - Try My Best 尽力而为 - ITeye技术网站
http://raising.iteye.com/blog/2311757

keepalived是一个是集群管理中保证集群高可用的一个服务软件,它具备心跳检测的功能。运用在redis上,则是具备主备切换的控制功能。

keepalived的主备切换方案的设计思想如下:

当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby;

当 Master 挂掉,Slave 正常时, Slave接管服务,同时关闭主从复制功能;

当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,于此同时Slave等待Master同步数据完成之后,恢复Slave身份。

然后依次循环。

下面就来大概讲下实现过程:

环境准备

主:10.15.34.21

备:10.15.34.22

VIP(虚拟IP):10.15.34.23,10.15.34.24

0.在主机和备机上分别创建用户部署redis和keepalived,如用户路径:/home/cachedb

1.在主机和备机上安装redis(过程略);

2.在主机和备机上安装keepalived(过程略);

3.修改主机和备机上的keepalived的配置文件keepalived.conf(可将原有的配置文件备份成keepalived.conf.bak)

1)主机的keepalived配置:

Xml代码

  1. ! Configuration File for keepalived
  2. global_defs {
  3. router_id LVS_REDIS_TEST_21
  4. }
  5. vrrp_script chk_redis_1 {
  6. script "/home/cachedb/redis/scripts/redis_check.sh 10.15.34.21 38001"
  7. interval 10
  8. timeout 2
  9. fall 3
  10. }
  11. vrrp_script chk_redis_2 {
  12. script "/home/cachedb/redis/scripts/redis_check.sh 10.15.34.21 38002"
  13. interval 10
  14. timeout 2
  15. fall 3
  16. }
  17. vrrp_instance VI_1 {
  18. state BACKUP
  19. interface eth0
  20. virtual_router_id 40
  21. priority 150
  22. nopreempt
  23. advert_int 1
  24. authentication {
  25. auth_type PASS
  26. auth_pass 1111
  27. }
  28. track_script {
  29. chk_redis_1
  30. }
  31. virtual_ipaddress {
  32. 10.15.34.23
  33. }
  34. notify_master "/home/cachedb/redis/scripts/redis_master.sh 10.15.34.21"
  35. notify_backup "/home/cachedb/redis/scripts/redis_backup.sh 10.15.34.21 38001 10.15.34.22 38001"
  36. notify_fault  "/home/cachedb/redis/scripts/redis_fault.sh"
  37. notify_stop   "/home/cachedb/redis/scripts/redis_stop.sh"
  38. }
  39. vrrp_instance VI_2 {
  40. state BACKUP
  41. interface eth0
  42. virtual_router_id 41
  43. priority 150
  44. nopreempt
  45. advert_int 1
  46. authentication {
  47. auth_type PASS
  48. auth_pass 1111
  49. }
  50. track_script {
  51. chk_redis_2
  52. }
  53. virtual_ipaddress {
  54. 10.15.34.54
  55. }
  56. notify_master "/home/cachedb/redis/scripts/redis_master.sh 10.15.34.21 38002"
  57. notify_backup "/home/cachedb/redis/scripts/redis_backup.sh 10.15.34.21 38002 10.15.34.22 38002"
  58. notify_fault  "/home/cachedb/redis/scripts/redis_fault.sh"
  59. notify_stop   "/home/cachedb/redis/scripts/redis_stop.sh"
  60. }

2)备机的keepalived配置:

Xml代码

  1. ! Configuration File for keepalived
  2. global_defs {
  3. router_id LVS_REDIS_TEST
  4. }
  5. vrrp_script chk_redis_1 {
  6. script "/home/cachedb/redis/scripts/redis_check.sh 10.15.34.22 38001"
  7. interval 10
  8. timeout 2
  9. fall 3
  10. }
  11. vrrp_script chk_redis_2 {
  12. script "/home/<span style="line-height: 1.5;">cachedb</span><span style="font-size: 1em; line-height: 1.5;">/redis/scripts/redis_check.sh 10.15.34.22 38002"</span>
  13. interval 10
  14. timeout 2
  15. fall 3
  16. }
  17. vrrp_instance VI_1 {
  18. state BACKUP
  19. interface eth0
  20. virtual_router_id 40
  21. priority 100
  22. advert_int 1
  23. authentication {
  24. auth_type PASS
  25. auth_pass 1111
  26. }
  27. track_script {
  28. chk_redis_1
  29. }
  30. virtual_ipaddress {
  31. 10.15.34.33
  32. }
  33. notify_master "/home/<span style="line-height: 1.5;">cachedb</span><span style="font-size: 1em; line-height: 1.5;">/redis/scripts/redis_master.sh 10.15.34.22 38001"</span>
  34. notify_backup "/home/<span style="line-height: 1.5;">cachedb</span><span style="font-size: 1em; line-height: 1.5;">/redis/scripts/redis_backup.sh 10.15.34.22 38001 10.15.34.21 38001"</span>
  35. notify_fault  "/home/<span style="line-height: 1.5;">cachedb</span><span style="font-size: 1em; line-height: 1.5;">/redis/scripts/redis_fault.sh"</span>
  36. notify_stop   "/home/<span style="line-height: 1.5;">cachedb</span><span style="font-size: 1em; line-height: 1.5;">/redis/scripts/redis_stop.sh"</span>
  37. }
  38. vrrp_instance VI_2 {
  39. state BACKUP
  40. interface eth0
  41. virtual_router_id 41
  42. priority 100
  43. advert_int 1
  44. authentication {
  45. auth_type PASS
  46. auth_pass 1111
  47. }
  48. track_script {
  49. chk_redis_2
  50. }
  51. virtual_ipaddress {
  52. 10.15.34.34
  53. }
  54. notify_master "/home/<span style="line-height: 1.5;">cachedb</span><span style="font-size: 1em; line-height: 1.5;">/redis/scripts/redis_master.sh 10.15.34.22 38002"</span>
  55. notify_backup "/home/<span style="line-height: 1.5;">cachedb</span><span style="font-size: 1em; line-height: 1.5;">/redis/scripts/redis_backup.sh 10.15.34.22 38002 10.15.34.21 38002"</span>
  56. notify_fault  "/home/<span style="line-height: 1.5;">cachedb</span><span style="font-size: 1em; line-height: 1.5;">/redis/scripts/redis_fault.sh"</span>
  57. notify_stop   "/home/<span style="line-height: 1.5;">cachedb</span><span style="font-size: 1em; line-height: 1.5;">/redis/scripts/redis_stop.sh"</span>
  58. }

注意:a. 备机的keepalived配置的priority要比主机的低; b. 备机不能有nopreempt属性;

c.  virtual_router_id  这个主备配置的要对应一致,并且在局域网要唯一,注意使用默认的ID如51时要check改ID有木有被占用,若有就换一个。

配置完以后:

<!--[if !supportLists]-->1)<!--[endif]-->启动主机的redis服务,再在root下启动keepalived服务;

<!--[if !supportLists]-->2)<!--[endif]-->启动备机的redis服务,再在root下启动keepalived服务;

<!--[if !supportLists]-->3)<!--[endif]-->查看主机的角色:

./redis-cli -h 10.15.34.21 -p 38001

查看备机的角色:

./redis-cli -h 10.15.34.22 -p 38001

查看主机的redis-state的log日志:(Log日志的位置由redis_*.sh脚本文件里指定)

再查看备机的redis-state的log日志:

4)尝试kill掉主机的redis服务,再在备机上查看role角色,得到:

可以看出它变成master了,而与此同时,它的redis-state.log日志如下:

1)我们不妨在备机上用root用户查看VIP的漂移情况:(虚拟IP的漂移需要一小段时间,不是立刻~)

ip a

在备机上可以发现虚拟IP的漂移情况。

<!--[if !supportLists]-->1)<!--[endif]-->而如果再重启之前master上的redis服务,会发现它的角色是slave了,这说明,master和salve发生了角色互换。

<!--[if !supportLists]-->2)<!--[endif]-->可以再尝试把备机上的redis服务kill掉,会发现主机上的角色会恢复成master;可以在主机上使用root用户来运行 ip a命令,会发现虚拟IP被漂移到主机上了。

时间: 2024-10-27 07:14:20

测试redis+keepalived实现简单的主备切换的相关文章

Redis安装,主从,主备切换

网络环境: 主:10.187.120.5 从:10.187.69.58 从:10.187.69.59 一.安装 mv redis-2.8.19.tar.gz /export/servers/ cd /export/servers/ tar zxf redis-2.8.19.tar.gz cd redis-2.8.19 make && make install 二,主从环境搭建 主:10.187.120.5 conf/redis_6379.conf (src/redis-server con

keepalived实现redis主备切换

试验目标: 1:主redis发生故障时,从redis自动切换为主redis. 2:主redis恢复正常后,自动降级为从redis. 试验环境: 主redis:192.168.189.138 从redis:192.168.189.131 VIP:192.168.189.123 主从redis均安装了keepalived与redis,redis已配置好主从.Redis端口44444. 1:制作redis监控与主备切换脚本: Redis监控脚本:(监控redis是否正常) # cat /usr/loc

HA集群之keepalived详解/基于keepalived+LVS-DR构建HA主备模型(一)

一.理论部分:     keepalived是vrrp协议的实现:原生设计目的为高可用ipvs服务:keepalived能够配置文件中的定义生成ipvs规则:并能够对各RealServer的健康状态进行检测:  vrrp协议:虚拟冗余路由协议:早期只是主要在路由器上提供的一种非常简单的完成将多个物理设备组建成一个虚拟设备,并且在多个物理设备之间漂移地址一种协议:非常轻量化,性能非常好.而keepalived无非就是通过vrrp协议在Linux主机上通过一个守护进程,把Linux主机扮演成路由器,

Nginx+Keepalived主备切换(包含nginx服务停止)

原文地址:http://blog.sina.com.cn/s/blog_79ac6aa80101bmed.html Nginx+Keepalived主备切换(包含nginx服务停止) 环境: VM中4台CentOS 本机PC充当测试机win8 步骤: 1.搭建 nginx+keepalived主备切换(不考虑主nginx停掉现象)文章中的环境 2.修改两台部署的keepalived的配置文件 3.编写观察nginx进程情况的脚本内容 #!/bin/bash A=`ps -C nginx --no

mysql主从配置&&基于keepalived的主备切换

mysql互为主从设置 && 主备切换配置 需求说明: 1.公司架构一直是一台单独的mysql在线上跑,虽然一直没有出现什么宕机事件,但是出于一个高可用的考虑,提出主从备份.主备切换的需求: 2.实现这个需求的前一段时间只是在做数据库备份的时候实现了主从热备,为了实现主备切换功能,继续操作上述需求: 实验环境: master1:10.1.156.3:3306 master2:10.1.156.5:3306 my.cnf配置文件关于主从这块的修改: master1: server-id =

Keepalived中Master和Backup主备切换机制浅析

在keepalived的VRRP实例配置中会一般会设置Master和Backup来指定初始状态,但是这并不意味着此节点一直就是Master角色.控制节点角色的是Keepalived配置文件中的"priority"值和vrrp_script模块中设置的"weight"值.下面分别分情况对主备机切换机制作详细说明. 配置简介: 主机 IP 操作系统 软件 VIP 备注 nginx01 172.27.9.91 Centos7 keepalived nginx 172.27

Oracle 11.2.0.4.0 Dataguard部署和日常维护(5)-Datauard 主备切换和故障转移篇

1. dataguard主备切换 1.1. 查看当前主备库是否具备切换条件 on slave select sequence#,first_time,next_time,archived,applied from v$archived_log where SEQUENCE#=(select max(SEQUENCE#) from v$archived_log); SEQUENCE# FIRST_TIME NEXT_TIME ARCHIVED APPLIED ---------- --------

十个网络优化改造案例之三 交换机HSRP主备切换

主要内容及技术 HSRP 静态路由调整 前言: 这是一次较大规模的网络整改.当两台核心层设备Cisco 6509的上行业务不同的时候,要把两台Cisco 6509的角色进行互换,这还是需要花一番功夫的.这不仅仅是两台Cisco6509 HSRP Active和Standby角色互换的问题,其中牵涉到的上行路由.OSPF配置.两台Cisco 6509上连接的外联业务的对换问题. 当年我接到这个任务的时候,光是研究两台Cisco 6509上万行的配置就用了三天的时间.这次我讲这个案例的时候,限于时间

Oracle11g搭建DataGuard及主备切换方法总结【亲测可用】

2019-04-11 分类:Oracle 阅读(2626) 评论(0) 文章目录[隐藏] 一.DataGuard 工作原理 二.搭建环境 三.主库配置 四.备库配置 五.主备切换 一.DataGuard 工作原理 Data Gurad 通过冗余数据来提供数据保护,Data Gurad 通过日志同步机制保证冗余数据和主数之前的同步,这种同步可以是实时,延时,同步,异步多种形式.Data Gurad 常用于异地容灾和小企业的高可用性方案,虽然可以在Standby 机器上执行只读查询,从而分散Prim