国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

AlwaysOn Group Listener

2024-07-21 02:49:49
字體:
來源:轉載
供稿:網友
AlwaysOn Group Listener

1.Listener是什么

Listener實際上是一個 VirtualNetworkName,客戶端通過這個VNN來連接的具體的sqlserver實例 .Listener包含了DNS名稱,port和ipaddress。

當客戶端通過Listener進行連接時,Listener會將請求自動導向到PRimaryReplica或者SecondaryReplica了。

在SQL Server Management Studio對應的記錄

對應的VCO記錄

對應的DNS記錄

下面是一個ADO.NET的連接字符串Server=AgListener;Initial Catalog=agdb1;Integrated Security=SSPI;

在這個連接字符串中指定了要連接的Listener名稱,這樣客戶端就會自動連接到primaryreplica了。如果發(fā)生了failover,在新的primaryreplica上線后,listener會自動將連接導向到新的primaryreplica,無需人為的干預。

2.負載平衡

SecondaryReplica可以配置成readonly模式,這樣就可以將一些只讀的工作放置到secondaryreplica中進行(例如報表),這樣就可以實現(xiàn)一定程度的負載平衡。并且Listener可以將這些只讀的連接自動導向到SecondaryReplica。

要實現(xiàn)這一功能,需要在SQLServer端和客戶端同時進行一些配置。

SQL Server端

1)Secondary replica要配置成read-intent only或者Yes

2)設置READ_ONLY_ROUTING_URL

下面是一個的READ_ONLY_ROUTING_URL的例子。 語句里指定了每個replica使用的端口,這里的端口號需要根據(jù)實際instance使用的端口號進行相應調整

alter availability group ag modify replica on 'SQL108W2K8R21' with (secondary_role(read_only_routing_url='tcp://SQL108W2K8R21.259442DOM.COM:1433'))

alter availability group ag modify replica on 'SQL108W2K8R22' with (secondary_role(read_only_routing_url='tcp://SQL108W2K8R22.259442DOM.COM:1433'))

alter availability group ag modify replica on 'SQL108W2K8R23' with (secondary_role(read_only_routing_url='tcp://SQL108W2K8R23.259442DOM.COM:1433'))

3) READ_ONLY_ROUTING_LIST

為三個replica分別設置readonly routing的順序。以SQL108W2K8R21為例,當SQL108W2K8R21成為Primary replica時,readonly routing的順序依次為SQL108W2K8R22->SQL108W2K8R23-> SQL108W2K8R21. Listener會將客戶端的請求導向到SQL108W2K8R22,如果SQL108W2K8R22不可用,導向到SQL108W2K8R23,以此類推。

alter availability group ag MODIFY REPLICA ON N'SQL108W2K8R21' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=(N'SQL108W2K8R22', N'SQL108W2K8R23', N'SQL108W2K8R21')))

alter availability group ag MODIFY REPLICA ON N'SQL108W2K8R22' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=(N'SQL108W2K8R21', N'SQL108W2K8R23', N'SQL108W2K8R22')))

alter availability group ag MODIFY REPLICA ON N'SQL108W2K8R23' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=(N'SQL108W2K8R21', N'SQL108W2K8R22', N'SQL108W2K8R23')))

客戶端的設置

需要在連接字符串內指定applicationIntent=Readonly 并且將database指定為AG內的數(shù)據(jù)庫

例如:

Server=AgListener;database=agdb1;Integrated Security=SSPI;ApplicationIntent=Readonly

3.Multiple Listener

默認情況下,一個Ag只支持一個listener,當嘗試創(chuàng)建第二個listener時會返回19477錯誤:

The availability group '%.*ls' already has a listener with DNS name '%.*ls'. Availability groups can have only one listener. Use the existing listener, or drop the existing listener and create a new one.

但實際上我們可以通過下面的方式為AG創(chuàng)建多個Listener

1)打開Failover Cluster Manager,右鍵ag->Add a resource->Client access Point

2)填寫Listener名稱

3)右鍵為其分配IPAddress

4) 右鍵ag resource property,設置dependency. 將agListener2添加到Dependencies

5)為Listener分配port,此時port為null

select *from sys.availability_group_listeners

執(zhí)行下面的語句創(chuàng)建port

alter availability group [ag]

modify listener 'agListener2'

(port = 1433)

7)新的Listener就可以使用了,我們在SSMS里也可以找到相應的記錄

4.MultiSubnetFailover

SQLServer2012開始支持Multi Site SQL Cluster。 一般而言,多個數(shù)據(jù)中心分布在不同的地理位置,例如在上海和北京分別建立了數(shù)據(jù)中心,這樣當一個數(shù)據(jù)中心出現(xiàn)故障后(例如地震等災害),備用的數(shù)據(jù)中心可以繼續(xù)提供服務

下面是一個多子網的Listener截圖

在多子網環(huán)境中,一個Listener下會注冊多個IP Address(之間為OR關系),但只有primary replica所在子網的IP是處于Online狀態(tài)的,其余的均為Offline。如果發(fā)生failover,這些IPAddress的狀態(tài)會依據(jù)對應的replica的角色發(fā)生變化。

那么多子網環(huán)境會對Listener有什么影響呢?

首先要介紹一下RegisterAllProvidersIP屬性。如果值為1,那么Listener對應的DNS就會出現(xiàn)同名的多條記錄,每個記錄地應一個IP Address。

如果RegisterAllProvidersIP的值為0,那么只會存在一條DNS記錄,也就是Primary replica所在子網的IP。

如果存在多條重名的DNS(RegisterAllProvidersIP=1)記錄,客戶端會依次請求這些IP Address,如果得到的IP是offline的,那么會繼續(xù)請求一下條記錄.這樣就增加了連接時間,您的應用也可能會出現(xiàn)連接問題。

為了解決這個問題,ADO.NET(.NET 3.5.1)引入了MultiSubnetFailover關鍵字,如果MultiSubnetFailover

為True,那么客戶端會同時嘗試連接所有子網的IPAddress,使用最先響應的那個IP地址來作為最終使用的地址,這樣就極大地縮短了連接時間.

如果RegisterAllProvidersIP=0,那只有PrimaryReplica子網下的IP會注冊到DNS,當failover發(fā)生時,新的primaryreplica子網下的listener的IP會代替之前的IP。這樣就避免的之前的情況。

但在實際環(huán)境中,我們還需要考慮DNS的TTL值(Time-To-Live),TTL默認值是1200秒。也就是說當failover發(fā)生后,失效的DNS記錄要在客戶端可能要保持20分鐘才會失效,在此期間,客戶端無法通過listener進行連接。

當然我們可以手工執(zhí)行ipconfig /flushdns才更新記錄,但這樣畢竟需要人工介入。

或者縮短TTL,但TTL值越小,DNSServer的性能消耗就嚴重。需要權衡兩者。微軟的建議值是300秒(5分鐘).

1 OR 0

那么是什么時候應當將RegisterAllProvidersIP這是為1,而什么時候為0呢? 如果您的客戶端支持MultiSubnetFailover關鍵字,那么建議設置成1,并且在連接字符串將MultiSubnetFailover設置為true.

如果客戶端不支持MultiSubnetFailover關鍵字,那么就設置成0,并修改TTL為300秒

更多信息

===

如果Listener使用過T-SQL語句或者SSMS創(chuàng)建的,RegisterAllProvidersIP為1

如果是通過ClusterFailovermanager創(chuàng)建的, RegisterAllProvidersIP為0

可以通過powershell修改RegisterAllProvidersIP的值

Get-ClusterResource "SQL Network Name (SQLMULTISUBCLUS)" | Set-ClusterParameter RegisterAllProvidersIP 1/0


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 巴林右旗| 青海省| 宿迁市| 进贤县| 比如县| 大庆市| 侯马市| 黄龙县| 武鸣县| 邯郸县| 蓝山县| 康马县| 吕梁市| 阿图什市| 东乌| 汪清县| 宁安市| 张家口市| 阿勒泰市| 永丰县| 新和县| 古丈县| 祥云县| 黎川县| 容城县| 东明县| 兴文县| 冀州市| 吉水县| 怀宁县| 隆安县| 永定县| 嘉善县| 峡江县| 汉沽区| 镇雄县| 吉水县| 宁都县| 咸丰县| 富民县| 馆陶县|