配置监听 mycat 是否存活

在所有 Mycat server 上都需要添加检测端口 48700 的脚本,为此需要用到 xinetd,xinetd 为
linux 系统的基础服务。

  • 安装xinetd

    1. yum install xinetd -y
  • 检查/etc/xinetd.conf 的末尾是否有这一句:includedir /etc/xinetd.d,没有就加上

  • 检查 /etc/xinetd.d 文件夹是否存在,不存在也加上
  • 增加 /etc/xinetd.d/mycat_status
    ``` vim /etc/xinetd.d/mycat_status

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

  1. - 增加 /usr/local/mycat/bin/mycat_status 脚本 <br />给新增脚本赋予可执行权限:

vim /usr/local/mycat/bin/mycat_status

!/bin/bash

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

  1. ```
  2. chmod a+x /usr/local/mycat/bin/mycat_status
  • /etc/services 中加入 mycatstatus 服务
    在末尾加入以下内容:
    _Shift+g : 跳转到文件末尾
    ``` vim /etc/services

mycat_status 48700/tcp # mycat_status

  1. - 重启 xinetd 服务

service xinetd restart

  1. - 验证 mycat_status 服务是否启动成功

netstat -antup|grep 48700

tcp6 0 0 :::48700 :::* LISTEN 5406/xinetd

  1. <a name="782f0ee7"></a>
  2. # haproxy的安装

yum -y install haproxy

  1. 查看主要配置文件

$ rpm -ql haproxy /etc/haproxy /etc/haproxy/haproxy.cfg /etc/logrotate.d/haproxy /etc/sysconfig/haproxy /usr/bin/halog /usr/bin/iprange /usr/lib/systemd/system/haproxy.service /usr/sbin/haproxy /usr/sbin/haproxy-systemd-wrapper

  1. **/etc/haproxy/haproxy.cfg 这是配置文件**
  2. <a name="9014a7f5"></a>
  3. # 动手配置haproxy
  4. 先备份下配置文件

cp /etc/haproxy/haproxy.cfg{,.bak}

  1. 注意: 执行haproxy服务的用户是haproxy,需要修改下文件的用户和群主

$ chown -R haproxy:haproxy /etc/haproxy/ $ ll /etc |grep haproxy


<a name="65a7a6db"></a>
## 配置下haproxy的日志

修改:/etc/rsyslog.conf

这两项的注释去掉

$ModLoad imudp $UDPServerRun 514

设置下haproxy.log的路径

local0.* /var/log/haproxy.log

修改:/etc/sysconfig/rsyslog

SYSLOGD_OPTIONS=”-r -m 0 -c 2”



vim /etc/rsyslog.d/haproxy.conf

$ModLoad imudp $UDPServerRun 514 local0.* /var/log/haproxy.log


<a name="fda40561"></a>
## 重启下rsyslog服务

systemctl restart rsyslog.service


<a name="e4bd4ed4"></a>
## 全部配置

vim /etc/haproxy/haproxy.cfg



global

设置日志

    log 127.0.0.1 local0 ##记日志的功能  

    #定义每个haproxy进程的最大连接数 ,由于每个连接包括一个客户端和一个服务器端,所以单个进程的TCP会话最大数目将是该值的两倍。
    maxconn 4096                                                              
    chroot /var/lib/haproxy  
    # 以守护进程的方式运行
    daemon                                                                    

defaults
log global

    #日志中不记录空连接
    option dontlognull
    # 定义连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为不可用
    retries 3                                                                 
    option redispatch                                                         
    maxconn 2000    
    # 设置成功连接到一台服务器的最长等待时间,默认单位是毫秒
    timeout connect 5000     
    # 设置连接客户端发送数据时的成功连接最长等待时间,默认单位是毫秒
    timeout client 50000        
    # 设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒
    timeout server 50000                                                      

统计页面

listen admin_status
bind :1080

    #统计页面url
    stats uri /stats   
    #统计页面用户名和密码设置
    stats auth admin:admin                                             
    mode http    
    #采用http日志格式            
    option httplog                                                            

listen allmycat_service

    ##转发到 mycat 的 8066 端口,即 mycat 的服务端口
    bind :8096 
    # 定义为tcp模式
    mode tcp   
    #采用tcp日志格式
    option tcplog 
    # 开启对后端服务器的健康检测
    option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www    
    # 设置haproxy的调度算法
    balance roundrobin       
    #根据调度分配到真实的后台地址,参数解释:port 48700:检测端口48700, inter 5s:5秒检测一次,rise 2:检测成功2次表示服务器可用,fall 3:检测失败3次后表示服务器不可用
    server mycat_61 192.168.1.61:8066 check port 48700 inter 5s rise 2 fall 3 
    server mycat_62 192.168.1.62:8066 check port 48700 inter 5s rise 2 fall 3 
    #设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒
    timeout server 20000                                                      

listen allmycat_admin
bind :8097 ##转发到 mycat 的 9066 端口,即 mycat 的管理控制台端口 mode tcp
option tcplog
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
balance roundrobin
server mycat_61 192.168.1.61:9066 check port 48700 inter 5s rise 2 fall 3 server mycat_62 192.168.1.62:9066 check port 48700 inter 5s rise 2 fall 3 timeout server 20000


<a name="f6000375"></a>
## 启动haproxy

haproxy -f /etc/haproxy/haproxy.cfg


<a name="94eb6aa7"></a>
## 关闭haproxy

yum install psmisc

killall haproxy


<a name="846173e9"></a>
# 安装keepalived

<a name="e655a410"></a>
## 安装

wget http://www.keepalived.org/software/keepalived-2.0.5.tar.gz tar -zxvf keepalived-2.0.5.tar.gz cd keepalived-2.0.5 ./configure —prefix=/usr/local/keepalived make make install cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ cp ./keepalived/etc/init.d/keepalived /etc/init.d/ mkdir /etc/keepalived cd /etc/keepalived/ cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived mkdir -p /usr/local/keepalived/var/log


<a name="cefb49e4"></a>
## keepalived的配置

cp /etc/keepalived/keepalived.conf{,.bak} vim /etc/keepalived/keepalived.conf


node1

global_defs { router_id NodeA #在当前的haproxy服务配置中有命名 }

VRRP脚本

vrrp_script chk_haproxy {

    #执行的脚本
    script "/etc/keepalived/scripts/check_haproxy.sh"
    #脚本执行间隔
    interval 5
    #脚本结果导致的优先级变更:2表示优先级+10;-2则表示优先级-2
    weight 2

}

vrrp实例

vrrp_instance VI_1 { state MASTER #设置为主服务器 interface ens192 #本机网卡 virtual_router_id 51 #主、备必须一样 priority 100 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高) advert_int 1 #检查间隔,默认1秒

#调用脚本check_haproxy.sh检查haproxy是否存活
track_script {
    chk_haproxy
}
#设置认证
authentication {
    auth_type PASS  #VRRP认证方式,主备必须一致
    auth_pass 1111   #(密码)
}
#虚拟IP地址池,可以有多个IP,每个IP占一行
virtual_ipaddress {
    192.168.1.180 dev ens192 scope global  #VRRP HA虚拟地址
}
#指定当切换到master时,执行的脚本
notify_master /etc/keepalived/scripts/haproxy_master.sh
#指定当切换到backup时,执行的脚本
notify_backup /etc/keepalived/scripts/haproxy_backup.sh
#故障时执行的脚本
notify_fault /etc/keepalived/scripts/haproxy_fault.sh
#当Keepalived程序终止时,执行的脚本
notify_stop /etc/keepalived/scripts/haproxy_stop.sh

}


node2

global_defs { router_id NodeB } vrrp_script chk_haproxy { script “/etc/keepalived/scripts/check_haproxy.sh” interval 5 weight 2 } vrrp_instance VI_1 { state BACKUP #设置为主服务器 interface ens192 #监测网络接口 virtual_router_id 51 #主、备必须一样 priority 90 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高) advert_int 1 #VRRP Multicast广播周期秒数 track_script { chk_haproxy } authentication { auth_type PASS #VRRP认证方式,主备必须一致 auth_pass 1111 #(密码) } virtual_ipaddress { 192.168.1.180 dev ens192 scope global #VRRP HA虚拟地址 } notify_master /etc/keepalived/scripts/haproxy_master.sh notify_backup /etc/keepalived/scripts/haproxy_backup.sh notify_fault /etc/keepalived/scripts/haproxy_fault.sh notify_stop /etc/keepalived/scripts/haproxy_stop.sh }


<a name="59281eec"></a>
## 创建配置文件和脚本

mkdir /etc/keepalived/scripts


-  创建检查haproxy是否存活的脚本

vim /etc/keepalived/scripts/check_haproxy.sh

```
#!/bin/bash
STARTHAPROXY="/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg"
STOPKEEPALIVED="/etc/init.d/keepalived stop"
LOGFILE="/usr/local/keepalived/var/log/keepalived-haproxy-state.log"
echo "[check_haproxy status]" >> $LOGFILE
A=`ps -C haproxy --no-header |wc -l`
echo "[check_haproxy status]" >> $LOGFILE
date >> $LOGFILE
#如果没有haproxy进程存在,就启动haproxy,停止keepalived,并写入日志
if [ $A -eq 0 ];then
echo $STARTHAPROXY >> $LOGFILE
$STARTHAPROXY >> $LOGFILE 2>&1
sleep 5
fi
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
exit 0
else
exit 1
fi
  • 创建切换到MASTER与BACKUP脚本

    vim /etc/keepalived/scripts/haproxy_master.sh
    vim /etc/keepalived/scripts/haproxy_backup.sh
    # 在两个文件中写入以下内容
    
    #!/bin/bash
    STARTHAPROXY=`/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg`
    STOPHAPROXY=`ps -ef | grep sbin/haproxy | grep -v grep | awk '{print $2}'| xargs kill -s 9`
    LOGFILE="/usr/local/keepalived/var/log/keepalived-haproxy-state.log"
    echo "[master]" >> $LOGFILE
    date >> $LOGFILE
    echo "Being master...." >> $LOGFILE 2>&1
    echo "stop haproxy...." >> $LOGFILE 2>&1
    $STOPHAPROXY >> $LOGFILE 2>&1
    echo "start haproxy...." >> $LOGFILE 2>&1
    $STARTHAPROXY >> $LOGFILE 2>&1
    echo "haproxy stared ..." >> $LOGFILE
    
  • 创建故障时执行的脚本

    vim /etc/keepalived/scripts/haproxy_fault.sh
    
    #!/bin/bash
    LOGFILE=/usr/local/keepalived/var/log/keepalived-haproxy-state.log
    echo "[fault]" >> $LOGFILE
    date >> $LOGFILE
    
  • 创建停止vrrp脚本

    #!/bin/bash
    LOGFILE=/usr/local/keepalived/var/log/keepalived-haproxy-state.log
    echo "[stop]" >> $LOGFILE
    date >> $LOGFILE
    
  • 赋予脚本可执行权限

    chmod 777 /etc/keepalived/scripts/*
    
  • 启动keepalived

    systemctl start keepalived.service
    
  • 加入开机启动

    systemctl enable keepalived.service
    

测试

在浏览器输入:http://192.168.1.63:1080/stats

HAProxy高可用 - 图1

Dbeaver链接

HAProxy高可用 - 图2