O Couchbase Server 4.0 introduziu os índices secundários globais (GSI) para suportar o mecanismo de consulta N1QL. Agora, com o Couchbase Server 5.0 (a partir da compilação do desenvolvedor de abril), adicionamos a capacidade de replicar e reequilibrar automaticamente esses índices.
No início, as GSIs eram gerenciadas de forma bastante manual:
- Para garantir a alta disponibilidade, o usuário final configurou manualmente vários índices com a mesma definição e especificou em quais nós do cluster eles deveriam ser implantados. Se um nó falhar, o usuário final terá que recriar manualmente o índice que foi perdido.
- Ao adicionar e remover nós para dimensionamento, upgrade ou após uma falha, o usuário final tinha que mover e recriar manualmente os índices nos nós que estavam entrando e saindo.
É com muito orgulho que informo que essas duas tarefas operacionais importantes agora estão automaticamente integradas ao Couchbase Server e vou orientá-lo sobre elas aqui.
Replicação GSI
Uma das solicitações mais frequentes que ouvimos dos clientes após a introdução dos GSIs na versão 4.0 foi o gerenciamento automático da replicação: "Eu só quero que você diga quantas réplicas e que você descubra o que fazer"
Agora você pode:
|
1 |
CREATE INDEX `idx_airportname` ON `travel-sample`(`airportname`) WITH {"num_replica":1}; |
Com um simples comando, o Couchbase irá:
- Criar dois índices idênticos
- Implantar e criar esses índices em nós separados
- Honrar a configuração de reconhecimento de zona de rack
Se não houver nós suficientes disponíveis, você verá rapidamente um erro:
|
1 2 3 4 5 6 7 |
[ { "code": 5000, "msg": "GSI CreateIndex() - cause: Fails to create index. There are not enough indexer nodes to create index with replica count of 2", "query_from_user": "CREATE INDEX `idx_airportname` ON `travel-sample`(`airportname`) WITH {\"num_replica\":2};" } ] |
Muito legal, não é?
Ao usar "num_replica", você está contando com o Couchbase para determinar o layout adequado do índice dentro do cluster. Para obter um controle ainda mais refinado, especifique os nós exatos nos quais deseja que um único índice seja replicado:
|
1 |
CREATE INDEX `idx_airportname` ON `travel-sample`(`airportname`) WITH {"nodes":["ec2-35-167-251-49.us-west-2.compute.amazonaws.com:8091", "ec2-54-69-121-55.us-west-2.compute.amazonaws.com:8091"]}; |
Pronto!
Esses índices agora serão automaticamente balanceados pelo mecanismo de consulta e qualquer falha (desde que pelo menos um índice correspondente permaneça) não causará nenhuma interrupção nas consultas.
Rebalanceamento do GSI
Não basta apenas ter uma réplica automática criaçãoAlém disso, precisávamos acrescentar o gerenciamento automático na forma de rebalanceamento.
Novamente, a partir da compilação de desenvolvedor de abril do Couchbase Server 5.0, o serviço de índice agora é "sensível ao rebalanceamento":
- Quando um nó de índice for removido do cluster, seus índices serão redistribuídos automaticamente para os nós restantes. No entanto, adicionar um novo nó de índice ao cluster não fará com que os índices sejam redistribuídos. Isso foi projetado para evitar a movimentação excessiva de índices e também para preservar o posicionamento que um administrador pode ter especificado. Essa redistribuição é algo que pode ser adicionado em uma versão posterior, se necessário.
- Se um nó de índice falhar e for substituído, as réplicas apropriadas serão recriadas. Da mesma forma, essas réplicas de índice serão recriadas nos nós restantes de um cluster se um rebalanceamento for realizado sem substituir o nó com falha.
Eu o encorajo a experimentar tudo isso e descobrir que "simplesmente funciona"! Clique aqui para fazer o download do Couchbase Server.
Q1:
WITH {"num_replica":1};Isso significa que esse índice terá uma réplica?P2: e o cluster CB deve ter pelo menos 2 nós de serviço de índice?
P3: E se o cluster CB tiver mais de dois nós de serviço de índice? Como o Index Service escolhe o nó (se um nó tiver mais de um serviço (serviço de índice/serviço de dados/serviço de consulta))?
P4: Esse índice 2 funcionará no modo mestre-escravo ou mestre-mestre?
P5: se o índice funcionar no modo Mestre-Mestre, qual algoritmo o serviço de consulta escolhe o índice? algoritmo aleatório ou algoritmo mais complicado?
Q6: se eu quiser adicionar mais réplicas de índice para aumentar a escala, devo recriar o índice com outro
num_replicavalor?Olá @atom992, ótimas perguntas! Vou respondê-las aqui e ver o que faz sentido adicionar de volta ao blog principal:
1 –
"num_replica"indica quantas cópias _adicionais_ do índice você deseja criar (semelhante ao funcionamento do serviço de dados). AssimWITH {"num_replica":1};criará duas cópias do índice que você está solicitando.2 - Sim, o cluster precisa ter pelo menos esse número de nós de serviços de índice. Se você não tiver nós suficientes, o comando retornará um erro imediatamente.
3 - Com mais nós, o Couchbase escolherá automaticamente em quais nós colocar o índice e sua(s) réplica(s). No momento, ele leva em conta apenas o fato de que uma réplica não pode estar no mesmo nó que o outro índice, e também leva em conta a configuração Rack-Zone Awareness dos nós para garantir que um índice e sua(s) réplica(s) também estejam espalhados por grupos diferentes. Se você quiser ser mais específico sobre onde os índices são colocados, o administrador poderá usar
WITH {"nodes": [node1,node2]}4 - Todos os índices e suas réplicas são mestre-mestre.
5 - O algoritmo para balanceamento de carga entre réplicas está sendo aprimorado constantemente. Na primeira versão, ele era apenas round-robin; ultimamente, adicionamos algumas heurísticas de latência para que, se um índice for mais lento que outro, ele seja menos usado. No futuro, isso continuará a melhorar, por isso hesito em descrever _exatamente_ o que é hoje. O ideal é que isso seja transparente para você.
6 - Sim, hoje você precisará recriar o índice com um valor mais alto
num_replicae, em seguida, solte o anterior (aDROPexclui um índice e todas as suas réplicas, portanto, não há necessidade de gerenciar isso manualmente). Estamos trabalhando em umALTER_INDEXmas esse comando pode não estar pronto com a versão 5.0, por isso não escrevi sobre ele aqui.Espero que isso tenha ajudado a responder suas perguntas. Se houver mais alguma coisa sobre a qual gostaria de obter mais informações, entre em contato comigo.
Existe uma data de lançamento para o couchbase 5.0?
Olá, Greg! Estamos trabalhando no Beta no momento e, normalmente, conseguimos chegar ao GA alguns meses depois disso, portanto, com certeza devemos estar lá até o final do ano e, provavelmente, um pouco antes disso.
Poderemos ajustar o número de réplicas após a criação do índice? Um caso de uso seria estender um MOI grande com um campo adicional. Como a RAM do índice pode ser muito pequena para o novo índice estendido e o índice antigo ao mesmo tempo, usamos esse fluxo de trabalho nessas situações:
- excluiu a réplica de índice "manual" no primeiro nó de índice. O outro nó de índice com a segunda cópia ainda é capaz de responder às solicitações de índice.
- Criou o novo índice no primeiro nó de índice. Após a conclusão, esse nó é capaz de responder às solicitações desse índice.
- excluir e reconstruir o índice no segundo nó.
Sem poder ajustar o número de réplicas, teríamos que aceitar um tempo de inatividade nessas situações ou fornecer muita RAM sobressalente de que não precisamos de fato.
Olá, Klaus, a primeira iteração desse aprimoramento não permite a modificação de um índice após a criação. No entanto, estamos trabalhando em uma instrução ALTER INDEX para uma próxima versão que permitirá que você faça isso.
Você ainda pode aproveitar o controle manual muito mais rígido dos índices, mesmo que temporariamente, ao realizar esse tipo de manutenção/expansão.
Digamos que você tenha um índice com uma réplica e queira migrá-lo/alterá-lo. Você "poderia" criar um novo índice temporário sem uma réplica, excluir o antigo e, em seguida, criar outro novo índice com a réplica e eliminar o temporário. Admito que isso não é particularmente elegante, mas mantém seu aplicativo em funcionamento e não exige o dobro da quantidade de RAM.
[...] Com o Couchbase 5.0 Beta, você pode não apenas criar índices para acelerar e escalonar as consultas a um novo nível, mas também aproveitar a melhor disponibilidade e gerenciabilidade do índice. Basta especificar o número de réplicas de índice a serem criadas, e o sistema gerenciará dinamicamente os posicionamentos das réplicas de índice em diferentes nós, grupos de servidores e zonas de disponibilidade. O Couchbase Server 5.0 também oferece suporte ao rebalanceamento de índices sem qualquer tempo de inatividade do sistema. Para obter mais informações, consulte aqui. [...]