レプリケーション方式

フィジカルスタンバイ/最大パフォーマンス
フィジカルスタンバイ/最大保護
ロジカルスタンバイ/最大パフォーマンス
ロジカルスタンバイ/最大保護

最大保護と最大パフォーマンスの中間に最大可用性がある

(1)フィジカルスタンバイ/最大パフォーマンス

レプリケーション設定の項参照

(2)フィジカルスタンバイ/最大保護

前提:フィジカルスタンバイ/最大パフォーマンス構築済

--最大パフォーマンス→最大保護にする場合

SELECT PROTECTION_MODE FROM V$DATABASE;

--1.プライマリ側
alter system set log_archive_dest_2 ='SERVICE=stb SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stb';
shutdown immediate;


--2.スタンバイ側
alter system set log_archive_dest_2 ='SERVICE=orcl SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl';
shutdown immediate;


--3.プライマリ側
startup mount;
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;

--4.スタンバイ側
STARTUP MOUNT;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;


--5.プライマリ側
alter database open;


--最大保護→最大パフォーマンスにする場合

SELECT PROTECTION_MODE FROM V$DATABASE;

--1.プライマリ側
alter system set log_archive_dest_2 ='SERVICE=stb ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stb' scope=spfile;
shutdown immediate;


--2.スタンバイ側
alter system set log_archive_dest_2 ='SERVICE=orcl ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl' scope=spfile;
shutdown immediate;


--3.プライマリ側
startup mount;
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
alter database open;

--4.スタンバイ側
STARTUP MOUNT;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

(3)ロジカルスタンバイ/最大パフォーマンス

前提:フィジカルスタンバイ/最大パフォーマンス構築済。リスナー起動済


--1.ロジカル・スタンバイ・データベースの作成要件(node1)

SELECT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_NOT_UNIQUE
WHERE (OWNER, TABLE_NAME) NOT IN
(SELECT DISTINCT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED)
AND BAD_COLUMN = 'Y';

--2.フィジカル・スタンバイ・データベースでのREDO Applyの停止(node2)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

--3.ロールの推移のためのプライマリ・データベースの準備(node1)
mkdir -p /u01/app/oracle/oradata/orcl/arc2

alter system set log_archive_dest_1 ='LOCATION=/u01/app/oracle/oradata/orcl/arc VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl' scope=both;

alter system set log_archive_dest_3 ='LOCATION=/u01/app/oracle/oradata/orcl/arc2 VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=orcl' scope=both;
alter system set LOG_ARCHIVE_DEST_STATE_3=ENABLE scope=both;

--4.REDOデータでのディクショナリの構築(node1)
EXECUTE DBMS_LOGSTDBY.BUILD;

 

--5.ロジカル・スタンバイ・データベースへの変換(node2)

ALTER DATABASE RECOVER TO LOGICAL STANDBY stb;

 


--6.ロジカル・スタンバイ・データベース用の初期化パラメータの調整(node2)

SHUTDOWN;
STARTUP MOUNT;

mkdir -p /u01/app/oracle/oradata/orcl/arc2


alter system set log_archive_dest_1 ='LOCATION=/u01/app/oracle/oradata/orcl/arc VALID_FOR=(ONLINE_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stb' scope=both;

alter system set log_archive_dest_3 ='LOCATION=/u01/app/oracle/oradata/orcl/arc2 VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=stb' scope=both;
alter system set LOG_ARCHIVE_DEST_STATE_3=ENABLE scope=both;

 

--7.ロジカル・スタンバイ・データベースのオープン(node2)
ALTER DATABASE OPEN RESETLOGS;

ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;


--8.ロジカル・スタンバイ・データベースが正しく実行されているかどうかの確認(node2)


SELECT SESSION_ID, STATE FROM V$LOGSTDBY_STATE;


(4)ロジカルスタンバイ/最大保護

前提:ロジカルスタンバイ/最大パフォーマンス構築済。リスナー起動済

--最大パフォーマンス→最大保護にする場合

SELECT PROTECTION_MODE FROM V$DATABASE;

--1.プライマリ側
alter system set log_archive_dest_2 ='SERVICE=stb SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stb';
shutdown immediate;


--2.スタンバイ側
alter system set log_archive_dest_2 ='SERVICE=orcl SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl';
shutdown immediate;


--3.プライマリ側
startup mount;
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;

--4.スタンバイ側
STARTUP;
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;


--5.プライマリ側
alter database open;


--最大保護→最大パフォーマンスにする場合

SELECT PROTECTION_MODE FROM V$DATABASE;

--1.プライマリ側
alter system set log_archive_dest_2 ='SERVICE=stb ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stb' scope=spfile;
shutdown immediate;


--2.スタンバイ側
alter system set log_archive_dest_2 ='SERVICE=orcl ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl' scope=spfile;
shutdown immediate;


--3.プライマリ側
startup mount;
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
alter database open;

--4.スタンバイ側
STARTUP;
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

 

行ベース/非同期
行ベース/準同期
ステートメントベース/非同期
ステートメントベース/準同期

行ベースとステートメントベースの中間に混合ベースがある


(1)非同期→準同期とする場合


--プラグインのインストール[マスターで実施]
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';


--プラグインのインストール[スレーブで実施]

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';


--準同期レプリケーションを有効化[マスターで実施]
SET GLOBAL rpl_semi_sync_master_enabled = 1;

--準同期レプリケーションを有効化[スレーブで実施]
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

--稼働中のスレーブのI/Oスレッドを再起動[スレーブで実施]
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

--準同期の確認[マスターで実施]
SHOW STATUS LIKE 'Rpl_semi_sync%';


--設定永続化[マスターで実施]
vim /etc/my.cnf

[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=20000 # 20 second

--設定永続化[スレーブで実施]
vim /etc/my.cnf
[mysqld]
rpl_semi_sync_slave_enabled=1


--確認[マスターで実施]
show status like 'rpl_semi_sync_master_status';

--確認[スレーブで実施]
show status like 'rpl_semi_sync_slave_status';

 

(2)行ベース→ステートメントベースにする場合

vim /etc/my.cnf

[mysqld]
#binlog_format=ROW
binlog_format=STATEMENT

 

ストリーミングレプリケーション/非同期
ストリーミングレプリケーション/同期
ロジカルレプリケーション/非同期
ロジカルレプリケーション/同期

ストリーミングレプリケーションについては「レプリケーション設定」の項参照
ロジカルレプリケーションは(10)から

※ロジカルデコーディングは9.4以降で使用可能。レプリケーションツール名:pglogical
※9.4より前で論理レプリケーション相当の機能が必要の場合Slony-Iを使用する

https://www.sraoss.co.jp/tech-blog/pgsql/slony-i/

 


(1)ロジカルレプリケーション/非同期

mmm121: パブリッシャ
mmm122: サブスクライバ
前提:mmm121,mmm122にPostgreSQL10をインストール。testデータベース作成。リモート接続許可。


--1.パブリッシャの設定
vim postgresql.conf

wal_level = 'logical'
max_replication_slots = 2
max_wal_senders = 2

vim pg_hba.conf
host test postgres 192.168.137.122/32 trust

psql test -c "create table tab1(col1 int)"
psql test -c "create publication pub1 for table tab1"

--2.サブスクライバの設定
vim postgresql.conf

max_replication_slots = 1
max_sync_workers_per_subscription = 1
max_logical_replication_workers = 2
max_worker_processes = 3

psql test -c "create table tab1(col1 int)"
psql test -c "create subscription sub1 connection 'dbname=test host=192.168.137.121' publication pub1"


--3.動作確認

select * from pg_stat_replication;
select * from pg_stat_subscription;
ps -ef | grep postgres
select * from pg_replication_slots;


(2)ロジカルレプリケーション/同期

mmm121: パブリッシャ
mmm122: サブスクライバ
前提:ロジカルレプリケーション/非同期の設定済


--1.パブリッシャの設定
vim postgresql.conf
synchronous_standby_names = 'sub1'

alwayson 可用性グループ/非同期
alwayson 可用性グループ/同期
レプリケーション/プッシュ
レプリケーション/プル

(1)alwayson 可用性グループ/非同期

レプリケーション設定の項参照

(2)alwayson 可用性グループ/同期

レプリケーション設定の手順の
14.可用性グループの作成において、可用性モードとして「同期コミット」を選択する

 

非同期→同期とする場合


alter availability group ag1
modify replica on N'mmm192' with (availability_mode = synchronous_commit);
go

alter availability group ag1
modify replica on N'mmm193' with (availability_mode = synchronous_commit);
go

 

 

 

 

(3)レプリケーション/プッシュ

参考サイト : https://www.ipentec.com/document/sql-server-setup-transaction-replication

mmm141:ディストリビューター、パブリッシャー
mmm142:サブスクライバー

レプリケーショントポロジートランザクションレプリケーション


パブリッシャーとサブスクライバーSQL Server エージェントの自動起動設定およびサービス起動しておく


1.ディストリビューターの設定
[レプリケーション]ノードを選択し[ディストリビューションの構成]をクリック

2.パブリケーションの設定
[レプリケーション]ノード内の[ローカル パブリケーション]ノードを選択します。[新しいパブリケーション]をクリック

3.サブスクリプションの設定
[レプリケーション]ノードの[ローカルサブスクリプション]ノードをクリックして選択

(4)レプリケーション/プル

参考サイト : https://www.ipentec.com/document/sql-server-setup-transaction-replication

mmm141:パブリッシャー
mmm142:ディストリビューター、サブスクライバー

レプリケーショントポロジートランザクションレプリケーション


パブリッシャーとサブスクライバーSQL Server エージェントの自動起動設定およびサービス起動しておく


1.ディストリビューターの設定
[レプリケーション]ノードを選択し[ディストリビューションの構成]をクリック

2.パブリケーションの設定
[レプリケーション]ノード内の[ローカル パブリケーション]ノードを選択します。[新しいパブリケーション]をクリック

3.サブスクリプションの設定
[レプリケーション]ノードの[ローカルサブスクリプション]ノードをクリックして選択