Índice do fórum Treinamentos Avançados Treinamento Oracle RAC Services x load balance

Services x load balance

Dúvidas, dicas e atualizações sobre o Treinamento Oracle RAC.

Mensagem Ter Dez 17, 2013 11:29 pm

Mensagens: 1
Olá!

Tenho um ambiente que foi implementado services no seguinte formato:

 Por services:

INSTANCIA INST_ID SERVICE_NAME NUMERO
---------- ---------- ----------------------- -------------
Instancia 1 SYS$USERS 10
Instancia 1 servicex4 39
Instancia 1 servicex3 8
Instancia 1 servicex1 40
Instancia 2 SYS$USERS 5
Instancia 2 servicex2 217


Load balance:
INSTANCIA INST_ID NUMERO
--------- ---------- ----------
Instancia 1 96
Instancia 2 214

Diante de um cenário com essa implementação de services, o DBA justifica que foi feito dessa forma, pois uma aplicação é a principal da empresa e precisa ter mais recursos disponíveis para as suas transações.
Os dois nós do RAC tem a mesma configuração de memória, swap, tudo igual.

Dúvida: Este procedimento está corredo, direcionar uma aplicação somente para um nó para que tenha todo o nó disponível?

Mensagem Qui Dez 26, 2013 10:28 am
portilho Site Admin

Mensagens: 439
Concordo completamente com esta configuração.

Se o DBA configurou o service com nós preferenciais (opção -r do srvctl) e disponíveis (opção -a), como no Lab 16.1, ele está com Failover automático, e ainda está evitando a concorrência entre os nós por blocos, o que pode sobrecarregar o Interconnect.
Acho esta fuga da sobrecarga do Internconnect mais importante ainda do que ter toda a máquina disponível para a aplicação.

Mensagem Sáb Dez 28, 2013 5:08 pm

Mensagens: 1
Certo, duas dúvidas:

1. Como saberei se o DBA configurou o service com nós preferenciais (opção -r do srvctl) e disponíveis (opção -a)?
Ex:
srvctl add service -d ORCL -s OLTP_SERVICE -r ORCL1 -a ORCL2 -w 1 -z 10 -P PRECONNECT
-e SESSION -m BASIC -j SHORT -B SERVICE_TIME

Teria alguma view ou alguma dba* que mostra essa informação da configuração do service?

No Lab 16.1, explica como ver detalhes de um Service já configurado, alterando o tnsnames.ora para utilizar os novos Services e tentando o Failover, mas a conexão é via jdbc, não tem nenhuma informação no tnsnames.ora nem do oracle nem do grid.
E testar o failover, só em um momento de janela de manutenção, pois durante o dia não teria como indisponibilizar um nó para testar. Ou teria outra forma de testar?

Se tentar conectar com um CONNECT user/senha@host:1521/service ou CONNECT user/senha@alias (com uma configuração no tnsnames no outro nó, usando o service) seria uma forma de testar o failover?



2. "Acho esta fuga da sobrecarga do Internconnect mais importante ainda do que ter toda a máquina disponível para a aplicação."
O que seria "esta fuga da sobrecarga do Internconnect"?seria o centralizar a aplicação em um nó sem utilizar a interconect para comunicação entre os nós principalmente a respeito de cache e de Locks?


Sei que as perguntar são simples, mas aposto que muita gente não sabe disso e simplesmente ignora essas questões!Eu quero saber sempre, a fundo como as coisas funcionam :D

Desde já, muito obrigada!

Mensagem Seg Dez 30, 2013 10:33 am
portilho Site Admin

Mensagens: 439
Para ver as configurações de um Service:
srvctl config service -d NOMEDOBANCO -s NOMEDOSERVICE

Seria mais real testar via uma conexão JDBC, como a aplicação. Mas como o teste mais real seria desligando um dos nós, ele só poderá ser feito em sua janela de manutenção mesmo.

Sobre o Interconnect, é exatamente isso, a intenção de isolar os Services em nós específicos é para evitar ao máximo o trânsito na rede privada a respeito de Locks e Cache.

Mensagem Sáb Set 19, 2015 2:43 pm

Mensagens: 0
Lembro que no treinamento você havia dito que o tnsnames.ora do slide está incorreto para >11gr2

Client tnsnames.ora
ORCL =
(DESCRIPTION=
(LOAD_BALANCE=ON) →→→ Escolha Aleatória
(FAILOVER=ON) →→→ Tenta acessar o 1o, depois o 2o
(ADDRESS=(PROTOCOL=TCP)(HOST=nerv01-vip)(PORT=1521)) →→→ VIP
(ADDRESS=(PROTOCOL=TCP)(HOST=nerv02-vip)(PORT=1521)) →→→ VIP
(CONNECT_DATA=
(SERVICE_NAME=ORCL)
(FAILOVER_MODE=
(TYPE=SELECT) →→→ SESSION ou SELECT
(METHOD=BASIC) →→→ BASIC ou PRECONNECT
(RETRIES=10) →→→ 10 tentativas de conexão
(DELAY=1) →→→ 1 segundo para cada tentativa
)
)

Isso na camada client.
Uma outra dúvida que ficou é: o SERVICE_NAME que ele aponta aqui é na verdade o SID da conexão porque o tnsnames.ora do server está apontando o ORCL como um service=ORCL_OLTP, por exemplo, onde o serviço apontaria para a ORCL. Seria isso?

Mensagem Seg Set 21, 2015 10:55 am
portilho Site Admin

Mensagens: 439
Sim, este tnsnames,ora está incorrero para >=11gR2.
O ORCL deste tnsnames.ora é um SERVICE, e não um SID, já que os SIDs são ORCL1 e ORCL2. Mesmo se não foi criado um SERVICE com srvctl, há o SERVICE padrão criado, com o mesmo nome do banco.

Mensagem Seg Set 21, 2015 11:04 am

Mensagens: 0
Então no caso o que eu preciso é alterar o service ORCL.
Crio o meu service próprio e depois substituo na string de conexão, mas os parâmetros estão corretos, certo? Só preciso fazer os ajustes para a conexão agir como eu desejo.
Isso no lado client, sendo que os parâmetros devem constar no tnsnames da máquina do cliente/aplicação. Já no lado server eu colocaria

ORCL_PRD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac01-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <Meu serviço>)
))

ORCL_BI =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac01-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <Meu outro serviço>)
))


Por exemplo, a string de conexão da aplicação será user/passwd@ORCL_BI para o serviço de BI e user/passwd@ORC_PRD para produção, fazendo com quem ambos os serviços de conexão estejam setados nos tnsnames client, correto? Assim o serviço em si irá direcionar as conexões para a instancia correta.

Mensagem Ter Set 22, 2015 9:58 am
portilho Site Admin

Mensagens: 439
"Crio o meu service próprio e depois substituo na string de conexão, mas os parâmetros estão corretos, certo?"
Que parâmetros?

"...Já no lado server eu colocaria..."
Não precisa das estradas dos Services no tnsnames.ora nos servidores. Só no cliente.

"Por exemplo, a string de conexão da aplicação será user/passwd@ORCL_BI para o serviço de BI e user/passwd@ORC_PRD para produção..."
Correto.

Mensagem Ter Set 22, 2015 10:14 am

Mensagens: 0
Me refiro aos parametros na string de conexão do lado client

(ADDRESS=(PROTOCOL=TCP)(HOST=rac01-vip)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=rac02-vip)(PORT=1521))

É sempre apontando o vip e não o scan?

Ah tá, entendi os services são configurados pelos srvctl e o próprio vip aponta para o service e não o tnsnames no lado server. No lado server ele só precisa das informações do scan e o nome do service, certo?

Client tnsnames.ora:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
))

Mensagem Ter Set 22, 2015 10:22 am
portilho Site Admin

Mensagens: 439
Só precisa (e só pode) ter o SCAN no tnsnames.ora do Cliente. :-)

Próximo

Voltar para Treinamento Oracle RAC

cron