sql server alwayson 可用性組 只讀路由的設置


 昨天晚上學習了【SQL Server 2012實施與管理實戰指南】的第三章,於是今天想在前段時間建的那個alwayson

可用性組測試環境上也配置一下只讀路由,嘗試實現讀寫分離。

按照書中的方法,執行如下腳本(本來我是3節點的可用性組,由於筆記本開4台虛擬機實在是太卡,我把server03給關掉了,只讀路由也沒配置這個節點。):

--指定在此可用性副本當前擁有輔助角色(即它是輔助副本)時要生效的角色有設置:
ALTER AVAILABILITY GROUP [AG01]
MODIFY REPLICA ON
N'SERVER02\ISS' WITH
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
ALTER AVAILABILITY GROUP [AG01]
MODIFY REPLICA ON
N'SERVER02\ISS' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://SERVER02.testad.com:1433'))

ALTER AVAILABILITY GROUP [AG01]
MODIFY REPLICA ON
N'SERVER04\ISS' WITH
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
ALTER AVAILABILITY GROUP [AG01]
MODIFY REPLICA ON
N'SERVER04\ISS' WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://SERVER04.testad.com:1433'))

--指定在此可用性副本當前擁有主角色(即它是主副本)時要生效的角色有設置:
ALTER AVAILABILITY GROUP [AG01]
MODIFY REPLICA ON
N'SERVER04\ISS' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST = (N'SERVER02\ISS',N'SERVER04\ISS')));

ALTER AVAILABILITY GROUP [AG01]
MODIFY REPLICA ON
N'SERVER02\ISS' WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST = (N'SERVER04\ISS',N'SERVER02\ISS')));

按道理說,腳本執行完后,在連接字符串中加入參數:ApplicationIntent = ReadOnly
就能自動重定向到輔助副本。

可是,在我的環境中只要加上ApplicationIntent = ReadOnly參數,就無法連接服務器。

最后在大菠蘿的幫助下,終於找出來是端口的問題。

我的SQL Server服務並沒有監聽在1433端口,而是動態端口!

修改成固定端口1433后並重啟服務。

再次使用ApplicationIntent = ReadOnly參數連接。

雖然主副本是SERVER02,但是連接已經被重定向到了SERVER04

如果不使用ApplicationIntent = ReadOnly參數連接。

連接仍將指向主副本SERVER02。

這里,附上大菠蘿提供的幾個腳本:

查看副本間的只讀路由關系:

select 
 b.replica_server_name 
,a.routing_priority 
,c.replica_server_name 
from
sys.availability_read_only_routing_lists a
left join
sys.dm_hadr_availability_replica_cluster_states b
on a.replica_id = b.replica_id 
left join sys.dm_hadr_availability_replica_cluster_states  c
on a.read_only_replica_id = c.replica_id 
order by a.replica_id 

當前的只讀路由配置:

select a.*,c.is_local,c.role_desc,d.endpoint_url,d.read_only_routing_url 
from sys.dm_hadr_availability_replica_cluster_nodes a
join sys.dm_hadr_availability_replica_cluster_states b
on a.replica_server_name = b.replica_server_name 
join sys.dm_hadr_availability_replica_states c
on b.replica_id = c.replica_id 
join sys.availability_replicas d
on c.replica_id = d.replica_id 

----------------------------------------

最后,對於要使用只讀路由的客戶端應用程序,其連接字符串必須滿足以下要求:  

  • 使用 TCP 協議。      

  • 將應用程序意向特性/屬性設置為只讀。      

  • 引用配置為支持只讀路由的可用性組的偵聽器。      

  • 引用該可用性組中的數據庫。

參考鏈接:

http://msdn.microsoft.com/zh-cn/subscriptions/downloads/ff878308.aspx#ror

http://msdn.microsoft.com/zh-cn/subscriptions/downloads/hh213002.aspx

http://hi.baidu.com/hanxiao2100/item/e0a46226519aab8b6f2cc368

最后,特別感謝大菠蘿,耽誤你好久的時間哈~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM