uWSGI集群平台

来源:互联网 发布:记账软件下载 编辑:程序博客网 时间:2024/06/06 08:40

    集群是uWSGI服务器的关键功能之一,该功能从0.9.7-dev开始提供。

 

首先我们看一个通过TCP套接字实现的简单应用:

 

./uwsgi -w werkzeug.testapp:test_app -s 192.168.173.100:3032 -M -p 4

   

    现在我们想将应用程序移动到第二个服务器上,一个首要的问题就是第二个服务器需要第二个ip地址,这样由于两台机器的ip不同,因此就不可能通过NFS来共享一个xml文件来实现。

 

幸运的是,我们能够使用依赖于集群的魔术选项,例如:

 

./uwsgi -w werkzeug.testapp:test_app -s 192.168.173.*:3032 -M -p 4

   

    这如你看到的,在ip地址中包含了一个*号,这意味着uWSGI服务器将会在本地机器中自动的搜索第一个可以的ip地址。

 

    因此,我们同样可以在第二台机器上执行这条命令来启动第二个uWSGI服务器。这样启动问题就解决了。

 

    现在我们的服务器已经启动运行了,但是其它的问题又可能有来了,例如,我们想对uWSGI服务器进行调整,那么每一次的调整,即进行修改,都必须在第二台uWSGI服务器上做同样的操作,并且都需要重新载入。看一下怎么解决这个问题。

 

下面是一个uWSGI集群结构:

 

在这个结构中我们假如有4个节点:

 

node1 192.168.173.100

node2 192.168.173.101

node3 192.168.173.102

node4 192.168.173.103

   

在node1上启动uWSGI,但是这次要选择一个"集群名称",集群的名称是一个简单的多播地址,这个地址将会被这个集群内的所有集群所共享。在这里我们将选择225.1.1.1:3333地址,这个地址可以随便选择,但前提条件必须是在我们环境中所没有使用的一个多播地址,例如(这里我们假设在node1上执行):

 

./uwsgi -w werkzeug.testapp:test_app -s 192.168.173.*:3032 -M -p 4 --cluster 225.1.1.1:3333

 

    好了,我们的集群启动了,但是这意味着什么呢?

 

    从现在开始,集群中所有的节点都将会共享这些选项,因此,在node2、 node3 和 node4上只需简单的运行以下命令:

 

./uwsgi --cluster 225.1.1.1:3333

   

    集群中的各个节点将会从已经启动的任何一个节点上获取配置(在这里具体的就是node1)。那么在集群中所有的节点都正常启动并且运行后,如果node1死掉会出现什么问题?没关系,即使node1宕机,而其它的服务器,比如 node3要重启,它还可以从node2或者node4上获取配置。

 

    下面我们看两个选项--cluster-reload和--cluster-log。

 

    如果我们删除一些不需要的配置文件,或者是编辑一些配置文件,那么每一次类似这样的事情都得对集群中的每一个uWSGI实例进行重新启动?不用那么麻烦,只需在其中的一个实例上简单的执行以下命令就可以了:

 

./uwsgi --cluster-reload 225.1.1.1:3333

   

    这条命令执行后,所有集群中的节点都将会被重新载入。这就是--cluster-reload的功能。

 

    另一个有用的选项是 --cluster-log,通过该选项可以向集群中的所有实例发送消息,并且所有节点都会将其记录到它们的日志。

   

    例如:

 

echo "i love uWSGI" | ./uwsgi --cluster-log 225.1.1.1:3333

   

    在这个例子中,我们通过在标准的输入设备用echo命令将字符串在通过管道传递给uWSGI,然后会组播到各个实例。

 

uWSGI代理

 

    uWSGI服务器包含了一个高性能的路由/代理/负载均衡器。对于uWSGI代理服务器而言,集群对它完全支持。只要在启动时添加一个--cluster选项那么将会自动的添加或者是移除一个节点。例如:

 

./uwsgi --proxy 127.0.0.1:3031 --cluster 225.1.1.1:3333

 

   这样启动之后,简单的将127.0.0.1:3031指向了文本服务器 uwsgi处理程序,并且也会自动添加节点,而且会实现负载均衡和健康检查。

0 0
原创粉丝点击