在高配置服务器,单个RGW的并发量没法充分使用机器的网络带宽资源,本文用于说明如何在单机上部署多RGW的方法。前端
Ceph官网说明了如何使用Apache做为前端Web服务器,后官方又退出Civetweb做为自带的web服务器。不过考虑实际并发性能,咱们采用Nginx做为前端web服务器,和radosgw联合使用。nginx
server { listen 80 default; #server_name .com .com.cn .net .cn .org .tv .cc .hk .tw; server_name ceph-21; location / { fastcgi_pass_header Authorization; fastcgi_pass_request_headers on; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param CONTENT_LENGTH $content_length; if ($request_method = PUT) { rewrite ^ /PUT$request_uri; } include fastcgi_params; fastcgi_pass unix:/var/run/ceph/ceph.radosgw.gateway1.sock; } location /PUT/ { internal; fastcgi_pass_header Authorization; fastcgi_pass_request_headers on; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param CONTENT_TYPE $content_type; fastcgi_pass unix:/var/run/ceph/ceph.radosgw.gateway1.sock; } }
这边须要详细注意的是 fastcgi_pass 参数,注意配置gateway.sock。在参数须要和ceph.conf一一对应。在下文中的rgw配置中,rgw_socket_path 须要与 nginx fastcgi_pass一致,从而能够使得两个进程基于fastcgi进行通讯。web
[client.radosgw.gateway1] host = ceph-21 rgw frontends = fastcgi log file = /var/log/radosgw/client.radosgw.gateway1.log keyring = /etc/ceph/ceph.client.radosgw.keyring rgw_socket_path = /var/run/ceph/ceph.radosgw.gateway1.sock
Nginx0采用upstream进行负载均衡网络
upstream nginx-upstream-rgw{ #ip_hash; server 10.71.21.31:81; server 10.71.21.31:82; server 10.71.21.31:83; server 10.71.21.31:84; server 10.71.21.31:85; } server { listen 80 default; server_name demo.ceph.work; location / { proxy_pass http://nginx-upstream-rgw; } }
负载均衡参考文档并发
每一个Nginx对应一个rgw,对应的配置方法参考章节1。负载均衡
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx1.conf /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx2.conf /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx3.conf /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx4.conf /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx5.conf
radosgw -c /etc/ceph/ceph.conf -n client.radosgw.gateway1 radosgw -c /etc/ceph/ceph.conf -n client.radosgw.gateway2 radosgw -c /etc/ceph/ceph.conf -n client.radosgw.gateway3 radosgw -c /etc/ceph/ceph.conf -n client.radosgw.gateway4 radosgw -c /etc/ceph/ceph.conf -n client.radosgw.gateway5
我对上述结构进行了测试,libs3的read, write, list等操做能够正常访问,后续进一步测试并发能力。 在相同配置下,原来单RGW测试500K并发是200; 如今采用10个实例,如今并发 > 2000. 仍是要加强单rgw的并发能力。搞这个多实例也不是个事~~~frontend
在该种模式下,RGW会表现出不稳定的状况,主要体如今当压力过载时,即使中止压力测试,一段时间后再访问,NGINX会爆大量的502错误。我会进一步跟进这个错误。socket