mycat+haproxy+keepalived
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