Como configurar um balanceamento de carga utilizando C-Tree Bound server com arquivos em memória

Produto:

Microsiga Protheus

Versões:

11 e 12

Passo a passo:

O c-tree BoundServer (c-tree Server DLL) é, basicamente, um servidor c-tree que sobe junto (incorporado) com o Protheus Server. É recomendado seu uso em ambientes onde é utilizado apenas um Protheus Server como servidor de aplicação, onde os dicionários não têm seu acesso compartilhado com outros servidores Protheus. É possível configurá-lo para carregar arquivos de dicionário (SXs) em memória, tornando seu acesso ainda mais rápido.

Seguem abaixo links de referência de documentações do C-tree BoundServer, com informações técnicas:

c-tree BoundServer
http://tdn.totvs.com/display/tec/c-tree+BoundServer

c-Tree Server com SXS em memória
http://tdn.totvs.com/pages/viewpage.action?pageId=208338982

Seção cTreeServerMaster
http://tdn.totvs.com/pages/viewpage.action?pageId=208338976

Quando usado um c-Tree Server para gerenciamento dos arquivos locais do ambiente (meta-dados ou dicionários do ERP), em ambientes com 150 conexões simultâneas ou mais, é recomendável a utilização de um recurso de cache dos dicionários em memória, para permitir uma maior escalabilidade horizontal do ambiente. Esta configuração envolve o uso da configuração cTreeMode=boundserver, um c-Tree Server registrado com uma chave de licenciamento "c-Tree Enterprise Server" da Faircom, e a configuração dos arquivos a serem cacheados na memória especificados através de chaves específicas na seção [ctreeservermaster]. Maiores detalhes no link Seção [ctreeServerMaster].



Segue abaixo procedimento de como configurar o arquivo appserver.ini e ctsrvr.cfg (da pasta Appserver) para utilizar o C-Tree Bound Server com arquivos em memória:

Aviso:

Apenas as tabelas informadas na configuração do .ini serão notificadas por aquele servidor Protheus. Nesta configuração, deve-se sempre especificar a extensão da tabela. Apenas devem ser especificadas tabelas ISAM do Ctree. O sistema de notificação não está preparado para trabalhar com arquivos do tipo Superfile (extensão .SPF).

Importante:

1. É recomendado que o binário esteja atualizado.

2. Não misturar arquivos de configuração "ctsrvr.cfg" do CtreeServer com o do BoundServer. Nas versões mais recentes do binário, esse arquivo vem junto da pasta Appserver

Nota:

O Bound Server também utiliza licenças de Ctree, assim como o Ctree Server. Para maiores informações sobre como aplicar a chave, consulte o link abaixo:

Aplicação de Licença (ctreecsv.dll)


- Faça uma cópia da pasta raiz do seu balanceamento de carga, contendo as pastas "Appserver" do Master e dos Slaves
- Segue abaixo um exemplo de configuração dos arquivos:


APPSERVER.INI (MASTER)

[General]
InstallPath=C:\TOTVS 12
CtreeMode=boundServer
Consolelog=1

[Drivers]
Active=TCP

[TCP]
TYPE=TCPIP
Port=1270

[LICENSECLIENT]
Server=localhost
Port=5555

[P12]
SourcePath=C:\TOTVS 12\Microsiga\protheus\apo\
RootPath=C:\TOTVS 12\Microsiga\protheus_data
CtreeRootPath=C:\TOTVS 12\Microsiga\protheus_data
StartPath=\system\
x2_path=
RpoDb=top
RpoLanguage=Portuguese
RpoVersion=120
LocalFiles=CTREE
Trace=0
localdbextension=.dtc

[DBAccess]
Alias=P12_1_14
Server=localhost
Database=MSSQL
Port=7890

[CtreeServerMaster]
ctUserId=ADMIN
ctUserPass=ADMIN
ctServerName=FAIRCOMS@localhost
memctUserId=ADMIN
memctUserPass=ADMIN
memctServerName=boundServer@localhost
Environments=P12
Files=sx3*.dtc,sx5*.dtc,sx6*.dtc,sx7*.dtc
ShowStatus=1

[ServerNetwork]
MasterConnection=0
Servers=Slave1,Slave2
 
[Slave1]
TYPE=TCPIP
Server=localhost
Port=1271
Connections=1

[Slave2]
TYPE=TCPIP
Server=localhost
Port=1272
Connections=1



CTSRVR.CFG (MASTER)

SERVER_NAME			BOUNDSERVER
COMM_PROTOCOL		F_TCPIP
COMM_PROTOCOL		FSHAREMM
LOG_SPACE			96
CTSTATUS_SIZE		-1000000
SKIP_MISSING_FILES	YES
IDX_MEMORY			128 MB
DAT_MEMORY			128 MB
CONSOLE				NO_MESSAGEBOX
CONSOLE				NO_SHUTDOWN_PROMPT 



APPSERVER.INI (SLAVES)

[General]
InstallPath=C:\TOTVS 12
CtreeMode=boundClient
Consolelog=1

[Drivers]
Active=TCP

[TCP]
TYPE=TCPIP
Port=1271

[LICENSECLIENT]
Server=localhost
Port=5555

[P12]
SourcePath=C:\TOTVS 12\Microsiga\protheus\apo\
RootPath=C:\TOTVS 12\Microsiga\protheus_data
CtreeRootPath=C:\TOTVS 12\Microsiga\protheus_data
StartPath=\system\
x2_path=
RpoDb=top
RpoLanguage=Portuguese
RpoVersion=120
LocalFiles=CTREE
Trace=0
localdbextension=.dtc

[DBAccess]
Alias=P12_1_14
Server=localhost
Database=MSSQL
Port=7890

[CtreeServerMaster]
ctUserId=ADMIN
ctUserPass=ADMIN
ctServerName=FAIRCOMS@localhost
Environments=P12
Files=sx3*.dtc,sx5*.dtc,sx6*.dtc,sx7*.dtc
ShowStatus=1



CTSRVR.CFG (SLAVES)

COMM_PROTOCOL		F_TCPIP
COMM_PROTOCOL		FSHAREMM
COMM_PROTOCOL       DISABLED
LOG_SPACE			96
CTSTATUS_SIZE		-1000000
SKIP_MISSING_FILES	YES
IDX_MEMORY			128 MB
DAT_MEMORY			128 MB
CONSOLE				NO_MESSAGEBOX
CONSOLE				NO_SHUTDOWN_PROMPT 



Importante:

É necessária a inclusão do parâmetro "COMM_PROTOCOL DISABLED" no arquivo ctsrvr.cfg dos Slaves, se ele for um BoundClient.

Todos os Application Server configurados como BOUNDCLIENT devem ter os respectivos arquivos CTSRVR.CFG da pasta do Application Server com esta configuração. Apenas um serviço de Protheus na máquina, o que estiver como BOUNDSERVER, não deve ter essa configuração.

O motivo para esta configuração é que o primeiro programa AdvPL que usar, por exemplo, o driver temporário do c-Tree, faz o Application Server carregar o BoundServer naquele Slave, e se ele estiver com a camada de comunicação ativa, ele não sobe pois conflita com o BoundServer que já está no ar.

Pelos CTSTATUS.FCS é possível verificar a causa da queda:

Thu May 14 10:17:04 2020
- User# 00012 NewUser: Unable to create an instance of a named pipe
Thu May 14 10:17:04 2020
- User# 00012 Could not initialize the server.
Is another server already running?
Is a detached client still running?
Thu May 14 10:17:04 2020
- User# 00012 O12 M1 L42 F1 P1fdx (recur #1) (uerr_cod=509)

Observações:

Sobre as configurações dos arquivos:

- No arquivo appserver.ini do Master, na seção [General], a linha CtreeMode dever ser =boundServer, e no appserver.ini dos Slaves, deve ser =boundClient


Appserver.ini:

[CtreeServerMaster]

Informações para conectar ao CTREE SERVER MASTER:

ctUserId=ADMIN -> Linha não obrigatória. O valor "ADMIN" é Default.

ctUserPass=ADMIN -> Linha não obrigatória. O valor "ADMIN" é Default.

ctServerName=FAIRCOMS@localhost -> Nome do servidor do Ctree Server principal (não o embedded). A primeira parte antes do @ indica o nome do servidor, definido na linha SERVER_NAME do arquivo ctsrvr.cfg do CtreeServer, enquanto a segunda parte, após o @, indica o endereço IP do servidor onde está este CtreeServer


Informações para conectar ao CTREE BOUND SERVER:

memctUserId=ADMIN -> Linha não obrigatória. O valor "ADMIN" é Default.

memctUserPass=ADMIN -> Linha não obrigatória. O valor "ADMIN" é Default.

memctServerName=boundServer@localhost -> Nome do servidor do Ctree Bound Server (embedded). A primeira parte antes do @ indica o nome do servidor, definido na linha SERVER_NAME do arquivo ctsrvr.cfg que está na pasta Appserver, enquanto a segunda parte, após o @, indica o endereço IP do servidor onde está este Ctree Bound Server.


Environments=P12 -> Lista de ambientes que utilizarão o C-Tree Bound Server com arquivos em memória. Esta chave informa quais ambientes do servidor serão verificados, durante a preparação do ambiente do processo (Thread) de notificação, para realizar a busca por arquivos especificados na configuração FILES. Somente é possível indicar para notificação ambientes que utilizem CTREE para controle das tabelas ISAM (SXS).


Files=sx3990.dtc,sx5*.dtc,sx6??0.dtc,sx7*.dtc -> Arquivos a serem utilizados em memória. Podem ser especificados um ou mais arquivos, separados por vírgula, com paths absolutos em disco, relativos ao ROOTPATH do ambiente, ou apenas o nome do arquivo localizado a partir do STARTPATH do ambiente. Podem ser utilizados caracteres de máscara “*” e ”?”.


ShowStatus=1 -> Mostra as mensagens de informação da notificação do Ctree. Pode ser 0 ou 1. O Default é 0.