Redis基于keepalived的高可用实践

接着上一章节来:

Redis基于keepalived的高可用实现

方案拓扑图

Redis基于keepalived的高可用实践

测试方案

1.       手动关闭AppM keepalived进程确认keepalived主从变化,AppS1是否变更为主

2.       开启keepalived,手动关闭 AppM redis进程确认ipvsadm ip池是否剔除AppM

3.       开启AppM redis进程,确认AppM是否变更为主

环境准备

服务器信息

Redis基于keepalived的高可用实践

配置服务器host

Manager机器上配置好hosts后通过ansible下发到所有应用服务器

Redis基于keepalived的高可用实践

# ansible app -m copy -a "src=/etc/hosts dest=/etc/hosts owner=root group=root mode=0644 backup=yes"

//抽查对应服务器确认host无误后继续

安装配置keepalived

//安装keepalived ipvsadm

# ansible app -m command -a 'yum install keepalived ipvsadm -y'

//分发配置文件

# ansible AppM -m copy -a 'src=/data/ansible/config/keepalived/keepalived.conf-redis-Mrds dest=/etc/keepalived/keepalived.conf backup=yes'
# ansible apps -m copy -a 'src=/data/ansible/config/keepalived/keepalived.conf-redis-Srds dest=/etc/keepalived/keepalived.conf backup=yes'

//登录AppS2
AppS3
修改priority

//运行keepalived

# ansible app -m command -a 'service keepalived restart'
# ansible app -m command -a 'pidof keepalived'

Redis基于keepalived的高可用实践

//ip

Redis基于keepalived的高可用实践

测试

1.       手动关闭AppM keepalived进程确认keepalived主从变化,AppS1是否变更为主

Redis基于keepalived的高可用实践

Redis基于keepalived的高可用实践

a>     Vip资源已切换至AppS1,但同时我们也发现redis主从并没有切换

2.       开启keepalived,手动关闭 AppM redis进程确认ipvsadm ip池是否剔除AppM

Redis基于keepalived的高可用实践

3.       开启AppM redis进程,确认AppM是否变更为主

Redis基于keepalived的高可用实践

Redis会立刻同步服务到ip

小总

a>     Keepalived相对heartbeat要轻量简单,ipvsadm也由keepalived协助完成

b>     Keepalivedredis应用场景需多mastermater互为同步,

c>      Keepalived的响应速度极快,异常进程或实例恢复后都能迅速发现并实施既定措施

d>     想通过redis自带的sentinelkeepalived结果会有些难度,也不建议

附件

keepalived.conf-redis-Srds

global_defs {
   notification_email {
       lisongtao@ihuilian.com
   }
   notification_email_from   sa@ihuilian.com
   smtp_server smtp.exmail.qq.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL  ##自定义的字符串
}

###在哪里找到自定义配置规范
#vrrp_script chk_nginx_down {   #定义可以手动控制状态的脚本
#    script "killall -0 nginx"
#    interval 1                    #检查时间间隔
#    weight - 13                   #如果检测失败,优先级-13
#}


vrrp_script chk_redis_down {   #定义可以手动控制状态的脚本
    script "killall -0 redis-server"
    interval 1                    #检查时间间隔
    weight -2                   #如果检测失败,优先级-13
}

vrrp_instance VI_1 {
    state BACKUP ###MASTER/BACKUP必须大写,且当MASTER恢复时,会自动恢复为MASTER状态
    interface eth0
    virtual_router_id 51  ###同一个vrrp使用相同的vrrp,整个vrrp内唯一
    priority 99   ###数字越大优先级越高,且要MASTER要高于SLAVE,和sentinel恰好相反...>O<
    advert_int 1   ###Timeout时长秒为单位
    authentication {   ###MASTER和SLAVE密码相同方可正常通信
        auth_type pass
        auth_pass huilian
    }
    virtual_ipaddress { ###每个地址占一行,不能指定子网掩码,与lvs客户端设定的VIP一致
        192.168.1.200
        #192.168.200.17
        #192.168.200.18
    }

    ###跟global_defs中定义的vrrp_script chk_nginx_down对应
   #track_script {     #引用定义的脚本
   #   chk_nginx_down
   #}

    track_script {     #引用定义的脚本
       chk_redis_down
    }


    #notify_master "/etc/keepalived/notify.sh master"
    #notify_backup "/etc/keepalived/notify.sh backup"
    #notify_fault  "/etc/keepalived/notify.sh fault"

}

virtual_server 192.168.1.200  6379{  ###IP和vrrp_instance中定义的vip需一致,IP  PORT
    delay_loop 6    ###健康检查时间/秒
    #lb_algo wlc    ###负载均衡调度算法,常用rr/wlc
    lb_algo rr      ###负载均衡调度算法,常用rr/wlc
    lb_kind DR      ###负载均衡转发规则,  DR,NAT,TUN3
    nat_mask 255.255.255.0
    #persistence_timeout 50   ###会话保持时长
    protocol TCP   ###协议类型转发

    real_server 192.168.1.36 6379{   ###real server IP PORT
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }

    }
    real_server  192.168.1.37 6379{
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }
    }
    real_server  192.168.1.38 6379{
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }

    }

    real_server  192.168.1.39 6379{
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }

    }


}

keepalived.conf-redis-Mrds

global_defs {
   notification_email {
       lisongtao@ihuilian.com
   }
   notification_email_from   sa@ihuilian.com
   smtp_server smtp.exmail.qq.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL  ##自定义的字符串
}

###在哪里找到自定义配置规范
#vrrp_script chk_nginx_down {   #定义可以手动控制状态的脚本
#    script "killall -0 nginx"
#    interval 1                    #检查时间间隔
#    weight - 13                   #如果检测失败,优先级-13
#}


vrrp_script chk_redis_down {   #定义可以手动控制状态的脚本
    script "killall -0 redis-server"
    interval 1                    #检查时间间隔
    weight -2                   #如果检测失败,优先级-13
}

vrrp_instance VI_1 {
    state MASTER    ###MASTER/BACKUP必须大写,且当MASTER恢复时,会自动恢复为MASTER状态
    interface eth0
    virtual_router_id 51  ###同一个vrrp使用相同的vrrp,整个vrrp内唯一
    priority 100   ###数字越大优先级越高,且要MASTER要高于SLAVE,和sentinel恰好相反...>O<
    advert_int 1   ###Timeout时长秒为单位
    authentication {   ###MASTER和SLAVE密码相同方可正常通信
        auth_type pass
        auth_pass huilian
    }
    virtual_ipaddress { ###每个地址占一行,不能指定子网掩码,与lvs客户端设定的VIP一致
        192.168.1.200
        #192.168.200.17
        #192.168.200.18
    }

    ###跟global_defs中定义的vrrp_script chk_nginx_down对应
   #track_script {     #引用定义的脚本
   #   chk_nginx_down
   #}

    track_script {     #引用定义的脚本
       chk_redis_down
    }


    #notify_master "/etc/keepalived/notify.sh master"
    #notify_backup "/etc/keepalived/notify.sh backup"
    #notify_fault  "/etc/keepalived/notify.sh fault"

}

virtual_server 192.168.1.200  6379{  ###IP和vrrp_instance中定义的vip需一致,IP  PORT
    delay_loop 6    ###健康检查时间/秒
    #lb_algo wlc    ###负载均衡调度算法,常用rr/wlc
    lb_algo rr      ###负载均衡调度算法,常用rr/wlc
    lb_kind DR      ###负载均衡转发规则,  DR,NAT,TUN3
    nat_mask 255.255.255.0
    #persistence_timeout 50   ###会话保持时长
    protocol TCP   ###协议类型转发

    real_server 192.168.1.36 6379{   ###real server IP PORT
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }

    }
    real_server  192.168.1.37 6379{
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }
    }
    real_server  192.168.1.38 6379{
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }

    }

    real_server  192.168.1.39 6379{
        weight 1   ###数值越大,权重越大
        TCP_CHECK {
            connect_timeout 1       #表示3秒无响应,则超时
            nb_get_retry 3          #表示重试次数
            delay_before_retry 3    #表示重试间隔
            connect_port 6379         #表示重试间隔
        }

    }


}

下章节预告:

twemproxy + keepalived 实现redis的分布式高可用

原创文章,作者:stanley,如若转载,请注明出处:http://www.178linux.com/703

(0)
stanleystanley
上一篇 2015-03-04 17:41
下一篇 2015-03-06 10:40

相关推荐

  • 马哥教育网络班21期+第10周课程练习

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)     1)开机后会进行POST(开机加电自检),加载BIOS,之后会根据BIOS上的boot  sequence(引导加载次序)找到第一个有引导程序的设备,找到MBR,bootloader(引导加载器)就安装在MBR内。M…

    Linux干货 2016-09-19
  • 硬软链接的区别 节点 以及重定向和管道

    INODE全称叫index node 表中包含文件系统所有文件列表   一个节点是在一个表项 包含有关文件的信息 ( 元数据 ) 包括: 文件类型,权限,UID,GID 链接数(指向这个文件名路径名称个数) 该文件的大小和不同的时间戳 指向磁盘上文件的数据块指针 有关文件的其他数 1 文件引用一个是 inode号   2 我们是通过文件名…

    Linux干货 2016-08-12
  • Linux下硬连接和软连接的区别

    Linux下硬链接与软链接的区别   链接,是指在计算机文件之间传递参数和控制命令,并把它们组成一个可执行的整体的过程。例如我们常见的windows系统下的“快捷方式”,它是一种链接,人们可以通过它来直接访问计算机上的某个文件,不必逐级在硬盘目录下寻找;互联网上的“超文本链接”,它用文字链接的形式来指向一个页面,人们可以通过此链接快速访问网站的页面…

    Linux干货 2016-10-21
  • 小练习题。【第三周】

    练习 1、列出当前系统上所有已经登陆的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 ~]# who | cut -d' ' -f1 |uniq 2、取出最后登录到当前系统的用户的相关信息。 /]# who | sort&nbs…

    Linux干货 2016-11-26
  • 上下文管理练习(为加法函数计时)

    上下文管理(为加法函数计时) 为加法函数计时 使用装饰器显示该函数的执行时长 使用上下文管理显示该函数的执行时长 装饰器实现 import time import datetime from functools import wraps def logger(fn): @wraps(fn) # wraps(fn)(wrapper) def wrapper(*…

    2017-11-18
  • ACL权限详解

    1.ACL简介 2.前期准备 3.ACL的基本操作:添加和修改 4.ACL的其他功能:删除和覆盖 5.目录的默认ACL 6.备份和恢复ACL 7.结束语 1.ACL简介 用户权限管理始终是Linux系统管理中最重要的环节。大家对Linux/Unix的UGO权限管理方式一定不陌生,还有最常用的chmod命令。为了实现一些比较复杂的权限管理,往往不得不创建很多的…

    Linux干货 2017-03-11