免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4075 | 回复: 0
打印 上一主题 下一主题

[Web] uWSGI服务器集群的实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-14 17:39 |只看该作者 |倒序浏览
实例7 集群的实现

    这个实例我们针对的是集群,部署环境如下:

    假设我们有两台uWSGI服务器,IP地址分别为192.168.3.139和192.168.3.34,监听端口均9001。它们的应用程序目录是通过NFS挂接实现的,及无论是IP 192.168.3.139所在的机器还是IP 192.168.3.34所在的机器上的uWSGI服务器都从共同的NFS挂载目录上获取。其中主节点为192.168.3.139,而其它有再多的节点也是成员节点。

    这里需要说的一点是,uWSGI所说的集群和我们在以往讨论的集群有着本质的区别,uWSGI所提到的集群是为了解决配置文件修改、应用修改而设计的。

    下面我们看一下具体的实现:

    两台uWSGI的应用程序目录均被挂接到:

/app/my_django

    文件uwsgi.xml的内容:
   
[root@mail my_django]# more uwsgi.xml
<uwsgi>
  <listen>20</listen>
  <master>true</master>
  <uid>uwsgi</uid>
  <gid>uwsgi</gid>
  <processes>1</processes>
  <module>wsgi</module>
  <pythonpath>/app/my_django</pythonpath>
  <profiler>true</profiler>
  <memory-report>true</memory-report>
  <enable-threads>true</enable-threads>
  <logdate>true</logdate>
  <limit-as>48</limit-as>
   <daemonize>/usr/local/uwsgi-0.9.8-rc4/log/django.log</daemonize>
</uwsgi>
   
    注意在这配置文件中没有监听的IP地址和端口号

在前端的Nginx服务器上添加配置:


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

upstream uwsgicluster {
    server 192.168.3.139:9001;
    server 192.168.3.34:9001;
}

server {
        listen   0.0.0.0:80;
        server_name www.xx.com;
        location /               {
             include uwsgi_params;
             uwsgi_pass uwsgicluster;
        }

}
   
在192.168.3.139机器:

    在该机器上执行:

[root@mail uwsgi-0.9.8-rc4]# ./uwsgi-0.9.8-rc4 -x /app/my_django/uwsgi.xml -s 192.168.3.*:9001  --cluster 225.1.1.1:3333
generate_socket_name(192.168.3.*:9001)
asterisk found
found 192.168.3.139:9001 for 192.168.3.*:9001 on interface eth0
[uWSGI] parsing config file /app/my_django/uwsgi.xml
[root@mail Django]#
   
在192.168.3.34机器:

[root@nas uwsgi-0.9.8-rc4]# ./uwsgi-0.9.8-rc4  --cluster 225.1.1.1:3333
[uWSGI] joining multicast group: 225.1.1.1:3333
JOINED CLUSTER: 225.1.1.1:3333
asking "225.1.1.1:3333" uWSGI cluster for configuration data:
recevied request from 192.168.3.34
RLEN: 15
invalid uwsgi dictionary received, modifier1: 73 modifier2: 0
recevied request from 192.168.3.34
RLEN: 4
invalid uwsgi dictionary
recevied request from 192.168.3..139
RLEN: 340
0xbffe0d64 0xbffe0eb4 336
xmlconfig = /app/my_django/uwsgi.xml
socket = 192.168.3.*:9001
cluster = 225.1.1.1:3333
listen = 20
master = true
uid = uwsgi
gid = uwsgi
processes = 1
module = wsgi
pythonpath = /app/my_django
profiler = true
memory-report = true
enable-threads = true
logdate = true
limit-as = 48
daemonize = /usr/local/uwsgi-0.9.8-rc4/log/django.log
generate_socket_name(192.168.3.*:9001)
asterisk found
found 192.168.3.34:9001 for 192.168.3.*:9001 on interface eth0
   
    这是在该机器上执行集群启动后的信息,它的大致内容是说,uWSGI实例已经添加到组播地址为225.1.1.1:3333,并且获取了配置。

    在192.168.3.34所在的机器上执行完以上的启动操作,那么在192.168.3.139上会出现以下日志:
   
Thu Jul 28 16:06:04 2011 - recevied request from 192.168.3.34
Thu Jul 28 16:06:04 2011 - request received 73 0
Thu Jul 28 16:06:04 2011 - [uWSGI cluster 225.1.1.1:3333] new node available: nas
Thu Jul 28 16:06:04 2011 - recevied request from 192.168.3..34
Thu Jul 28 16:06:04 2011 - request received 99 0
Thu Jul 28 16:06:04 2011 - requested configuration data, sending 340 bytes
Thu Jul 28 16:06:04 2011 - recevied request from 192.168.3..139
Thu Jul 28 16:06:04 2011 - request received 99 1
Thu Jul 28 16:06:04 2011 - recevied request from 192.168.3..34
Thu Jul 28 16:06:04 2011 - request received 95 0
Thu Jul 28 16:06:04 2011 - hostname = nas
Thu Jul 28 16:06:04 2011 - address = 192.168.3.34:9001
Thu Jul 28 16:06:04 2011 - workers = 1
Thu Jul 28 16:06:04 2011 - requests = 0
Thu Jul 28 16:06:04 2011 - adding node
Thu Jul 28 16:06:04 2011 - 192.168.3.34
Thu Jul 28 16:06:04 2011 - [uWSGI cluster] added node 192.168.3.34:9001

    看一下日志的内容,它的大概意思是说在该机器上收到了192.168.3.34的请求,并且将其作为一个新的节点添加在“uWSGI cluster 225.1.1.1:3333”集群中,然后设定了它的端口和IP地址,以及其它的信息。

访问测试

    访问http://www.xx.com/hello/,下面的测试效果是我们在测试故意设置的,即使用了不同的目录,但是在具体使用uWSGI集群时不要这么做。

     

    这种轮询的实现是由Nginx的配置实现的,它和uWSGI服务器无关,我们要测试的是在主节点和成员节点正常启动后都能够正常的工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP