主備切換的準備工作 二)

2021-09-22 19:10:25 字數 3112 閱讀 7144

之前也強調過元資料的重要性,而且強調過備庫需要考慮的很多方面,如果考慮不周到,其實我們的備庫還沒有做好切換的準備,而且最近也連連處理了多起問題,發現災備中還是有很多的思考的東西,所謂實踐出真知,這些地方不注意,只能保證資料不丟失,對於業務連線,應用響應和影響範圍來說都是不可估量的。

很多次的災備切換中,如果在同機房的情況下,在failover的場景中,為了盡可能減少應用的影響範圍,一般都是直接修改備庫的ip為原來主庫的ip,那麼防火牆的配置就尤為重要,防火牆是乙個方面,應用連線的埠是否主備統一,可能對於不同的應用指定了不同的訪問埠,哪些主機配置了更多的信任關係,可以走網域名稱解析,所以這些看起來很細小的問題,如果在大半夜問題發生的時候再去處理,還是讓人有些上火,尤其在這個時候就特別希望能有個簡單的備份改多好。

運維平台的建設思考-元資料管理

你的備庫做好準備了嗎

所以內部使用先嘗到了甜頭,就會不斷改進,願意融入這個體系,那一切都好說了。

目前的思路是可以像八爪魚一般把所有主庫伺服器的資訊都抓取下來,放到中控的指定目錄下。目前的實現指令碼如下:

說明一下,根據 sh /home/yangjr/new.lst 得到了乙個元資料列表,然後再這個基礎上根據得到的主庫ip資訊進行備份。這個時候備份的主要還是主庫的配置資訊。

看起來指令碼思路比較簡單,我來說說裡面的一些細節,也確實花了我一些時間。

首先tnsnames.ora,listener.ora甚至init***.ora等等都是依賴oracle_home這個變數的,在這個地方花了不少時間,最開始的解析思路是從profile裡面解析,但是解析發現profile的格式和方式還是有很大的差別,預設是按照.bash_profile來解析oracle_home的,但是測試執行,得到了一半的錯誤都是下面的格式。

/home/oracle/.bash_profile: line 25: /root/.bidbprofile: no such file or directory

/home/oracle/.bash_profile: line 13: /root/.testprofile: no such file or directory

當然這個也可以逐步規範,但是這個profile的使用也是合理的,如果一台伺服器有多個例項,那麼就需要多個profile,可能profile還是巢狀呼叫的。這樣去解析就非常麻煩了。

如果單純在profile解析$oracle_home的值,其實$oracle_home一般都是設定為oracle_home=$oracle_base/***x

那麼問題來了,這個oracle_base改怎麼解析,可以實現,但是感覺比較繁瑣,而且很容易出現不相容的情況,那麼還有什麼招,一種方法就是/etc/oratab了。這個裡面會存放oracle_home的資訊,但凡資料庫例項安裝的規範,這個變數值都是有效的,取出一條即可。

對於元資料的抓取,資料庫層面目前是抓取了listener.ora,sqlnet.ora,tnsnames.ora,系統層面抓取了iptables和/etc/hosts的配置

對於sqlnet.ora如果有些服務配置中沒有顯式設定,就不需要生成這個檔案,如果是listener.ora和tnsnames.ora檔案則是必須的。

所以在這些地方指令碼中也做了檢查和校驗。

最後的指令碼內容如下:

##get primary db list

for ip in `sh /home/yangjr/new.lst|grep -i primary|grep -v aix|grep -v nopingdb |awk ''|sort|uniq` ;

#for ip in `cat a.sh|grep -i primary|grep -v solaris|grep -v nopingdb |awk ''|sort|uniq` ;

do #echo $ip;cat a.sh|grep -w $ip  ;done > server_sum.txt

#ssh $ip        "cat /home/oracle/.bash_profile|grep -w oracle_home=|awk -f= ''"

mkdir -p /home/conf/$ip;

oracle_home=`ssh $ip "cat /etc/oratab | tail -1 | awk -f: ''"  2>\&1 `

echo  $ip" "$oracle_home

if [ -n "$oracle_home" ]; then

ssh $ip "cat $oracle_home/network/admin/tnsnames.ora 2>\&1"  > /home/conf/$ip/tnsnames.ora

ssh $ip "cat $oracle_home/network/admin/listener.ora 2>\&1"  > /home/conf/$ip/listener.ora

ssh $ip "cat $oracle_home/network/admin/sqlnet.ora 2>\&1"  > /home/conf/$ip/sqlnet.ora

scp $ip:$oracle_home/dbs/init*.ora   /home/conf/$ip 2>&1

scp $ip:$oracle_home/dbs/spfile*.ora   /home/conf/$ip 2>&1 fi

ssh $ip "cat /etc/hosts"  > /home/conf/$ip/hosts

ssh $ip "cat /etc/sysconfig/iptables"  > /home/conf/$ip/iptables

ssh $ip "cat /etc/sysconfig/network"  > /home/conf/$ip/network

#validate if tnsnames.ora,listener.ora is empty or not

if [ ! -s /home/conf/$ip/sqlnet ];then

rm -f /home/conf/$ip/sqlnet.ora fi

if [ ! -s /home/conf/$ip/listener.ora ] ||[ ! -s /home/conf/$ip/tnsnames.ora ];then

echo 'warning: there is empty files, tnsnames.ora,listener.ora, please check again.' fi

done

meego 編譯,主系統的準備工作

用於建立映象,支援live cd images,live usb images,raw images for kvm,vmdk images for vmware,vdi images for virtualbox,loop images for ivi platforms,nand images ...

簡單的主備切換方案

主備切換是很多高可用性系統都必須解決的問題,方法有很多,象基於zookeeper的主備切換就是乙個很好的選擇。在這裡提供一種更簡單但不完美的主備切換方法 1 假設a和b是集群中的主控 master 節點 2 1 7是工作節點 如hdfs中的datanode 3 在每個工作節點上,都同時配置了a和b的...

機器學習入門 二 準備工作

今天總結的是端對端的機器學習專案,由於內容較多,我就分開總結了。首先先介紹下這次的專案案例 假設你是乙個房地產公司最新僱傭的資料科學家,以下是你將會經歷的主要步驟 1.觀察大局 2.獲得資料 3.從資料探索和視覺化中獲得洞見 4.機器學習演算法的資料準備 5.選擇並訓練模型 6.微調模型 7.展示解...