既然大家都知道了Mysql分布式在大型网站架构中的作用,在这里就不再阐述。本片博客文章是基于我曾经搭建过的一个Mysql集群基础上实现的,实现过双主热备、读写分离、分库分表。

环境

centos6.4版本系统下,192.168.9.169(第一台mycat)、192.168.9.170(第二台mycat),这里的两台mycat配置一致,我是为了快速完成搭建直接clone的,192.168.9.172(haproxy服务器),另外的mysql双主热备和双主双从架构在基础博客链接里有详细配置。

HAProxy负责将请求分发到Mycat上,起到负载均衡的作用,同时HAProxy也能检测到Mycat是否存活,HAProxy只会将请求转发到存活的Mycat上。如果一台Mycat服务器宕机,HAPorxy转发请求时不会转发到宕机的Mycat上,所以Mycat依然可用。

在每台mycat上配置mycat状态检查服务

Mycat服务主机(liuyazhuang133、liuyazhuang134)上需要增加Mycat服务的状态检测脚本,并开放相应的检测端口,以提供给HAProxy对Mycat的服务状态进行检测判断。可以使用xinetd来实现,通过xinetd,HAProxy可以用httpchk来检测Mycat的存活状态。(xinetd即extended internet daemon,xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器。经常用来管理多种轻量级Internet服务。xinetd提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。xinetd为linux系统的基础服务)

1、安装xinetd

# yum -y install xinetd

2、添加 includedir /etc/xinetd.d

# vi /etc/xinetd.conf

# Generally, banners are not used. This sets up theirglobaldefaults

#

# banner=# banner_fail=# banner_success=}

includedir/etc/xinetd.d //检查/etc/xinetd.conf的末尾是否有 includedir /etc/xinetd.d ,没有就加上。目的是去配置目录下面增加我们的自定义配置文件,没有的话必须添加。

3、检查 /etc/xinetd.d 目录是否存在,不存在则创建

4、配置自定义Mycat存活状态检测服务

# vim /etc/xinetd.d/mycat_status //创建mycat_status文件,添加如下编辑内容

service mycat_status

{

flags=REUSE

## 使用该标记的socket_type为stream,需要设置wait为no

socket_type=stream ## 封包处理方式,Stream为TCP数据包

port= 48700## 服务监听端口

wait=no ## 表示不需等待,即服务将以多线程的方式运行

user=root ## 执行此服务进程的用户

server=/usr/local/bin/Mycat_status ## 需要启动的服务脚本 ,也就是 xinetd通过48700端口调用这个脚本监听mycat状态

log_on_failure+=USERID ## 登录失败记录的内容

disable=no ## 要启动服务,将此参数设置为no

}

5、添加 /usr/local/bin/mycat_status服务脚本(监听mycat的状态),并赋予权限

#!/bin/bash

#/usr/local/bin/mycat_status.sh

# This script checksif a Mycat server ishealthy running on localhost.

# It willreturn:

#"HTTP/1.x 200 OK\r" (if Mycat isrunning smoothly)

#"HTTP/1.x 503 Internal Server Error\r" (else)

#对应mycat的安装目录启动程序

Mycat=`/usr/local/mycat/bin/mycat status | grep 'not running' | wc -l`if [ "$Mycat" = "0"]; then

#模拟返回http请求信息/bin/echo -e "HTTP/1.1 200 OK\r\n"

else

/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"fi

6、在 /etc/services 中加入 mycat_status 服务,并验证监听服务是否开启成功

# vim /etc/services //对应好端口号

mycat_status 48700/tcp # mycat_status

# service xinetd restart //添加好重启xinetd

# netstat -antup|grep 48700tcp0 0 :::48700 :::* LISTEN 1628/xinetd

7、Mycat服务主机的防火墙上打开 48700端口

# vim etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport 48700 -j ACCEPT

# service iptables restart//保存后重启防火墙

8、测试配置结果

# /usr/local/bin/mycat_status

HTTP/1.1 200 OK //因为mycat是运行的,这里返回200

在192.168.9.172服务器安装haproxy

HAProxy负责将请求分发到Mycat上,起到负载均衡的作用,同时HAProxy也能检测到Mycat是否存活,HAProxy只会将请求转发到存活的Mycat上。如果一台Mycat服务器宕机,HAPorxy转发请求时不会转发到宕机的Mycat上,所以Mycat依然可用。

1、下载解压文件

链接:https://pan.baidu.com/s/1ySv8FU7cGBeBUFtgOHfUJw 密码:qiqd//haproxy百度云链接

# tar -zxvf haproxy-1.5.16.tar.gz

# cd haproxy-1.5.16

2、安装编译所需的依赖包

# yum install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

3、编译

# make TARGET=linux2628 ARCH=x86_64 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy //TARGET是指定内核版本,高于2.6.28的建议设置为linux2628,Linux操作系统内核版本查看命令# uname -r, ARCH指定系统架构,openssl pcre zlib 这三个包需要安装不然不支持

4、创建安装目录,然后执行安装

# mkdir /usr/local/haproxy

# make install PREFIX=/usr/local/haproxy/

5、创建配置文件目录

# mkdir -p /usr/local/haproxy/conf

# mkdir-p /etc/haproxy/

6、从配置文件模版复制配置文件,并添加配置文件软连接

# cp /usr/local/src/haproxy-1.5.16/examples/haproxy.cfg /usr/local/haproy/conf/# ln-s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg

7、拷贝错误页面,并添加目录软连接(HTTP模式选配),以后可能会用到

# cp -r /usr/local/src/haproxy-1.5.16/examples/errorfiles/ /usr/local/haproy/# ln-s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles

8、拷贝开机启动文件,并赋予可执行权限

# cp -r /usr/local/src/haproxy-1.5.16/examples/haproxy.init /etc/rc.d/init.d/haproxy

# chmod a+x /etc/rc.d/init.d/haproxy

9、添加haproxy命令脚本软连接

# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin

10、设置HAProxy开机启动

# chkconfig --add haproxy

# chkconfig haproxy on

接下来就开始配置mycat集群实现负载均衡

HAProxy支持TCP(第四层)和HTTP(第七层)应用的代理,本节课程我们使用HAProxy来做MyCat的负载均衡代理使用的是TCP模式。在4层模式下HAProxy仅在客户端和服务器之间转发双向流量。HAProxy配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障,HAProxy会自动将该服务器摘除,故障恢复后会自动将该服务器加入进来。

1、修改haproxy.cfg 配置文件

为了方便大家测试,我把配置文件上传到了百度云,可以下载直接修改完成之后替换即可~

链接:https://pan.baidu.com/s/1MjNoEioB6BrXqohRIb6Txw 密码:y9c9//百度云地址

# vim /usr/local/haproxy/conf/haproxy.cfg

###################################################################################################

##

## Haproxy 配置文件

##

###################################################################################################

## global配置中的参数为进程级别的参数,通常与其运行的操作系统有关globallog127.0.0.1local0 info ## 定义全局的syslog服务器,最多可以定义2个

### local0是日志设备,对应于/etc/rsyslog.conf中的配置,默认回收info的日志级别

#log127.0.0.1local1 info

chroot/usr/share/haproxy ## 修改HAProxy的工作目录至指定的目录并在放弃权限之前执行

### chroot() 操作,可以提升 haproxy 的安全级别

group haproxy ## 同gid,不过这里为指定的用户组名

user haproxy ## 同uid,但这里使用的为用户名

daemon ## 设置haproxy后台守护进程形式运行

nbproc1## 指定启动的haproxy进程个数,

### 只能用于守护进程模式的haproxy;默认为止启动1个进程,

### 一般只在单进程仅能打开少数文件描述符的场中中才使用多进程模式

maxconn4096## 设定每个haproxy进程所接受的最大并发连接数,

### 其等同于命令行选项"-n","ulimit-n"自动计算的结果正式参照从参数设定的

# pidfile/var/run/haproxy.pid ## 进程文件(默认路径 /var/run/haproxy.pid)

node edu-haproxy-01## 定义当前节点的名称,用于HA场景中多haproxy进程共享同一个IP地址时

description edu-haproxy-01## 当前实例的描述信息

## defaults:用于为所有其他配置段提供默认参数,这默认配置参数可由下一个"defaults"所重新设定

defaults

logglobal## 继承global中log的定义

mode http ## mode:所处理的模式 (tcp:四层 , http:七层 , health:状态检查,只会返回OK)

### tcp: 实例运行于纯tcp模式,在客户端和服务器端之间将建立一个全双工的连接,

#### 且不会对7层报文做任何类型的检查,此为默认模式

### http:实例运行于http模式,客户端请求在转发至后端服务器之前将被深度分析,

#### 所有不与RFC模式兼容的请求都会被拒绝

### health:实例运行于health模式,其对入站请求仅响应“OK”信息并关闭连接,

#### 且不会记录任何日志信息 ,此模式将用于相应外部组件的监控状态检测请求

option httplog

retries3option redispatch ## serverId对应的服务器挂掉后,强制定向到其他健康的服务器

maxconn2000## 前端的最大并发连接数(默认为2000)

### 其不能用于backend区段,对于大型站点来说,可以尽可能提高此值以便让haproxy管理连接队列,

### 从而避免无法应答用户请求。当然,此最大值不能超过“global”段中的定义。

### 此外,需要留心的是,haproxy会为每个连接维持两个缓冲,每个缓存的大小为8KB,

### 再加上其他的数据,每个连接将大约占用17KB的RAM空间,这意味着经过适当优化后 ,

### 有着1GB的可用RAM空间时将维护40000-50000并发连接。

### 如果指定了一个过大值,极端场景中,其最终所占据的空间可能会超过当前主机的可用内存,

### 这可能会带来意想不到的结果,因此,将其设定一个可接受值放为明智绝对,其默认为2000

timeout connect 5000ms ## 连接超时(默认是毫秒,单位可以设置us,ms,s,m,h,d)

timeout client 50000ms ## 客户端超时

timeout server 50000ms ## 服务器超时

## HAProxy的状态信息统计页面

listen admin_stats

bind :48800## 绑定端口

stats uri/admin-status ## 统计页面URI

stats auth admin:admin ## 设置统计页面认证的用户和密码,如果要设置多个,另起一行写入即可

mode http

option httplog ## 启用日志记录HTTP请求

## listen: 用于定义通过关联“前端”和“后端”一个完整的代理,通常只对TCP流量有用

listen mycat_servers

bind :3307 ## 绑定端口 ---------------------------------------------------------------------这里一定要注意,在测试连接的时候,端口指定3307

mode tcp

option tcplog ## 记录TCP请求日志

option tcpka ## 是否允许向server和client发送keepalive

option httpchk OPTIONS* HTTP/1.1\r\nHost:\ www ## 后端服务状态检测

### 向后端服务器的48700端口(端口值在后端服务器上通过xinetd配置)发送 OPTIONS 请求

### (原理请参考HTTP协议) ,HAProxy会根据返回内容来判断后端服务是否可用.

### 2xx 和 3xx 的响应码表示健康状态,其他响应码或无响应表示服务器故障。

balance roundrobin ## 定义负载均衡算法,可用于"defaults"、"listen"和"backend"中,默认为轮询方式

server mycat_01192.168.9.169:8066 check port 48700 inter 2000ms rise 2 fall 3 weight 10 ------------------------------------------------第一台mycatserver mycat_02192.168.9.170:8066 check port 48700 inter 2000ms rise 2 fall 3 weight 10 ------------------------------------------------第二台mycat## 格式:server

[:[port]] [param*]

### serser 在后端声明一个server,只能用于listen和backend区段。

###为此服务器指定的内部名称,其将会出现在日志及警告信息中

###

此服务器的IPv4地址,也支持使用可解析的主机名,但要在启动时需要解析主机名至响应的IPV4地址

### [:[port]]指定将客户端连接请求发往此服务器时的目标端口,此为可选项

### [param*]为此server设定的一系列参数,均为可选项,参数比较多,下面仅说明几个常用的参数:

#### weight:权重,默认为1,最大值为256,0表示不参与负载均衡

#### backup:设定为备用服务器,仅在负载均衡场景中的其他server均不可以启用此server

#### check:启动对此server执行监控状态检查,其可以借助于额外的其他参数完成更精细的设定

#### inter:设定监控状态检查的时间间隔,单位为毫秒,默认为2000,

##### 也可以使用fastinter和downinter来根据服务器端专题优化此事件延迟

#### rise:设置server从离线状态转换至正常状态需要检查的次数(不设置的情况下,默认值为2)

#### fall:设置server从正常状态转换至离线状态需要检查的次数(不设置的情况下,默认值为3)

#### cookie:为指定server设定cookie值,此处指定的值将会在请求入站时被检查,

##### 第一次为此值挑选的server将会被后续的请求所选中,其目的在于实现持久连接的功能

#### maxconn:指定此服务器接受的最大并发连接数,如果发往此服务器的连接数目高于此处指定的值,

#####其将被放置于请求队列,以等待其他连接被释放

2、根据以上HAProxy配置文件要求做以下配置

(1)添加haproxy用户组和用户

# groupadd haproxy

# useradd-g haproxy haproxy

(2)创建chroot运行的路径

# mkdir /usr/share/haproxy

(3)防火墙中打开3306端口和48800端口

# vi /etc/sysconfig/iptables ,并重启防火墙-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 48800 -j ACCEPT

# service iptables restart

3、开启rsyslog的haproxy日志记录功能

默认情况下 haproxy是不记录日志的,如果需要记录日志,还需要配置系统的syslog,在linux系统中是rsyslog服务。syslog服务器可以用作一个网络中的日志监控中心,rsyslog是一个开源工具,被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息。安装配置rsyslog服务:

# yum install rsyslog ## 没安装的情况下执行安装

# vim/etc/rsyslog.conf

把 $ModLoad imudp 和 $UDPServerRun 514前面的 # 去掉

$ModLoad imudp ## 是模块名,支持UDP协议

$UDPServerRun514 ##允许514端口接收使用UDP和TCP协议转发过来的日志,而rsyslog在默认情况下,正是在514端口监听UDP

确认 #### GLOBAL DIRECTIVES #### 段中是否有 $IncludeConfig /etc/rsyslog.d/*.conf没有则增加上此配置,增加后的效果:

# cd /etc/rsyslog.d/## rsyslog服务会来此目录加载配置

# vim haproxy.conf ## 创建haproxy的日志配置文件

增加以下内容

local0.* /var/log/haproxy.log&~

注意:如果不加上面的的"&~"配置则除了在/var/log/haproxy.log中写入日志外,也会写入/var/log/message文件中。

# service rsyslog restart //配置保存后重启rsyslog服务(等到HAProxy服务启动后,就能在/var/log/haproxy.log中看到日志了)

Shutting down system logger: [ OK ]

Starting system logger: [ OK ]

4、配置系统内核的IP包转发功能,因为用到的TCP4层转发

# vim /etc/sysctl.conf

net.ipv4.ip_forward= 1# sysctl-p //使配置生效

5、启动HAProxy并查看进程

# service haproxy start //启动命令方式一

# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg //启动命令方式二

# ps-ef |grep haproxy

haproxy3981 1 0 11:10 ? 00:00:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg

root4021 3062 0 11:10 pts/1 00:00:00 grep --color haproxy

6、连接测试

mysql -uroot -p123456 -h192.168.9.172 -P3307 //账号和密码是mycat server.xml配置的,-P3307是在haproxy.cfg配置的端口,有说明的

同时操作数据表,发现两台Mysq互为主从的服务器和它们的slave数据都发生了变化.

OK~

验证集群是否可用

访问地址:http://192.168.9.172:48800/admin-status,提示需要输入用户名密码,用户名密码已经在配置文件中配置

## HAProxy的状态信息统计页面

listen admin_stats

bind :48800## 绑定端口

stats uri/admin-status ##统计页面

stats auth admin:admin ## 设置统计页面认证的用户和密码,如果要设置多个,另起一行写入即可

mode http

option httplog ## 启用日志记录HTTP请求

这里虽然进来了,但是发现其中一台mycat状态有问题,我试了各种方法,包括关闭出问题的mycat服务器防火墙,经过一个不经意的测试,使用命令行连接形式进入mycat(mysql)终端,发现是mysql连接权限问题,然后我再在两台互为主从的mysql服务器上分别给那台安装mycat的授权,然后重启,问题解决了~

分别进入不同的终端执行SQL命令发现两台mycat都有了新的session连接。

OK~

mycat与mysql proxy_高可用Mysql架构_Mycat集群部署(HAProxy + 两台Mycat+Mysql双主双从)...相关推荐

  1. keepalive+nginx实现负载均衡高可用_高可用、负载均衡 集群部署方案:Keepalived + Nginx + Tomcat...

    前言:初期应用较小,一般以单机部署为主,即可满足业务的需求,随着业务的不断扩大,单机部署的模式无法承载这么大的业务量,需要进行服务集群化的部署,本文主要介绍服务器Tomcat多实例部署,搭载Keepa ...

  2. Linux 高可用(HA)集群之Pacemaker详解

    大纲 说明:本来我不想写这篇博文的,因为前几篇博文都有介绍pacemaker,但是我觉得还是得写一下,试想应该会有博友需要,特别是pacemaker 1.1.8(CentOS 6.4)以后,pacem ...

  3. 云服务器搭建高可用keepalived+nginx+emqx集群

    云服务器搭建高可用keepalived+nginx+emqx集群 一.高可用emqx集群搭建 1 单机搭建emqx 2 配置认证和鉴权插件 3 搭建emqx集群 二.nginx搭建负载均衡 1 ngi ...

  4. 深入浅出百亿请求高可用Redis(codis)分布式集群揭秘

    摘要:作为noSql中的kv数据库的王者,redis以其高性能,低时延,丰富的数据结构备受开发者青睐,但是由于redis在水平伸缩性上受限,如何做到能够水平扩容,同时对业务无侵入性是很多使用redis ...

  5. RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成负载均衡组件 Ha-Proxy_02

    服务器IP hostname 节点说明 端口 管控台地址 账号 密码 192.168.0.115 mq-01 rabbitmq master 5672 http://192.168.0.115:156 ...

  6. 从零开始搭建高可用RabbitMQ镜像模式集群

    文章目录 RabbitMQ集群模式搭建 准备工作 选取任意一个节点作为master节点, 进行文件同步, 我这里选择138作为master节点 组成集群 配置镜像队列(设置镜像队列策略) 集群配置参数 ...

  7. RabbitMQ+haproxy+keeplived 高可用负载均衡+镜像集群模式_集成高性能高可用组件 Keepalived_03

    服务器IP hostname 节点说明 端口 管控台地址 账号 密码 192.168.0.115 mq-01 rabbitmq master 5672 http://192.168.0.115:156 ...

  8. 高可用的Redis主从复制集群,从理论到实践

    作者:Sicimike blog.csdn.net/Baisitao_/article/details/105545410 前言 我们都知道,服务如果只部署一个节点,很容易出现单点故障,从而导致服务不 ...

  9. 高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南

    原文:http://my.oschina.net/wstone/blog/365010#OSC_h3_13 (WJW)高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南 [X] ...

最新文章

  1. DCN-2655 gre隧道 vpn 嵌入IPSec配置:
  2. 反转链表的golang实现
  3. TensorFlow2-迁移学习
  4. 联想服务器开机显示系统恢复选项,联想电脑win10系统开机时按哪个键进入一键还原模式...
  5. python 报错继续执行_Python报错不要慌,这三个关键词帮你解决问题!
  6. 邮箱附件、QQ、微信等社交工具大文件传输解决方案
  7. 目标跟踪学习笔记_1(opencv中meanshift和camshift例子的应用)
  8. datagrid 什么时候结束编辑_小规模纳税人免税政策什么时候结束?有答复了
  9. 39. 二叉树的深度(C++版本)
  10. LightGBM算法解析
  11. 面向对象10:多态性的使用、重载和重写的区别、多态性的实用意义
  12. 电脑f2还原系统步骤_电脑还原系统方法步骤详解
  13. 2021年中国无线通信模组企业排名
  14. 计算机派位志愿填报技巧,小升初电脑派位 填报也有技巧
  15. 星空之翼游戏的设计与实现
  16. python怎么批量爬取图片_python批量爬取网络图片
  17. html style属性的用法
  18. JAVA软件技术人力外派外包费用怎么算?
  19. html source type mp4,html5 – 获取MediaSource.isTypeSupported的mime类型
  20. iOS跑步软件开发-从无到有

热门文章

  1. Android之ListView展示多类型的条目
  2. 【JVM学习-3.6】JVM运行时数据区--方法区
  3. python opencv创建图像_打开国庆的正确方式,教你用OpenCV-Python轻松生成微信国庆版头像...
  4. 一个应用最广泛的营销分析工具
  5. 建模练习——扇贝单词
  6. 数字化门店管理|如何让门店数字化管理,更加贴合日常运营细节?
  7. 谁会买下Delphi?
  8. 如何把D盘多余空间返还给C盘
  9. 下载m3u8文件中的视频,使用FFMpeg解密合并.ts文件
  10. webrtc入门之客户端连麦demo-apprtc