Haproxy+keepalived+Mycat高可用与负载集群配置

架构图

 

集群部署图的理解:
一、keepalived 和 haproxy 必须装在同一台机器上(keepalived 和haproxy 都要安装),keepalived 负责为该服务器抢占 vip(虚拟 ip),抢占到 vip 后,对该主机的访问能够经过原来的 ip(172.17.210.83)访问,也能够直接经过 vip(172.17.210.103)访问。
二、172.17.210.64 上的 keepalived 也会去抢占 vip,抢占 vip 时有优先级,配置 keepalived.conf 中的(priority 150 #数值愈大,优先级越高,172.17.210.64 上改成 120,master 和 slave 上该值配置不一样)决 定。
可是通常哪台主机上的 keepalived 服务先启动就会抢占到 vip,即便是 slave,只要先启动也能抢到。(用高版本的keepalived可能抢占机制不同,有待测试)
三、haproxy 负责将对 vip 的请求分发到 mycat 上。起到负载均衡的做用,同时 haproxy 也能检测到 mycat是否存活,haproxy 只会将请求转发到存活的 mycat 上。
四、若是一台服务器(keepalived+haproxy 服务器)宕机,另一台上的 keepalived 会马上抢占 vip 并接管服务。若是一台 mycat 服务器宕机,haporxy 转发时不会转发到宕机的 mycat 上,因此 mycat 依然可用。
综上:MyCat的高可用及负载均衡由HAProxy来实现,而HAProxy的高可用,由Keepalived来实现。

 操做步骤:css

1:install-haproxymysql

2:使用keepalived监控haproxylinux

3:配置haproxy监控mycatnginx

4:配置应用经过vip访问haproxyweb

一:安装haproxyredis

1.1 yum -y install haproxy算法

1.2 修改配置文件sql

        vim  /etc/haproxy/haproxy.cfgvim

        

#---------------------------------------------------------------------
# Example configuration for a possible web application. See the
# full configuration options online.
#
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------后端

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
#设置日志
log 127.0.0.1 local0
chroot /etc/haproxy
#用户与用户组
user root
group root
#定义每一个haproxy进程的最大链接数 ,因为每一个链接包括一个客户端和一个服务器端,因此单个进程的TCP会话最大数目将是该值的两倍。
maxconn 4096
# 以守护进程的方式运行
daemon
defaults
log global
#日志中不记录空链接
option dontlognull
# 定义链接后端服务器的失败重连次数,链接失败次数超过此值后将会将对应后端服务器标记为不可用
retries 3
option redispatch
# 设置成功链接到一台服务器的最长等待时间,默认单位是毫秒
timeout connect 5000
# 设置链接客户端发送数据时的成功链接最长等待时间,默认单位是毫秒
timeout client 50000
# 设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒
timeout server 60000
#统计页面对haproxy监控的端口48800
listen admin_stats
bind 192.168.47.200:48800
mode http
#采用http日志格式
option httplog
#统计页面自动刷新时间
stats refresh 30s
#统计页面url
stats uri /admin_stats
#统计页面密码框上提示文本
stats realm Haproxy Manager
#统计页面用户名和密码设置
stats auth admin:admin
#隐藏统计页面上HAProxy的版本信息
stats hide-version
listen mycat_service
# 绑定192.168.47.200:8067客户端就是经过这个ip和端口进行链接,这个vip和端口绑定的是mycat8066端口
bind 192.168.47.200:8067
# 定义为tcp模式
mode tcp
#采用http日志格式
option tcplog
# 开启对后端服务器的健康检测
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
# 设置haproxy的调度算法
balance roundrobin
#根据调度分配到真实的后台地址,参数解释:port 48700:检测mycat的端口48700, inter 5s:5秒检测一次,rise 2:检测成功2次表示服务器可用,fall 3:检测失败3次后表示服务器不可用
server mycat_213 192.168.47.213:8066 check port 48700 inter 5s rise 2 fall 3
server mycat_71 192.168.47.71:8066 check port 48700 inter 5s rise 2 fall 3
#设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒
timeout server 60000
listen mycat_admin
#绑定192.168.47.200:9067端口访问mycat9066端口
bind 192.168.47.200:9067
mode tcp
option tcplog
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
balance roundrobin
server mycat_213 192.168.47.213:9066  check port 48700 inter 5s rise 2 fall 3
server mycat_71   192.168.47.71:9066  check port 48700 inter 5s rise 2 fall 3

timeout server 60000

说明:上面的配置中 timeout server   能够配置大一点,否则常常会出现有时候闪断链接mysql的状况

haproxy的启动:haproxy  -f    /etc/haproxy/haproxy.cfg

1.3:配置haproxy记录日志功能

默认haproxy是不记录日志的,为了记录日志还须要配置syslog模块,在linux下是rsyslogd服务,须要先安装rsyslog

yum install rsyslog -y
若是没有目录/etc/rsyslog.d 就执行mkdir /etc/rsyslog.d
cd /etc/rsyslog.d/ touch haproxy.conf 

vim haproxy.conf
写入一下内容

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

vim /etc/rsyslog.conf
修改两处:1在#### RULES ####上面一行加入如下内容

# Include all config files in /etc/rsyslog.d/ $IncludeConfig /etc/rsyslog.d/*.conf 
 

 第二处在local7.* /var/log/boot.log下面增长

local0.*                                                /var/log/haproxy.log 
 
 

 重启rsyslog服务

systemctl restart rsyslog.service 

将rsyslog加入自动启动服务

systemctl enable rsyslog.service 

二:安装xinted(网络守护进程服务)来启动48700端口

#使用48700端口来对mycat服务进行监控

   yum  -y install xinetd

   vim /etc/xinetd.d/mycatchk

   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
}

建立xinetd启动服务脚本
vim /usr/local/bin/mycat_status

#!/bin/bash
mycat=`/soft/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 777 /usr/local/bin/mycat_status

chmod 777 /etc/xinetd.d/mycat_status

将启动脚本加入服务
vim /etc/services
在末尾加入

mycat_status 48700/tcp # mycat_status

重启xinetd服务systemctl restart xinetd

验证mycat_status服务是否启动成功

netstat -antup|grep 48700
三:keepalived安装
三:
1:安装依赖
yum install -y openssl-devel openssl libnl libnl-devel libnfnetlink-devel
yum -y install keepalived
我这里网卡是ens33因此配置里的interface为ens33,主机1与主机2配置基本同样,state与priority不一样

2 :配置主机1   192.168.0.200的keepalived

! Configuration Fileforkeepalived
global_defs {
router_id ip200
}
vrrp_script chkhaproxy {
script "/etc/keepalived/scripts/check_haproxy.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.47.200 dev ens33 scope global
}
track_script {
chkhaproxy
}
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、建立检查haproxy是否存活的脚本
vim /etc/keepalived/scripts/check_haproxy.shmkdir /etc/keepalived/scripts 

#!/bin/bash
STARTHAPROXY="/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg"
#STOPKEEPALIVED="systemctl stop keepalived"
LOGFILE="/etc/keepalived/scripts/keepalived-haproxy-state.log"
echo "[check_haproxy status]" >> $LOGFILE
A=`ps -C haproxy --no-header |wc -l`
echo "[check_haproxy status]" >> $LOGFILE
date >> $LOGFILE
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

b、建立切换到MASTER与BACKUP脚本

vim /etc/keepalived/scripts/haproxy_master.sh
vim /etc/keepalived/scripts/haproxy_backup.sh
在两个文件中写入如下内容

#!/bin/bash
STARTHAPROXY=`/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg`
STOPHAPROXY=`ps -ef |grep sbin/haproxy| grep -v grep|awk '{print $2}'|xargs
kill -s 9`
LOGFILE="/etc/keepalived/scripts/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

c、建立故障时执行的脚本

#!/bin/bash
LOGFILE=/etc/keepalived/scripts/keepalived-haproxy-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE

d、建立中止vrrp脚本
vim /etc/keepalived/scripts/haproxy_stop.sh

#!/bin/bash
LOGFILE=/etc/keepalived/scripts/keepalived-haproxy-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE
[root@mycat scripts]# cat haproxy_stop.sh
#!/bin/bash
LOGFILE=/etc/keepalived/scripts/keepalived-haproxy-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE

赋予脚本可执行权限chmod 777 /etc/keepalived/scripts/*

启动keepalived   systemctl start keepalived.service

加入开机启动     systemctl enable keepalived.service

启动完keepalived后再启动haproxy

测试

在浏览器输入http://192.168.47.200:48800/admin_stats

相关文章
相关标签/搜索