操做步骤: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/*
systemctl start keepalived.service
systemctl enable keepalived.service