zoukankan      html  css  js  c++  java
  • haproxy对redis进行负载均衡

    实现思路:

    将两个redis-server作为后端,然后通过haproxy做为负载均衡器,每个redis-server的机器上配置配置一个用于健康检查的shell,并通过xinetd将这个shell设置为服务监听9981端口并进行管理。

    haproxy通过redis-server机器上的9981端口进行健康检查,如果检查失败,就直接移除该redis-server,恢复后又自动添加

    haproxy.conf

    global
            maxconn 2
    #       debug
            quiet
            user zhxia
            group zhxia
            nbproc 1
            log 127.0.0.1 local3
            spread-checks 2
    defaults
            timeout server  3s
            timeout connect 3s
            timeout client 60s
            timeout http-request 3s
            timeout queue 3s
    frontend redis_read
            bind 192.168.187.140:52020
            default_backend cluster_redis
    backend cluster_redis
            mode tcp
            option tcpka
            balance static-rr
            option httpchk
            server  redis_01        192.168.180.101:6380    weight 1 check port 9981 inter 2s rise 2 fall 1
            server  redis_02        192.168.180.101:6381    weight 1 check port 9981 inter 2s rise 2 fall 1

    PS:

    check:启用健康检测

    inter:健康检测间隔

    rise:检测服务可用的连续次数

    fall:检测服务不可用的连续次数

     

    安装xinetd,统一对服务进行管理与端口监听

    chk_redis.sh

    #!/bin/bash
    #===================================================================================
    #this script just for check the redis server if it alive
    #author:zhxia
    #date:2012-08-09
    #===================================================================================
    redis_host=192.168.180.101
    redis_port=6380
    redis_client=/usr/local/bin/redis-cli
    result=`$redis_client -h $redis_host -p $redis_port -r 1 -i 1 'info' 2>/dev/null`
    if [ "$result" != "" ];then
        echo -e "HTTP/1.1 200 OK\r\n"
        echo -e "Content-Type: Content-Type: text/plain\r\n"
        echo -e "\r\n"
        echo -e "redis is running,listening port is:${redis_port}.\r\n"
        echo -e "\r\n"
    else
        echo -e "HTTP/1.1 503 Service Unavailable\r\n"
        echo -e "Content-Type: Content-Type: text/plain\r\n"
        echo -e "\r\n"
        echo -e "redis is down! listen port is:${redis_port}"
        echo -e "\r\n"
    fi

     /etc/xinetd.d/redischk

    service redischk
    {
        flags        = REUSE
        protocol    = tcp
        socket_type    = stream
        port        = 9981
        wait        = no
        user        = haozu
        server        = /home/haozu/bin/chk_redis.sh
        log_on_failure +=USERID
        disable        =no
    }

    /etc/services

    # Local services
    redischk    9981/tcp    
  • 相关阅读:
    TensorFlow学习笔记1:graph、session和op
    TensorFlow学习笔记2:逻辑回归实现手写字符识别
    Tensorflow学习笔记3:卷积神经网络实现手写字符识别
    Firstpython介绍
    Oracle sql语句学习
    总结__window dns域名解析错误及其解决方法
    Group By 和 Having, Where ,Order by语句的执行顺序
    Oracle 语句分类
    webbrowser自动登录,没有点击事件,不是submit提交按钮的情况下如何模拟点击登录
    webbrowser跨域访问iframe中的元素实现自动登录
  • 原文地址:https://www.cnblogs.com/xiazh/p/2630846.html
Copyright © 2011-2022 走看看