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    
  • 相关阅读:
    char *p = "abcdefg"; p[0] = p[1]出错
    最近在 OS-10.9下配置opencv, cgal, latex, qt, pillow
    Python文件操作
    Python字典和集合
    Python目录操作
    python处理中文(待补充)
    混合高斯模型
    随机生成某些稀疏矩阵
    matlab注释
    C#中int,string,char[],char的转换(待续)
  • 原文地址:https://www.cnblogs.com/xiazh/p/2630846.html
Copyright © 2011-2022 走看看