zoukankan      html  css  js  c++  java
  • 企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)(原创)

    前言:
             原理与思想
           这里选用GTID主从复制模式Mysql主从复制模式,是为了更加确保主从复制的正确性、健康性与易配性。这里做的是两服务器A,B各有Mysql实例3310,两个实例间互为主从
           主从复制模式采用GTID主从复制模式,在服务器A,B上配置keepalived负载均衡,通过VIP连接数据库,目的是一旦有某数据库宕机,keepalived 就会立即建VIP执行另外一台
           健康的数据库实例上,实现快速切换,避免单点故障,从而保证业务的正常运行。
     

     
            这里只做了 双主+keepalived  , 对于读写要求很大大的环境,推荐架构是,双主多从(可以通过集群管理软件MMM来实现高可用架构)读写分离,当然代价也是比较高的 。
            读写分离实现方法:
                   1、程序实现:程序端预留接口,当对于已经在运行的环境,重新修改程序,貌似不大现实
                   2、Mysql_proxy :官方的一种实现方式,但是官方建议不要再生产环境中使用,所以不推荐
                   3、Amoeba 软件分离 (推荐使用)
    架构图:
     
     
              
     
    一、环境要求:
    服务器A: 192.168.1.31 系统环境:CetnOS6.5、Mysql-5.6.19(主从)、Keepalived(master)
    服务器B: 192.168.1.32 系统环境:CetnOS6.5、Mysql-5.6.19(从主)、Keepalived(back)

    二、安装Mysql 与 主从配置
          (mysql安装步骤略)
         这里服务器A上配置实例为3310,服务器B上的实例也为3310 (双主同样端口号的好处是在故障切换的时候)
         安装好mysql后修改配置文件
     
    1、修改A服务器上的mysql配置文件my.cnf
                   在my.cnf文件里加入参数(注意不要重复定义参数)
                    
    server-id       = 201                    //这里的ID号与从库上或者主库上的ID必须保证不一样
    log-bin=mysql-bin                    //可以自定义 这里定义为 log-bin=/data/log-bin/log-bin-3310
    binlog_format=row                    //主从复制模式
    log-slave-updates=true                 //slave 更新是否记入日志
    gtid-mode=on                                   // 启用gtid类型,否则就是普通的复制架构
    enforce-gtid-consistency=true          //强制GTID 的一致性 
    master-info-repository=TABLE        //主服信息记录库=表 /文件
    relay-log-info-repository=TABLE    //中继日志信息记录库
    sync-master-info=1                         //同步主库信息
    slave-parallel-workers=4                 //从服务器的SQL 线程数,要复制库数目相同
    binlog-checksum=CRC32                   // 校验码 ,可以自定义
    master-verify-checksum=1               //主服校验
    slave-sql-verify-checksum=1             //从服校验
    binlog-rows-query-log_events=1     //二进制日志详细记录事件
    report-port=3310                               //提供复制报告端口,当前实例端口号
    report-host=192.168.1.31                   //提供复制报告主机,本机的ip地址

    2、修改B服务器上的mysql配置文件my.cnf
              在my.cnf文件里加入参数(注意不要重复定义参数)
                       
    server-id       = 202                    //这里的ID号与从库上或者主库上的ID必须保证不唯一
    log-bin=mysql-bin                    //可以自定义 这里定义为 log-bin=/data/log-bin/log-bin-3310
    binlog_format=row                    //主从复制模式
    log-slave-updates=true                 //slave 更新是否记入日志
    gtid-mode=on                                   // 启用gtid类型,否则就是普通的复制架构
    enforce-gtid-consistency=true          //强制GTID 的一致性 
    master-info-repository=TABLE        //主服信息记录库=表 /文件
    relay-log-info-repository=TABLE    //中继日志信息记录库
    sync-master-info=1                         //同步主库信息
    slave-parallel-workers=4                 //从服务器的SQL 线程数,要复制库数目相同
    binlog-checksum=CRC32                   // 校验码 ,可以自定义
    master-verify-checksum=1               //主服校验
    slave-sql-verify-checksum=1             //从服校验
    binlog-rows-query-log_events=1     //二进制日志详细记录事件
    report-port=3310                              //提供复制报告端口,当前实例端口号
    report-host=192.168.1.32                   //提供复制报告主机,本机的ip地址

    replicate-wild-ignore-table=mysql.%
    replicate-wild-ignore-table=test.%
    replicate-wild-ignore-table=performance_schema.%        

    (可以在配置文件里加入,作用屏蔽要复制的库)


    3、授权
         A服务器mysql实例3310:
        grant replication slave,replication client on *.* to slave@'192.168.1.32'identified by '123456';
     
         B服务器mysql实例3310:
        grant replication slave,replication client on *.* to slave@'192.168.1.32'identified by '123456';   
    ================================================================================
         A服务器mysql实例3310:
        change master to master_host='192.168.1.32',master_port=3310,master_user='slave',master_password='123456',master_auto_position=1;
               注意:这里要是不配置参数master_port=3311,默认的会去找3306
         B服务器mysql实例3310:
        change master to master_host='192.168.1.31',master_port=3310,master_user='slave',master_password='123456',master_auto_position=1;
    ==================================================================================
            A、B服务器上开启主从复制:start slave;
    4、查看状态
              A服务器:show slave statusG;show processlist;
        
                        
              B服务器:show slave statusG; show processlist;
              
              #show processlist;
                  
     
     

    5、到这里A、B服务器间基于GTID主从复制模式已经配置好了,测试下
              在A服务器3310实例上:drop databse test;B服务器3310上查看状态:show databases;
              在B服务器3310实例上:create database wll_test;  A服务器上3310上查看状态:show databases;

    三、安装配置Keepalived负载均衡器
     1、官网下载www.keepalived.org
              在A服务器和B服务器上安装keepalived
              #tar zxvf  keepalived-1.2.20.tar.gz
              #cd  keepalived-1.2.20.tar.gz     
              #./configure --sysconf=/etc --with-kernel-dir=/usr/local/src/kernels/2.6.32-573.el6.x86_64
              #make&&make install
              #ln -s /usr/local/sbin/keepalived /sbin/
              #ln -s /usr/local/keepalived-1.2.20 /usr/local/keepalived
              #chkconfig --level 35 keepalived on
     2、配置keepalived
     
                        #配置A服务器
                        
     
                  #配置B服务器
                        
             
     
     
    3、# /etc/keepalived/change_mysql.sh 脚本内容为强杀死keepalived进程
                        
                        
    4、#配置好后开启两服务器 keepalived 
                             #/etc/init.d/keepalived start
                             #ps aux | grep keepalived
    5、查看状态
              # ip a
              
     
    keepalived的工作机制是:每2秒检查一次real_server的监控状态,一旦发现数据库down了,此时VIP就会转移到另外一台上,从而实现故障快速切换,用户在通过VIP连接
    基本可以保持一直连接状态。
     
    四、测试切换
                   先检查服务器A与服务器B上的Mysql实例与keepalived是否都为开启状态
              1、此时VIP在服务器B上
                   
                   在B服务器上将Mysql实例3310 stop
                   # /etc/init.d/mysqld_3310 stop
          
                     可以看到VIP马上就切换到了服务器A 192.168.1.31这台上
                   
              2、客户端连接数据库
                    基本不会有影响
                   
     
     
    后续:欢迎评判!
                   
     
  • 相关阅读:
    1104 Sum of Number Segments (20 分)(数学问题)
    1092 To Buy or Not to Buy (20 分)(hash散列)
    1082 Read Number in Chinese (25 分)(字符串处理)【背】
    1105 Spiral Matrix (25 分)(模拟)
    初识网络安全及搭建网站(内网)
    HTML5开发者需要了解的技巧和工具汇总(转)
    native+web开发模式之web前端经验分享
    移动平台3G手机网站前端开发布局技巧汇总(转)
    Asp.net 中图片存储数据库以及页面读取显示通用方法详解附源码下载
    使用H3Viewer来查看VS2010的帮助文档
  • 原文地址:https://www.cnblogs.com/liangshaoye/p/5459421.html
Copyright © 2011-2022 走看看