实验系统:CentOS 6.6_x86_64(2.6.32-504.30.3.el6.x86_64)

实验前提:防火墙和selinux都关闭

实验说明:本实验共有4台主机,IP分配如拓扑

实验软件:keepalived-1.2.19  haproxy-1.5.14  mariadb-10.0.20

下载地址:http://pan.baidu.com/s/1bnnYiMr

实验拓扑:

    

一、安装mariadb

  1.在两台数据库服务器安装:

  1. tar xf mariadb-10.0.-linux-x86_64.tar.gz -C /usr/local/
  2. cd /usr/local/
  3. ln -sv mariadb-10.0.-linux-x86_64 mysql
  4. useradd -r mysql
  5. mkdir -pv /mydata/data
  6. chown -R mysql.mysql /mydata/data/
  7. cd mysql/
  8. chown -R root.mysql .
  9. scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
  10. cp support-files/my-large.cnf /etc/my.cnf
  11. cp support-files/mysql.server /etc/init.d/mysqld
  12. chkconfig --add mysqld
  13. chkconfig mysqld on

  2.配置主主复制:

    19.74:

  1. vim /etc/my.cnf
  2. ----------------------------------------------->
  3. [mysqld]
  4. server-id =
  5. datadir = /mydata/data
  6. log-bin = /mydata/data/mysql1-bin
  7. binlog_format = ROW
  8. relay_log = /mydata/data/relay-log
  9. auto-increment-increment =
  10. auto-increment-offset =
  11. sync_binlog =
  12. sync_master_info =
  13. sync_relay_log =
  14. sync_relay_log_info =

    19.76:

  1. vim /etc/my.cnf
  2. ----------------------------------------------->
  3. [mysqld]
  4. server-id =
  5. datadir = /mydata/data
  6. log-bin = /mydata/data/mysql2-bin
  7. binlog_format = ROW
  8. relay_log = /mydata/data/relay-log
  9. auto-increment-increment =
  10. auto-increment-offset =
  11. sync_binlog =
  12. sync_master_info =
  13. sync_relay_log =
  14. sync_relay_log_info =

  3.创建具有复制权限的用户:

    19.74:

  1. service mysqld start
  2. /usr/local/mysql/bin/mysql
  3. ------------------------------------------>
  4. GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'master'@'192.168.19.76' IDENTIFIED BY '';
  5. FLUSH PRIVILEGES;

    19.76:

  1. service mysqld start
  2. /usr/local/mysql/bin/mysql
  3. ------------------------------------------>
  4. GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'master'@'192.168.19.74' IDENTIFIED BY '';
  5. FLUSH PRIVILEGES;

  4.查看二进制位置:

    19.74:

  1. SHOW MASTER LOGS;

    

    19.76上使用相同命令:

    

  5.配置双主:

    19.74:

  1. CHANGE MASTER TO MASTER_HOST='192.168.19.76',MASTER_USER='master',MASTER_PASSWORD='',MASTER_LOG_FILE='mysql2-bin.000001',MASTER_LOG_POS=;
  2. START SLAVE;

    19.76:

  1. CHANGE MASTER TO MASTER_HOST='192.168.19.74',MASTER_USER='master',MASTER_PASSWORD='',MASTER_LOG_FILE='mysql1-bin.000001',MASTER_LOG_POS=;
  2. START SLAVE;

二、编译安装haproxy

  1.在19.66和19.79上编译安装haproxy:

  1. tar xf haproxy-1.5..tar.gz
  2. cd haproxy-1.5.
  3. make TARGET=linux2628 ARCH=x86_64 //根据自己主机设定
  4. make install SBINDIR=/usr/sbin/ MANDIR=/usr/share/man/ DOCDIR=/usr/share/doc/

  2.提供启动脚本:

  1. vim /etc/init.d/haproxy
  2. --------------------------------------------------->
  3. #!/bin/sh
  4. #
  5. # haproxy
  6. #
  7. # chkconfig: -
  8. # description: HAProxy is a free, very fast and reliable solution \
  9. # offering high availability, load balancing, and \
  10. # proxying for TCP and HTTP-based applications
  11. # processname: haproxy
  12. # config: /etc/haproxy/haproxy.cfg
  13. # pidfile: /var/run/haproxy.pid
  14.  
  15. # Source function library.
  16. . /etc/rc.d/init.d/functions
  17.  
  18. # Source networking configuration.
  19. . /etc/sysconfig/network
  20.  
  21. # Check that networking is up.
  22. [ "$NETWORKING" = "no" ] && exit
  23.  
  24. exec="/usr/sbin/haproxy"
  25. prog=$(basename $exec)
  26.  
  27. [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
  28.  
  29. cfgfile=/etc/haproxy/haproxy.cfg
  30. pidfile=/var/run/haproxy.pid
  31. lockfile=/var/lock/subsys/haproxy
  32.  
  33. check() {
  34. $exec -c -V -f $cfgfile $OPTIONS
  35. }
  36.  
  37. start() {
  38. $exec -c -q -f $cfgfile $OPTIONS
  39. if [ $? -ne ]; then
  40. echo "Errors in configuration file, check with $prog check."
  41. return
  42. fi
  43.  
  44. echo -n $"Starting $prog: "
  45. # start it up here, usually something like "daemon $exec"
  46. daemon $exec -D -f $cfgfile -p $pidfile $OPTIONS
  47. retval=$?
  48. echo
  49. [ $retval -eq ] && touch $lockfile
  50. return $retval
  51. }
  52.  
  53. stop() {
  54. echo -n $"Stopping $prog: "
  55. # stop it here, often "killproc $prog"
  56. killproc $prog
  57. retval=$?
  58. echo
  59. [ $retval -eq ] && rm -f $lockfile
  60. return $retval
  61. }
  62.  
  63. restart() {
  64. $exec -c -q -f $cfgfile $OPTIONS
  65. if [ $? -ne ]; then
  66. echo "Errors in configuration file, check with $prog check."
  67. return
  68. fi
  69. stop
  70. start
  71. }
  72.  
  73. reload() {
  74. $exec -c -q -f $cfgfile $OPTIONS
  75. if [ $? -ne ]; then
  76. echo "Errors in configuration file, check with $prog check."
  77. return
  78. fi
  79. echo -n $"Reloading $prog: "
  80. $exec -D -f $cfgfile -p $pidfile $OPTIONS -sf $(cat $pidfile)
  81. retval=$?
  82. echo
  83. return $retval
  84. }
  85.  
  86. force_reload() {
  87. restart
  88. }
  89.  
  90. fdr_status() {
  91. status $prog
  92. }
  93.  
  94. case "$1" in
  95. start|stop|restart|reload)
  96. $
  97. ;;
  98. force-reload)
  99. force_reload
  100. ;;
  101. check)
  102. check
  103. ;;
  104. status)
  105. fdr_status
  106. ;;
  107. condrestart|try-restart)
  108. [ ! -f $lockfile ] || restart
  109. ;;
  110. *)
  111. echo $"Usage: $0 {start|stop|status|restart|try-restart|reload|force-reload}"
  112. exit
  113. esac
    <---------------------------------------------------
    chkconfig --add haproxy
    chkconfig haproxy on
    chmod +x /etc/init.d/haproxy

  3.提供配置文件:

  1. mkdir /etc/haproxy
    mkdir /var/lib/haproxy
    useradd -r haproxy
  2. vim /etc/haproxy/haproxy.cfg
  3. ----------------------------------------------------------------------->
    global
  4.  
  5. log 127.0.0.1 local2
  6.  
  7. chroot /var/lib/haproxy
  8. pidfile /var/run/haproxy.pid
  9. maxconn
  10. user haproxy
  11. group haproxy
  12. daemon
  13.  
  14. stats socket /var/lib/haproxy/stats
  15.  
  16. defaults
  17. mode tcp //haproxy运行模式
  18. log global
  19. option dontlognull
  20. option redispatch
  21. retries
  22. timeout http-request 10s
  23. timeout queue 1m
  24. timeout connect 10s
  25. timeout client 1m
  26. timeout server 1m
  27. timeout http-keep-alive 10s
  28. timeout check 10s
  29. maxconn 600 //最大连接数
  30.  
  31. listen stats //配置haproxy状态页
        mode http
        bind :6677 //找一个比较特殊的端口
        stats enable
        stats hide-version //隐藏haproxy版本号
        stats uri     /haproxyadmin?stats //一会用于打开状态页的uri
        stats realm   Haproxy\ Statistics //输入账户密码时的提示文字
        stats auth    admin:admin //用户名:密码
        stats admin if TRUE //开启状态页的管理功能
  32. frontend main *:3306 //这里为了实验方便,使用3306端口
  33. default_backend mysql //后端服务器组名
  34.  
  35. backend mysql
  36. balance     leastconn //使用最少连接方式调度
        server m1 192.168.19.74:3306 check port 3306 maxconn 300
        server m2 192.168.19.76:3306 check port 3306 maxconn 300

  4.启动日志:

  1. vim /etc/rsyslog.conf
  2. ----------------------------------------------------->
  3. # Provides UDP syslog reception //去掉下面两行注释,开启UDP监听
  4. $ModLoad imudp
  5. $UDPServerRun
  6.  
  7. local2.* /var/log/haproxy.log //添加此行
    <-----------------------------------------------------
    service rsyslog restart

  5.启动测试haproxy:

  1. service haproxy start
    netstat -tnlp

 

  6.在19.74上创建远程登录账号:

  1. GRANT ALL ON *.* TO 'jason'@'192.168.19.%' IDENTIFIED BY '';
  2. FLUSH PRIVILEGES;

  7.分别在19.66和19.79上登录mysql,若都能连接成功则继续往下:

  1. yum -y install mysql //如果没有mysql客户端则运行此命令
    mysql -ujason -p123456 -h192.168.19.66 //在19.66上登录
    mysql -ujason -p123456 -h192.168.19.79 //在19.79上登录

三、安装keepalived

  1.在19.66和19.79上编译安装keepalived:

  1. tar xf keepalived-1.2..tar.gz
  2. cd keepalived-1.2.
  3. ./configure --prefix=/usr/local/keepalived --sbindir=/usr/sbin/ --sysconfdir=/etc/ --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/kernels/2.6.-504.30..el6.x86_64/ //内核版本换成自己主机的
  4. make && make install
  5. chkconfig --add keepalived
  6. chkconfig keepalived on

  2.在19.66上配置:

  1. vim /etc/keepalived/keepalived.conf
  2. ----------------------------------------------------->
    ! Configuration File for keepalived
  3.  
  4. global_defs { //此段暂时略过,下同
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
  5. vrrp_script chk_haproxy {
  6. script "/etc/keepalived/chk.sh" //检查haproxy的脚本
  7. interval 2 //每两秒检查一次
  8. }
  9.  
  10. vrrp_instance VI_1 {
  11. state BACKUP //定义为BACKUP节点
  12. nopreempt //开启不抢占
  13. interface eth0
  14. virtual_router_id
  15. priority 100 //开启了不抢占,所以此处优先级必须高于另一台
  16. advert_int
  17. authentication {
  18. auth_type PASS
  19. auth_pass abcd
  20. }
  21. virtual_ipaddress {
  22. 192.168.19.150 //配置VIP
  23. }
        track_script {
            chk_haproxy //调用检查脚本
        }
  24. notify_backup "/etc/init.d/haproxy restart"
  25. notify_fault "/etc/init.d/haproxy stop"
  26. }

  3.在19.79上配置:

  1. vim /etc/keepalived/keepalived.conf
  2. ----------------------------------------------------->
    ! Configuration File for keepalived
  3.  
  4. global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
  5. vrrp_script chk_haproxy {
  6. script "/etc/keepalived/chk.sh"
  7. interval
  8. }
  9.  
  10. vrrp_instance VI_1 {
  11. state BACKUP
  12. interface eth0
  13. virtual_router_id
  14. priority
  15. advert_int
  16. authentication {
  17. auth_type PASS
  18. auth_pass abcd
  19. }
  20. virtual_ipaddress {
  21. 192.168.19.150
  22. }
        track_script {
            chk_haproxy
        }
  23.  
  24. notify_backup "/etc/init.d/haproxy restart"
  25. notify_fault "/etc/init.d/haproxy stop"
  26. }

  4.在两台机器上创建chk.sh文件:

  1. vim /etc/keepalived/chk.sh
  2. ------------------------------------------------>
    #!/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

  5.在19.66和19.79上进行测试:

  1. service keepalived start

    此处两台主机均配置为BACKUP,因此哪台先运行keepalived,VIP就在哪台上。我这里刚开始VIP运行在19.66上,然后进行连接测试:

    

  1. mysql -ujason -p123456 -h192.168.19.150
    ------------------------------------------->
    CREATE DATABASE bokeyuan

    后端数据库服务器抓包:

    

    停掉19.66的keepalived服务,让VIP转移到19.79上,再进行测试:

  1. service keepalived stop //停掉19.66的keepalived服务
    mysql -ujason -p123456 -h192.168.19.150
    ------------------------------------------->
    SHOW DATABASES;

    后端数据库服务器抓包:

    

  6.在浏览器打开http://192.168.19.150:6677/haproxyadmin?stats,打开haproxy状态页:

    在19.74上关闭mysql服务,可以看到haproxy对于后端服务器的检测是很迅速的:

  1. service mysqld stop

  7.额外说明:

    继续之前的实验,将19.66上的keepalived服务再次启动,可以发现,VIP仍然在19.79上,这就是之前为什么要配置不抢占的原因。如果按照正常的配置,将19.66配置为MASTER,当它重启keepalived服务后,则一定会将VIP抢回。但实际上我们并不希望这样,因为19.79仍在正常工作,19.66没有理由去抢夺资源,造成没必要的资源切换。实验演示就到这里,谢谢大家!

利用keepalived和haproxy配置mysql的高可用负载均衡的更多相关文章

  1. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  2. HAProxy+Varnish+LNMP实现高可用负载均衡动静分离集群部署

    HAProxy高可用负载均衡集群部署 基本信息: 系统平台:VMware WorkStation 系统版本: CentOS Linux release 7.2.1511 (Core) 内核版本: 3. ...

  3. LVS + KEEPALIVED + WINDOWS SERVER 2008 R2 ------高可用负载均衡(转)

    工作原理此处不作讲解,自己去官方网站学习(http://www.linuxvirtualserver.org),这里重点讲如何配置!注:最好从官方网站对其进行了解,不至于会对某些问题产生误解,尽管是英 ...

  4. haproxy+keepalived实现高可用负载均衡

    软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. HA ...

  5. 基于HAProxy+Keepalived高可用负载均衡web服务的搭建

    一 原理简介 1.HAProxyHAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web ...

  6. haproxy+keepalived实现高可用负载均衡(转)

      软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. ...

  7. Haproxy+Keepalived搭建Weblogic高可用负载均衡集群

    配置环境说明: KVM虚拟机配置 用途 数量 IP地址 机器名 虚拟IP地址 硬件 内存3G  系统盘20G cpu 4核 Haproxy keepalived 2台 192.168.1.10 192 ...

  8. Keepalived+HAProxy 搭建高可用负载均衡

    转载自:https://mp.weixin.qq.com/s/VebiWftaRa26x1aA21Jqww 1. 概述 软件负载均衡技术是指可以为多个后端服务器节点提供前端IP流量分发调度服务的软件技 ...

  9. 案例一(haproxy+keepalived高可用负载均衡系统)【转】

    1.搭建环境描述: 操作系统: [root@HA-1 ~]# cat /etc/redhat-release CentOS release 6.7 (Final) 地址规划: 主机名 IP地址 集群角 ...

随机推荐

  1. Net设计模式实例之建造者模式(Builder Pattern)

    一.建造者模式简介(Brief Introduction) 建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示. 建造者模式的优点是 ...

  2. Xamarin.Android再体验之简单的登录Demo

    一.前言 在空闲之余,学学新东西 二.服务端的代码编写与部署 这里采取的方式是MVC+EF返回Json数据,(本来是想用Nancy来实现的,想想电脑太卡就不开多个虚拟机了,用用IIS部署也好) 主要是 ...

  3. 背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox

    [源码下载] 背水一战 Windows 10 (30) - 控件(文本类): AutoSuggestBox 作者:webabcd 介绍背水一战 Windows 10 之 控件(文本类) AutoSug ...

  4. javascript严格模式

    设立"严格模式"的目的,主要有以下几个: 1. 消除Javascript语法的一些不合理.不严谨之处,减少一些怪异行为; 2. 消除代码运行的一些不安全之处,保证代码运行的安全: ...

  5. 获取form对象

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Jar mismatch错误的解决

    新建了一个项目,包含了两个库:appcompat_v7和swipelistview,结果出现了Jar mismatch错误: [2016-04-11 17:17:27 - MySwipeListVie ...

  7. JAVAWEB贵美网上商城完整项目源码(SSH2)

    JAVAWEB贵美网上商城完整项目源码(SSH2) 贵美网上商城原是北大青鸟的一个内部项目,项目采用 struts2+spring4+hibernate4+MySQL等技术实现,数据库连接池采用c3p ...

  8. Scalaz(57)- scalaz-stream: fs2-多线程编程,fs2 concurrency

    fs2的多线程编程模式不但提供了无阻碍I/O(java nio)能力,更为并行运算提供了良好的编程工具.在进入并行运算讨论前我们先示范一下fs2 pipe2对象里的一些Stream合并功能.我们先设计 ...

  9. Java--Callable与返回值future

    package com; import java.util.concurrent.*; /** * Created by yangyu on 16/11/28. */ /** * Callable a ...

  10. java web学习总结(十三) -------------------使用Session防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...