基于docker+Keepalived+Haproxy+Mycat的高可用服务架构设计

随笔 2018-01-19

  在企业的实际开发部署环境中,docker作为一种虚拟化工具,不仅提供了快速测试,部署的环境,还可用于分布式开发,因此被广泛采用。这里验证了一种最小化高可用分布式解决方案以应对实际部署中的问题,最小化服务器宕机带来的危害。      

  设备:4台Centos7服务器,设计如下:

sys3.png

  这里的Haproxy是可以用LVS来替代的,二者的比较不详细介绍,但考虑到LVS不能做动静分离,因此采用Haproxy方案。图中所示方案的优势是采用双重备份,数据与应用分离,采用虚拟化,可靠性和敏捷性高。   

  下面介绍搭建过程:

  1.Centos安装docker服务

  2.在DataServer上安装mysql容器,注意进行端口映射:

a. docker pull mysql:5.6

b. docker run -p 3307:3306 --name mysql -v 
          $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs:/logs -v 
          $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

  3. 在DataServer上安装Mycat容器,这里要映射两个端口,8067->8066 和9067->9066

   a.下载配置java环境

   b.下载配置Mycat,注意修改环境变量,并设置Mysql主从复制和读写分离,这里主要介绍Mycat关键配置文件:schemal.xml。Server.xml,rule.xml可暂不修改。

        <?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">

                <table name="employee" primaryKey="ID" dataNode="dn1,dn2"
                           rule="sharding-by-intfile" />

        </schema>

        <dataNode name="dn1" dataHost="master" database="db1" />
        <dataNode name="dn2" dataHost="slave1" database="db2" />  
        <dataHost name="master" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM10" url="173.16.80.10:3307" user="root"
                                   password="root">
                </writeHost>
        </dataHost>
        <dataHost name="slave1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM11" url="173.16.80.11:3307" user="root"
                                   password="root">
                </writeHost>
        </dataHost>

</mycat:schema>

  然后用Navicat测试连接。

  4. 安装Keepalived容器

  5. 安装Haproxy容器

  6. 配置负载均衡策略

  7. 测试可用性

   a.一个服务器关机情况

   b.一个Mysql容器关闭情况

   c.一个Application容器关闭情况

   d.一个Mycat容器关闭情况

   c.高并发情况  

   (持续更新中)


本文由 Tony 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

如果对您有用,您的支持将鼓励我继续创作!