mycat+haproxy 实现高可用负载均衡集群

安装环境

HostNameIPRole
host01192.168.227.153MASTER
host02192.168.227.144BACKUP

安装HAProxy

yum install haproxy -y

安装完成之后它的配置文件在 /etc/haproxy/haproxy.cfg

配置文件(两台haproxy 相同)

vim  /etc/haproxy/haproxy.cfg
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    #option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

listen admin_status
    bind 0.0.0.0:48800       
    stats uri /dbs      # haproxy的状态管理页面,通过/dbs来访问
    stats auth admin:123456

listen allmycat_service
    bind 192.168.227.88:8877      #  可以指定本机的ip , 最后绑定为 VIP 漂移IP 
    mode tcp
    option tcplog
    #option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
    balance roundrobin
    server mycat_01 192.168.227.144:8066 check port 48700 inter 5s rise 2 fall 3
    server mycat_02 192.168.227.153:8066 check port 48700 inter 5s rise 2 fall 3

    timeout server 20000

两台机器分别安装守护进程的一个服务

vim /etc/xinetd.d/mycatchk
service mycatchk  # 这个别落下

{
flags = REUSE
socket_type = stream
port = 48700
wait = no
user = root
server = /usr/local/mycat/bin/mycat_status
log_on_failure += USERID
disable = no
}

检测mycat是否正常的脚本

vim /usr/local/mycat/bin/mycat_status
#!/bin/bash
#/usr/local/mycat/bin/mycat_status
# This script checks if a mycat server is healthy running on localhost. It will
# return:
#
# "HTTP/1.x 200 OK\r" (if mycat is running smoothly)
#
# "HTTP/1.x 503 Internal Server Error\r" (else)
mycat=`/usr/local/mycat/bin/mycat status | grep 'not running' | wc -l`
if [ "$mycat" = "0" ];
then
/bin/echo -e "HTTP/1.1 200 OK\r\n"
else
/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"
fi

赋予权限

chmod a+x /usr/local/mycat/bin/mycat_status
vim /etc/services

在末尾加入以下内容:

mycatchk        48700/tcp               # mycat_status


重启 service xinetd restart


netstat -tnlp | grep 48700  # 查看我们配置的端口是否存在

启动haproxy

haproxy -f /etc/haproxy/haproxy.cfg

配置完毕 , 使用同样的方法来配置另一台节点上的haproxy

测试

使用haproxy 代理的端口去连接mycat  测试是否可以连接成功

安装keepalived

yum install keepalived -y

host01 配置

vim /etc/keepalived/keepalived.conf


# ! Configuration File for keepalived

global_defs {
   smtp_connect_timeout 30
   router_id HA002  #两个服务器不能一样
}

vrrp_script chk_http_port {
        script "/etc/keepalived/haproxy_check.sh"
        interval 2
        weight 2
}
vrrp_instance VI_1 {
        state MASTER            # 主节点是MASTER 从节点是 BACKUP
        interface ens33         # 承载漂移ip的网卡
        virtual_router_id 51    # 定义一个热备组,可以认为这是51号热备组
        priority 100            # 注意从节点的优先级给低一些110
        #nopreempt               # 是否是抢占模式 ; 主节点(priority 值大的)配置一定要加上 nopreempt,否则非抢占也不起作用. 从节点不用加这个!!
        advert_int 1            # 1秒互相通告一次,检查对方死了没。
        #unicast_src_ip 192.168.227.144
        #unicast_peer {
         #       192.168.227.154
        #}
        #authentication {
          #      auth_type PASS  # 认证类型
         #       auth_pass 1111  # 认证密码
        #}
        virtual_ipaddress {
                192.168.227.88  # 漂移ip
        }
        track_script {

            chk_http_port

        }
}

host02 配置

vim /etc/keepalived/keepalived.conf

# ! Configuration File for keepalived

global_defs {
   smtp_connect_timeout 30
   router_id HA002  #两个服务器不能一样
}

vrrp_script chk_http_port {
        script "/etc/keepalived/haproxy_check.sh"
        interval 2
        weight 2
}
vrrp_instance VI_1 {
        state BACKUP           # 主节点是MASTER 从节点是 BACKUP
        interface ens33         # 承载漂移ip的网卡
        virtual_router_id 51    # 定义一个热备组,可以认为这是51号热备组
        priority 90            # 注意从节点的优先级给低一些110
        nopreempt               # 主节点(priority 值大的)配置一定要加上 nopreempt,否则非抢占也不起作用. 从节点不用加这个!!
        advert_int 1            # 1秒互相通告一次,检查对方死了没。
        #unicast_src_ip 192.168.227.144
        #unicast_peer {
         #       192.168.227.154
        #}
        #authentication {
          #      auth_type PASS  # 认证类型
         #       auth_pass 1111  # 认证密码
        #}
        virtual_ipaddress {
                192.168.227.88  # 漂移ip
        }
        track_script {

            chk_http_port

        }
}

两台机器都要配置(配置相同); 检测脚本

vim /etc/keepalived/haproxy_check.sh

#!/bin/bash
START_HAPROXY="/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg"
#STOP_HAPROXY="/etc/rc.d/init.d/haproxy stop"
STOPKEEPALIVED="/usr/bin/systemctl stop keepalived"
LOG_FILE="/var/log/keepalived-haproxy-state.log"
HAPS=`ps -C haproxy --no-header |wc -l`
date "+%Y-%m-%d %H:%M:%S" >> $LOG_FILE
echo "check haproxy status" >> $LOG_FILE
if [ $HAPS -eq 0 ];then
echo $START_HAPROXY >> $LOG_FILE
$START_HAPROXY >> $LOG_FILE 2>&1
sleep 3
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
echo "start haproxy failed, killall keepalived" >> $LOG_FILE
killall keepalived
fi
fi



最后赋予可执行权限

chmod a+x /etc/keepalived/haproxy_check.sh

启动keepalived

systemctl start keepalived

查看host01 Matser 节点:

在这里插入图片描述
查看host02 Backup节点:
在这里插入图片描述

我们将主节点的keepalived 停掉之后继续观察

host01 变化:
在这里插入图片描述
host02 变化:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值