Load Balancer - 超出锁定等待超时 - 尝试重新启动事务

时间:2016-08-19 10:08:15

标签: php mysql symfony load-balancing

我有以下架构:

1负载均衡器

3个Amazon EC 2实例(LAMP,使用Symfony2)

1 RDS数据库

我最近设置了这个,因为我为单个实例获得了大量流量,并且我让Symfony2使用数据库进行会话,但现在我不断在日志文件中收到此错误:

Uncaught PHP Exception PDOException: "SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction" at /var/www/front/shared/vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/PdoSessionHandler.php line 513

我认为这是因为所有实例都在写入数据库中的sessions列,我该怎么做才能避免这个错误?当这个错误触发时究竟丢失了什么?

修改

会话表如下所示。

CREATE TABLE `sessions` (
  `sess_id` VARBINARY(128) NOT NULL PRIMARY KEY,
  `sess_data` BLOB NOT NULL,
  `sess_time` INTEGER UNSIGNED NOT NULL,
  `sess_lifetime` MEDIUMINT NOT NULL
) COLLATE utf8_bin, ENGINE = InnoDB;

1 个答案:

答案 0 :(得分:1)

据我所知,可以设置负载均衡器以将用户重定向到同一个ec实例,因此没有理由共享会话。

关于数据库会话存储,尝试设置另一种锁定模式PdoSessionHandler::LOCK_ADVISORYPdoSessionHandler::LOCK_NONE

或在memcache

中存储会话