SlideShare a Scribd company logo
���������������������������������������R○Sに学ぶイマドキのMySQL構築運用
Masashi Terui @ marcy_terui
I’m a Developer and Cloud Architect.
I’m a full-time employee at JIG-SAW Inc. But, I’m a part-time freelancer.
I’m a member of GCPUG and JAWS-UG and MyNA←New!!
I’m around 30 years old. I’m a father of my son and daughter.
https://willy.works/
2
3
4
R○S is 何
5
IaaSクラウド最大手のA社のフルマネージドRDBサービス
数クリックで起動、スケールアップもスレーブ追加も楽チン
スペックに合わせてパラメータを自動調整
ホットスタンバイへの自動フェイルオーバー
日時フルバックアップ+5分毎の差分バックアップ
メンテナンスウィンドウ(予約)による自動アップデート
6
∀
7
R○Sが
マッチしない
ケース
8
IOが激しい(最大30000IOPS←高い)
Failover時のダウンタイムが許容できない(数十秒〜数分)
サポート外のプラグインを使いたい(e.g. Mroonga)
OSレベルまで手を入れてカリッカリにチューニングしたい
クラウドなんてクソ食らえ!!
9
10
11
使うもの
12
13
MySQL
14
MySQL Server Community Edition
バージョンは最新の5.7(5.6なら今回話す範囲では大体同じ)
mysqlfailover(MHAでも可)
Masterフェイルオーバー
mysqlbinlog
Point In Time Recovery
cloud-init
15
クラウド上のLinuxインスタンスの初期化を行うパッケージ
マルチディストリビューション
起動毎に処理内容やデータを渡せる(User-Data)
初回起動時に一回だけ、毎起動時など色々フック出来る
ShellまたはYAML likeなDSLで動作を指定
https://cloudinit.readthedocs.io/en/latest/
Chef
16
Configuration Management Tool
ステートフル(RDBとかね!)な世界ではまだ代替はない(と思う)
サーバのインベントリを収集して利用できる(Ohai)
クライアント・サーバ型だけどStand aloneも可(local-mode)
knife-zero etc…
https://www.chef.io/
Consul
17
オーケストレーションツール
ゴシッププロトコルとRaftコンセンサスによるクラスタリング
イベント通知
排他制御
KVSインターフェイス
DNSインターフェイス
https://www.consul.io/
18
R○S is 何
19
IaaSクラウド最大手のA社のフルマネージドRDBサービス
数クリックで起動、スケールアップもスレーブ追加も楽チン
スペックに合わせてパラメータを自動調整
ホットスタンバイへの自動フェイルオーバー
日時フルバックアップ+5分毎の差分バックアップ
メンテナンスウィンドウ(予約)による自動アップデート
cloud-initを使いUser-Dataから初回起動時の処理を渡す
1. Chef-Clientのインストール
2. オブジェクトストレージからCookbook取得
3. ロール別のJSONも取得(Master, Standby, Slaveのロール)
4. Chef-Client起動
※2,3,4はChef-Serverを使うとロールを指定してchef-clientを起動するだけでおk
※数クリックかどうかはプラットフォーム次第
20
Cookbook
やること
21
MySQL Server, Consulインストール
MHA or mysqlfailoverインストール(Standby)
my.cnf生成←ロールとインベントリからメモリ搭載量を見て調整
MySQL, Consul起動
REPLICATION SLAVE権限のユーザ作成(Master)
バックアップデータを任意の時間でリストア(Slave or Standby)
CHANGE MASTER TO〜MASTER_AUTO_POSITION =1;

START SLAVE;(Slave or Standby)
22
server_id = node['mysql']['server_id'].nil? node['ipaddress'].match(/.(d+)$/)[1] : node['ipaddress']
if node['memory']['total'].match(/MB$/)
total_memory = node['memory']['total'].gsub(/MB$/, "").to_i * 1024 * 1024
elsif node['memory']['total'].match(/kB$/)
total_memory = node['memory']['total'].gsub(/MB$/, "").to_i * 1024
else
total_memory = node['memory']['total'].to_i
end
template '/etc/my.cnf' do
source 'my.cnf.erb'
action :create
variables({
:server_id => server_id,
:report_host => node['ipaddress'],
:innodb_buffer_pool_size => total_memory * 0.75,
:max_connections => total_memory / 12582880,
:server_type => node['mysql']['server_type'],
})
end
23
[mysqld]
server_id=<%= @server_id %>
log-bin=mysql-bin
log-slave-updates
gtid-mode=ON
enforce-gtid-consistency
master_info_repository=TABLE
relay_log_info_repository=TABLE
report_host=<%= @report_host %>
innodb_buffer_pool_size=<%= @innodb_buffer_pool_size %>
max_connections=<%= @max_connections %>
<% if @server_type == 'master' %>
plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled = 1
<% elsif @server_type == 'standby' %>
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled = 1
<% else @server_type == 'slave' %>
rpl_semi_sync_slave_enabled = 0
<% end %>
!includedir /etc/mysql.d
R○S is 何
24
IaaSクラウド最大手のA社のフルマネージドRDBサービス
数クリックで起動、スケールアップもスレーブ追加も楽チン
スペックに合わせてパラメータを自動調整
ホットスタンバイへの自動フェイルオーバー
日時フルバックアップ+5分毎の差分バックアップ
メンテナンスウィンドウ(予約)による自動アップデート
Masterの障害を検知してmysqlfailoverがFailoverを実行
後処理(after_script)で、ConsulのMasterレコード更新
DNSインターフェィスでMasterを常に同じ名前で解決できる
イベントを発火
StandbyやSlaveの台数が変動しているので、

LBやアプリケーションを更新

※LBやアプリケーションサーバにもConsulを入れておく
25
補足
26
フェイルオーバー速度を気にするなら
Keepalived + VIP(使えないクラウドが多い)
Keepalived + IP付け替え
なぜ今回は違う方法にしたのか?
Keepalived方式はフェイルオーバー後の自動制御が難しい
イケてる感出したかった
R○S is 何
27
IaaSクラウド最大手のA社のフルマネージドRDBサービス
数クリックで起動、スケールアップもスレーブ追加も楽チン
スペックに合わせてパラメータを自動調整
ホットスタンバイへの自動フェイルオーバー
日時フルバックアップ+5分毎の差分バックアップ
メンテナンスウィンドウ(予約)による自動アップデート
28
29
# mysqldump --all-databases --single-transaction --master-data 2
# mysqlbinlog --start-position $POSISION_FROM_DUMP $LOG_FILE_NAME_FROM_DUMP
補足
30
バックアップはオブジェクトストレージに置こう
mysqldumpはデータ量に限界がある(時間的な意味で)
とはいえ、Percona XtraBackupとか

コールドバックアップだと自動PITRするのツラい

Enterprise Backup?知らない子ですね :-)
R○S is 何
31
IaaSクラウド最大手のA社のフルマネージドRDBサービス
数クリックで起動、スケールアップもスレーブ追加も楽チン
スペックに合わせてパラメータを自動調整
ホットスタンバイへの自動フェイルオーバー
日時フルバックアップ+5分毎の差分バックアップ
メンテナンスウィンドウ(予約)による自動アップデート
32
まとめ
33
よくできたサービスのデザインは自分で作る上で参考になる
なかなか大変ではある
時間をお金で買うという考え方もある
でも、それに完全依存しちゃうのは怖いから知っておいて損はない
より良いMySQLライフを!
∀

More Related Content

PDF
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
PDF
私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜
PDF
Multi Cloud Design Pattern(Beta)
PDF
jaws-ug kansai-special_aurora_20150207
PDF
NuxtJS + REST APIで運用中サービスをNuxtJS + GraphQLに変更したことによる光と影
PDF
TREASUREDATAのエコシステムで作るロバストなETLデータ処理基盤の作り方
PPTX
比較サイトの検索改善(SPA から SSR に変換)
PPTX
Azure使いから見たAWSの良いところ
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
私はこれでJSONをやめました〜あるいはAWSの設定をコード化するとはどういうことか〜
Multi Cloud Design Pattern(Beta)
jaws-ug kansai-special_aurora_20150207
NuxtJS + REST APIで運用中サービスをNuxtJS + GraphQLに変更したことによる光と影
TREASUREDATAのエコシステムで作るロバストなETLデータ処理基盤の作り方
比較サイトの検索改善(SPA から SSR に変換)
Azure使いから見たAWSの良いところ

What's hot (20)

PDF
PIXTAにおけるCloudSearchのコスト削減
PDF
Growing up serverless
PDF
20200923 miyazaki
PDF
jaws-ug kansai-special_kinesis_20150207
PDF
AWS re:Inventに行くために今日からやるべき3つのこと
PDF
20200923 fujisawa
PDF
第3回岡山PHP勉強会
PDF
Data Engineering at VOYAGE GROUP #jawsdays
PPTX
Asp.netとbluemixで遊んでみたお話
PPTX
AI & Deep Learning on AWS at CTO Night&Day 2016 Winter
PDF
JAWS DAYS 2017 LT 古きを捨て新しきに近づける
PDF
元OracleMasterPlatinumがCloudSpanner触ってみた
PDF
JAWSUG Osaka S3 CloudSearch
PDF
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
PPTX
Gcpug tokyo february 2016
PDF
JAWS-UG Nagoya 20130406 物体認識システムを支えるAWS
PPTX
20130406 awsのいろんな使い道@jawsug名古屋
PDF
Rubyで操るAWS 第67回Ruby関西 勉強会
PDF
TB / Day規模のゲーム向けデータパイプラインを開発運用する日々
PDF
[Deep Dive]Infra寄りのDevがお送りするRDS for Aurora徹底検証
PIXTAにおけるCloudSearchのコスト削減
Growing up serverless
20200923 miyazaki
jaws-ug kansai-special_kinesis_20150207
AWS re:Inventに行くために今日からやるべき3つのこと
20200923 fujisawa
第3回岡山PHP勉強会
Data Engineering at VOYAGE GROUP #jawsdays
Asp.netとbluemixで遊んでみたお話
AI & Deep Learning on AWS at CTO Night&Day 2016 Winter
JAWS DAYS 2017 LT 古きを捨て新しきに近づける
元OracleMasterPlatinumがCloudSpanner触ってみた
JAWSUG Osaka S3 CloudSearch
IoTにおけるクラウドインフラからサーバサイドまでの概要的な話
Gcpug tokyo february 2016
JAWS-UG Nagoya 20130406 物体認識システムを支えるAWS
20130406 awsのいろんな使い道@jawsug名古屋
Rubyで操るAWS 第67回Ruby関西 勉強会
TB / Day規模のゲーム向けデータパイプラインを開発運用する日々
[Deep Dive]Infra寄りのDevがお送りするRDS for Aurora徹底検証
Ad

Viewers also liked (20)

PDF
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
PDF
Infrastructure as Codeってなんだったっけ?
PDF
20170311 jawsdays 公開
PDF
サーバーレスの今とこれから
PPTX
OnsenUI + AngularJS + CloudEndpointsで作るSPA 地雷処理の巻
PDF
名刺アプリEightの紙の名刺をなくす技術
PPTX
CloudWatch Eventを使ったamiの削除
PPTX
ナウなヤングにCloud Formationが流行ってほしい
PDF
分散仮想ストレージシステム紹介
PDF
Introducing in-house PaaS in SmartNews
PDF
堅牢性を高めるためのInfrastructure as Code
PDF
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
PDF
Unlimited Frameworks
PPTX
Ceph アーキテクチャ概説
PDF
つながりを加速させる、Eightのリアルタイムリコメンデーション技術
PPTX
React.js + Reduxで作るSPA
PDF
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
PDF
The Internal of Serverless Plugins
PDF
ITサービスマネジメントとSRE
PDF
「運用改善」を考える 〜「自動化」を考える前に
DevOpsとか言う前にAWSエンジニアに知ってほしいアプリケーションのこと
Infrastructure as Codeってなんだったっけ?
20170311 jawsdays 公開
サーバーレスの今とこれから
OnsenUI + AngularJS + CloudEndpointsで作るSPA 地雷処理の巻
名刺アプリEightの紙の名刺をなくす技術
CloudWatch Eventを使ったamiの削除
ナウなヤングにCloud Formationが流行ってほしい
分散仮想ストレージシステム紹介
Introducing in-house PaaS in SmartNews
堅牢性を高めるためのInfrastructure as Code
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
Unlimited Frameworks
Ceph アーキテクチャ概説
つながりを加速させる、Eightのリアルタイムリコメンデーション技術
React.js + Reduxで作るSPA
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
The Internal of Serverless Plugins
ITサービスマネジメントとSRE
「運用改善」を考える 〜「自動化」を考える前に
Ad

Similar to R○Sに学ぶイマドキのMySQL構築運用 (13)

PDF
Serverless ArchitectureにおけるNoSQL Services 〜DynamoDBも良いけどSimpleDBも忘れないであげてください!!〜
PDF
スタートアップだからこそ使うAWS(第5回JAWS-UG Nagoya)
PDF
Azure 障害との上手な付き合い方
ODP
事例紹介「なうまぴおん」
PPTX
CloudWatch(+sns+sqs)で障害対応を自動化してみた
PPTX
64ヶ月オンプレ運用したシステムを aws移行した話
PDF
Alibaba Cloud Serverless
PDF
sysloadや監視などの話(仮)
PDF
AZAREA-Clusterセミナー(クラウドEXPO2013春)
PDF
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
PDF
私たちがGCPを使い始めた本当の理由
PDF
NoOpsへ舵を切れ
PDF
D23 SSDで挑むOracle超高速化と信頼性の両立 by Yuu Morinaka
Serverless ArchitectureにおけるNoSQL Services 〜DynamoDBも良いけどSimpleDBも忘れないであげてください!!〜
スタートアップだからこそ使うAWS(第5回JAWS-UG Nagoya)
Azure 障害との上手な付き合い方
事例紹介「なうまぴおん」
CloudWatch(+sns+sqs)で障害対応を自動化してみた
64ヶ月オンプレ運用したシステムを aws移行した話
Alibaba Cloud Serverless
sysloadや監視などの話(仮)
AZAREA-Clusterセミナー(クラウドEXPO2013春)
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
私たちがGCPを使い始めた本当の理由
NoOpsへ舵を切れ
D23 SSDで挑むOracle超高速化と信頼性の両立 by Yuu Morinaka

More from Terui Masashi (19)

PDF
Reliability Engineering for Enterprise Serverless
PDF
What is Serverless?
PDF
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
PDF
Cloud Vsion APIによるGUIの検証自動化
PDF
マルチクラウド #とは
PDF
Lambda(Python)のデプロイについて考えたというか作った
PDF
Google App Engine for PHPとそのローカル開発環境について
PDF
PythonとYAMLでGCPをDeploy!「Google Cloud Deployment Manager」
PDF
ついに解禁!Amazon Aurora徹底検証!
PDF
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話
PDF
初心から一週間で作ってみた Kinesis Client Library for Go
PDF
Googleの○○にありがとう
PDF
AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜
PDF
「クラウド本気で始めました」なSIerのChef活用と実践~Chefアンチパターンとの戦い~
PDF
Mroongaを選んだ理由と
ちょっと嬉しかった話
PDF
あなたはインフラエンジニアですか?
 いいえ、私はソフトウェアエンジニアです。
PDF
さくらのVPSで初期設定をChefでやってみた〜こんなはずじゃなかった〜
PDF
Jaws20140117
PDF
小規模SI案件で、 AWS + Chefを使ってみて
Reliability Engineering for Enterprise Serverless
What is Serverless?
クラウド環境におけるWebアプリケーションの正しい作り方(for Perl users)
Cloud Vsion APIによるGUIの検証自動化
マルチクラウド #とは
Lambda(Python)のデプロイについて考えたというか作った
Google App Engine for PHPとそのローカル開発環境について
PythonとYAMLでGCPをDeploy!「Google Cloud Deployment Manager」
ついに解禁!Amazon Aurora徹底検証!
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話
初心から一週間で作ってみた Kinesis Client Library for Go
Googleの○○にありがとう
AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜
「クラウド本気で始めました」なSIerのChef活用と実践~Chefアンチパターンとの戦い~
Mroongaを選んだ理由と
ちょっと嬉しかった話
あなたはインフラエンジニアですか?
 いいえ、私はソフトウェアエンジニアです。
さくらのVPSで初期設定をChefでやってみた〜こんなはずじゃなかった〜
Jaws20140117
小規模SI案件で、 AWS + Chefを使ってみて

R○Sに学ぶイマドキのMySQL構築運用