2017-09-12 13 views
1

私は2台のサーバーSQL Server 2016を持っており、AlwaysOn Availabiliyを実装したいと考えています。SQL Server AlwaysOn Availability

最初のサーバが第二のサーバがREAD_ONLY

あるREAD_WRITE

である私はfolowingとしてのAlwaysOn可用性を設定した:

CREATE AVAILABILITY GROUP ag 
WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY, 
DB_FAILOVER = OFF, 
DTC_SUPPORT = NONE, 
FAILURE_CONDITION_LEVEL = 3, 
HEALTH_CHECK_TIMEOUT = 30000) 
FOR DATABASE DATABASE_NAME 
REPLICA ON N'server1' WITH (ENDPOINT_URL = N'TCP://server1_adress:port', FAILOVER_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, SESSION_TIMEOUT = 10, BACKUP_PRIORITY = 50, SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://server1_adress:port')), 
N'server2' WITH (ENDPOINT_URL = N'TCP://server2_adress:5022', FAILOVER_MODE = AUTOMATIC, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, SESSION_TIMEOUT = 10, BACKUP_PRIORITY = 50, PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=('server1'))) 
LISTENER N'listener_server' (
WITH IP 
((N'ip', N'mask') 
) 
, PORT=port); 

を私の問題は、すべてのクエリは、最初のサーバーにルーティングされています。

2台のサーバー間の読み取りクエリのバランスを取るためにAlwaysOnを構成する方法はありますか。

ありがとうございました。

答えて

0

ます(「アプリケーションの意図」と呼ばれる)は、読み取り専用レプリカに接続するために、SQL Serverを伝えるために、特別な接続文字列を定義する必要がまず第一に:あなたがする必要がある第2ステップで

Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True 

された場合のすべてのノードへの読み取り専用アクセスを許可する二次:

ALTER AVAILABILITY GROUP [ag] 
MODIFY REPLICA ON N'server1' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = 
READ_ONLY)) 
GO 
ALTER AVAILABILITY GROUP [ag] 
MODIFY REPLICA ON N'server2' WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = 
READ_ONLY)) 
GO 

さらに追加の読み取り専用サーバ2へのURLをルーティングする:

ALTER AVAILABILITY GROUP [ag] 
MODIFY REPLICA ON N'server2' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = 
N'TCP://server2_adress:port')); 
GO 

次の手順では、特定のサーバーがプライマリサーバーである場合にサーバーを接続するルーティングリストを定義する必要があります。すでにREAD_ONLY_ROUTING_LISTを定義しています。しかし、1つのサーバーでのみ。 server1が壊れるとどうなりますか?可能なすべてのプライマリノードのルーティングリストを定義する必要があります。 SQL Serverの2016年のAlwaysOnの機能のバランスをとる新しい負荷に対して

ALTER AVAILABILITY GROUP [ag] 
MODIFY REPLICA ON 
N'server1' WITH 
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('server2','server1'))); 

ALTER AVAILABILITY GROUP [ag] 
MODIFY REPLICA ON 
N'server2' WITH 
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('server1','server2'))); 
GO 

、あなたは読み取り専用の接続を可能にし、「ネストされた」ルーティングリストを構成する少なくとも1つの第3の読み取り専用のノードが必要です。

ALTER AVAILABILITY GROUP ag 
MODIFY REPLICA ON N'server1' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST= 
(('server2', 'server3'), 'server1'))); 
関連する問題