oracle data guard による高可用性

37
Oracle Data Guardによる 高可用性の実現 ヤフー株式会社 宇佐美 茂正

Upload: yahoo

Post on 20-Jul-2015

645 views

Category:

Technology


8 download

TRANSCRIPT

Page 1: Oracle Data Guard による高可用性

Oracle Data Guardによる 高可用性の実現

ヤフー株式会社

宇佐美 茂正

Page 2: Oracle Data Guard による高可用性

自己紹介

• 氏名:宇佐美 茂正(うさみ しげまさ)

• 勤務先:ヤフー株式会社

• 職種:DBA

• 業務

• DB環境構築

• DB運用業務

• SQLチューニング

• DB監査

※ Oracle関連の業務を主に担当しています

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2

Page 3: Oracle Data Guard による高可用性

セッションの概要

弊社では、先日、Yahoo!ニュース トピックス

システムに対して、Oracle Data Guardによる

高可用性の導入を行いました。

このセッションでは、Oracle Data Guardにより

高可用性を実現する方法と、それにより得られた

成果について、事例を交えて説明させて頂きます。

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 3

Page 4: Oracle Data Guard による高可用性

アジェンダ

1. 高可用性を導入したシステムの紹介

2. Data GuardによるDBのBCP

3. 自動フェイルオーバーの仕組み

4. アプリケーション側の追従

5. 導入後のDBシステム全体の可用性

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 4

Page 5: Oracle Data Guard による高可用性

1.高可用性を導入したシステムの紹介

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 5

Page 6: Oracle Data Guard による高可用性

Yahoo!ニュース トピックス システムの概要

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 6

Oracle 11g

編集部 (入稿者) ユーザ

入稿ツール

ジェネレータ solr

表示系

※詳細は省略した概要図です

1. 編集者がツールから入稿

2. ツールからOracleへ書き込み

3. ジェネレータがOracleのデータを元にデータ生成

4. 表示系がsolrのデータを元にページを生成

Page 7: Oracle Data Guard による高可用性

Oracle DBの利用内容

• Yahoo!ニュース トピックスのすべてのデータを保持

• マスタデータの役割

• 高頻度の読み込みが必要なため、実際に表示に利用する際はsolrを利用

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 7

Page 8: Oracle Data Guard による高可用性

DB停止による影響

• トピックスのPVは月間100億PVを超える

• そのトピックスのマスタデータを担っている

• DBの書き込み・参照が出来なくなると、トピックスの更新や閲覧が出来なくなる事につながる

• ユーザへ与える影響は非常に大きい

ただし、実際には障害・災害に備え、Oracleがたとえ停止した

際にでも必要な更新・閲覧ができるようYahoo!ニュースは備えている

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 8

Page 9: Oracle Data Guard による高可用性

自動フェイルオーバー導入の経緯

• 手動でのフェイルオーバーでは、切り替え完了までの間、サービスの提供を止めてしまう危険性があった

• DB担当者のアラート検知

• DB側の設定

• DB担当者とサービス担当者の連絡

• クライアント側の設定変更

Yahoo!ニュース トピックスは常にサービスを提供し続けられる必要がある

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 9

Page 10: Oracle Data Guard による高可用性

2.Data GuardによるDBのBCP

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 10

Page 11: Oracle Data Guard による高可用性

Data Guardとは

• Oracle Databaseのレプリケーション機能

• 1つ以上のStandby DBを構成することが可能

• リアルタイムなデータ連携も可能

• データ保護、災害時のリカバリに適している

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 11

Primary DB

Standby DB

Standby DB

Standby DB

Page 12: Oracle Data Guard による高可用性

Data Files

Data Guard によるデータ転送

• Primary DBからRedoログが転送される

• Standby Redoログからデータファイルへのリカバリが行われる

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 12

Standby Redo

Redo

Data Files

DB Instance

DB Instance

Primary DB Standby DB

Redo転送

リカバリ

同じデータ

Page 13: Oracle Data Guard による高可用性

Data Guard の保護モード

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 13

モード名 Commit時の Standby Redoへの書込み

Standby DB障害時の Primary DBの挙動

最大保護モード 完全同期 停止される

最大可用性モード 完全同期 稼動が続く

最大パフォーマンスモード 非同期 稼動が続く

データの保護レベルの設定が可能

13

Standby Redo

Data Files

DB Instance

Primary DB Standby DB Redo転送

リカバリ

Page 14: Oracle Data Guard による高可用性

Data Guard の保護モード

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 14

モード名 Commit時の Standby Redoへの書込み

Standby DB障害時の Primary DBの挙動

最大保護モード 完全同期 停止される

最大可用性モード 完全同期 稼動が続く

最大パフォーマンスモード 非同期 稼動が続く

データの保護レベルの設定が可能

14

Standby Redo

Data Files

DB Instance

Primary DB Standby DB Redo転送

リカバリ

採用

Page 15: Oracle Data Guard による高可用性

Data Guard フェイルオーバーの概要

• Standby DBをPrimary DBへ変更して利用可能

• Standby Redoの更新ログは全てリカバリ可能

• 最大可用性モードであればデータロスト無し

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 15

Data Files

Standby Redo

Redo

Data Files

DB Instance

DB Instance

Primary DB Standby DB

リカバリ

Redo転送

Page 16: Oracle Data Guard による高可用性

Data Guard フェイルオーバーの概要

• Standby DBをPrimary DBへ変更して利用可能

• Standby Redoの更新ログは全てリカバリ可能

• 最大可用性モードであればデータロスト無し

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 16

Data Files

Standby Redo

Redo

Data Files

DB Instance

DB Instance

Primary DB Standby DB

リカバリ

DOWN

【対応ステップの概要】 1.リカバリ状況の確認 2.Primary ロールへ変更 3.Databaseをオープン

Page 17: Oracle Data Guard による高可用性

3.自動フェイルオーバーの仕組み

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 17

Page 18: Oracle Data Guard による高可用性

Data Guard Brokerの導入が必要

• Data Guard Brokerとは

• Data Guardの管理機能

• 複数のStandby DBを一元管理可能

• Data Guardのオペレーションを簡略化

• 専用のCUI(DGMGRL)、又はOEMから操作可能

• SQL*Plusで行うよりオペレーションが容易

• 自動フェイルオーバー機能

• 前述のフェイルオーバー処理を自動化可能

• 障害時に必要とされる様々な構成変更が自動化

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 18

Page 19: Oracle Data Guard による高可用性

フェイルオーバーを自動化する仕組み

• Observerを導入する事で可能

• Primary DBを死活監視

• 障害検知時にStandby DBへフェイルオーバー命令

• Standby DBが自動でOpenされ、使用可能となる

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 19

Primary Site Standby Site

Standby DB

Primary DB

Observer

死活監視 フェイルオーバー

命令

Page 20: Oracle Data Guard による高可用性

導入フロー(Observerの構築)

• Observerサーバのセットアップ

• Primary、Standbyとは別サーバを準備

可用性を考慮した構成のサーバが望ましい

• OS仮想化

– Oralce VM

– KVM

• Grid Infrastructureへのリソース登録

• Etc…

• Oracle Full Clientをインストール

PSRレベルでDatabaseサーバと合わせる必要がある

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 20

Page 21: Oracle Data Guard による高可用性

導入フロー(Observerの構築)

• Observerサーバのセットアップ

• Primary、Standbyとは別サーバを準備

可用性を考慮した構成のサーバが望ましい

• OS仮想化

– Oralce VM

– KVM

• Grid Infrastructureへのリソース登録

• Etc…

• Oracle Full Clientをインストール

PSRレベルでDatabaseサーバと合わせる必要がある

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 21

弊社での構成

Page 22: Oracle Data Guard による高可用性

導入フロー(Data Guard構築その1)

• tnsnames.oraに必要情報を記載

Primary DBとStandby DBのネットサービス名を記載

Observerサーバも含めた構成内の全サーバが対象

• RMANでPrimary DBのコピーを作成 RMAN> duplicate target database for standby from active database;

Standby DBで実施

• CRSリソースへDBを登録

Primary DB、Standby DBの双方を登録

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 22

Page 23: Oracle Data Guard による高可用性

導入フロー(Data Guard構築その2)

• Data Guard Brokerへ構成登録

• Primary DBを登録

DGMGRL> create configuration ‘<Broker構成名>’

as primary database is ‘<db_unique_name(Primary)>’

connect identifier ‘<net_service_name(Primary)>’;

• Standby DBを登録

DGMGRL> add database ‘<db_unique_name(Standby)>’

as connect identifier is ‘<net_service_name(Standby)>’;

• 保護モードの設定(最大可用性モード) DGMGRL> edit configuration

set protection mode as maxavailability; Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

23

Page 24: Oracle Data Guard による高可用性

導入フロー(Data Guard構築 その3)

• 構成を有効化 DGMGRL> enable configuration;

Brokerにより、Data Guardに必要な設定が、

データベースに反映されます。

これで、Data Guardは完成です。

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 24

Page 25: Oracle Data Guard による高可用性

導入フロー 自動フェイルオーバー設定

• フェイルオーバー先を設定 DGMGRL> edit database ‘<db_unique_name(Primary)>’

set property FastStartFailoverTarget=

‘<db_unique_name(Standby)>’;

• Primary DB復旧待ち時間を設定

DGMGRL> edit configuration set property FastStartFailoverThreshold = ’XX’;

• Observerプロセスを起動

DGMGRL> enable fast_start failover;

DGMGRL> start observer

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 25

Page 26: Oracle Data Guard による高可用性

アプリケーション側の追従

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 26

Page 27: Oracle Data Guard による高可用性

アプリケーション追従の問題点

• DBが自動でフェイルオーバーしても、アプリケーションのセッションがStandby DBに切換わらなくては意味が無い

• 自動フェイルオーバー時に、アプリケーションのセッションをどうやってStandby DBに切り替えるか?

• アプリケーションの修整は最小限に留めたい

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 27

Page 28: Oracle Data Guard による高可用性

TAFの利用

• TAF(透過的接続フェイルオーバー)

• セッションが切れた際に自動で再接続を行う

• この機能の応用することを検討

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 28

Local Listener Local Listener Local Listener

Instance Node 1

Instance Node 2

Instance Node 3

Client Server

SCAN

Session Failover

DOWN

Page 29: Oracle Data Guard による高可用性

実際に採用した接続文字列 topics =

(DESCRIPTION_LIST =

(FAILOVER = on)

(LOAD_BALANCE = off)

# Primary DB

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = <SCAN (Primary Site)>)(PORT = <SCAN Port>))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = sv_topics)

(FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 360)(DELAY = 10))

)

)

# Standby DB

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = <SCAN (Standby Site)>)(PORT = <SCAN Port>))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = sv_topics)

(FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 360)(DELAY = 10))

)

)

) Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

29

Page 30: Oracle Data Guard による高可用性

実際に採用した接続文字列 topics =

(DESCRIPTION_LIST =

(FAILOVER = on)

(LOAD_BALANCE = off)

# Primary DB

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = <SCAN (Primary Site)>)(PORT = <SCAN Port>))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = sv_topics)

(FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 360)(DELAY = 10))

)

)

# Standby DB

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = <SCAN (Standby Site)>)(PORT = <SCAN Port>))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = sv_topics)

(FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 360)(DELAY = 10))

)

)

) Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止

30

TAFの設定 (FAILOVER_MODE句)

Page 31: Oracle Data Guard による高可用性

セッションの動作(通常時)

• Primary DBに接続される

• Standby DBに接続される事は無い

Standby DBはOpenされていない為、接続不能。

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 31

Primary DB (open)

Client Server

Standby DB (mount)

Primary Site Standby Site

Page 32: Oracle Data Guard による高可用性

セッションの動作(フェイルオーバー時)

• TAFの接続リトライでStandbyに接続される

• クライアントにエラーは返らない

※但し、未完了トランザクションはエラーとなる。

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 32

Primary DB (open)

Client Server

Standby DB (open)

Primary Site Standby Site

DOWN

Page 33: Oracle Data Guard による高可用性

セッションの動作(フェイルオーバー後)

• Standby DBに接続される。

• 旧Primary DBは障害復旧後もopenされない。

2重更新防止の為、Brokerがopenを阻む。

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 33

Primary DB (open)

Client Server

Standby DB (open)

Primary Site Standby Site

DOWN

Page 34: Oracle Data Guard による高可用性

導入後のDBシステム全体の可用性

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 34

Page 35: Oracle Data Guard による高可用性

拠点内での可用性

• 障害ポイントを冗長化している

• DB node

Oracle RAC

• Storage

ASM

• Network

• Bonding

• Multipath

拠点内でも、

高い可用性を実現

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 35

Oracle ASM

RAC DB

DB Instance

DB Instance

DB Instance

Storage 3 Storage 2 Storage 1

DB node 1 DB node 3 DB node 2

Core Switch

Page 36: Oracle Data Guard による高可用性

DBシステム全体の可用性

• 前述のDBシステムを、東西2拠点に構築

• Primaryとは別サイトにObserverを構築

• TAFによるDB接続でフェイルオーバーを追従

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 36

西 東

Standby DB

Primary DB

Observer

Application Application

TAFによるDB接続

Data Guard

死活監視

Page 37: Oracle Data Guard による高可用性

得られた成果

• Yahoo!ニュース トピックスの可用性向上

• DBに自動フェイルオーバーを導入

拠点レベルの災害を考慮したシステム構成となった

• アプリケーション側の追従も実現

TAFの機能で、Standby DBへ自動で接続が切換わる

• 導入時のアプリケーションの変更点は1つだけ

• 接続文字列の変更のみ

Oracle Data Guardを活用する事で、

システムに高い可用性を実現することが出来た。

Copyright (C) 2015 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 37