我尝试使用 Spider Engine 和 MariaDB 10.0.14 设置高可用性,但我不确定使用什么配置来使其按预期工作。
我想要的是:
- 在远程服务器 A 上使用 Spider Engine 访问远程表(假设下面的“主服务器”)
- 如果主服务器 A 宕机 => 访问“备份服务器”B
根据文档,我设置了以下配置:
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"';
一半时间蜘蛛使用 server_main 和 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)
但是如果我停止主 mysqld 实例,它仍然会尝试访问失败的节点:
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)
也许我配置错误或错过了一些设置?事实上,选项“msi”和“link_status”对我来说不是很清楚......
我发现了我的错误。我意识到 spider_link_mon_servers 表必须包含蜘蛛节点,而不是后端节点。而且我的蜘蛛节点没有在与后端相同的实例上运行。蜘蛛表在端口 3307 上运行。
所以我需要像这样配置监控服务器(我们称它们为“代理”):
现在,如果我停止“主”实例(3306 个),蜘蛛会检测到它并仅访问备份节点。
还有一个功能我没能操作:如果它还活着,只使用主后端,只有当主后端死机时才使用备份后端......
编辑 2014 年 11 月 2 日:
为了将第二个后端仅用作故障转移后端,我需要将参数“alc”(active_link_count)设置为 1。所以这样的事情就成功了: