2016-01-21 86 views
3

我打算使用MySQL集群安装Magento 2.0安装o针对高可用性数据库的MySQL Galera集群。其中一个限制就是每张桌子都应该有一个PK。令我惊讶的是,并不是Magento 2.0社区版的每个表都有一个PK。他们中的大多数人有一个,但有一些没有。将Magento 2.0安装到MySQL集群

是否有人通过高度可用的集群数据库实现了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 |   |  | 
+--------------------------------------------------------------+--------+------+----------+--------+ 
+0

你最终使用了什么解决方案? – themanwhoknowstheman

回答

0

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

我开始首先评估Galera集群,并且我已经了解到,如果有人试图仅仅将数据库集群与没有用集群编写的应用程序一起使用,那么很有可能它不会工作,但可能需要代码调整。我们可以在大部分地区调整我们的代码,但是我们遇到了障碍。我们的应用程序使用Xale交易,Galera不支持。由于我们不能在不久的将来摆脱XA交易,所以我们不能使用Galera(到目前为止)。

所以我已经切换到下一个选项:主从复制带自动故障切换。这并不像集群解决方案那样优雅,尤其是在这种设置中,从属服务器可能在主服务器后面几秒钟,这意味着如果发生主服务器崩溃,可能会丢失一些数据(不多)。目前我们仍在评估这种方法,目前看起来都很不错。

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

除了必须添加PK的表之外,我看到有些表使用MEMORY引擎。据我所知,Galera只支持InnoDB引擎,它对MyIsam有一些实验性的支持。虽然PK的东西更容易修复,但将这种MEMORY引擎装入Galera可能难以实现。 这里看到一个有趣的讨论,正是上运行Magento with Galera

最后,如果你决定,这是太难去加莱拉(如果可能的话),你还有其他的HA选项,例如像主从复制。我没有看到任何理由不适合你的情况。

最后一句话:我了解到,将HA带入项目并不容易。但这是一个有趣且令人满意的任务。 :-) 只要知道你到底采取了什么方法。这对其他人也许非常有用。

+0

嗯。去主从不会让我为写操作水平扩展,对吧?我的目标是能够找到一个对增长友善的解决方案...... – manugarciac

+0

@manugarciac对,你只能缩放阅读。对于水平扩展写入,您可以考虑使用多主设置(我自己并没有使用它)。但要小心,不像加莱拉,这是异步的(或最好是半同步的)。选中此项:https://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html –