docker構築mysql読み書き分離
7024 ワード
前に書く
mysqlデータ量が大きくなく、読み書きのボトルネックに達している場合、読み書きのパフォーマンス消費は書き込みよりはるかに大きく、読み書きを分離することができます.この例はdockerコンテナで構築され、myctミドルウェアで配布されます.
mysqlプライマリ・スレーブ・サービスの準備 mysql容器 を準備するマスタスレーブデータマッピングディレクトリ を作成する. masterプロファイル を作成する. slaveプロファイル を作成 masterサービス を開始する. slaveサービス を開始コンテナに入ってmaster slaveの読み書き権限 を修正する. mysql-masterに入ってmaster状態 を表示する master容器のhost を取得する mysql-slave関連プライマリスレーブモード に入るテストマスターはmasterでtestdbデータベースを作成し、slaveでtestdbライブラリが存在するかどうかを確認し、存在する場合は基本的に完了し、binlog、master host、positionが正しいかどうかを正常にチェックしなかった場合.現在はフロントで使えるようになっていますが、読み書きデータソースを区別するのは面倒です!
myctミドルウェアエージェントmysql mycaミラー の準備 mycaローカルマッピングディレクトリ を作成する myca圧縮パッケージコピーconfディレクトリの下のファイルを解凍 に修正 修正/usr/local/docker_app/mycat/conf/server.xmlファイル mycaコンテナ を起動 mycat mysqlツールはmyctの8066ポートをリンクし、テーブル挿入データを作成した後、masterとslave端のデータの変化をそれぞれ表示します.失敗した場合はmycat構成が正しいかどうかを確認します.ipアドレスはdockerコンテナ内部ip であることに注意してください.
最後に書く
初めての実験ですが、誤解があればご指摘ください.
mysqlデータ量が大きくなく、読み書きのボトルネックに達している場合、読み書きのパフォーマンス消費は書き込みよりはるかに大きく、読み書きを分離することができます.この例はdockerコンテナで構築され、myctミドルウェアで配布されます.
mysqlプライマリ・スレーブ・サービスの準備
$ docker pull mysql:5.7
//
/usr/local/docker_app/mysql/master/conf.d
/usr/local/docker_app/mysql/slave/conf.d
/usr/local/docker_app/mysql/master/conf.d/my.cnf
[mysqld]
log-bin=master-bin
server-id=1
/usr/local/docker_app/mysql/slave/conf.d/my.cnf
[mysqld]
log-bin=slave-bin
server-id=2
$ 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
$ 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
# 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 shell
show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| master-bin.000003 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
$ docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master
// 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;
myctミドルウェアエージェントmysql
// 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 .
/usr/local/docker_app/mycat/conf
/usr/local/docker_app/mycat/logs
/usr/local/docker_app/mycat/conf
/usr/local/docker_app/mycat/conf/schema.xml
ファイル
select user()
select user()
root
TESTDB
user
TESTDB
true
# 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
最後に書く
初めての実験ですが、誤解があればご指摘ください.