转自:

测试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配置:

  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配置:

  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被漂移到主机上了。

测试redis+keepalived实现简单的主备切换【转载】的更多相关文章

  1. Redis安装,主从,主备切换

    网络环境: 主:10.187.120.5 从:10.187.69.58 从:10.187.69.59 一.安装 mv redis-2.8.19.tar.gz /export/servers/ cd / ...

  2. redis配置主从备份以及主备切换方案配置

    前提:redis中,主从切换场景中,没有绝对的主和从,只有初始化的主和从,然后当主down后,从就变成主了,而主即使连接上,也是从,不会变为主 1.redis-server的主备关系: 需要配置的机器 ...

  3. redis配置主从备份以及主备切换方案配置(转)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/gsying1474/article/de ...

  4. keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群

    keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群 内网路由都用mac地址 一个mac地址绑定多个ip一个网卡只能一个mac地址,而且mac地址无法改,但 ...

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

    原文地址:http://blog.sina.com.cn/s/blog_79ac6aa80101bmed.html Nginx+Keepalived主备切换(包含nginx服务停止) 环境: VM中4 ...

  6. 在Windows Azure上配置VM主备切换(1)——Linux篇

    对任何一个上线系统来说,高可用设计是不可或缺的一个环节,这样才可以确保应用可以持续.稳定的运行,而不是频繁的掉线.停机.高可用设计的核心思路很简单,就是消除一切单点故障,将单点链路或者节点升级为多点. ...

  7. 在Azure云上实现postgres主备切换

    以下是工作上实现postgres主备切换功能所用到的代码和步骤,中间走了不少弯路,在此记录下.所用到的操作系统为centos 7.5,安装了两台服务器,hostname为VM7的为Master,VM8 ...

  8. KingbaseES R6 集群主机锁冲突导致的主备切换案例

    ​ 案例说明: 主库在业务高峰期间,客户执行建表等DDL操作,主库产生"AccessExclusiveLock "锁,导致大量的事务产生锁冲突,大量的会话堆积,客户端session ...

  9. (摘)DataGuard物理standby管理 - 主备切换

    DataGuard物理standby管理 - 主备切换 Dataguard的切换分为两种,switchover和failover. switchover一般用于数据库或硬件升级,这时只需要较短时间中断 ...

随机推荐

  1. this is it

    hello everyone: 我是光哥.以后就在这里更新博客了.^_^ 主要更新一些学习记录,再加点别的吧 2015-8-21 许昌 申庄 吃饭去了,下午2:27的车去郑州!

  2. JPA基本注解介绍

    一.@Entity •@Entity 标注用于实体类声明语句之前, 指出该Java 类为实体类,将映射到指定的数据库表. 如声明一个实体类 Customer,它将映射到数据库中的 customer 表 ...

  3. oracle 同义词

    同义词概念 Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系.它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使 ...

  4. PHP signal 信号

    最早写php时,发现在终端执行一个php文件,会一直等待程序执行完成以后,终端才能继续下面的操作,若不小心按了下Ctrl+C会导致php程序退出,闭避免这种情况发生,将会使用php的系统编程,即sig ...

  5. Android底部导航栏创建——ViewPager + RadioGroup

    原创文章,引用请注明出处:http://www.cnblogs.com/baipengzhan/p/6270201.html Android底部导航栏有多种实现方式,本文详解其中的ViewPager ...

  6. 键盘虚拟键值编码表 使用keybd_Event

    键盘虚拟键值编码表 使用keybd_Event 模拟键盘输入首先要用到一个API函数:keybd_event. 我们是菜鸟,所以不必具体去理解它的详细用法,只要按以下方法使用即可了!呵呵! 模拟按键有 ...

  7. CSS3秘笈:第五章

    第五章  层叠管理样式 1.层叠是决定哪些样式属性要被应用到某一个元素的一套规则. 2.最近的祖先样式胜出:浏览器会采用离相关标签最近的样式. 3.直接应用的样式胜出:任何直接应用于指定标签的样式都战 ...

  8. Bootstrap 3 与 Foundation 5

    开发工程师, 使用 Bootstrap. 前端开发人员, 使用 Foundation. 我们来谈谈为什么. Bootstrap 与 Foundation 有许多关键的区别, 但是, 我想你只需要记住一 ...

  9. 剑指offer青蛙跳台阶问题

    (1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级.求该青蛙跳上一个n 级的台阶总共有多少种跳法. //递归方式  public static int f(int n) { //参数合法性验证 ...

  10. 解决不能打开wifi问题

    使用 命令svc wifi来调试,避免使用GUI 相关资料  https://community.freescale.com/thread/319407 D/WifiService( 313): se ...