MySQL高可用负载均衡
Posted 秋天的风吹过原野
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL高可用负载均衡相关的知识,希望对你有一定的参考价值。
1、简介
使用mysql时随着时间的增长,用户量以及数据量的逐渐增加,访问量更是剧增,最终将会使MySQL达到某个瓶颈,那么MySQL的性能将会大大降低。这一结果也不利于软件的推广。
那么如何跨过这个瓶颈,提高MySQL的并发量呢?方法有很多,分布式数据库、读写分离、高可用负载均衡、增加缓存服务器等等。之前的文章里已经介绍了读写分离的方案了,接下来我将讲解MySQL高可用负载均衡这一方法。
其中实现高可用负载均衡的方法有很多,例如LVS+keepalived组合实现、haproxy+keepalived组合实现等等,这里我们采用haproxy+keepalived组合实现MySQL高可用负载均衡这一技术。
2、基本环境
四台linux虚拟主机
Linux版本CentOS6.6
MySQL 5.5(已安装好)
haproxy-1.5.14
keepalived-1.2.19
IP:192.168.95.11(mysql1)、192.168.95.12(mysql2)、192.168.95.13(haproxy+keepalived)、192.168.95.14(haproxy+keepalived)、192.168.95.55(vip)
3、配置MySQL主主复制
详细配置步骤可以参考这篇文章:
http://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label7
以下简要介绍一下mysql的主主复制:
何为主主复制?就是两个mysql都能读能写,数据记录通过二进制传达给对方从而保持数据的一致性。
(192.168.95.11主从复制+192.168.95.12主从复制==192.168.95.11、192.168.95.12主主复制)
因此主主复制中必须要解决的事情就是自增主键的问题。如果mysql1主键id增加到12了,此时二进制数据还没到达mysql2,那么mysql2恰好要插入数据,那么新数据主键id也是12,那不就是乱套了么!解决这一问题我们可以直接更改MySQL中的配置文件即可。
1)、更改配置文件
--192.168.95.11:MySQL
server-id=11 #任意自然数n,只要保证两台MySQL主机不重复就可以了。
log-bin=mysql-bin #开启二进制日志
auto_increment_increment=2 #步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_offset=1 #起始值。一般填第n台主MySQL。此时为第一台主MySQL
binlog-ignore=mysql #忽略mysql库【我一般都不写】
binlog-ignore=information_schema #忽略information_schema库【我一般都不写】
replicate-do-db=aa #要同步的数据库,默认所有库
--192.168.95.12:MySQL
server-id=12
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
replicate-do-db=aa
配置好后重启MySQL
2)、配置192.168.95.11主从复制
1、在192.168.95.12中创建一个192.168.95.11主机中可以登录的MySQL用户
用户:mysql11
密码:mysql11
mysql>GRANT REPLICATION SLAVE ON *.* TO ‘mysql11’@’192.168.95.11’ IDENTIFIED BY ’mysql11’;
mysql>FLUSH PRIVILEGES;
2、查看192.168.95.12二进制日志
mysql> show master status;
3、告知二进制文件名与位置
mysql> change master to
-> master_host=\'192.168.95.11\',
-> master_user=\'mysql11\',
->master_password=\'mysql11\',
->master_log_file=\'mysql-bin.000097\',
-> master_log_pos=107;
4、查看结果
mysql> slave start;
mysql> show slave status\\G
配置主从复制成功
3)、配置192.168.95.12主从复制
同上
配置主从复制成功。
4、中间件简述
4.1、Haproxy介绍
Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能。其配置简单,而且拥有很好的对服务器节点的健康检查功能(相当于keepalived健康检查),当其代理的后端服务器出现故障时,Haproxy会自动的将该故障服务器摘除,当服务器的故障恢复后Haproxy还会自动将RS服务器。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
Haproxy软件引入了frontend,backend的功能,frontend(acl规则匹配)可以根据任意HTTP请求头做规则匹配,然后把请求定向到相关的backend(server pools等待前端把请求转过来的服务器组)。通过frontend和backup,我们可以很容易的实现haproxy的7层代理功能,haproxy是一款不可多得的优秀代理服务软件。
4.2、keepalived介绍
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
5、中间件的安装与配置(haproxy、keepalived)
百度云下载:http://pan.baidu.com/s/1qYoCjDE 密码:7cef
5.1、安装haproxy
在192.168.95.13、192.168.95.14安装haproxy(一模一样安装)
1)、编译安装haproxy
# tar -zxvf haproxy-1.5.14.tar.gz
# cd haproxy-1.5.14
# make TARGET=linux26 ARCH=x86_64
# make install SBINDIR=/usr/sbin/ MANDIR=/usr/share/man/ DOCDIR=/usr/share/doc/
注意:
1、为什么不用configure,请看下图。haproxy-1.5.14已经存在Makefile文件了。
2、make的时候,target以及arch需要根据自己的linux主机设置
3、make install的时候我增加了一些额外选项。这可加可不加由自己配置,不加的话将会按默认路径安装,请看下图。
2)、提供启动脚本
将haproxy这个启动脚本放在/etc/init.d/文件夹下,以便我们可以直接service启动它
【注意】:此启动脚本仅仅适合我以上的安装路径。假若安装路径不同,则需要进行相应的修改方可使用。
![](https://image.cha138.com/20210514/858a6e93350a4b36b157c3564ac68b66.jpg)
#给执行权力
#chmod +x /etc/init.d/haproxy
3)、提供配置文件
根据上面的启动脚本建立相应的目录以及配置文件
# mkdir /etc/haproxy
# mkdir /var/lib/haproxy
# useradd -r haproxy #建立脚本启动用户
# vi /etc/haproxy/haproxy.cfg
【配置文件】
#这里的配置文件仅仅只是贴出来进行解析说明。
#如果需要这个配置文件最好将注释解析全部删除掉,因为我在使用的过程中,正是因为存在注释解析而导致出错,删除后就能正常运行。
#可以下载这个配置文件进行使用,与下面贴出来的配置文件一致,只是不存在注释解析
#百度云下载该配置文件(不含注释):链接:http://pan.baidu.com/s/1gfOMtKB 密码:zl9o
global
log 127.0.0.1 local2 //日志定义级别
chroot /var/lib/haproxy //当前工作目录
pidfile /var/run/haproxy.pid //进程id
maxconn 4000 //最大连接数
user haproxy //运行改程序的用户
group haproxy
daemon //后台形式运行
stats socket /var/lib/haproxy/stats
defaults
mode tcp //haproxy运行模式(http | tcp | health)
log global
option dontlognull
option redispatch //serverId对应的服务器挂掉后,强制定向到其他健康的服务器
retries 3 //三次连接失败则服务器不用
timeout http-request 10s
timeout queue 1m
timeout connect 10s //连接超时
timeout client 1m //客户端超时
timeout server 1m //服务器超时
timeout http-keep-alive 10s
timeout check 10s //心跳检测
maxconn 600 //最大连接数
listen stats //配置haproxy状态页(用来查看的页面)
mode http
bind :8888
stats enable
stats hide-version //隐藏haproxy版本号
stats uri /haproxyadmin?stats //一会用于打开状态页的uri
stats realm Haproxy\\ Statistics //输入账户密码时的提示文字
stats auth admin:admin //用户名:密码
frontend main
bind 0.0.0.0:3306 //使用3306端口。监听前端端口【表示任何ip访问3306端口都会将数据轮番转发到mysql服务器群组中】
default_backend mysql //后端服务器组名
backend mysql
balance leastconn 以上是关于MySQL高可用负载均衡的主要内容,如果未能解决你的问题,请参考以下文章