mycat集群搭建详解

一,部署前准备

1.1软件版本

1 操作系统: centOS-7.0(ubuntu 16.4) 
2  jdk :1.8
3  haproxy: 1.2.27
4  keepalived: 1.3.9 (keepalived-1.3.9)
5  mycat: 1.6
6  mysql: 5.7

1.2 服务器分布

192.168.1.100  (vip 在192.168.1.1的主机上创建)
192.168.1.1    server001 (mycat,haproxy,keepalive) master
192.168.1.2    server002 (mycat,haproxy,keeaplive) slave
192.168.1.3    server003 (mysql master)
192.168.1.4    server004 (mysql slave)

1.3 软件安装目录总览

haproxy:/opt/haproxy
mycat: /opt/mycat
keepalived: /opt/keepalived 

二,Mycat的监听服务

使用部署好的mycat,编写mycat的监听服务(xinetd),和mycat在在同一台服务器

2.1 安装xinetd(没有安装的话)

## centos 下
yum install xinetd -y 
# ubuntu 下
sudo apt-get install xinetd 

2.2 检查xinetd文件安装目录是否完整性

## 检查/etc/xinetd.conf 文件的末尾是否有:includedir /etc/xinetd.d
vim xinetd.conf
添加末尾:includedir /etc/xinetd.d
## 检查 /etc/xinetd.d文件夹是否存在,不存在也加上
mkdir /etc/xinetd.d

2.3 创建 mycat存活监听脚本

#1,创建脚本(目录:/user/local/bin/)
touch mycat_status
---------------------------------
# 2,编写脚本
mycat=`/opt/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
注释: /opt/mycat/bin/mycat 为mycat 启动脚本的目录

2.4 在xinetd中创建文件

# 1,创建配置文件
cd /etc/xinetd.d
touch mycat_status
## 2.编辑配置文件
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
}

2.5 写进系统服务(这是采用tcp,之后haproxy得使用tcp的方式来监听)

## 1.打开系统服务的配置文件
vim /etc/services
## 2.编辑service
在末尾加入: mycat_status    48700/tcp              # mycat_status
## 3.重启xinetd服务
service xinetd restart

2.6 验证mycat_status服务是否开启

netstat -antup|grep 48700
##  如果成功会展示如下内容
root@localhost log]# netstat -antup|grep 48700
root@localhost log]# netstat -antup|grep 48700
tcp        0      0 :::48700                    :::*                        LISTEN      12609/xinetd

三,安装配置Haproxy

3.1 安装haproxy

## 1 下载并解压
tar haproxy-1.4.27.tar.gz
## 2 编译
cd haproxy-1.4.27 
make TARGET=linux2628  ARCH=x86_64 PREFIX=/opt/haproxy
make install PREFIX=/opt/haproxy
-------------------------------------------------------------
##$ 参数说明
#TARGET  内核版本 使用uname -r查看内核
#如:2.6.18-371.el5,此时该参数就为 TARGET=linux26;kernel 大于2.6.28的用:TARGET=linux2628
TARGET=linux2628 #内核版本
ARCH=x86_64     ##系统位数
PREFIX=   ## 安装路径

3.2 配置文件

### 创建配置文件
cd /opt/haproxy
touch haproxy.cfg
-------------------------------------------------------------
global
log 127.0.0.1   local0 ##记日志的功能
    maxconn 4096
    chroot /opt/haproxy
    user root
    group root
    daemon
defaults
    log    global
    option    dontlognull
    retries    3
    option redispatch
    maxconn    2000
    contimeout    5000
    clitimeout    50000
    srvtimeout    50000
listen  admin_status 192.168.1.100:48800  ## haproxy的监视页面
      stats uri /admin-status
      stats auth  admin:admin
      stats admin if TRUE 
      stats refresh 5s  ##刷新时间
      mode    http
      option  httplog
listen    all_mycat_service 192.168.1.100:8096
      mode tcp    ##使用tcp链接
      option tcplog ##记录tcp链接日志
      #option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www (官方文档里面的坑,这是针对http链接方式的验证方式)
      balance    roundrobin
        ##rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
        server    mycat_1 192.168.1.1:8066     check port 48700 inter 5s rise 2 fall 3
        server    mycat_2 192.168.1.2:8066 check port 48700 inter 5s rise 2 fall 3
      srvtimeout 20000  (断开服务链接的超时时间)
listen   all_mycat_admin    192.168.1.100:8097 
      mode tcp  ##使用tcp链接
      option tcplog
      #option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www (官方文档里面的坑,这是针对http链接方式的验证方式)
      balance    roundrobin
        server    mycat_1 192.168.1.1:9066 check port 48700 inter 5s rise 2 fall 3
        server    mycat_2  192.168.1.2:9066 check port 48700 inter 5s rise 2 fall 3
      srvtimeout 20000 (断开服务链接的超时时间)

3.3 Haproxy启动和停止脚本

1.启动脚本

#!/bin/sh
nohup /opt/haproxy/sbin/haproxy -f /opt/haproxy/haproxy.cfg  &

2.停止脚本

#!/bin/sh
ps -ef | grep opt/haproxy/sbin/haproxy | grep -v grep |awk '{print $2}'|xargs kill -s 9

3.4 Haproxy的日志记录

haproxy是不记录日志的,为了记录日志还需要配置syslog模块,在linux下是rsyslogd服务,yum –y install rsyslog先安装

#cd /etc/rsyslog.d/
如果没有这个目录,新建
#cd /etc
#mkdir rsyslog.d
#cd /etc/rsyslog.d/
#touch haproxy.conf
#vi /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
local0.* /var/log/haproxy.log
 --------------------------------------------------------
#vi /etc/rsyslog.conf
1、在#### RULES ####上面一行的地方加入以下内容:
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
#### RULES ####
2、在local7.*                                               /var/log/boot.log的下面加入以下内容(增加后的效果如下):
# Save boot messages also to boot.log
local7.*                                               /var/log/boot.log
local0.*                                               /var/log/haproxy.log

3.5Haproxy的启动

1 启动异常
启动haproxy异常情况
如果报以下错误:

[root@localhost bin]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
[ALERT] 183/115915 (12890) : Starting proxy admin_status: cannot bind socket
[ALERT] 183/115915 (12890) : Starting proxy allmycat_service: cannot bind socket
[ALERT] 183/115915 (12890) : Starting proxy allmycat_admin: cannot bind socket
#原因为:该机器没有抢占到vip,得先开启keepalived 才行

2 访问Haproxy管理页面

#在本案例中配置的是192.168.1.100:48800 上
访问: http://192.168.1.100:48800/admin-status   

四,Keepalived的安装

4.1 keepalived 的安装


tar zxvf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
./configure--prefix=/usr/local/keepalived
make
make install
cp /opt/keepalived/sbin/keepalived /usr/sbin/
cp /opt/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /opt/keepalived/etc/rc.d/init.d/keepalived/etc/init.d/
mkdir /etc/keepalived
cd /etc/keepalived/
cp /opt/keepalived/etc/keepalived/keepalived.conf/etc/keepalived
mkdir -p /opt/keepalived/var/log

4.2 keepalived的配置

###  建立脚本存放的目录
mkdir /etc/keepalived/scripts
cd /etc/keepalived/scripts
-------------------------------------------------
### 设置配置文件 keepalived.conf (master 和slave 是一致的,只是priority不同)

vrrp_script chk_http_port {
    script "/etc/keepalived/scripts/check_haproxy.sh"
    interval 2
    weight 2
}
vrrp_instance VI_1 {
   state MASTER              #192.168.1.1上改为Master
   interface eno1            #对外提供服务的网络接口
   virtual_router_id 51      #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
   priority 150              #数值愈大,优先级越高,172.17.1.2上改为120
   advert_int 1              #同步通知间隔
   authentication { 
 #包含验证类型和验证密码。类型主要有PASS、AH两种,通常使用的类型为PASS,据说AH使用时有问题
      auth_type PASS
      auth_pass 1111
   }
  
   track_script {
      chk_http_port            #调用脚本check_haproxy.sh检查haproxy是否存活
   }
  
   virtual_ipaddress {      #vip地址,这个ip必须与我们在lvs客户端设定的vip相一致
      192.168.1.100 dev eno1 scope globa
   }
   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
}

4.3 创建keepalied所需的脚本

4.3.1 check_haproxy.sh

#!/bin/bash
STARTHAPROXY="/opt/haproxy/sbin/haproxy -f /opt/haproxy/haproxy.cfg"
STOPKEEPALIVED="/etc/init.d/keepalived stop"
LOGFILE="/opt/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
if [ $A -eq 0 ];then
echo $STARTHAPROXY >> $LOGFILE
$STARTHAPROXY >> $LOGFILE  2>&1
sleep5
fi
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
exit 0
else
exit 1
fi

4.3.2 haproxy_master.sh

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

4.3.3 haproxy_backup.sh

#!/bin/bash
STARTHAPROXY=`/opt/haproxy/sbin/haproxy -f /opt/haproxy/haproxy.cfg`
STOPHAPROXY=`ps -ef | grep sbin/haproxy | grep -v grep |awk '{print $2}'|xargs kill -s 9`
LOGFILE="/opt/keepalived/var/log/keepalived-haproxy-state.log"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being backup...." >> $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

4.3.4 haproxy_fault.sh

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

4.3.5 haproxy_stop.sh

#!/bin/bash
LOGFILE=opt/keepalived/var/log/keepalived-haproxy-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE

5.启动Keepalived服务

service keepalived start

五, 知识点补充

5.1 创建虚拟vip

# 1 查看但前活动网卡 eth0
ifconfig -a
# 2 添加vip
ifconfig eno1:0 192.168.1.100 netmask 255.255.255.0 up
# 3 设置开机自启
编辑:/etc/rc.local
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容

  • MEMORY_ 寻找记忆中的味道 总有那么一天 有一碗面 会走进你的生活 让你明白 ...
    你的嘟嘟阅读 161评论 0 1
  • 绿柳垂低, 银树直立。 春夏秋冬总归来, 何必怜惜? 红日雄天, 黑云绵连。 阴晴圆缺争上位, 何必可怜?
    石尔豪阅读 260评论 0 0
  • 今天周六,起了个大早,起早不是为了一场美丽的约会梳妆打扮,也不是为了没做完的工作起早赶工,而是来医院检查看...
    张小懒儿阅读 678评论 0 1
  • 晨子老师的分享: 【人脉管理,你就是你人生的CEO】 我在2013年创业的公司叫做维脉,为什么起这个名字呢?因为我...
    平子Jacky阅读 178评论 0 0