db2 v10.5 HADR 搭建过程
organization: China Poka
Author: Duan Yu
mail:chinazzbcn@gmail.com or cn-duanyu@foxmail.com
1 、HADR 介紹
直接上db2官方鏈接(中文)就不多說了,挑重點講。
同步基于日志,日志模式決定業務屬性。
同步模式(SYNC)
在同步模式下,當用戶在主數據庫上提交一個事務時,首先該事務的相關數據庫日志會被寫到主數據庫的本地磁盤上,然后主數據庫會將日志發送給備機數據庫,并且等待備機數據庫的回復;備機數據庫在接收到日志,并將其寫到自己的磁盤上后,才回復給主數據庫。主數據庫在接到備機數據庫的回復之后,才返回給用戶該事務提交成功。由此可見,在該同步模式下,凡是提交成功的事務,日志不僅在主數據庫的磁盤上,也在備機數據庫的磁盤上,此時如果主數據庫發生故障,已提交的數據不會丟失。因此,在同步模式下,HADR 能夠提供無數據丟失保證(No data loss guarantee)。但是,在該同步模式下,HADR 對主數據庫業務的影響也是顯而易見的。
近同步模式(NEARSYNC)
與同步模式相比,近同步模式下的備機數據庫接收到主數據庫發來的日志時,并不等待將其寫到本地磁盤之后才回復給主數據庫,而是立即回復給主數據庫。主數據庫在接收到備機數據庫的回復之后就返回給用戶事務提交成功,而此時,該事務的日志可能還在備機數據庫的內存中,并未寫到本地盤上。如果此時主機發生故障,并不能保證在原主數據庫上已提交的數據在備機上必然能找回。雖然該同步模式不能保證零數據丟失,但是相比同步模式,近同步模式下的 HADR 對于主數據庫業務的影響較小。
異步模式(ASYNC)
在異步模式下,主數據庫發送日志成功后就返回給用戶,事務提交成功,而此時,備機數據庫有可能還沒有收到這些日志。如果此時主數據庫發生故障,該已提交事務的數據更改就會丟失。同樣的,由于異步模式下的主數據庫在返回給用戶事務提交成功之前不等待備機數據庫的回復,HADR 對主數據庫上業務的影響比近同步模式更小。
超級異步模式(SUPERASYNC)
從 DB2 LUW V9.7.5 和 V9.5.8 開始,HADR 引入了一種新的同步模式,即超同步模式。在該同步模式下,主數據庫上數據庫日志的產生與發送完全分離,二者沒有任何依賴,這樣 HADR 對于主數據庫業務的影響降到了最低;同時,由于日志的產生與發送分離,可能導致主數據庫和備機數據庫之間的差距較大,此時如果主機發生故障,會有較多的數據丟失;并且非強制接管(non-force TAKEOVER)可能需要更多時間。
| 模式 | 有無數據丟失風險 | 影響主數據庫性能級別 |
| SYNC | 無 | 大 |
| NEARSYNC(default) | 有(不保證零數據丟失) | 小 |
| ASYNC | 有 | 較小 |
| SUPERASYNC | 有 | 極小 |
2、搭建過程
SUSE 11 sp3
2.1創建數據庫管理用戶及實例用戶
zypper install -y gcc gcc-c++ kernel-source pam-32bit glibc-locale-32bit libstdc-32bit groupadd -g 901 db2iadm1 groupadd -g 902 db2fadm1 groupadd -g 903 dasadm1 useradd -g db2iadm1 -u 801 -d /home/db2inst1 -m db2inst1 useradd -g db2fadm1 -u 802 -d /home/db2fenc1 -m db2fenc1 useradd -g dasadm1 -u 803 -d /home/dasadm1 -m dasusr12.2安裝數據庫
主機:2臺
172.18.94.110? ? db2_node1?4C 16G? ?
172.18.94.111 ? db2_node2? 4C 16G
v10.5fp10_linuxx64_server_t.tar.gz 安裝包(百度云連接)百度網盤 請輸入提取碼?提取碼(16進制自行轉換):36777173
先檢查/etc/hosts 有無設置本地ip映射/etc/hostname
172.18.94.110? ? db2_node1?
172.18.94.111 ? db2_node2?
寫入服務名替代端口號
echo "db2_hadr1? ? 55110/tcp
db2_hadr2? ? 55111/tcp " >> /etc/services
tar zxvf v10.5fp10_linuxx64_server_t.tar.gz -C /opt/ /opt/server_t/db2_install/ yes SERVER no ###安裝完成 /opt/ibm/db2/V10.5/instance/dascrt -u dasusr1 /opt/ibm/db2/V10.5/instance/db2icrt -a server -u db2fenc1 db2inst1 su - db2inst1 -c "db2set DB2COMM=TCPIP" su - db2inst1 -c "db2 update dbm cfg using SVCENAME 50000" su - db2inst1 -c "db2start /opt/ibm/db2/V10.5/instance/db2iauto -on db2inst13 HADR搭建及優化
3.1linux 內核優化
ipcs -l ------ Shared Memory Limits -------- max number of segments = 4096 // SHMMNI 缺省系統頁 max seg size (kbytes) = 32768 // SHMMAX max total shared memory (kbytes) = 8388608 // SHMALL min seg size (bytes) = 1 ------ Semaphore Limits -------- max number of arrays = 1024 // SEMMNI max semaphores per array = 250 // SEMMSL max semaphores system wide = 256000 // SEMMNS max ops per semop call = 32 // SEMOPM semaphore max value = 32767 ------ Messages: Limits -------- max queues system wide = 1024 // MSGMNI max size of message (bytes) = 65536 // MSGMAX default max size of queue (bytes) = 65536 // MSGMNB| 參數名 | 公式 | 模板以 16G內存 |
| kernel.shmmni? | 4096 | 4096 |
| kernel.shmmax | RAM(GB)*1024*1024*1024 | 17179869184 |
| kernel.shmall | 2*缺省系統頁*1024*1024 | 8388608 |
| kernel.sem | 250 1024000 32 4096 | 同左邊 |
| kernel.msgmni | 1024 * RAM(GB) | 16384 |
| kernel.msgmax | 65536 | 65536 |
| kernel.msgmnb | 65536 | 65536 |
3.2數據庫本身優化(需要根據業務來修改,推薦自動)
主數據庫db2_node1: db2 create db HADRDB using codeset utf8 territory CN collate using identity? 創建緩沖池,包括表緩沖池、索引緩沖池(主數據庫服務器)。 db2 "create bufferpool TB_BP_8k size 2000 pagesize 8k" db2 "create bufferpool IDX_BP_8k size 2000 pagesize 8k"創建表表空間、索引表空間.測試時不要創建表空間!!!!! db2 "create regular tablespace TB_TS pagesize 8k managed by database using(file '/db2/db2inst1/HADRDB/tablespaces/HADRDB' 10g) bufferpool TB_BP_8k" ?db2 "create regular tablespace IDX_TS pagesize 8k managed by database using(file '/db2/db2inst1/HADRDB/tablespaces/HADRDB_IDX' 4g) bufferpool IDX_BP_8k" ?創建表 db2 connect to hadrdb db2 "create table test_1(name varchar(20),age integer,gender varchar(10)) IN 'TB_TS' INDEX IN 'IDX_TS'" db2 "insert into test_1 values(sdasd,22,msdasd)"#開啟在線日志(開啟后允許在線備份) db2 update db cfg for hadrdb using LOGARCHMETH1 LOGRETAINdb2 backup db hadrdbdb2 update db cfg for hadrdb using HADR_LOCAL_HOST db2_node1 db2 update db cfg for hadrdb using HADR_LOCAL_SVC db2_hadr1 db2 update db cfg for hadrdb using HADR_REMOTE_HOST db2_node2 db2 update db cfg for hadrdb using HADR_REMOTE_SVC db2_hadr2 db2 update db cfg for hadrdb using HADR_REMOTE_INST db2inst1 db2 update db cfg for hadrdb using LOGINDEXBUILD ON將備份文件傳輸至db2_node2并恢復
備數據庫db2_node2:db2 "restore database hadrdb" 注意這條命令只允許備份文件在當前目錄下 db2 update db cfg for hadrdb using HADR_LOCAL_HOST db2_node2 db2 update db cfg for hadrdb using HADR_LOCAL_SVC db2_hadr2 db2 update db cfg for hadrdb using HADR_REMOTE_HOST db2_node1 db2 update db cfg for hadrdb using HADR_REMOTE_SVC db2_hadr1 db2 update db cfg for hadrdb using HADR_REMOTE_INST db2inst1啟動hadr備 db2 start hadr on database hadr as standby查看hadr狀態 db2pd -db hadrdb -hadr 主數據庫db2_node1:啟動hadr主 db2 start hadr on database hadrdb as primary db2pd -db hadrdb -hadr
4測試主備數據是否同步
主數據庫db2_node1:
db2 connect to hadrdb
db2 "create table tab1 (col1 int)"
db2 "insert into tab1 values (1)"
db2 "insert into tab1 values (2)"
db2 "insert into tab1 values (3)"停止數據庫
db2stop force備數據庫db2_node2:
接管主數據庫
db2 takeover hadr on database hadrdb by force查看是否成為主數據庫
db2pd -db hadrdb -hadr | grep PRIMARY查看db2_node1插入的數據是否同步了
db2 connect to hadrdb
db2 "select * from tab1"創建表并檢查數據是否同步
db2 "create table tab2 (col1 int)"
db2 "insert into tab2 values (4)"
db2 "insert into tab2 values (5)"
db2 "insert into tab2 values (6)"db2_node1:將db2_node1設置為主節點
db2 start hadr on database hadrdb as standby
db2pd -db hadrdb -hadr | grep STANDBY
db2 takeover hadr on database hadrdb
db2pd -db hadrdb -hadr | grep PRIMARY檢查數據是否同步
db2 "select * from tab2"db2_node2:
db2pd -db hadrdb -hadr | grep STANDBY
至此已成功完成,但無法做到客戶端自動切換,下篇文章講解如何實現客戶端無縫切換
參考鏈接:
IBM Developer
DB2 HADR 單一備庫搭建過程_Hwh1231的博客-CSDN博客_db2 備庫只讀
總結
以上是生活随笔為你收集整理的db2 v10.5 HADR 搭建过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 去除GridControl上面quot;
- 下一篇: 基于模型设计(MBD)工程方法开发六轴机