- 论坛徽章:
- 0
|
实例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服务器无关,我们要测试的是在主节点和成员节点正常启动后都能够正常的工作。 |
|