4

我计划使用 MySQL Cluster o MySQL Galera Cluster 安装 Magento 2.0 以获得高可用性数据库。其中一个限制是每个表都应该有一个 PK。令我惊讶的是,并非 Magento 2.0 社区版上的每个表都有 PK。他们中的大多数人都有一个,但也有一些没有。

有没有人使用高度可用的集群数据库实现 Magento 安装?你是怎么做到的?我正在考虑将自动增量 PK 添加到没有 PK 的表中,但这可能意味着未来 Magento 升级与架构更改的问题。

你会怎么做?

编辑:这些是麻烦的表:

+--------------------------------------------------------------+--------+------+----------+--------+
| tbl                                                          | engine | nopk | ftidx    | gisidx |
+--------------------------------------------------------------+--------+------+----------+--------+
| magento.cataloginventory_stock_status_tmp                    | MEMORY |      |          |        |
| magento.catalogsearch_fulltext_scope1                        | InnoDB |      | FULLTEXT |        |
| magento.catalog_category_product_index_tmp                   | MEMORY | NOPK |          |        |
| magento.catalog_product_entity_media_gallery_value_to_entity | InnoDB | NOPK |          |        |
| magento.catalog_product_entity_media_gallery_value_video     | InnoDB | NOPK |          |        |
| magento.catalog_product_index_eav_decimal_tmp                | MEMORY |      |          |        |
| magento.catalog_product_index_eav_tmp                        | MEMORY |      |          |        |
| magento.catalog_product_index_price_bundle_opt_tmp           | MEMORY |      |          |        |
| magento.catalog_product_index_price_bundle_sel_tmp           | MEMORY |      |          |        |
| magento.catalog_product_index_price_bundle_tmp               | MEMORY |      |          |        |
| magento.catalog_product_index_price_cfg_opt_agr_tmp          | MEMORY |      |          |        |
| magento.catalog_product_index_price_cfg_opt_tmp              | MEMORY |      |          |        |
| magento.catalog_product_index_price_downlod_tmp              | MEMORY |      |          |        |
| magento.catalog_product_index_price_final_tmp                | MEMORY |      |          |        |
| magento.catalog_product_index_price_opt_agr_tmp              | MEMORY |      |          |        |
| magento.catalog_product_index_price_opt_tmp                  | MEMORY |      |          |        |
| magento.catalog_product_index_price_tmp                      | MEMORY |      |          |        |
| magento.catalog_url_rewrite_product_category                 | InnoDB | NOPK |          |        |
| magento.cms_block                                            | InnoDB |      | FULLTEXT |        |
| magento.cms_page                                             | InnoDB |      | FULLTEXT |        |
| magento.customer_grid_flat                                   | InnoDB |      | FULLTEXT |        |
| magento.oauth_nonce                                          | InnoDB | NOPK |          |        |
| magento.sales_creditmemo_grid                                | InnoDB |      | FULLTEXT |        |
| magento.sales_invoice_grid                                   | InnoDB |      | FULLTEXT |        |
| magento.sales_order_grid                                     | InnoDB |      | FULLTEXT |        |
| magento.sales_shipment_grid                                  | InnoDB |      | FULLTEXT |        |
| magento.widget_instance_page_layout                          | InnoDB | NOPK |          |        |
+--------------------------------------------------------------+--------+------+----------+--------+
4

1 回答 1

0

几个月前我有一个类似的任务:评估适合我们项目的最佳高可用性数据库解决方案(Java Web 应用程序 + MySQL)。

我首先开始评估 Galera Cluster,并且我了解到,如果尝试仅将数据库集群与未考虑到集群的应用程序一起使用,那么它可能不仅可以工作,而且可能需要调整代码。我们本可以在大多数领域调整我们的代码,但我们遇到了阻碍。我们的应用程序使用了 Galera 不支持的 XA 事务。由于我们不能在不久的将来摆脱 XA 事务,我们不能使用 Galera(到目前为止)。

所以我切换到了下一个选项:具有自动故障转移的主从复制。不像集群解决方案那么优雅,尤其是在这种设置中,从属服务器可能会落后于主服务器几秒钟,这意味着在主服务器崩溃的情况下,可能会丢失一些数据(不多)。我们目前仍在评估这种方法,到目前为止一切看起来都不错。

现在..如果我是你,我会先尝试让 Magento 与 Galera 集群一起工作。正如您所说,您必须修改架构以使其与 Galera 兼容,但您需要小心未来的升级。我们使用以下问题/支持跟踪器:MantisBT 和 osTicket,我必须对它们进行自定义,同时更改 PHP 代码和数据库模式。我手动执行所有升级。我确实必须非常小心,但除此之外,这没什么大不了的。我想如果你有足够的耐心,你可以在 Magento 上做同样的事情。

除了您必须添加 PK 的表之外,我还看到有些表使用了 MEMORY 引擎。据我所知,Galera 仅支持 InnoDB 引擎,并且对 MyIsam 有一些实验性支持。虽然 PK 的东西更容易修复,但将这个 MEMORY 引擎的东西安装到 Galera 可能更难实现。在此处查看有关使用 Galera运行 Magento 的有趣讨论

最后,如果您认为使用 Galera 太难(如果可能的话),您还有其他 HA 选项,例如主从复制。我看不出有任何理由让它不适用于你的情况。

最后一句话:我了解到将 HA 引入项目并不容易。但这是一项有趣而充实的任务。:-) 让我们知道你最终采用了什么方法。它对其他人也可能非常有用。

于 2016-01-23T17:53:52.433 回答