使用 haproxy 和 php websocket 执行查询
Posted
技术标签:
【中文标题】使用 haproxy 和 php websocket 执行查询【英文标题】:executing queries using haproxy and php websocket 【发布时间】:2015-05-01 08:30:50 【问题描述】:我正在使用 HAproxy 和 php websocket a link! 开发负载平衡 php 应用程序。 用户登录到我的应用程序(每个人都有自己的会话)并发送触发执行 mysql 查询的表单。
我将后端创建为三个 websocket 服务器实例,它们在后台运行在不同的 IP 地址和端口上。
类服务器
class server
...
$server1=new server('127.0.0.2','9001');
$server2=new server('127.0.0.3','9002');
$server3= new server('127.0.0.4','9003');
$server1->run(); // calling function run from library
$server2->run();
$server3->run();
如何确保 mysql 查询将由 php websockets 处理?
问题是任务(执行查询)没有分布在这些服务器之间(我没有看到统计报告中的变化)。 当然,我正确配置了我的 haproxy 配置文件。我认为 haproxy 无法捕获我的 http 请求并对其进行处理。
HAproxy 前端
frontend webservers
bind *:80
mode http
default_backend websockets
Haproxy 后端
backend websockets
mode http
balance roundrobin
server web1 127.0.0.2:9001 check
server web2 127.0.0.3:9002 check
server web3 127.0.0.4:9003 check
我查看了 haproxy 统计报告,发现 haproxy 知道该服务器。
可以为此使用 websockets 吗?或者更好的解决方案是 node.js ?我没有看到任何与 php websocket 类似的解决方案。 php websocket可以与数据库通信吗? 如果你知道一些关于它的文章......请告诉我。
感谢您的回答。
【问题讨论】:
【参考方案1】:在这种情况下,您需要同时运行 3 个不同的脚本。最好在 3 台不同的机器上,否则没有必要进行负载平衡。
server1.php:
<?php
require_once('./websockets.php');
class FirstServer extends WebSocketServer ...
$server = new FirstServer('127.0.0.2', '9001');
$server->run();
server2.php:
<?php
require_once('./websockets.php');
class SecondServer extends WebSocketServer ...
$server = new SecondServer('127.0.0.3', '9002');
$server->run();
server3.php:
<?php
require_once('./websockets.php');
class ThirdServer extends WebSocketServer ...
$server = new ThirdServer('127.0.0.4', '9003');
$server->run();
然后,在您的命令行中,执行以下操作:
user@web1$ nohup php /path/to/server1.php > /dev/null 2>&1 &
user@web1$ ssh user@web2 "nohup php /path/to/server2.php > /dev/null 2>&1 &"
user@web1$ ssh user@web3 "nohup php /path/to/server3.php > /dev/null 2>&1 &"
一点评论:
$server = new Server('127.0.0.4', '9003');
可能应该是$server = new Server('0.0.0.0', '9003');
,除非你有理由(它甚至不必是一个很好的理由......只是任何理由)不监听该机器的所有 IP 地址。也就是说,每台机器都有 127.0.0.1,以及每个配置的网络接口的地址。大多数人都想收听所有地址。
我怀疑您与 MySQL 服务器的连接绝对没有问题。问题是 $server1->run()
永远不会返回,所以永远不会执行下一行 $server2->run()
。
【讨论】:
以上是关于使用 haproxy 和 php websocket 执行查询的主要内容,如果未能解决你的问题,请参考以下文章