AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 86792
Accepted
Nicolas Payart
Nicolas Payart
Asked: 2014-12-23 09:56:48 +0800 CST2014-12-23 09:56:48 +0800 CST 2014-12-23 09:56:48 +0800 CST

Configurando MariaDB Spider HA

  • 772

Tento configurar o High Availability usando o Spider Engine e o MariaDB 10.0.14, mas não tenho certeza de qual configuração usar para que funcione conforme o esperado.

O que eu quero é:

  • Acessando uma tabela remota usando o Spider Engine em um servidor remoto A (digamos "servidor principal" abaixo)
  • Se o servidor principal A estiver inativo => acesse o "servidor de backup" B

Com base na documentação , fiz a seguinte configuração:

CREATE SERVER server_main
 FOREIGN DATA WRAPPER mysql
OPTIONS(
 HOST '10.2.0.1',
 PORT 3306,
 DATABASE 'db01',
 USER 'spider',
 PASSWORD '123456'
);

CREATE SERVER server_backup
 FOREIGN DATA WRAPPER mysql
OPTIONS(
 HOST '10.2.0.2',
 PORT 3306,
 DATABASE 'db01',
 USER 'spider',
 PASSWORD '123456'
);

INSERT INTO mysql.spider_link_mon_servers 
(db_name, table_name, link_id, sid, server) 
VALUES
('%', '%', '%', 100, 'server_main'),
('%', '%', '%', 101, 'server_backup');

SELECT spider_flush_table_mon_cache();


-- Created on 10.2.0.1 (server_main)
CREATE TABLE `np` (
  `s` text
) ENGINE=InnoDB;
INSERT INTO np VALUES ('main');

-- Created on 10.2.0.2 (server_backup)
CREATE TABLE `np` (
  `s` text
) ENGINE=InnoDB;
INSERT INTO np VALUES ('backup');


CREATE TABLE `np` (
  `s` text
) ENGINE=SPIDER COMMENT='wrapper "mysql", srv "server_main server_backup", database "db01", table "np", mbk "2", mkd "2", msi "100 101", link_status "0 0"';

Metade do tempo, o spider usa server_main e server_backup:

db_spider =# SELECT * FROM np;
+------+
| s    |
+------+
| main |
+------+
1 row in set (0.00 sec)

db_spider =# Bye
[...]
db_spider =# SELECT * FROM np;
+--------+
| s      |
+--------+
| backup |
+--------+
1 row in set (0.00 sec)

Mas se eu parar a instância principal do mysqld, ela ainda tentará acessar o nó com falha:

db_spider =# SELECT * FROM np;
ERROR 1032 (HY000): Can't find record in 'spider_tables'
db_spider =# Bye
[...]
db_spider =# SELECT * FROM np;
+--------+
| s      |
+--------+
| backup |
+--------+
1 row in set (0.00 sec)

Talvez eu tenha configurado incorretamente ou perdido algumas configurações? As opções "msi" e "link_status" não estão muito claras para mim na verdade...

mariadb high-availability
  • 1 1 respostas
  • 1512 Views

1 respostas

  • Voted
  1. Best Answer
    Nicolas Payart
    2015-01-01T01:29:39+08:002015-01-01T01:29:39+08:00

    Achei meu erro. Percebi que a tabela spider_link_mon_servers deve conter nós de aranha, não nós de back-end. E meus nós de aranha não estão sendo executados na mesma instância que os back-ends. As tabelas spider são executadas na porta 3307.

    Portanto, preciso configurar os servidores de monitoramento assim (vamos chamá-los de "proxy"):

    CREATE SERVER server_main_proxy
     FOREIGN DATA WRAPPER mysql
    OPTIONS(
     HOST '10.2.0.1',
     PORT 3307,
     DATABASE 'db01',
     USER 'spider',
     PASSWORD '123456'
    );
    
    CREATE SERVER server_backup_proxy
     FOREIGN DATA WRAPPER mysql
    OPTIONS(
     HOST '10.2.0.2',
     PORT 3307,
     DATABASE 'db01',
     USER 'spider',
     PASSWORD '123456'
    );
    
    TRUNCATE mysql.spider_link_mon_servers;
    INSERT INTO mysql.spider_link_mon_servers 
    (db_name, table_name, link_id, sid, server) 
    VALUES
    ('%', '%', '%', 100, 'server_main_proxy'),
    ('%', '%', '%', 101, 'server_backup_proxy');
    
    SELECT spider_flush_table_mon_cache();
    

    Agora, se eu parar a instância "principal" (3306 uma), o spider a detecta e acessa apenas o nó de backup.

    Ainda há um recurso que não consegui operar: use apenas o back-end principal se estiver ativo e use o back-end de backup apenas se o back-end principal morrer ...

    EDIÇÃO 11/02/2014:

    O parâmetro "alc" (active_link_count) definido como 1 é o que eu preciso para usar o segundo back-end apenas como back-end de failover. Então, algo assim funcionou:

    ALTER TABLE np ENGINE=SPIDER COMMENT='wrapper "mysql", srv "server_main server_backup", database "db01", table "np", mbk "2", mkd "2", alc "1", msi "100 101", link_status "0 0"';
    
    • 5

relate perguntas

  • JBoss não faz failover do escravo MySQL usando fonte de dados

  • Você ainda usa o MyISAM ou prefere o mecanismo de armazenamento Aria?

  • Como posso melhorar minha instrução SQL com resultados semanais com semana começando na quinta-feira ou em qualquer outro dia da semana?

  • Onde colocar um banco de dados em caso de failover de IP?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve