時(shí)間:2024-02-14 10:20作者:下載吧人氣:15
概述
Alwayson相對(duì)于數(shù)據(jù)庫鏡像最大的優(yōu)勢(shì)就是可讀副本,帶來可讀副本的同時(shí)還添加了一個(gè)新的功能就是配置只讀路由實(shí)現(xiàn)讀寫分離;當(dāng)然這里的讀寫分離稍微夸張了一點(diǎn),只能稱之為半讀寫分離吧!看接下來的文章就知道為什么稱之為半讀寫分離。
數(shù)據(jù)庫:SQLServer2014
db01:192.168.1.22
db02:192.168.1.23
db03:192.168.1.24
監(jiān)聽ip:192.168.1.25
配置可用性組
可用性副本概念輔助角色支持的連接訪問類型
1.無連接
不允許任何用戶連接。 輔助數(shù)據(jù)庫不可用于讀訪問。 這是輔助角色中的默認(rèn)行為。
2.僅讀意向連接
輔助數(shù)據(jù)庫僅接受ApplicationIntent=ReadOnly的連接,其它的連接方式無法連接。
3.允許任何只讀連接
輔助數(shù)據(jù)庫全部可用于讀訪問連接。 此選項(xiàng)允許較低版本的客戶端進(jìn)行連接。
主角色支持的連接訪問類型
1.允許所有連接
主數(shù)據(jù)庫同時(shí)允許讀寫連接和只讀連接。 這是主角色的默認(rèn)行為。
2.僅允許讀/寫連接
允許ApplicationIntent=ReadWrite或未設(shè)置連接條件的連接。 不允許ApplicationIntent=ReadOnly的連接。 僅允許讀寫連接可幫助防止客戶錯(cuò)誤地將讀意向工作負(fù)荷連接到主副本。
配置語句
—查詢可用性副本信息
SELECT * FROM master.sys.availability_replicas
—建立read指針 – 在當(dāng)前的primary上為每個(gè)副本建立副本對(duì)于的tcp連接
ALTER AVAILABILITY GROUP [Alwayson22]
MODIFY REPLICA ON
N’db01′ WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N’TCP://db01.ag.com:1433′))
ALTER AVAILABILITY GROUP [Alwayson22]
MODIFY REPLICA ON
N’db02′ WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N’TCP://db02.ag.com:1433′))
ALTER AVAILABILITY GROUP [Alwayson22]
MODIFY REPLICA ON
N’db03′ WITH
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N’TCP://db03.ag.com:1433′))
—-為每個(gè)可能的primary role配置對(duì)應(yīng)的只讀路由副本
–list列表有優(yōu)先級(jí)關(guān)系,排在前面的具有更高的優(yōu)先級(jí),當(dāng)db02正常時(shí)只讀路由只能到db02,如果db02故障了只讀路由才能路由到DB03
ALTER AVAILABILITY GROUP [Alwayson22]
MODIFY REPLICA ON
N’db01′ WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(‘db02′,’db03′)));
ALTER AVAILABILITY GROUP [Alwayson22]
MODIFY REPLICA ON
N’db02’ WITH
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(‘db01′,’db03’)));
–查詢優(yōu)先級(jí)關(guān)系
SELECT ar.replica_server_name ,
rl.routing_priority ,
( SELECT ar2.replica_server_name
FROM sys.availability_read_only_routing_lists rl2
JOIN sys.availability_replicas AS ar2 ON rl2.read_only_replica_id = ar2.replica_id
WHERE rl.replica_id = rl2.replica_id
AND rl.routing_priority = rl2.routing_priority
AND rl.read_only_replica_id = rl2.read_only_replica_id
) AS ‘read_only_replica_server_name’
FROM sys.availability_read_only_routing_lists rl
JOIN sys.availability_replicas AS ar ON rl.replica_id = ar.replica_id
網(wǎng)友評(píng)論