Kubernetesに基づくMySQLマスタークラスタの構築
10585 ワード
あなたが、自分に忠実で、自分のように生きていることを願っています.
リスト:
Name
Version
CentOS
7
Kubernetes
1.9.0
Docker
17.09.1-ce
MySQL
5.7
前言
深く研究した結果、dockerミラーは自分でMySQLをインストールする必要はありません.MySQLをインストールする必要がある場合は、別の記事を参照してください.https://www.jianshu.com/p/a6c5ec995660
ミラーを構築するには、後述の手順でDockerfileに を書き込む必要があります.
ファイル/etc/my.cnfに[mysqld]で構成 を追加 MySQL を再起動同期アカウント を作成同期アカウントにリモート権限を付与 ファイル/etc/my.cnfに[mysqld]で構成 を追加 MySQL を再起動ホストIP の構成
注意:server-idはホストIDであり、繰り返すことはできません.x.x.x.x'はmasterサーバIP以下では、上記の構成をDockerfileの に書き込む.
MySQL公式Dockerミラーファイルをダウンロードし、 を解凍します. Dockerfileに追加、位置は下図のように
Dockerfile-master docker-entrypoint.shに追加、位置は下図のように
entrypoint-master
MySQL公式Dockerミラーファイル をダウンロード Dockerfileに追加、位置は下図のように
ここでserver-idは乱数を使用します
Dockerfile-slave
2.3 docker-entrypoint.shに追加し、位置を下図に示す
slave構成、master_hostの1つは$MYSQLを使用しています.MASTER_SERVICE_HOST,この環境変数(enviromnent variable)はk 8 sによって生成される.
entrypoint-slave.png masterミラー を構築する slaveミラー を構築アップロードミラー
を実行する.このセクションでは、すべてのyamlファイルのインデントスペースを厳格にする必要があります.そうしないと、 を構築できません.
mysql-master-rcを新規作成します.yamlファイル mysql-master-serviceを新規作成します.yamlファイル MySQLマスターサービス の導入運転状況を確認 mysql-slave-rcを新規作成します.yamlファイル mysql-slave-serviceを新規作成します.yamlファイル MySQL slaveサービス の導入運転状況を確認 文末に書く
2018.01.13は、ミラーを準備する部分にdocker-entrypointを追加する.shファイルは実行可能権限を付与し、このステップがないとミラーが実行できない可能性があります.
作者:lipuan
リンク:https://www.jianshu.com/p/da0b339e1274
出典:簡書
著作権は作者の所有である.商業転載は著者に連絡して許可を得てください.非商業転載は出典を明記してください.
リスト:
Name
Version
CentOS
7
Kubernetes
1.9.0
Docker
17.09.1-ce
MySQL
5.7
前言
予想外の出張活動の中で、Kubernetesに接触し始め、これに基づいたMySQL主従クラスタの構築を要求された.筆者はLinux、Kubernetesなどの面でシロだったため、穴埋め活動を展開した.本稿の目的は、他のプログラム猿が穴を踏まないようにするためである.以下、MySQL主従クラスタを簡単に紹介する.MySQLクラスタの分散配置を使用して、MySQLマスターモードを実現します.MySQLクラスタでは、Masterノードが主にデータの配布とslaveノードの管理を担当しています.したがって、Masterノードは主にデータの書き込みと配布(insert、update、deleteを含む)を担当する.slaveノードは主にデータの読み取り(selectを含む)を担当します.基本的なmasterとslaveの分業作業を下図に示します.
MySQLクラスタアーキテクチャ
MySQLクラスタは、プライマリ・スレーブ・モードで1台のサービスがプライマリ・サーバとして機能し、他の1台または複数のサーバがスレーブ・サーバとして機能します.次は構築を始めます.
一、MySQLのインストール
二、Dockerミラーの構築
マスター構成
log-bin=mysql-bin
server-id=1
# service mysqld restart
# mysql -u root -p
# create user 'sync'@'%' identified by 'MySQL@lipuan.2018';
# grant replication slave on *.* to 'sync'@'%' identified by '[email protected]';
slave構成
log-bin=mysql-bin
server-id=2
# service mysqld restart
# mysql -u root -p
# change master to master_host='x.x.x.x',master_user='sync',master_password='MySQL@lipuan.2018';
注意:server-idはホストIDであり、繰り返すことはできません.x.x.x.x'はmasterサーバIP
マスターミラーの準備
# wget https://codeload.github.com/docker-library/mysql/zip/master
# unzip master
# mkdir /home/lipuan/mysqlDockerFile
# cp -Rf mysql-master/5.7/Dockerfile /home/lipuan/mysqlDockerFile
# cp -Rf mysql-master/5.7/docker-entrypoint.sh /home/lipuan/mysqlDockerFile
# rm -rf mysql-master
# chmod +x docker-entrypoint.sh
RUN sed -i '/\[mysqld\]/a server-id=1
log-bin' /etc/mysql/mysql.conf.d/mysqld.cnf
Dockerfile-master
echo "CREATE USER '$MYSQL_REPLICATION_USER'@'%' IDENTIFIED BY '$MYSQL_REPLICATION_PASSWORD' ;" | "${mysql[@]}"
echo "GRANT REPLICATION SLAVE ON *.* TO '$MYSQL_REPLICATION_USER'@'%' IDENTIFIED BY '$MYSQL_REPLICATION_PASSWORD' ;" | "${mysql[@]}"
echo 'FLUSH PRIVILEGES ;' | "${mysql[@]}"
entrypoint-master
slaveのミラーリングの準備
# wget https://codeload.github.com/docker-library/mysql/zip/master
# unzip master
# mkdir /home/lipuan/mysqlDockerFile
# cd ~
# cp -Rf mysql-master/5.7/Dockerfile /home/lipuan/mysqlDockerFile
# cp -Rf mysql-master/5.7/docker-entrypoint.sh /home/lipuan/mysqlDockerFile
# rm -rf mysql-master
# chmod +x docker-entrypoint.sh
RUN RAND="$(date +%s | rev | cut -c 1-2)$(echo ${RANDOM})" && sed -i '/\[mysqld\]/a server-id='$RAND'
log-bin' /etc/mysql/mysql.conf.d/mysqld.cnf
ここでserver-idは乱数を使用します
Dockerfile-slave
2.3 docker-entrypoint.shに追加し、位置を下図に示す
echo "STOP SLAVE;" | "${mysql[@]}"
echo "CHANGE MASTER TO master_host='$MYSQL_MASTER_SERVICE_HOST', master_user='$MYSQL_REPLICATION_USER', master_password='$MYSQL_REPLICATION_PASSWORD' ;" | "${mysql[@]}"
echo "START SLAVE;" | "${mysql[@]}"
slave構成、master_hostの1つは$MYSQLを使用しています.MASTER_SERVICE_HOST,この環境変数(enviromnent variable)はk 8 sによって生成される.
entrypoint-slave.png
# cd /home/lipuan/mysqlDockerFile/
# docker build -t paulliu/mysql-master:0.1 .
# cd /home/lipuan/mysqlDockerFile/
# docker build -t paulliu/mysql-slave:0.1 .
# docker login
# docke push paulliu/mysql-master:0.1
# docke push paulliu/mysql-slave:0.1
三、MySQLクラスタ配置
# cd /home/lipuan/DockerBuild
以降の内容が指摘するなければこのディレクトリの下でmaster
# touch mysql-master-rc.yaml
追加内容apiVersion: v1
kind: ReplicationController
metadata:
name: mysql-master
labels:
name: mysql-master
spec:
replicas: 1
selector:
name: mysql-master
template:
metadata:
labels:
name: mysql-master
spec:
containers:
- name: master
image: paulliu/mysql-master:0.1
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "[email protected]"
- name: MYSQL_REPLICATION_USER
value: "sync"
- name: MYSQL_PASSWORD
value: "[email protected]"
# touch mysql-master-service.yaml
追加内容apiVersion: v1
kind: Service
metadata:
name: mysql-master
labels:
name: mysql-master
spec:
ports:
- port: 3306
targetPort: 3306
selector:
name: mysql-master
# kubectl create -f mysql-master-rc.yaml
# kubectl create -f mysql-master-service.yaml
# kubectl get pods,service,rc
slave
# touch mysql-slave-rc.yaml
追加内容apiVersion: v1
kind: ReplicationController
metadata:
name: mysql-slave
labels:
name: mysql-slave
spec:
replicas: 1
selector:
name: mysql-slave
template:
metadata:
labels:
name: mysql-slave
spec:
containers:
- name: master
image: paulliu/mysql-slave:0.1
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "[email protected]"
- name: MYSQL_REPLICATION_USER
value: "sync"
- name: MYSQL_PASSWORD
value: "[email protected]"
# touch mysql-slave-service.yaml
追加内容apiVersion: v1
kind: Service
metadata:
name: mysql-slave
labels:
name: mysql-slave
spec:
ports:
- port: 3306
targetPort: 3306
selector:
name: mysql-slave
# kubectl create -f mysql-slave-rc.yaml
# kubectl create -f mysql-slave-service.yaml
# kubectl get pods,service,rc
文末に書く
ここまでKubernetesベースのMySQLマスターはクラスタから構築に成功しましたが、その手順がよく分からない方がいらっしゃいましたら、お互いの勉強を歓迎します.本文は筆者が初めて技術ブログを書いたので、間違いなどの問題があれば、皆さんの批判を大いに指摘してください.
更新ログ
作者:lipuan
リンク:https://www.jianshu.com/p/da0b339e1274
出典:簡書
著作権は作者の所有である.商業転載は著者に連絡して許可を得てください.非商業転載は出典を明記してください.