db2 v10.5 HADR 搭建过程
organization: China Poka
Author: Duan Yu
mail:chinazzbcn@gmail.com or cn-duanyu@foxmail.com
1 、HADR 介紹
直接上db2官方鏈接(中文)就不多說了,挑重點(diǎn)講。
同步基于日志,日志模式?jīng)Q定業(yè)務(wù)屬性。
同步模式(SYNC)
在同步模式下,當(dāng)用戶在主數(shù)據(jù)庫上提交一個(gè)事務(wù)時(shí),首先該事務(wù)的相關(guān)數(shù)據(jù)庫日志會(huì)被寫到主數(shù)據(jù)庫的本地磁盤上,然后主數(shù)據(jù)庫會(huì)將日志發(fā)送給備機(jī)數(shù)據(jù)庫,并且等待備機(jī)數(shù)據(jù)庫的回復(fù);備機(jī)數(shù)據(jù)庫在接收到日志,并將其寫到自己的磁盤上后,才回復(fù)給主數(shù)據(jù)庫。主數(shù)據(jù)庫在接到備機(jī)數(shù)據(jù)庫的回復(fù)之后,才返回給用戶該事務(wù)提交成功。由此可見,在該同步模式下,凡是提交成功的事務(wù),日志不僅在主數(shù)據(jù)庫的磁盤上,也在備機(jī)數(shù)據(jù)庫的磁盤上,此時(shí)如果主數(shù)據(jù)庫發(fā)生故障,已提交的數(shù)據(jù)不會(huì)丟失。因此,在同步模式下,HADR 能夠提供無數(shù)據(jù)丟失保證(No data loss guarantee)。但是,在該同步模式下,HADR 對(duì)主數(shù)據(jù)庫業(yè)務(wù)的影響也是顯而易見的。
近同步模式(NEARSYNC)
與同步模式相比,近同步模式下的備機(jī)數(shù)據(jù)庫接收到主數(shù)據(jù)庫發(fā)來的日志時(shí),并不等待將其寫到本地磁盤之后才回復(fù)給主數(shù)據(jù)庫,而是立即回復(fù)給主數(shù)據(jù)庫。主數(shù)據(jù)庫在接收到備機(jī)數(shù)據(jù)庫的回復(fù)之后就返回給用戶事務(wù)提交成功,而此時(shí),該事務(wù)的日志可能還在備機(jī)數(shù)據(jù)庫的內(nèi)存中,并未寫到本地盤上。如果此時(shí)主機(jī)發(fā)生故障,并不能保證在原主數(shù)據(jù)庫上已提交的數(shù)據(jù)在備機(jī)上必然能找回。雖然該同步模式不能保證零數(shù)據(jù)丟失,但是相比同步模式,近同步模式下的 HADR 對(duì)于主數(shù)據(jù)庫業(yè)務(wù)的影響較小。
異步模式(ASYNC)
在異步模式下,主數(shù)據(jù)庫發(fā)送日志成功后就返回給用戶,事務(wù)提交成功,而此時(shí),備機(jī)數(shù)據(jù)庫有可能還沒有收到這些日志。如果此時(shí)主數(shù)據(jù)庫發(fā)生故障,該已提交事務(wù)的數(shù)據(jù)更改就會(huì)丟失。同樣的,由于異步模式下的主數(shù)據(jù)庫在返回給用戶事務(wù)提交成功之前不等待備機(jī)數(shù)據(jù)庫的回復(fù),HADR 對(duì)主數(shù)據(jù)庫上業(yè)務(wù)的影響比近同步模式更小。
超級(jí)異步模式(SUPERASYNC)
從 DB2 LUW V9.7.5 和 V9.5.8 開始,HADR 引入了一種新的同步模式,即超同步模式。在該同步模式下,主數(shù)據(jù)庫上數(shù)據(jù)庫日志的產(chǎn)生與發(fā)送完全分離,二者沒有任何依賴,這樣 HADR 對(duì)于主數(shù)據(jù)庫業(yè)務(wù)的影響降到了最低;同時(shí),由于日志的產(chǎn)生與發(fā)送分離,可能導(dǎo)致主數(shù)據(jù)庫和備機(jī)數(shù)據(jù)庫之間的差距較大,此時(shí)如果主機(jī)發(fā)生故障,會(huì)有較多的數(shù)據(jù)丟失;并且非強(qiáng)制接管(non-force TAKEOVER)可能需要更多時(shí)間。
| 模式 | 有無數(shù)據(jù)丟失風(fēng)險(xiǎn) | 影響主數(shù)據(jù)庫性能級(jí)別 |
| SYNC | 無 | 大 |
| NEARSYNC(default) | 有(不保證零數(shù)據(jù)丟失) | 小 |
| ASYNC | 有 | 較小 |
| SUPERASYNC | 有 | 極小 |
2、搭建過程
SUSE 11 sp3
2.1創(chuàng)建數(shù)據(jù)庫管理用戶及實(shí)例用戶
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安裝數(shù)據(jù)庫
主機(jī):2臺(tái)
172.18.94.110? ? db2_node1?4C 16G? ?
172.18.94.111 ? db2_node2? 4C 16G
v10.5fp10_linuxx64_server_t.tar.gz 安裝包(百度云連接)百度網(wǎng)盤 請(qǐng)輸入提取碼?提取碼(16進(jìn)制自行轉(zhuǎn)換):36777173
先檢查/etc/hosts 有無設(shè)置本地ip映射/etc/hostname
172.18.94.110? ? db2_node1?
172.18.94.111 ? db2_node2?
寫入服務(wù)名替代端口號(hào)
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搭建及優(yōu)化
3.1linux 內(nèi)核優(yōu)化
ipcs -l ------ Shared Memory Limits -------- max number of segments = 4096 // SHMMNI 缺省系統(tǒng)頁 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| 參數(shù)名 | 公式 | 模板以 16G內(nèi)存 |
| kernel.shmmni? | 4096 | 4096 |
| kernel.shmmax | RAM(GB)*1024*1024*1024 | 17179869184 |
| kernel.shmall | 2*缺省系統(tǒng)頁*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數(shù)據(jù)庫本身優(yōu)化(需要根據(jù)業(yè)務(wù)來修改,推薦自動(dòng))
主數(shù)據(jù)庫db2_node1: db2 create db HADRDB using codeset utf8 territory CN collate using identity? 創(chuàng)建緩沖池,包括表緩沖池、索引緩沖池(主數(shù)據(jù)庫服務(wù)器)。 db2 "create bufferpool TB_BP_8k size 2000 pagesize 8k" db2 "create bufferpool IDX_BP_8k size 2000 pagesize 8k"創(chuàng)建表表空間、索引表空間.測試時(shí)不要?jiǎng)?chuàng)建表空間!!!!! 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" ?創(chuàng)建表 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并恢復(fù)
備數(shù)據(jù)庫db2_node2:db2 "restore database hadrdb" 注意這條命令只允許備份文件在當(dāng)前目錄下 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啟動(dòng)hadr備 db2 start hadr on database hadr as standby查看hadr狀態(tài) db2pd -db hadrdb -hadr 主數(shù)據(jù)庫db2_node1:啟動(dòng)hadr主 db2 start hadr on database hadrdb as primary db2pd -db hadrdb -hadr
4測試主備數(shù)據(jù)是否同步
主數(shù)據(jù)庫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)"停止數(shù)據(jù)庫
db2stop force備數(shù)據(jù)庫db2_node2:
接管主數(shù)據(jù)庫
db2 takeover hadr on database hadrdb by force查看是否成為主數(shù)據(jù)庫
db2pd -db hadrdb -hadr | grep PRIMARY查看db2_node1插入的數(shù)據(jù)是否同步了
db2 connect to hadrdb
db2 "select * from tab1"創(chuàng)建表并檢查數(shù)據(jù)是否同步
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設(shè)置為主節(jié)點(diǎn)
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檢查數(shù)據(jù)是否同步
db2 "select * from tab2"db2_node2:
db2pd -db hadrdb -hadr | grep STANDBY
至此已成功完成,但無法做到客戶端自動(dòng)切換,下篇文章講解如何實(shí)現(xiàn)客戶端無縫切換
參考鏈接:
IBM Developer
DB2 HADR 單一備庫搭建過程_Hwh1231的博客-CSDN博客_db2 備庫只讀
總結(jié)
以上是生活随笔為你收集整理的db2 v10.5 HADR 搭建过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 去除GridControl上面quot;
- 下一篇: Uniapp 截图 适用于APP