搭建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;

 

图片 1

  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

 

图片 2

安排主从复制成功

3)、配置192.168.95.12主从复制

同上

图片 3

部署主从复制成功。

 

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的下自己多了有的附加选项。这可加而免加以由好配置,不加的言语将会见以默认路径安装,请看下图。

图片 4

图片 5

  2)、提供启动脚本

以haproxy这个启动脚本放在/etc/init.d/文件夹下,以便我们得以直接service启动它

【注意】:此启动脚本仅仅切合自身以上之装路径。假若安装路径不同,则要进行对应的修改好使用。

图片 6图片 7

#!/bin/sh
#
# haproxy
#
# chkconfig:   - 85 15
# description:  HAProxy is a free, very fast and reliable solution \
#               offering high availability, load balancing, and \
#               proxying for TCP and  HTTP-based applications
# processname: haproxy
# config:      /etc/haproxy/haproxy.cfg
# pidfile:     /var/run/haproxy.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

exec="/usr/sbin/haproxy"
prog=$(basename $exec)

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

cfgfile=/etc/haproxy/haproxy.cfg
pidfile=/var/run/haproxy.pid
lockfile=/var/lock/subsys/haproxy

check() {
    $exec -c -V -f $cfgfile $OPTIONS
}

start() {
    $exec -c -q -f $cfgfile $OPTIONS
    if [ $? -ne 0 ]; then
        echo "Errors in configuration file, check with $prog check."
        return 1
    fi

    echo -n $"Starting $prog: "
    # start it up here, usually something like "daemon $exec"
    daemon $exec -D -f $cfgfile -p $pidfile $OPTIONS
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    # stop it here, often "killproc $prog"
    killproc $prog
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    $exec -c -q -f $cfgfile $OPTIONS
    if [ $? -ne 0 ]; then
        echo "Errors in configuration file, check with $prog check."
        return 1
    fi
    stop
    start
}

reload() {
    $exec -c -q -f $cfgfile $OPTIONS
    if [ $? -ne 0 ]; then
        echo "Errors in configuration file, check with $prog check."
        return 1
    fi
    echo -n $"Reloading $prog: "
    $exec -D -f $cfgfile -p $pidfile $OPTIONS -sf $(cat $pidfile)
    retval=$?
    echo
    return $retval
}

force_reload() {
    restart
}

fdr_status() {
    status $prog
}

case "$1" in
    start|stop|restart|reload)
        $1
        ;;
    force-reload)
        force_reload
        ;;
    check)
        check
        ;;
    status)
        fdr_status
        ;;
    condrestart|try-restart)
        [ ! -f $lockfile ] || restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|try-restart|reload|force-reload}"
        exit 2
esac

View Code

 

#给执行权力
#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                 //使用最少连接方式调度
    server mysql1 192.168.95.11:3306 check port 3306 maxconn 300
    server mysql2 192.168.95.12:3306 check port 3306 maxconn 300

 

  4)、启动日志

# vi /etc/rsyslog.conf 

图片 8

#service rsyslog restart

  5)、启动haproxy

# service haproxy start

图片 9

  6)、测试haproxy

安照配置文件进行对应的测试

图片 10

打开浏览器输入192.168.95.13:8888/haproxyadmin?stats

图片 11

登陆后要下如所示,表明安装haproxy成功。

图片 12

  5.2、安装keepalived

官网下载:http://www.keepalived.org/download.html

在192.168.95.13、192.168.95.14安装keepalived

  1)、解决不够的软件库文件

【这同一步骤视具体的linux版本而定,有些早就设置openssl了。具体情况可以执行./configure就会确定缺不缺软件库文件了】

率先我们先行用keepalived-1.2.19.tar.gz解压,然后上目录./configure查看

# tar -zxvf keepalived-1.2.19.tar.gz
# ./configure --prefix=/usr/local/keepalived  --sbindir=/usr/sbin/ --sysconfdir=/etc/ --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/kernels/2.6.32-504.el6.x86_64/

图片 13

图片 14

 由达到图可见keepalived的设置需要事先安装软件OpenSSL

缺失头文件,只待装openssl和openssl-devel即可

极端简便易行的法子是:yum -y install openssl openssl-devel

没网的冤家吧不用怕,接下将介绍的凡rpm方法安装:

#挂载光盘,在光盘中寻找软件。若光盘找不顶就一直下载,再传出linux进行设置

# mount /dev/cdrom  /home/suifeng2/rom/
# cd rom/
# cd Packages/
# ls |grep openssl

图片 15

安装keepalived软件时存在各种依赖,下图是自个儿设置软件后整理的倚重关系图:

图片 16

既然都掌握各个软件依赖,则可遵循最终当之软件开始安装:

(你吗可以从前面开始进行设置,一步一步之查各个依赖关系)

1、安装openssl

# rpm -ivh openssl-1.0.1e-30.el6.x86_64.rpm

图片 17

安装openssl成功

2、安装openssl-devel

安装libsepol-devel:

# rpm -ivh libsepol-devel-2.0.41-4.el6.x86_64.rpm

图片 18

安装pkgconfig(libsepol):

# rpm -ivh pkgconfig-0.23-9.1.el6.x86_64.rpm

图片 19

安装libselinux-devel:

# rpm -ivh libselinux-devel-2.0.94-5.8.el6.x86_64.rpm

图片 20

安装keyutils-libs-devel:

# rpm -ivh keyutils-libs-devel-1.4-5.el6.x86_64.rpm

图片 21

安装libcom_err-devel:

# rpm -ivh libcom_err-devel-141.12-21.el6.x86_64.rpm

 

图片 22

安装krb5-devel:

# rpm -ivh krb5-devel-1.10.3-33.el6.x86_64.rpm

图片 23

安装zlib-devel:

# rpm -ivh zlib-devel-1.2.3-29.el6.x86_64.rpm

图片 24

安装openssl-devel:

# rpm -ivh openssl-devel-1.0.1e-30.el6.x86_64.rpm

图片 25

  2)、编译安装keepalived软件

# cd keepalived-1.2.19
# ./configure --prefix=/usr/local/keepalived  --sbindir=/usr/sbin/ --sysconfdir=/etc/ --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/kernels/2.6.32-504.el6.x86_64/
# make && make install

# chkconfig --add keepalived  #添加开机自启(我暂时没添加)
# chkconfig keepalived on

 

【注意】:

1、安装时./configure中之—prefix后的几乎独选择而挑选可免选择,选了即足以使service直接开行了。建议极好都抬高吧

2、–with-kernel-dir这个选项根据自己的linux版本进行填写(在linux中应用命令uname
–a可以查到)

图片 26

  3)、创建布局文件

/etc/keepalived/文件夹已是keepalived.conf文件,我们用其改名为keepalived.conf.back,再建一个咱团结一心keepalived.conf配置文件。

图片 27

vi /etc/keepalived/keepalived.conf(13同14配置文件路径一致)

【以下是大概的配备文件,使用时最好去丢注释】

安排文件下充斥(不分包注释):

192.168.95.13布置文件:

! Configuration File for keepalived
#简单的头部,这里主要可以做邮件通知报警等的设置,此处就暂不配置了;
global_defs {
        notificationd LVS_DEVEL
}
#预先定义一个脚本,方便后面调用,也可以定义多个,方便选择;
vrrp_script chk_haproxy {
    script "/etc/keepalived/chk.sh"  #具体脚本路径
    interval 2  #脚本循环运行间隔
}
#VRRP虚拟路由冗余协议配置
vrrp_instance VI_1 {   #VI_1 是自定义的名称;
    state BACKUP    #MASTER表示是一台主设备,BACKUP表示为备用设备【我们这里因为设置为开启不抢占,所以都设置为备用】
    nopreempt      #开启不抢占
    interface eth0   #指定VIP需要绑定的物理网卡
    virtual_router_id 11   #VRID虚拟路由标识,也叫做分组名称,该组内的设备需要相同
    priority 130   #定义这台设备的优先级 1-254;开启了不抢占,所以此处优先级必须高于另一台

    advert_int 1   #生存检测时的组播信息发送间隔,组内一致
    authentication {    #设置验证信息,组内一致
        auth_type PASS   #有PASS 和 AH 两种,常用 PASS
        auth_pass asd    #密码
    }
    virtual_ipaddress {
        192.168.95.55    #指定VIP地址,组内一致,可以设置多个IP
    }
    track_script {    #使用在这个域中使用预先定义的脚本,上面定义的
        chk_haproxy   
    }

    notify_backup "/etc/init.d/haproxy restart"   #表示当切换到backup状态时,要执行的脚本
    notify_fault "/etc/init.d/haproxy stop"     #故障时执行的脚本
}

192.168.95.14配置文件:

布置文件与方的几同一,仅仅改变priority 120【只需要比地方的稍即可】

  4)、创建脚本文件

缔造上面配置文件所用的脚本文件(13、14等同)

(检测haproxy有没起发生故障,发生故障则用keepalived停掉,让出vip)

# vi /etc/keepalived/chk.sh#!/bin/bash
#
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
       /etc/init.d/keepalived stop
fi

给执行权限
# chmod +x /etc/keepalived/chk.sh

图片 28

启动keepalived:
# service keepalived start

图片 29

安装keepalived成功!

 

6、功能测试

测试之前先在mysql1和mysql2负起一个mysql用户,此用户可以允许13、14linux主机登陆:

用户:jack

密码:321

host:192.168.95.%

mysql> GRANT ALL ON *.* TO 'jack'@'192.168.95.%' IDENTIFIED BY '321';
mysql> FLUSH PRIVILEGES;

  6.1、流程简述

粗粗讲述一下总体的运行流程:

第一两个11,12底mysql以及13、14底haproxy、keepalived都启动;

keepalived在keepalived群组中取得虚拟IP,以及检测haproxy是否给kill;

haproxy负责将入的数量转发到11或12底mysql中。

下图是自己写的概括明了图:(相对来说比较简洁哈,凑合凑合哈)

图片 30

紧接下我们用一个个成效的拓展测试证明。

  6.2、测试haproxy监听前端端口3306

1、frontend监听端口3306经常,将mysql、haproxy、keepalived全部开

2、使用任意一个mysql客户端登陆用户jack

登陆成功(windowns上登陆mysql)

图片 31

3、更改frontend监听端口为3307,继续操作登陆测试

登陆失败

图片 32

结果:说明了frontend监听端口的用处,有助于我们解haproxy用法。

  6.3、测试赛可用+keepalived不抢占vip

可以通过haproxy监控页面获得知谁获得了vip

1、依次启动13、14的keepalived、haproxy(启动keepalived后以见面活动启haproxy)

图片 33

图片 34

2、访问http://192.168.95.55:8888/haproxyadmin?stats

13获取了vip

图片 35

3、# kill -9 8923

刷新http://192.168.95.55:8888/haproxyadmin?stats

图片 36

14收获了vip,机器正常干活

结果:证明了大可用,挂了平等宝旁一样宝继续工作

4、重新开动13之haproxy以及keepalived

并刷新http://192.168.95.55:8888/haproxyadmin?stats

图片 37

图片 38

结果:此时vip仍在14手中,证明了keepalived配置了非抢占vip,不必浪费资源去获取vip。

  6.4、测试负载均衡

1、全部例行启动,此时vip在14手中

2、分别以11、12面临开抓包

# tcpdump -n -i eth0 host 192.168.95.11 and 192.168.95.14
# tcpdump -n -i eth0 host 192.168.95.12 and 192.168.95.14

3、使用不同客户端上陆jack用户,不断向数据库添加数据

图片 39

图片 40

结果:此时14朝11、12都起发送数据,此时认证负载均衡

【我们设置的haproxy中balance方式是最少连接方式,假要采用roundrobin方式测试结果以会晤愈加明朗】

注意:

当有一样高mysql挂了今后,haproxy会将其踹来mysql服务器群组。

当起发号施令传来时见面用那转会到正常的服务器上。

当起题目的mysql恢复后,haproxy又会活动地用她放回mysql服务器群组中,并且自动同步没有同的数码

测试:

1、全部正规启动

mysql1、mysql2都正常

图片 41

 2、将mysql2关掉

图片 42

mysql2出问题,将那踹来mysql群组

3、启动mysql2

图片 43

mysql2回复后以将该推广回mysql群组里

【当mysql2吊掉时,若发生多少插入,将会晤转接给mysql1,当mysql恢复后,又见面以这些多少并到mysql2负】

 

7、总结暨建议

  在当下首博文中我们不仅只是关心当下同一百分之百mysql高可用负载均衡的兑现方式,我们还应有明白haproxy以及keepalived的干活方式。Haproxy和keepalived这点儿单器十分强大,了解他们之兑现方式,那么即便得以此类推与另外服务器组合构建强大健壮的劳动集群。例如它好和apache组合,构成大可用负载均衡的web集群。

  这篇稿子被只是简简单单的搭建了一个mysql高可用负载均衡的环境,真正以至生育环境遭到,还用基于具体品种进行相应的修改。

  最后自己之多少建议就是圈罢就首博客可以去打听了解又多之haproxy和keepalived的呼应安排,以及学习和haproxy功能差不多的LVS。

 

(以上是好之片观点和总,若发生不足或失实的地方要各位指出)

作者:这就是说一叶随风

声称:以上就代表本人以做事学习中某一时间内总的看法或结论。转载时请以篇章页面明显位置被起原先文链接

 

网站地图xml地图