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

相关推荐

  • Python基础篇之过程型程序设计

    一、Python过程型程序设计 面向过程 以指令为中心,由指令处理数据 如何组织代码解码问题 面向对象 以数据为中心,所有的处理代码都围绕数据展开 如何设计数据结构组织数据,并提供对此类数据所允许处理操作 简单方法: 1)、编译安装新版本至某特定路径 # yum install readline-devel # tar xf Python-2.7.6.tar…

    2018-01-11
  • 优云云监控:先定一个运维小目标,比方监控它10000台主机

    “想做世界最好是对的,但是最好先定一个能达到的小目标,比方说我先挣它一个亿。”,王首富云淡风轻地给各行各业提供了一个很好的Roadmap,包括我们运维。的确,如今数据中心的规模增长速度也已像一匹脱缰的野马,各地都频频建设起超大型数据中心。按工信部的定义,超大型是指规模大于等于一万个标准机架的数据中心,考虑到虚拟化技术的使用,实际上需要运维的主机规模很容易超过…

    系统运维 2016-12-05
  • 马哥教育网络班22期+第7周课程练习

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;       [root@localhost ~]#…

    Linux干货 2016-10-09
  • 系统启动这块的一些实验及基本内容–下

    下面我来讲下grub,grub在编辑的时候可以进入一种模式就是单用户模式,就是当grub.conf文件未写入密码时,普通用户将直接忽略系统密码进入系统,所以这可以称为一个捷径,也可以成为一个漏洞,当然linux的前辈们不可能连这个都想不到,他们也有自己的办法,这就是我们grub的两层加密机制,在选定登陆界面之前可以设置一次,启动内核时也可以设置一次,密码也可…

    Linux干货 2016-09-13
  • vsftpd+pam+MySQL—->实现虚拟用户认证

    一、安装所需要程序 1、安装vsftpd yum -y install vsftpd 2、安装MySQL yum -y install  mysql-server mysql-devel pam_mysql 二、创建虚拟用户账号 1.准备数据库及相关表 首先请确保mys…

    Linux干货 2016-09-19
  • Linux内核编译以及自制Linux系统

    内核编译 单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。   内核组成部分: kernel: 内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE; kernel object: 内核对象,一般放置于/lib/modules/VERSION-RELEASE/ [ ]:…

    2016-09-21