docker構築mysql読み書き分離

7024 ワード

前に書く
mysqlデータ量が大きくなく、読み書きのボトルネックに達している場合、読み書きのパフォーマンス消費は書き込みよりはるかに大きく、読み書きを分離することができます.この例はdockerコンテナで構築され、myctミドルウェアで配布されます.
mysqlプライマリ・スレーブ・サービスの準備
  • mysql容器
  • を準備する
    $ docker pull mysql:5.7
    
  • マスタスレーブデータマッピングディレクトリ
  • を作成する.
    //           
    /usr/local/docker_app/mysql/master/conf.d
    /usr/local/docker_app/mysql/slave/conf.d 
    
  • masterプロファイル/usr/local/docker_app/mysql/master/conf.d/my.cnf
  • を作成する.
    [mysqld]
    log-bin=master-bin
    server-id=1
    
  • slaveプロファイル/usr/local/docker_app/mysql/slave/conf.d/my.cnf
  • を作成
    [mysqld]
    log-bin=slave-bin
    server-id=2
    
  • masterサービス
  • を開始する.
    $ docker run -d --name mysql-master \
        -p 3306:3306 \
        -v /usr/local/docker_app/mysql/master/conf.d/data:/var/lib/mysql \
        -v /usr/local/docker_app/mysql/master/conf.d:/etc/mysql/conf.d \
        -e MYSQL_ROOT_PASSWORD=root \
        -d mysql:5.7
    
  • slaveサービス
  • を開始
    $ docker run -d --name mysql-slave \
        -p 3307:3306 \
        -v /usr/local/docker_app/mysql/slave/conf.d/data:/var/lib/mysql \
        -v /usr/local/docker_app/mysql/slave/conf.d:/etc/mysql/conf.d \
        -e MYSQL_ROOT_PASSWORD=root \
        -d mysql:5.7
    
  • コンテナに入ってmaster slaveの読み書き権限
  • を修正する.
    #     shell
    $ docker exec -it mysql-master /bin/sh
    
    // mysql shell
    //    :root
    //   :root
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
    
  • mysql-masterに入ってmaster状態
  • を表示する
    // mysql shell
    show master status;
    
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | master-bin.000003 |     154  |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    
  • master容器のhost
  • を取得する
    $ docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master
    
  • mysql-slave関連プライマリスレーブモード
  • に入る
    // mysql shell
    change master to master_host='172.17.0.2', master_user='root',master_password='root', master_log_file='master-bin.000003',master_log_pos=154;
    
    // mysql shell
    //   slave
    start slave;
    
  • テストマスターはmasterでtestdbデータベースを作成し、slaveでtestdbライブラリが存在するかどうかを確認し、存在する場合は基本的に完了し、binlog、master host、positionが正しいかどうかを正常にチェックしなかった場合.現在はフロントで使えるようになっていますが、読み書きデータソースを区別するのは面倒です!

  • myctミドルウェアエージェントmysql
  • mycaミラー
  • の準備
    // jre8
    http://download.oracle.com/otn-pub/java/jdk/8u152-b16/aa0333dd3019491ca4f6ddbe78cdb6d0/server-jre-8u152-linux-x64.tar.gz
    
    # Dockerfile
    FROM debian:jessie
    
    # install jre
    COPY server-jre-8u152-linux-x64.tar.gz /usr/local/
    RUN cd /usr/local && tar -zxvf server-jre-8u152-linux-x64.tar.gz && rm -f server-jre-8u152-linux-x64.tar.gz
    
    ENV JAVA_HOME /usr/local/jdk1.8.0_152
    ENV CLASSPATH ${JAVA_HOME}/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV PATH $PATH:${JAVA_HOME}/bin
    
    # install mycat
    ADD http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz /usr/local/
    RUN cd /usr/local && tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz && rm -f Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
    
    VOLUME /usr/local/mycat/conf
    EXPOSE 8066 9066
    CMD ["/usr/local/mycat/bin/mycat", "console"]
    
    $ docker build -t mysql/mycat:1.6 .
    
  • mycaローカルマッピングディレクトリ
  • を作成する
    /usr/local/docker_app/mycat/conf
    /usr/local/docker_app/mycat/logs
    
  • myca圧縮パッケージコピーconfディレクトリの下のファイルを解凍/usr/local/docker_app/mycat/conf
  • 修正/usr/local/docker_app/mycat/conf/schema.xmlファイル
  • 
    
    
    
    
          
        
            
        
    
        
            select user()
            
            
                
                
            
        
    
    
    
    
    
    
    
          
        
            
        
    
        
            select user()
            
            
    
            
        
    
    
  • 修正/usr/local/docker_app/mycat/conf/server.xmlファイル
  • 
            root
                    
            TESTDB
            
            
            
        
        
            user
            TESTDB
            true
        
    
  • mycaコンテナ
  • を起動
    # 8066:mysql    
    # 9066:    
    $ docker run -d --name mysql-mycat \
        -v /usr/local/docker_app/mycat/conf:/usr/local/mycat/conf  \
        -v /usr/local/docker_app/mycat/logs:/usr/local/mycat/logs \
        -p 8066:8066 -p 9066:9066 mysql/mycat:1.6
    
  • mycat mysqlツールはmyctの8066ポートをリンクし、テーブル挿入データを作成した後、masterとslave端のデータの変化をそれぞれ表示します.失敗した場合はmycat構成が正しいかどうかを確認します.ipアドレスはdockerコンテナ内部ip
  • であることに注意してください.
    最後に書く
    初めての実験ですが、誤解があればご指摘ください.