mycat+haproxy+keepalived

2018-07-18  本文已影响132人  青城楼主

mycat配置:schemal.xml和conf/server.xml,详细配置如下:f

schemal配置

server配置

  二,下载安装haproxy

    haproxy下载地址:http://www.haproxy.org/download

安装:

创建用户组和用户:

dudo groupadd haproxy

sudo useradd -g haproxy haproxy

解压:

tar -zxvf haproxy-1.7.6.tar.gz

cd haproxy-1.7.6/

uname -r #查看系统内核版本号

编译配置:make TARGET=linux3100 PREFIX=/usr/local/haproxy ARCH=x86_64

安装:sudo make install PREFIX=/usr/local/haproxy

进入安装目录:cd /usr/local/haproxy

sudo chown -R haproxy.haproxy *

创建haproxy.cfg配置文件:

给haproxy目录授权:sudo chmod -R 777 haproxy/

cd /usr/local/haproxy

touch haproxy.cfg

vi /usr/local/haproxy/haproxy.cfg

下面是haproxy.cfg的配置文件:

三:haproxy记录日志:

默认haproxy是不记录日志的,为了记录日志还需要配置syslog模块,在Linux下是rsyslogd服务

sudo yum -y install rsyslog

记录haproxy日志的配置

cd /etc/rsyslog.d/

如果没有这个目录,

新建:cd /etc

mkdir rsyslog.d

cd /etc/rsyslog.d/

sudo touch haproxy.conf

sudo vi /etc/rsyslog.d/haproxy.conf

内容如下:

$ModLoad imudp

$UDPServerRun 514

local0.* /var/log/haproxy.log

sudo vi /etc/rsyslog.conf

在#### RULES ####上面一行的地方加入以下内容:

# Include all config files in /etc/rsyslog.d/

$IncludeConfig /etc/rsyslog.d/*.conf

#### RULES ####

在 local7.* /var/log/boot.log 的下面加入以下内容(增加后的效果如下):

# Save boot messages also to boot.log

local7.*                                               /var/log/boot.log

local0.*                                               /var/log/haproxy.log

保存,重启 rsyslog 服务

service rsyslog restart

       四:配置监听 mycat 是否存活

       这个步骤需要在安装mycat的机器上都操作,比如161,165。

mycat上都需要添加检测端口 48700 的脚本,为此需要用到 xinetd,xinetd 为

linux 系统的基础服务。

首先在 xinetd 目录下面增加脚本与端口的映射配置文件

1、如果 xinetd 没有安装,使用如下命令安装:

sudo yum install xinetd -y

2.检查/etc/xinetd.conf 的末尾是否有这一句:includedir /etc/xinetd.d  没有就加上

3.检查 /etc/xinetd.d 文件夹是否存在,不存在则创建

cd /etc

mkdir xinetd.d

4、增加 /etc/xinetd.d/mycat_status

监听 mycat 是否存活的配置,执行以下命令:

监听 mycat 是否存活的配置,执行以下命令:

cd /etc

mkdir xinetd.d

cd /etc/xinetd.d/

touch mycat_status

vim /etc/xinetd.d/mycat_status

内容如下:

[plain] view plain copy

service mycat_status  

{  

    flags = REUSE  

    socket_type = stream  

    port = 48700  

    wait = no  

    user = root  

    server =/usr/local/bin/mycat_status  

    log_on_failure += USERID  

    disable = no  

}  

     注意:等号两边有的有空格

给脚本授权,sudo chmod 777/etc/xinetd.d/mycat_status,这脚本需要执行权限

5, /usr/local/bin/mycat_status 脚本

touch mycat_status

内容如下:

[plain] view plain copy

#!/bin/bash  

#/usr/local/bin/mycat_status.sh  

# 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  

   这个脚本也需要执行权限:

sudo chmod 777/usr/local/bin/mycat_status

   检测脚本是否编写正确执行下面的代码:

   /usr/local/bin/mycat_status.sh,如果输出:HTTP/1.1 200 OK,(200需要mycat开启)则表示正确。

6、/etc/services 中加入 mycat_status 服务

cd /etc

vi services

在末尾加入以下内容:

mycat_status    48700/tcp              # mycat_status

保存

重启 xinetd 服务

service xinetd restart

三,keepalived 

Keepalived (http://www.keepalived.org/download.html )

1、 上传或下载 keepalived

上传或下载 keepalived(keepalived-1.2.18.tar.gz) 到 /usr/local/src 目录

2、解压安装

安装 keepalived 需要用到 openssl

[plain] view plain copy

# yum install gcc gcc-c++ openssl openssl-devel  

# cd /usr/local/src  

# tar -zxvf keepalived-1.2.18.tar.gz  

# cd keepalived-1.2.18  

# ./configure --prefix=/usr/local/keepalived  

# make && make install  

3、 将 keepalived 安装成 Linux 系统服务

因为没有使用 keepalived 的默认路径安装(默认是/usr/local) ,安装完成之后,需要做一些工作

复制默认配置文件到默认路径

[plain] view plain copy

# mkdir /etc/keepalived  

# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/  

复制 keepalived 服务脚本到默认的地址

[plain] view plain copy

# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/  

# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/  

# ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/  

# ln -s /usr/local/keepalived/sbin/keepalived /sbin/  

设置 keepalived 服务开机启动

[plain] view plain copy

# chkconfig keepalived on  

4、 修改 Keepalived 配置文件

(1) MASTER 节点配置文件(192.168.209.135)

[plain] view plain copy

! Configuration File for keepalived  

global_defs {  

## keepalived 自带的邮件提醒需要开启 sendmail 服务。建议用独立的监控或第三方 SMTP  

    router_id liuyazhuang135 ## 标识本节点的字条串,通常为 hostname  

}  

## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。  

## 如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。  

## 如果脚本执行结果非 0,并且 weight 配置的值小于 0,则优先级相应的减少。  

## 其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。  

vrrp_script chk_haproxy {  

    script "/etc/keepalived/haproxy_check.sh" ## 检测 haproxy 状态的脚本路径  

    interval 2 ## 检测时间间隔  

    weight 2 ## 如果条件成立,权重+2  

}  

## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称  

vrrp_instance VI_1 {  

    state BACKUP ## 默认主设备(priority 值大的)和备用设备(priority 值小的)都设置为 BACKUP,  

    ## 由 priority 来控制同时启动情况下的默认主备,否则先启动的为主设备  

    interface eth3 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同,我的是 eth3  

    virtual_router_id 35 ## 虚拟路由的 ID 号,两个节点设置必须一样,可选 IP 最后一段使用,  

    ## 相同的 VRID 为一个组,他将决定多播的 MAC 地址  

    priority 120 ## 节点优先级,值范围 0-254, MASTER 要比 BACKUP 高  

    nopreempt ## 主设备(priority 值大的)配置一定要加上 nopreempt,否则非抢占也不起作用  

    advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样,默认 1s  

    ## 设置验证信息,两个节点必须一致  

    authentication {  

        auth_type PASS  

        auth_pass 1111 ## 真实生产,按需求对应该过来  

    }  

    ## 将 track_script 块加入 instance 配置块  

    track_script {  

        chk_haproxy ## 检查 HAProxy 服务是否存活  

    }  

    ## 虚拟 IP 池, 两个节点设置必须一样  

    virtual_ipaddress {  

        192.168.209.130 ## 虚拟 ip,可以定义多个,每行一个  

    }  

}  

(2)BACKUP 节点配置文件(192.168.209.136) 

[plain] view plain copy

! Configuration File for keepalived  

global_defs {  

    router_id liuyazhuang136  

}  

vrrp_script chk_haproxy {  

    script "/etc/keepalived/haproxy_check.sh"  

    interval 2  

    weight 2  

}  

vrrp_instance VI_1 {  

    state BACKUP  

    interface eth3  

    virtual_router_id 35  

    priority 110  

    advert_int 1  

    authentication {  

        auth_type PASS  

        auth_pass 1111  

    }  

    track_script {  

        chk_haproxy  

    }  

    virtual_ipaddress {  

        192.168.209.130  

    }  

}  

特别注意: 如果非抢占模式不生效, 在 Keepalived 的故障节点恢复后会再次导抢占 vip,从而因 vip 切换而闪断带来的风险(视频解说)。 按以上配置,配置了 Keepalived 非抢占模式, 配置及注意点如下:

(1) 主设备、 从设备中的 state 都设置为 BACKUP

(2) 主设备、从设备中都不要配置 mcast_src_ip (本机 IP 地址)

(3) 默认主设备(priority 值大的 Keepalived 节点) 配置一定要加上 nopreempt,否则非抢占不起作用

(4) 防火墙配置允许组播(主、备两台设备上都需要配置, keepalived 使用 224.0.0.18 作为 Master 和Backup 健康检查的通信 IP)

[plain] view plain copy

# iptables -I INPUT -i eth3 -d 224.0.0.0/8 -p vrrp -j ACCEPT  

# iptables -I OUTPUT -o eth3 -d 224.0.0.0/8 -p vrrp -j ACCEPT  

(eth3 为主机的网卡设备名称,生产环境服务器可以用独立网卡来处理组播和心跳检测等)  

# service iptables save  

重启防火墙:  

# service iptables restart  

5、 编写 Haproxy 状态检测脚本

我们编写的脚本为/etc/keepalived/haproxy_check.sh (已在 keepalived.conf 中配置)

脚本要求:如果 haproxy 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进程,keepalied将虚拟 ip 绑定到 BACKUP 机器上。

内容如下:

[plain] view plain copy

# mkdir -p /usr/local/keepalived/log  

# vi /etc/keepalived/haproxy_check.sh  

haproxy_check.sh脚本内容如下:

[plain] view plain copy

#!/bin/bash  

START_HAPROXY="/etc/rc.d/init.d/haproxy start"  

STOP_HAPROXY="/etc/rc.d/init.d/haproxy stop"  

LOG_FILE="/usr/local/keepalived/log/haproxy-check.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  

保存后,给脚本赋执行权限: 

[plain] view plain copy

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

6、 启动 Keepalived

[plain] view plain copy

# service keepalived start  

Starting keepalived: [ OK ]  

Keepalived 服务管理命令:

[plain] view plain copy

停止: service keepalived stop  

启动: service keepalived start  

重启: service keepalived restart  

查看状态: service keepalived status  

上一篇下一篇

猜你喜欢

热点阅读