--1.Oracle Data Guard Brokerのインストール(node1,node2)
show parameter dg
show parameter log;
alter system set dg_broker_start=true scope=both sid='*';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='';
--2.構成の作成(node1)
dgmgrl
connect sys/oracle
CREATE CONFIGURATION 'DRSolution' AS
PRIMARY DATABASE IS 'orcl'
CONNECT IDENTIFIER IS orcl;
SHOW CONFIGURATION;
ADD DATABASE 'stb' AS
CONNECT IDENTIFIER IS stb;
ENABLE CONFIGURATION;
show configuration verbose;
show database verbose 'orcl';
show database verbose 'stb';
--3.DGMGRLサービスの追加
LANG=C netmgr
ListenersのDatabase Servicesに下記を追加
プライマリ側→orcl_DGMGRL.example.com
スタンバイ側→stb_DGMGRL.example.com
lsnrctl stop listener
lsnrctl start listener
lsnrctl service
--4.ファスト・スタート・フェイルオーバーの有効化とオブザーバの起動(node1)
EDIT DATABASE 'orcl' SET PROPERTY 'LogXptMode'='SYNC';
EDIT DATABASE 'stb' SET PROPERTY 'LogXptMode'='SYNC';
EDIT DATABASE 'orcl' SET PROPERTY FastStartFailoverTarget='stb';
EDIT DATABASE 'stb' SET PROPERTY FastStartFailoverTarget='orcl';
EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
--5.フラッシュバックデータベースの有効化(node1,node2)
mkdir -p /u01/app/oracle/oradata/orcl/fra
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER SYSTEM SET db_recovery_file_dest_size=10G;
ALTER SYSTEM SET db_recovery_file_dest='/u01/app/oracle/oradata/orcl/fra';
ALTER DATABASE FLASHBACK ON;
ALTER DATABASE OPEN;
--6.オブザーバを起動(node2)
dgmgrl
connect sys/oracle
START OBSERVER;
--7.ファスト・スタート・フェイルオーバーを有効化(node1)
dgmgrl
connect sys/oracle
ENABLE FAST_START FAILOVER;
SHOW FAST_START FAILOVER;
(5.6)
--mysqlfailover
https://tkn4416.hatenablog.com/entry/2018/04/13/072210
https://www.s-style.co.jp/blog/2017/10/1147/
https://bugs.mysql.com/bug.php?id=88376
mysqlfailoverでは、GTIDモードのレプリケーションのみ対応しています。
また、マスターからスレーブの情報を取得するため、report-host、report-port、master-info-repository=TABLEの設定が必要
--1. レプリケーション設定の変更
--マスターとスレーブで実施
vim /etc/my.cnf
# レプリケーション設定
server_id=101 # ノードごとに値を変える
log_bin
log_slave_updates
gtid-mode=ON
enforce-gtid-consistency
# mysqlfailoverで必要な設定
report-host=mmm052 # ノードごとにノード名を記載
report-port=3306
master-info-repository=TABLE
--スレーブで実施
stop slave;
reset slave all;
CHANGE MASTER TO
MASTER_HOST='192.168.137.52',
MASTER_PORT = 3306,
MASTER_USER='repl',
MASTER_PASSWORD='repl',
MASTER_AUTO_POSITION = 1;
START SLAVE;
show slave status\G
--2. MySQL Utilitiesのインストール
--監視用サーバで実施
yum install -y http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
yum install -y mysql-utilities mysql-community-client
ln -s /usr/lib/python2.7/site-packages/mysql/utilities /usr/lib64/python2.7/site-packages/mysql/utilities
--3. 監視用ユーザを作成と接続確認
--監視用サーバで実施
useradd dbmon
echo dbmon | passwd --stdin dbmon
--マスターで実施
CREATE USER 'utilities'@'192.168.137.%' identified by 'utilities';
GRANT ALL PRIVILEGES ON *.* TO 'utilities'@'192.168.137.%' WITH GRANT OPTION;
--監視用サーバで実施
su - dbmon
mysql -u utilities -h 192.168.137.52 -p
mysql -u utilities -h 192.168.137.53 -p
--4. MySQL Utilitiesの動作確認
--監視用サーバで実施
mysqlrpladmin --master=utilities:utilities@192.168.137.52:3306 \
--slaves=utilities:utilities@192.168.137.53:3306 \
health
--5. mysqlfailoverの監視用デーモン起動
--監視用サーバで実施
mysqlfailover \
--master=utilities:utilities@192.168.137.52:3306 \
--slaves=utilities:utilities@192.168.137.53:3306 \
--log=/home/dbmon/mysqlfailover.log \
--pidfile=/home/dbmon/failover_daemon.pid \
--rpl-user=repl:repl \
--failover-mode=auto \
--daemo=start \
-v
ps aux | grep mysqlfailover
tail -f /home/dbmon/mysqlfailover.log
--6. マスターを停止してフェイルオーバーを発動させる
systemctl stop mysqld.service
--7. 監視デーモンの停止
--マスターで実施
DROP TABLE IF EXISTS mysql.failover_console;
--監視用サーバで実施
mysqlfailover --daemo=stop --pidfile=/home/dbmon/failover_daemon.pid
----------------------------------------
MySQL MHA
詳細は下記参照
https://qiita.com/KyojiOsada/items/3c135cd80a55d899719d
--pg_keeper
https://qiita.com/sawada_masahiko/items/3b1776af52b95b318a5d
マスタ1台、スタンバイ1台で同期レプリケーションを使用した場合のみ対応
バージョン9.6をソースコンパイルした構成で確認
--インストール[プライマリとスタンバイで実施]
unzip pg_keeper-REL1_0_STABLE.zip
cd pg_keeper-REL1_0_STABLE
make USE_PGXS=1
su
make USE_PGXS=1 install
exit
--設定[プライマリで実施]
vim $PGDATA/postgresql.conf
max_worker_processes = 8 # pg_keeper requires one worker on each side
max_wal_senders = 8 # must be more than 1
shared_preload_libraries = 'pg_keeper'
pg_keeper.keepalive_time = 5
pg_keeper.keepalive_count = 3
pg_keeper.my_conninfo = 'host=127.0.0.1 port=5432 dbname=postgres'
pg_keeper.partner_conninfo = 'host=192.168.137.69 port=5432 dbname=postgres'
--設定[スタンバイで実施]
vim $PGDATA/postgresql.conf
max_worker_processes = 8 # pg_keeper requires one worker on each side
max_wal_senders = 8 # must be more than 1
shared_preload_libraries = 'pg_keeper'
pg_keeper.keepalive_time = 5
pg_keeper.keepalive_count = 3
pg_keeper.my_conninfo = 'host=127.0.0.1 port=5432 dbname=postgres'
pg_keeper.partner_conninfo = 'host=192.168.137.68 port=5432 dbname=postgres'
--起動[プライマリとスタンバイで実施]
systemctl restart postgresql-9.6
ps -ef | grep pg_keeper | grep -v grep
スタンバイ側を停止するとalter system文を発行し、同期→非同期となる
スタンバイ側が起動しても非同期のまま
非同期→同期にもどす
ALTER SYSTEM RESET synchronous_standby_names;
サービス再起動
select * from pg_stat_replication;
マスタサーバが停止した場合、自動でスタンバイ側にフェールオーバする
フェールオーバモードを「自動」設定
同期モードの場合、セカンダリが停止してもプライマリで更新は可能
同期モードでプライマリが停止してセカンダリにフェールオーバした後プライマリが復活した場合、
自動ではフェールバックしない