Usuário com melhor resposta
AlwaysOn: Acessar servidor secundário para somente leitura

Pergunta
-
Boa Tarde colegas, implementei a solução alwayson em dois servidores sql 2012. Testei sincronização e o failover e deu tudo certo. Estou tendo problemas agora na questão da aplicação acessar o servidor somente leitura. Eis o que já fiz e mesmo assim a aplicação continua conectando no servidor primário:
1)Configurei a opção Read-intent only na opção do grupo.
2)Coloquei em minha aplicação a propriedade Application Intent=READONLY
3)Executei os comandos abaixo para configurações na base master:
ALTER AVAILABILITY GROUP GRUPO_ALW
MODIFY REPLICA ON N'SQL2012-01'
WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N'TCP://SQL2012-01:1433'))
ALTER AVAILABILITY GROUP GRUPO_ALW
MODIFY REPLICA ON N'SQL2012-02'
WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL=N'TCP://SQL2012-02:1433'))
ALTER AVAILABILITY GROUP GRUPO_ALW
MODIFY REPLICA ON N'SQL2012-01'
WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=(N'SQL2012-02')))
ALTER AVAILABILITY GROUP GRUPO_ALW
MODIFY REPLICA ON N'SQL2012-02'
WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST=(N'SQL2012-01')))
Grata!!!!
Respostas
-
Bom dia LaraW.
Você colocou na sua string de conexão MultiSubnetFailover=True ? Por exemplo: "Database=AdventureWorks2012;ApplicationIntent=ReadOnly;MultiSubnetFailover=True"
Existem outras opções que podem ser observadas em https://msdn.microsoft.com/pt-br/library/hh710054%28v=sql.110%29.aspx
Para, após configurado a réplica somente leitura, você ter um direcionamento automático (a partir da string de intenção), você precisa informar ao primário para negar consultas. Para isto, além de informar a opção Read-intent only, você precisa configurar a "Connections in primary role" para "Allow resd/write connections". Como disse, com isso, toda vez que uma conexão de intenção de leitura 'bater' no seu AG name, o primário irá negar a conexão e o listener fará o roteamento para o secundário.
Luiz Fernando Lima - MCTS SQL Server - Microsoft Partner
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator terça-feira, 2 de fevereiro de 2016 14:22
Todas as Respostas
-
LaraW,
Sinceramente não entendi o que esta acontecendo?
A sua aplicação esta configurado em qual servidor? Na verdade ela tem que acessar uma instância SQL Server e através desta instância que possui o AlwaysOn será feito o gerenciamento da réplica dos bancos.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Bom dia LaraW.
Você colocou na sua string de conexão MultiSubnetFailover=True ? Por exemplo: "Database=AdventureWorks2012;ApplicationIntent=ReadOnly;MultiSubnetFailover=True"
Existem outras opções que podem ser observadas em https://msdn.microsoft.com/pt-br/library/hh710054%28v=sql.110%29.aspx
Para, após configurado a réplica somente leitura, você ter um direcionamento automático (a partir da string de intenção), você precisa informar ao primário para negar consultas. Para isto, além de informar a opção Read-intent only, você precisa configurar a "Connections in primary role" para "Allow resd/write connections". Como disse, com isso, toda vez que uma conexão de intenção de leitura 'bater' no seu AG name, o primário irá negar a conexão e o listener fará o roteamento para o secundário.
Luiz Fernando Lima - MCTS SQL Server - Microsoft Partner
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator terça-feira, 2 de fevereiro de 2016 14:22