配色: 字号:
HAproxy+Mycat+keepalived配置
2016-10-18 | 阅:  转:  |  分享 
  
Mycat+HAproxy+keepalived配置指南



重要提醒:

关于防火墙和SELINUX方案:

SELINUX

vi/etc/selinux/config文件配置SELINUX=disabled

IPTABLES(方案两种)

1,关闭防火墙,万事大吉

2,在/etc/sysconfig/iptables文件中加入-AINPUT-ieth0-d224.0.0.0/8-jACCEPT,并开启外界访问端口

注:eth0为网卡设备,可能会有不同

224.0.0.0.18为keepalived主从机器通信地址,必须开启,否则都抢vip



所有需要外界访问的端口都在防火墙中开启,或者直接关闭防火墙。

部署图:



这里把mycat和keepalived+haproxy安装在同一个服务器了,实际情况可以把mycat拎出去单独部署

一,mycat的安装

1,下载mycat安装包(/usr/local/)

https://github.com/MyCATApache/Mycat-download/blob/master/1.5-GA/Mycat-server-1.5-GA-20160225120029-linux.tar.gz



2解压

tar-zxvfMycat-server-1.5-GA-20160225120029-linux.tar.gz

3配置mycat

cd/usr/local/mycat/conf



wrapper.conf文件

viwrapper.conf

#主要配置java的路径

#JavaApplication

Wrapper.java.command=/usr/local/jdk1.7/bin/java



server.xml文件

viserver.xml



#配置mycat的用户名和密码以及schemal



mycat

TESTDB





user

TESTDB

true



注:schemas对应配置文件schema.xml中的

chema.xml

#vischemal.xml

















select1fromdual

altersessionsetnls_date_format=''yyyy-mm-ddhh24:mi:ss''













注:此案例主要用到mycat的读写分离

dataHost中属性balance取值0:不开启读写分离,1:全部readHost和standbywriteHost参与读的负载均衡,2:从当前使用的写服务器所属的读服务器获取数据,所以如果此写服务器宕机了,其读服务器亦不能使用,所以可以配置多个writeHost,balance配置为1.

WriteType一般设置为0,设置为1表示随机写入writeHost的数据库,可能导致数据不一致



4启动mycat

#/usr/local/mycat/bin/mycatstart

5查看日志

cat/usr/local/mycat/logs/mycat.log

日志内容如下:

02/2520:13:48.776INFO[WrapperSimpleAppMain](MycatServer.java:197)-===============================================

02/2520:13:48.777INFO[WrapperSimpleAppMain](MycatServer.java:198)-MyCatisreadytostartup...

02/2520:13:48.777INFO[WrapperSimpleAppMain](MycatServer.java:208)-Startupprocessors...,totalprocessors:1,aiothreadpoolsize:4

eachprocessallocatedsocketbufferpoolbytes,bufferchunksize:4096bufferpool''scapacity(buferPool/bufferChunk)is:1000

02/2520:13:48.777INFO[WrapperSimpleAppMain](MycatServer.java:209)-sysconfigparams:SystemConfig[processorBufferLocalPercent=100,frontSocketSoRcvbuf=1048576,frontSocketSoSndbuf=4194304,backSocketSoRcvbuf=4194304,backSocketSoSndbuf=1048576,frontSocketNoDelay=1,backSocketNoDelay=1,maxStringLiteralLength=65535,frontWriteQueueSize=2048,bindIp=0.0.0.0,serverPort=8066,managerPort=9066,charset=utf8,processors=1,processorExecutor=4,timerExecutor=2,managerExecutor=2,idleTimeout=1800000,catletClassCheckSeconds=60,sqlExecuteTimeout=300,processorCheckPeriod=1000,dataNodeIdleCheckPeriod=300000,dataNodeHeartbeatPeriod=10000,clusterHeartbeatUser=_HEARTBEAT_USER_,clusterHeartbeatPass=_HEARTBEAT_PASS_,clusterHeartbeatPeriod=5000,clusterHeartbeatTimeout=10000,clusterHeartbeatRetry=10,txIsolation=3,parserCommentVersion=50148,sqlRecordCount=10,processorBufferPool=4096000,processorBufferChunk=4096,defaultMaxLimit=100,sequnceHandlerType=0,sqlInterceptor=org.opencloudb.interceptor.impl.DefaultSqlInterceptor,sqlInterceptorType=select,sqlInterceptorFile=/usr/local/mycat/logs/sql.txt,mutiNodeLimitType=0,mutiNodePatchSize=100,defaultSqlParser=druidparser,usingAIO=0,packetHeaderSize=4,maxPacketSize=16777216,mycatNodeId=1]

02/2520:13:48.882INFO[WrapperSimpleAppMain](MycatServer.java:268)-usingnionetworkhandler

02/2520:13:49.073INFO[WrapperSimpleAppMain](MycatServer.java:286)-$_MyCatManagerisstartedandlisteningon9066

02/2520:13:49.075INFO[WrapperSimpleAppMain](MycatServer.java:290)-$_MyCatServerisstartedandlisteningon8066

02/2520:13:49.075INFO[WrapperSimpleAppMain](MycatServer.java:292)-===============================================

02/2520:13:49.075INFO[WrapperSimpleAppMain](MycatServer.java:295)-InitializedataHost...

02/2520:13:49.075INFO[WrapperSimpleAppMain](PhysicalDBPool.java:294)-initbackendmyqslsource,createconnectionstotal1forhostM1index:0

02/2520:13:49.076INFO[WrapperSimpleAppMain](PhysicalDatasource.java:373)-notildeconnectioninpool,createnewconnectionforhostM1ofschemadb1

02/2520:13:49.828INFO[BusinessExecutor0](GetConnectionHandler.java:66)-connectedsuccessfulyJDBCConnection[id=1,autocommit=true,pool=org.opencloudb.jdbc.JDBCDatasource@5535c2c7,schema=db1,dbType=ORACLE,oldSchema=null,packetId=0,txIsolation=0,running=false,borrowed=true,host=null,port=-1,con=oracle.jdbc.driver.T4CConnection@3c86c285,respHandler=null,attachement=null,headerOutputed=false,modifiedSQLExecuted=false,startTime=1456402429110,lastTime=1456402429828,isSpark=false,processor=org.opencloudb.net.NIOProcessor@334cc8ce]

02/2520:13:49.894INFO[WrapperSimpleAppMain](PhysicalDBPool.java:319)-initresult:finished1success1targetcount:1

02/2520:13:49.894INFO[WrapperSimpleAppMain](PhysicalDBPool.java:265)-localhost1index:0initsuccess

02/2520:18:50.172WARN[Timer0](NIOProcessor.java:199)-foundbackendconnectionSQLtimeout,closeitJDBCConnection[id=1,autocommit=true,pool=org.opencloudb.jdbc.JDBCDatasource@5535c2c7,schema=db1,dbType=ORACLE,oldSchema=null,packetId=0,txIsolation=0,running=false,borrowed=true,host=null,port=-1,con=oracle.jdbc.driver.T4CConnection@3c86c285,respHandler=org.opencloudb.mysql.nio.handler.ConnectionHeartBeatHandler@13610249,attachement=null,headerOutputed=false,modifiedSQLExecuted=false,startTime=1456402429110,lastTime=1456402428030,isSpark=false,processor=org.opencloudb.net.NIOProcessor@334cc8ce]

Mycat启动成功,8066端口为对外服务端口





HAproxy安装配置(主从服务器完全一样):



1yum安装haproxy

yuminstall-yhaproxy

2查看安装路径

rpm-qlhaproxy

3配置文件

vi/etc/haproxy/haproxy.cfg



global



log127.0.0.1local2#日志

chroot/var/lib/haproxy

pidfile/var/run/haproxy.pid

maxconn20000#最大连接数

userroot#用户

grouproot#

daemon#以守护进程方式运行



defaults

logglobal

optiondontlognull

optionredispatch

retries3

maxconn 20000

timeoutconnect 5000

timeoutclient50000

timeoutserver50000



listenadmin_stats192.168.193.110:48800#统计页面

##oracle服务器的地址,安装keepalived后更改为虚拟vip



statsuri/admin_stats

statsauthadmin:admin#认证用户名及密码

modehttp

optionhttplog

listen allmycat_service192.168.193.110:8098

modetcp

optiontcplog

optionhttpchkOPTIONSHTTP/1.1\r\nHost:\www

balanceroundrobin

server mycat_110192.168.193.110:8066checkport48700inter5srise2fall3

server mycat_100192.168.193.100:8066checkport48700inter5srise2fall3

timeoutserver20000

listen allmycat_admin192.168.193.110:8099

modetcp

optiontcplog

optionhttpchkOPTIONSHTTP/1.1\r\nHost:\www

balanceroundrobin

server mycat_110192.168.193.110:9066checkport48700inter5srise2fall3

server mycat_100192.168.193.100:9066checkport48700inter5srise2fall3

timeoutserver20000





4配置日志文件

查看日志

yumlistall|grepsyslog

#rpm-qlrsyslog

#vi/etc/sysconfig/rsyslog

增加-r选项:

SYSLOGD_OPTIONS=”-c5-r”

4.2新增haproxy.conf文件

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

增加:

$ModLoadimudp

$UDPServerRun514

local2. /var/log/haproxy.log

5重启日志服务

servicersyslogrestart

6启动haproxy

servicehaproxystart

7下载xinetd

#yuminstall-yxinetd

8配置xinetd守护进程,监听mycat是否启动(通过48700端口)

8.1

vi/etc/xinetd.d/mycat_status#新文件

增加:

servicemycat_status

{

flags=REUSE

socket_type=stream#套接字格式TCP,UDP是dgram

port=48700

wait=no

user=nobody

server=/usr/local/bin/mycat_status#启用该服务的

log_on_failure+=USERID

disable=no#启用服务



}



#chmod755/etc/xinetd.d/mycat_status#更改权限,使其有执行权限



8.2

#vi/usr/local/bin/mycat_status

增加:

#!/bin/bash

#/usr/local/bin/mycat_status.sh

#Thisscriptchecksifamycatserverishealthyrunningonlocalhost.Itwill

#return:

#

#"HTTP/1.x200OK\r"(ifmycatisrunningsmoothly)

#

#"HTTP/1.x503InternalServerError\r"(else)

mycat=`/usr/local/mycat/bin/mycatstatus|grep''notrunning''|wc-l`

if["$mycat"="0"];

then

/bin/echo-e"HTTP/1.1200OK\r\n"

else

/bin/echo-e"HTTP/1.1503ServiceUnavailable\r\n"

fi

保存退出

#chmod755/usr/local/bin/mycat_status#更改权限,使其有执行权限



注意:红色部分为mycat执行文件目录(此文件空格,笔者出错很久才配置好)



8.3添加/etc/services中

vi/etc/services

末尾处增加

mycat_status48700/tcp#mycat_status

重启xinetd

#Servicexinetdrestart



8.4#netstat-antup|grep48700

若显示

tcp00:::48700:::LISTEN36642/xinetd

则配置成功。

8.将xinetd加入自启动服务

chkconfig--addxinetd

#chkconfig--level2345xinetdon







7访问统计页面

http://192.168.193.110:48800/admin_stats



观察上图,发现本机的mycat(mycat_100)的状态Status为UP,而mycat_110状态为DOWN,

这是因为ip:192.168.193.110的防火墙没有开启48700端口,开启服务器端口

vi/etc/sysconfig/iptables

增加:

-AINPUT-mstate--stateNEW-mtcp-ptcp--dport48700-jACCEPT

然后重启防火墙

serviceiptabesrestart

发现状态全部是UP了,图就不贴了。

三,keepalived安装配置

Keepalived安装编译依赖openssl,所以安装keepalived前先安装openssl



”-D”



KEEPALIVED_OPTIONS=”-D-d-S0”



#vi/etc/rsyslog.d/keepalived_log.conf

增加

local0. /var/log/keepalived.log

保存退出后重启rsyslog

#servicersyslogrestart

日志就配置好了



3.3配置keepalived.conf文件

主从库的配置基本相同,权重priority和state不同

配置如下:

!ConfigurationFileforkeepalived



global_defs{

router_idLVS_DEVEL

}



vrrp_scriptchk_haproxy{

script"/etc/keepalived/chk_haproxy.sh"#检测haproxy进程

interval2

weight2



}

vrrp_instanceVI_1{

stateMASTER#从库为BACKUP

interfaceeth0 #对外提供ip的网卡,可能有不同eth1...

virtual_router_id51#主从配置形同的组id

priority120#权重越高优先抢虚拟vip,从库低于主库

advert_int1

authentication{

auth_typePASS

auth_pass1111

}

track_script{#检测haproxy进程状态

chk_haproxy #配置内容为上方的vrrp_script名

}

virtual_ipaddress{

192.168.193.200#虚拟vip主从库的同网段ip

}

notify_master/etc/keepalived/notify_master.sh

notify_backup/etc/keepalived/notify_backup.sh

notify_fault/etc/keepalived/notify_fault.sh

}

注:priority主从配置策略,主机priority-从priority
3.4编写检测haproxy进程的shell脚本

#vi/etc/keepalived/chk_haproxy.sh

内容入下:

#!/bin/bash

STARTHAPROXY="/etc/init.d/haproxystart-f/etc/haproxy/haproxy.cfg"

A=`ps-Chaproxy--no-header|wc-l`

if[$A-eq0];then

$STARTHAPROXY

sleep3

fi

if[`ps-Chaproxy--no-header|wc-l`-eq0];then

exit0

else

exit1

fi

保存退出

添加脚本的执行权限

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



脚本notify_master.sh

#vi/etc/keepalived/notify_master.sh

内容入下:

#!/bin/bash

STARTHAPROXY="/etc/init.d/haproxystart-f/etc/haproxy/haproxy.cfg"

STOPHAPROXY="/etc/init.d/haproxystop"

LOGFILE="/usr/local/keepalived/log/check_haproxy.log"

echo"[Master]">>$LOGFILE

date>>$LOGFILE

echo"Beingmaster...">>$LOGFILE2>&1

echo"stophaproxy...">>$LOGFILE2>&1

$STOPHAPROXY>>$LOGFILE2>&1

echo"starthaproxy...">>$LOGFILE2>&1

$STARTHAPROXY>>$LOGFILE2>&1

echo"haproxystarted">>$LOGFILE

保存退出

添加脚本的执行权限

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



脚本notify_backup.sh

#vi/etc/keepalived/notify_backup.sh

内容入下:



#!/bin/bash

STARTHAPROXY="/etc/init.d/haproxystart-f/etc/haproxy/haproxy.cfg"

STOPHAPROXY="/etc/init.d/haproxystop"

LOGFILE="/usr/local/keepalived/log/check_haproxy.log"

echo"[Backup]">>$LOGFILE

date>>$LOGFILE

echo"Beingbackup...">>$LOGFILE2>&1

echo"stophaproxy...">>$LOGFILE2>&1

$STOPHAPROXY>>$LOGFILE2>&1

echo"starthaproxy...">>$LOGFILE2>&1

$STARTHAPROXY>>$LOGFILE2>&1

echo"haproxystarted">>$LOGFILE



添加脚本的执行权限

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

脚本notify_fault.sh

#vi/etc/keepalived/notify_fault.sh

内容入下:



#!/bin/bash

LOGFILE="/usr/local/keepalived/log/check_haproxy.log"

echo"[fault]">>$LOGFILE

date>>$LOGFILE



添加脚本的执行权限

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





3.5更改前文haproxy配置文件的监听地址

#vi/etc/haproxy/haproxy.conf

更新

listenadmin_stats192.168.193.110:48800

listen allmycat_service192.168.193.110:8098

listen allmycat_service192.168.193.110:8098



listenadmin_stats192.168.193.200:48800

listen allmycat_service192.168.193.200:8098

listen allmycat_admin192.168.193.200:8098



注:192.168.193.200为keepalived.conf中配置的虚拟vip





所有配置完成



测试:

启动主从服务器的mycat,keepalived

启动命令:

#/usr/local/mycat/bin/mycatstart#启动mycat

#servicekeepalivedstart



在主从服务器执行命令:

#ipaddr

主服务器显示如下:

1:lo:mtu65536qdiscnoqueuestateUNKNOWN

link/loopback00:00:00:00:00:00brd00:00:00:00:00:00

inet127.0.0.1/8scopehostlo

inet6::1/128scopehost

valid_lftforeverpreferred_lftforever

2:eth0:mtu1500qdiscpfifo_faststateUPqlen1000

link/ether00:0c:29:0d:f8:ddbrdff:ff:ff:ff:ff:ff

inet192.168.193.100/24brd192.168.193.255scopeglobaleth0

inet192.168.193.200/32scopeglobaleth0

inet6fe80::20c:29ff:fe0d:f8dd/64scopelink

valid_lftforeverpreferred_lftforever

主服务器抢到了虚拟vip

从服务器显示如下:

1:lo:mtu65536qdiscnoqueuestateUNKNOWN

link/loopback00:00:00:00:00:00brd00:00:00:00:00:00

inet127.0.0.1/8scopehostlo

inet6::1/128scopehost

valid_lftforeverpreferred_lftforever

2:eth0:mtu1500qdiscpfifo_faststateUPqlen1000

link/ether00:0c:29:37:ad:72brdff:ff:ff:ff:ff:ff

inet192.168.193.110/24brd192.168.193.255scopeglobaleth0

inet6fe80::20c:29ff:fe37:ad72/64scopelink

valid_lftforeverpreferred_lftforever

从服务器为抢到vip,因为其权重配置的比主服务器小



在主从服务器上执行命令#servicehaproxystatus查看haproxy状态

主服务器显示:

Haprxoy(pid12882)正在运行...

从服务器显示:

Haproxy已停止



若此时手动启动haproxy发现启动不起来报错



[ALERT]183/115915(12890):Startingproxyallmycat_service:cannotbindsocket(192.168.193.200:48800)....



这是正常的,因为此时vip被主服务器抢走了。



然后关闭主服务器的keepalived,命令#servicekeepalivedstop

再次执行#ipaddr发现从服务器抢到了vip,主服务器失掉了vip



浏览器访问http://192.168.193.200:48800/admin_status(haproxy.conf中配置)



此时mycat_110和mycat_100状态吗均是UP,颜色是绿色



此时用navicatforMysql连接测试:



同样可以连接成功,并查询数据。



配置到此结束,更多配置信息待研究。

献花(0)
+1
(本文系樱梦雪苹宝首藏)