{"id":329,"date":"2018-03-14T09:29:48","date_gmt":"2018-03-14T01:29:48","guid":{"rendered":"http:\/\/www.max-shu.com\/blog\/?p=329"},"modified":"2018-03-14T09:29:48","modified_gmt":"2018-03-14T01:29:48","slug":"openstack-%e5%ae%89%e8%a3%85%e5%92%8c%e4%bd%bf%e7%94%a8%ef%bc%88%e5%85%ab%ef%bc%89","status":"publish","type":"post","link":"http:\/\/www.max-shu.com\/blog\/?p=329","title":{"rendered":"OpenStack \u5b89\u88c5\u548c\u4f7f\u7528\uff08\u516b\uff09"},"content":{"rendered":"<p><span style=\"font-size: x-large;\"><b>Swift\u5bf9\u8c61\u5b58\u50a8<\/b><\/span><\/p>\n<div>\n<div><b>\u6240\u6709\u5b58\u50a8\u7684\u6587\u4ef6\u7cfb\u7edf\u683c\u5f0f\u6700\u597d\u4e3aext4\u6216\u8005xfs\uff0c\u4ee5\u4fbf\u652f\u6301xattrs\u5c5e\u6027\u3002<\/b><br \/>\n<b>\u6bcf\u53f0\u673a\u5668\u90fd\u6309\u7167\u4e0b\u9762\u6b65\u9aa4\u5b89\u88c5\u5c31\u884c\uff0c\u6ce8\u610f\u7684\u662f\u542b\u670910.24.1.47\u7684\u5730\u65b9\u7684\u5730\u5740\uff0c\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u53ef\u80fd\u9700\u8981\u4fee\u6539\u3002<\/b><\/div>\n<div><\/div>\n<div>\u5f00\u542fiptables\uff0c11211\u4e3amemcached\uff0c873\u4e3arsyncd\uff0c8080\u4e3aproxy-server\uff0c6000-6010\u4e3aobject-server\u3001ccontainer-server\u3001account-server\u7684\u7aef\u53e3\u53f7\uff1a<\/div>\n<div># lokkit -p 11211:tcp<br \/>\n# lokkit -p 11211:udp<br \/>\n# lokkit -p 873:tcp<br \/>\n# lokkit -p 8080:tcp<br \/>\n# lokkit -p 6000-6010:tcp<\/div>\n<div><\/div>\n<div><b>account\u76f8\u5f53\u4e8e\u7528\u6237\uff0ccontainer\u76f8\u5f53\u4e8e\u76ee\u5f55\uff0cobject\u76f8\u5f53\u4e8e\u6587\u4ef6\u3002<\/b><br \/>\n<b><br \/>\n<\/b><\/div>\n<div><b>\u5b89\u88c5\uff1a<\/b><br \/>\n# yum install &#8211;enablerepo=updates-testing openstack-keystone openstack-swift openstack-swift-proxy openstack-swift-account openstack-swift-container openstack-swift-object memcached<\/p>\n<p>\u589e\u52a0\u4e00\u4e2a\u914d\u7f6e\u6587\u4ef6\uff1a<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">vi \/etc\/swift\/swift.conf<\/span><\/b><br \/>\n[swift-hash]<br \/>\n# random unique string that can never change (DO NOT LOSE)<br \/>\nswift_hash_path_suffix = 123456<\/p>\n<p>\u5efa\u7acb\u5b58\u50a8\u7a7a\u95f4\uff0c\u5176\u4e2d\/srv\/node\/\u4e3arsync\u7684\u76ee\u5f55\uff0csdc\u4e3a\u5177\u4f53\u7684\u67d0\u4e2a\u8bbe\u5907\uff0c\u53ef\u4ee5mount\u8bbe\u5907\u5230\/srv\/node\/sdc\u4e0a\uff1a<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">mkdir -p \/srv\/node\/sdc\/<\/span><\/b><br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">mount \/dev\/sdc \/srv\/node\/sdc<\/span><\/b><br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">chown -R swift:swift \/srv\/node\/<\/span><\/b><\/p>\n<p>\u4fee\u6539rsync\u914d\u7f6e\u6587\u4ef6\uff1a<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">vi \/etc\/rsyncd.conf<\/span><\/b><br \/>\nuid = swift<br \/>\ngid = swift<br \/>\nlog file = \/var\/log\/rsyncd.log<br \/>\npid file = \/var\/run\/rsyncd.pid<br \/>\naddress = 0.0.0.0<\/p>\n<p>[account]<br \/>\nmax connections = 2<br \/>\npath = \/srv\/node\/<br \/>\nread only = false<br \/>\nlock file = \/var\/lock\/account.lock<\/p>\n<p>[container]<br \/>\nmax connections = 2<br \/>\npath = \/srv\/node\/<br \/>\nread only = false<br \/>\nlock file = \/var\/lock\/container.lock<\/p>\n<p>[object]<br \/>\nmax connections = 2<br \/>\npath = \/srv\/node\/<br \/>\nread only = false<br \/>\nlock file = \/var\/lock\/object.lock<\/p>\n<p>\u542f\u52a8rsync<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">rsync &#8211;daemon<\/span><\/b><\/p>\n<p>\u6d4b\u8bd5\u4e00\u4e0brsync<br \/>\n# echo &#8220;test&#8221; &gt; \/srv\/node\/sdc\/test<br \/>\n# rsync -vcztop &#8211;progress root@10.24.1.47::account\/sdc\/test .\/test<br \/>\n# rm \/srv\/node\/sdc\/test<\/p>\n<p>\u589e\u52a0account\u3001container\u3001object\u4e09\u4e2a\u914d\u7f6e\u6587\u4ef6\uff1a<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">vi \/etc\/swift\/account-server\/account-server.conf<\/span><\/b><br \/>\n[DEFAULT]<br \/>\nbind_ip = 0.0.0.0<br \/>\nworkers = 2<\/p>\n<p>[pipeline:main]<br \/>\npipeline = account-server<\/p>\n<p>[app:account-server]<br \/>\nuse = egg:swift#account<\/p>\n<p>[account-replicator]<\/p>\n<p>[account-auditor]<\/p>\n<p>[account-reaper]<\/p>\n<p>#\u00a0<b><span style=\"color: #ff0000;\">vi \/etc\/swift\/container-server\/container-server.conf<\/span><\/b><br \/>\n[DEFAULT]<br \/>\nbind_ip = 0.0.0.0<br \/>\nworkers = 2<\/p>\n<p>[pipeline:main]<br \/>\npipeline = container-server<\/p>\n<p>[app:container-server]<br \/>\nuse = egg:swift#container<\/p>\n<p>[container-replicator]<\/p>\n<p>[container-updater]<\/p>\n<p>[container-auditor]<\/p>\n<p>[container-sync]<\/p>\n<p>#\u00a0<b><span style=\"color: #ff0000;\">vi \/etc\/swift\/object-server\/object-server.conf<\/span><\/b><br \/>\n[DEFAULT]<br \/>\nbind_ip = 0.0.0.0<br \/>\nworkers = 2<\/p>\n<p>[pipeline:main]<br \/>\npipeline = object-server<\/p>\n<p>[app:object-server]<br \/>\nuse = egg:swift#object<\/p>\n<p>[object-replicator]<\/p>\n<p>[object-updater]<\/p>\n<p>[object-auditor]<\/p>\n<p>[object-expirer]<\/p>\n<p>#\u00a0<b><span style=\"color: #ff0000;\">vi \/etc\/swift\/object-expirer.conf<\/span><\/b><br \/>\n[DEFAULT]<\/p>\n<p>[object-expirer]<br \/>\n# interval = 300<br \/>\n# auto_create_account_prefix = .<br \/>\n# report_interval = 300<\/p>\n<p>[pipeline:main]<br \/>\npipeline = catch_errors cache proxy-server<\/p>\n<p>[app:proxy-server]<br \/>\nuse = egg:swift#proxy<\/p>\n<p>[filter:cache]<br \/>\nuse = egg:swift#memcache<\/p>\n<p>[filter:catch_errors]<br \/>\nuse = egg:swift#catch_errors<\/p>\n<p><b>\u5efa\u7acbaccount\u3001container\u3001object\u7684ring\u73af\uff1a<\/b><br \/>\n\u8fd9\u91cc\u76849\u8868\u793a2\u76849\u6b21\u65b9\uff08\u8ba1\u7b97\u65b9\u6cd5\uff1a\u5047\u5b9a\u6574\u4e2a\u7cfb\u7edf3\u5757\u786c\u76d8\uff0c\u7ecf\u9a8c\u503c\u786c\u76d8\u6570\u7684100\u500d\u547d\u4e2d\u7387\u6bd4\u8f83\u9ad8\uff0c\u6700\u597d\u7684partitions\u6570\u4e3a300\u6362\u7b97\u62102\u7684n\u6b21\u65b9\uff0c\u56e0\u4e3a2^8&lt;300&lt;2^9\uff0c\u6240\u4ee5\u4e3a9\uff09\uff1b<br \/>\n\u8fd9\u91cc\u76842\u8868\u793a\u6bcf\u4e2a\u5bf9\u8c612\u4e2a\u526f\u672c\uff08<b><span style=\"color: #ad0000;\">\u5219\u4e0b\u9762\u589e\u52a0\u8bbe\u5907\u65f6\u5fc5\u987b\u81f3\u5c11\u589e\u52a02\u4e2azone\uff0c\u800c\u4e14\u81f3\u5c11\u5fc5\u987b\u67092\u53f0\u673a\u5668\u8fd0\u884c\u6b63\u5e38\u624d\u80fd\u6b63\u5e38\u5de5\u4f5c\uff0c\u5426\u5219\u4e0d\u80fdupload\u548cdownload\uff0c\u53ea\u4fee\u6539\u526f\u672c\u6570\uff0c\u91cd\u542f\u540e\u7cfb\u7edf\u539f\u6709\u6570\u636e\u4e0d\u4f1a\u4e22\u5931<\/span><\/b>\uff09\uff1b<br \/>\n\u8fd9\u91cc\u76841\u8868\u793a\u6700\u5c0f\u79fb\u52a8\u95f4\u9694\uff0c\u5728\u8be5\u65f6\u95f4\u5185\u4e0d\u4f1a\u79fb\u52a8\u5b58\u50a8\u5757\u3002<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">cd \/etc\/swift\/<\/span><\/b><br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">swift-ring-builder account.builder create 9 2 1<\/span><\/b><br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">swift-ring-builder container.builder create 9 2 1<\/span><\/b><br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">swift-ring-builder object.builder create 9 2 1<\/span><\/b><\/p>\n<p>\u8fd9\u91cc\u7684z1\u8868\u793a\u533a\u57df1\uff0cxxxx\/sdc\u8868\u793a\u4e00\u4e2a\u8bbe\u5907(\u53c2\u8003\u4e0a\u9762\u5efa\u7acb\u7684\u5b58\u50a8\u7a7a\u95f4\uff0c\u6bcf\u53f0\u673a\u5668\u53ef\u4ee5\u4e0d\u4e00\u6837)\uff0c100\u8868\u793a\u6743\u91cd\u4e3a100\uff08\u5982\u679c\u67d0\u4e2a\u8bbe\u5907\u6bd4\u522b\u7684\u5927\uff0c\u90a3\u4e48\u5b83\u7684\u6743\u91cd\u4e5f\u5e94\u8be5\u5927\uff09\u3002<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">swift-ring-builder account.builder add z1-10.24.1.47:6002\/sdc 100<\/span><\/b><br \/>\n# swift-ring-builder account.builder add z2-10.24.1.49:6002\/sdc 100<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">swift-ring-builder container.builder add z1-10.24.1.47:6001\/sdc 100<\/span><\/b><br \/>\n# swift-ring-builder container.builder add z2-10.24.1.49:6001\/sdc 100<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">swift-ring-builder object.builder add z1-10.24.1.47:6000\/sdc 100<\/span><\/b><br \/>\n# swift-ring-builder object.builder add z2-10.24.1.49:6000\/sdc 100<br \/>\nDevice z2-10.24.1.49:6000\/sdc_&#8221;&#8221; with 100.0 weight got id 1<\/p>\n<p># swift-ring-builder account.builder<br \/>\n# swift-ring-builder container.builder<br \/>\n# swift-ring-builder object.builder<br \/>\nobject.builder, build version 2<br \/>\n512 partitions, 2 replicas, 2 zones, 2 devices, 100.00 balance<br \/>\nThe minimum number of hours before a partition can be reassigned is 1<br \/>\nDevices:\u00a0\u00a0\u00a0 id\u00a0 zone\u00a0\u00a0\u00a0\u00a0\u00a0 ip address\u00a0 port\u00a0\u00a0\u00a0\u00a0\u00a0 name weight partitions balance meta<br \/>\n0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0 10.24.1.47\u00a0 6000\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sdc 100.00\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 -100.00<br \/>\n1\u00a0\u00a0\u00a0\u00a0 2\u00a0\u00a0\u00a0\u00a0\u00a0 10.24.1.49\u00a0 6000\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sdc 100.00\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 -100.00<\/p>\n<p>\u4f7f\u7528rebalance\u6765\u751f\u6210*.ring.gz\u6587\u4ef6\uff1a<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">swift-ring-builder account.builder rebalance<\/span><\/b><br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">swift-ring-builder container.builder rebalance<\/span><\/b><br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">swift-ring-builder object.builder rebalance<\/span><\/b><br \/>\nReassigned 512 (100.00%) partitions. Balance is now 0.00.<\/p>\n<p>\u518d\u770b\u4e00\u6b21\uff0c\u53ef\u4ee5\u53d1\u73b0\u6bcf\u4e2a\u8bbe\u5907\u4e0b\u7684partitions\u53d8\u6210\u4e86512\uff1a<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">swift-ring-builder object.builder<\/span><\/b><br \/>\nobject.builder, build version 2<br \/>\n512 partitions, 2 replicas, 2 zones, 2 devices, 0.00 balance<br \/>\nThe minimum number of hours before a partition can be reassigned is 1<br \/>\nDevices:\u00a0\u00a0\u00a0 id\u00a0 zone\u00a0\u00a0\u00a0\u00a0\u00a0 ip address\u00a0 port\u00a0\u00a0\u00a0\u00a0\u00a0 name weight partitions balance meta<br \/>\n0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0 10.24.1.47\u00a0 6000\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sdc 100.00\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 512\u00a0\u00a0\u00a0 0.00<br \/>\n1\u00a0\u00a0\u00a0\u00a0 2\u00a0\u00a0\u00a0\u00a0\u00a0 10.24.1.49\u00a0 6000\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sdc 100.00\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 512\u00a0\u00a0\u00a0 0.00<\/p>\n<p>\u542f\u52a8swift\u8fdb\u7a0b\uff1a<br \/>\n# swift-init account-server stop; swift-init account-replicator stop; swift-init account-auditor stop<br \/>\n# swift-init container-server stop; swift-init container-replicator stop; swift-init container-updater stop; swift-init container-auditor stop<br \/>\n# swift-init object-server stop; swift-init object-replicator stop; swift-init object-updater stop; swift-init object-auditor stop<\/p>\n<p># swift-init object-server restart; swift-init object-replicator restart; swift-init object-updater restart; swift-init object-auditor restart<br \/>\n# swift-init container-server restart; swift-init container-replicator restart; swift-init container-updater restart; swift-init container-auditor restart<br \/>\n# swift-init account-server restart; swift-init account-replicator restart; swift-init account-auditor restart<\/p>\n<p>\u5b89\u88c5Proxy server\uff1a<br \/>\n\u7167\u63d0\u793a\u5efa\u7acbcrt.crt\u548ccert.key\u6587\u4ef6\uff1a<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">cd \/etc\/swift\/<\/span><\/b><br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">openssl req -new -x509 -nodes -out cert.crt -keyout cert.key<\/span><\/b><\/p>\n<\/div>\n<div><b>Keystone\u670d\u52a1\u53ea\u5728keystone\u670d\u52a1\u5668\u4e0a\u5b89\u88c5\u5373\u53ef\uff1a<\/b><br \/>\n<b><span style=\"color: #ff0000;\">\u6309\u7167keystone\u7684\u5b89\u88c5\u65b9\u6cd5\u5b89\u88c5keystone\u548cmemcached\uff0c\u5efa\u7acb\u540d\u4e3aswift\u7684service-list\u9879\uff0c\u5efa\u7acb\u540d\u4e3aswift\u7684user-list\u9879\u3002<\/span><\/b><\/p>\n<p>\u589e\u52a0\u914d\u7f6e\u6587\u4ef6\uff0c\u6ce8\u610f\u8fd9\u91cc\u7684keyston\u548cauthtoken\u914d\u7f6e\u5fc5\u987b\u548ckeystone\u91cc\u9762\u7684\u4e00\u81f4\uff0c\u8fd9\u91cc\u7684bind_port\u5fc5\u987b\u548ckeystone\u5efa\u7acbswift\u7684endpoint\u65f6\u4f7f\u7528\u7684\u7aef\u53e3\u4e00\u81f4\uff0c\u9ed8\u8ba4\u4e3a<span style=\"color: #ff0000;\">8080<\/span>\uff1a<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">vi \/etc\/swift\/proxy-server\/proxy-server.conf<\/span><\/b><br \/>\n[DEFAULT]<br \/>\nbind_port =\u00a0<span style=\"color: #ff0000;\">8080<\/span><br \/>\nuser = swift<\/p>\n<p>[pipeline:main]<br \/>\npipeline = catch_errors healthcheck cache authtoken keystone proxy-server<\/p>\n<p>[app:proxy-server]<br \/>\nuse = egg:swift#proxy<br \/>\naccount_autocreate = true<br \/>\nset log_name = swift-proxy<br \/>\nset log_facility = LOG_LOCAL0<br \/>\nset log_level = DEBUG<br \/>\nset access_log_name = swift-proxy<br \/>\nset access_log_facility = LOG_LOCAL0<br \/>\nset access_log_level = DEBUG<br \/>\nset log_headers = True<\/p>\n<p>[filter:keystone]<br \/>\npaste.filter_factory = keystone.middleware.swift_auth:filter_factory<br \/>\noperator_roles = admin, member<\/p>\n<p>[filter:authtoken]<br \/>\npaste.filter_factory = keystone.middleware.auth_token:filter_factory<br \/>\n# Delaying the auth decision is required to support token-less<br \/>\n# usage for anonymous referrers (&#8216;.r:*&#8217;).<br \/>\ndelay_auth_decision = 1<br \/>\nservice_port = 5000<br \/>\nservice_host = 10.24.1.47<br \/>\nservice_protocol =\u00a0<span style=\"color: #ff0000;\">http<\/span><br \/>\nauth_port = 35357<br \/>\nauth_host = 10.24.1.47<br \/>\nauth_protocol =\u00a0<span style=\"color: #ff0000;\">http<\/span><br \/>\nadmin_tenant_name =\u00a0<span style=\"color: #ff0000;\">service<\/span><br \/>\nadmin_user = swift<br \/>\nadmin_password = swift<\/p>\n<p>[filter:cache]<br \/>\nuse = egg:swift#memcache<br \/>\nmemcache_servers =\u00a0<span style=\"color: #ff0000;\">10.24.1.47:11211<\/span><br \/>\nset log_name = cache<\/p>\n<p>[filter:catch_errors]<br \/>\nuse = egg:swift#catch_errors<\/p>\n<p>[filter:healthcheck]<br \/>\nuse = egg:swift#healthcheck<\/p>\n<\/div>\n<div><b>\u542f\u52a8\uff1a<\/b><br \/>\n\u542f\u52a8proxy server<br \/>\n# swift-init proxy stop<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">swift-init proxy restart<\/span><\/b><\/p>\n<p><b>\u53ef\u4ee5\u4f7f\u7528\u4e0b\u9762\u547d\u4ee4\u542f\u52a8\u4e3b\u8981\u7684\u548c\u522b\u7684\u8fdb\u7a0b\uff1a<\/b><br \/>\n# swift-init rest stop<br \/>\n# swift-init main stop<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">swift-init main restart<\/span><\/b><br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">swift-init rest restart<\/span><\/b><\/p>\n<p># ps axf |grep swift<br \/>\n6883 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ss\u00a0\u00a0\u00a0\u00a0 0:00 \/usr\/bin\/python \/bin\/swift-proxy-server \/etc\/swift\/proxy-server\/proxy-server.conf<br \/>\n6909 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 S\u00a0\u00a0\u00a0\u00a0\u00a0 0:00\u00a0 \\_ \/usr\/bin\/python \/bin\/swift-proxy-server \/etc\/swift\/proxy-server\/proxy-server.conf<\/p>\n<p>6884 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ss\u00a0\u00a0\u00a0\u00a0 0:00 \/usr\/bin\/python \/bin\/swift-container-server \/etc\/swift\/container-server\/container-server.conf<br \/>\n6907 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 S\u00a0\u00a0\u00a0\u00a0\u00a0 0:00\u00a0 \\_ \/usr\/bin\/python \/bin\/swift-container-server \/etc\/swift\/container-server\/container-server.conf<br \/>\n6908 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 S\u00a0\u00a0\u00a0\u00a0\u00a0 0:00\u00a0 \\_ \/usr\/bin\/python \/bin\/swift-container-server \/etc\/swift\/container-server\/container-server.conf<br \/>\n8985 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ss\u00a0\u00a0\u00a0\u00a0 0:00 \/usr\/bin\/python \/bin\/swift-container-auditor \/etc\/swift\/container-server\/container-server.conf<br \/>\n8982 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ss\u00a0\u00a0\u00a0\u00a0 0:00 \/usr\/bin\/python \/bin\/swift-container-replicator \/etc\/swift\/container-server\/container-server.conf<br \/>\n8979 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ss\u00a0\u00a0\u00a0\u00a0 0:00 \/usr\/bin\/python \/bin\/swift-container-updater \/etc\/swift\/container-server\/container-server.conf<br \/>\n8988 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ss\u00a0\u00a0\u00a0\u00a0 0:00 \/usr\/bin\/python \/bin\/swift-container-sync \/etc\/swift\/container-server\/container-server.conf<\/p>\n<p>6885 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ss\u00a0\u00a0\u00a0\u00a0 0:00 \/usr\/bin\/python \/bin\/swift-account-server \/etc\/swift\/account-server\/account-server.conf<br \/>\n6905 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 S\u00a0\u00a0\u00a0\u00a0\u00a0 0:00\u00a0 \\_ \/usr\/bin\/python \/bin\/swift-account-server \/etc\/swift\/account-server\/account-server.conf<br \/>\n6906 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 S\u00a0\u00a0\u00a0\u00a0\u00a0 0:00\u00a0 \\_ \/usr\/bin\/python \/bin\/swift-account-server \/etc\/swift\/account-server\/account-server.conf<br \/>\n8980 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ss\u00a0\u00a0\u00a0\u00a0 0:00 \/usr\/bin\/python \/bin\/swift-account-auditor \/etc\/swift\/account-server\/account-server.conf<br \/>\n8986 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ss\u00a0\u00a0\u00a0\u00a0 0:00 \/usr\/bin\/python \/bin\/swift-account-replicator \/etc\/swift\/account-server\/account-server.conf<br \/>\n8987 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ss\u00a0\u00a0\u00a0\u00a0 0:00 \/usr\/bin\/python \/bin\/swift-account-reaper \/etc\/swift\/account-server\/account-server.conf<\/p>\n<p>6886 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ss\u00a0\u00a0\u00a0\u00a0 0:00 \/usr\/bin\/python \/bin\/swift-object-server \/etc\/swift\/object-server\/object-server.conf<br \/>\n6903 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 S\u00a0\u00a0\u00a0\u00a0\u00a0 0:00\u00a0 \\_ \/usr\/bin\/python \/bin\/swift-object-server \/etc\/swift\/object-server\/object-server.conf<br \/>\n6904 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 S\u00a0\u00a0\u00a0\u00a0\u00a0 0:00\u00a0 \\_ \/usr\/bin\/python \/bin\/swift-object-server \/etc\/swift\/object-server\/object-server.conf<br \/>\n8981 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ss\u00a0\u00a0\u00a0\u00a0 0:00 \/usr\/bin\/python \/bin\/swift-object-replicator \/etc\/swift\/object-server\/object-server.conf<br \/>\n8983 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ss\u00a0\u00a0\u00a0\u00a0 0:00 \/usr\/bin\/python \/bin\/swift-object-auditor \/etc\/swift\/object-server\/object-server.conf<br \/>\n9026 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 S\u00a0\u00a0\u00a0\u00a0\u00a0 0:00\u00a0 \\_ \/usr\/bin\/python \/bin\/swift-object-auditor \/etc\/swift\/object-server\/object-server.conf<br \/>\n8984 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ss\u00a0\u00a0\u00a0\u00a0 0:00 \/usr\/bin\/python \/bin\/swift-object-expirer \/etc\/swift\/object-expirer.conf<br \/>\n8992 ?\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Ss\u00a0\u00a0\u00a0\u00a0 0:00 \/usr\/bin\/python \/bin\/swift-object-updater \/etc\/swift\/object-server\/object-server.conf<\/p>\n<p><b>\u6d4b\u8bd5\u9a8c\u8bc1\uff1a<\/b><br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">swift -v -V 2 -A http:\/\/10.24.1.47:5000\/v2.0 -U hanborq:admin -K 123456 stat<\/span><\/b><br \/>\n<span style=\"color: #8600a4;\"><b>StorageURL: http:\/\/10.24.1.47:8080\/v1\/AUTH_94d38db32a7d4107beeed36d9e98bf06<br \/>\nAuth Token: 9cfa1f5ff4f24122b50bf1bfea06ae10<\/b><\/span><br \/>\nAccount: AUTH_94d38db32a7d4107beeed36d9e98bf06<br \/>\nContainers: 0<br \/>\nObjects: 0<br \/>\nBytes: 0<br \/>\nAccept-Ranges: bytes<br \/>\nX-Trans-Id: tx39064d1870e348b5bcdf7a37689804fc<\/p>\n<p>#\u00a0<b><span style=\"color: #ff0000;\">curl -k -v -H &#8216;X-Storage-User: hanborq:admin&#8217; -H &#8216;X-Storage-Pass: 123456&#8217; http:\/\/10.24.1.47:5000\/v2.0\/<\/span><\/b><br \/>\n* About to connect() to 10.24.1.47 port 5000 (#0)<br \/>\n*\u00a0\u00a0 Trying 10.24.1.47&#8230;<br \/>\n* connected<br \/>\n* Connected to 10.24.1.47 (10.24.1.47) port 5000 (#0)<br \/>\n&gt; GET \/v2.0\/ HTTP\/1.1<br \/>\n&gt; User-Agent: curl\/7.24.0 (x86_64-redhat-linux-gnu) libcurl\/7.24.0 NSS\/3.13.4.0 zlib\/1.2.5 libidn\/1.24 libssh2\/1.4.1<br \/>\n&gt; Host: 10.24.1.47:5000<br \/>\n&gt; Accept: *\/*<br \/>\n&gt; X-Storage-User: hanborq:admin<br \/>\n&gt; X-Storage-Pass: 123456<br \/>\n&gt;<br \/>\n&lt; HTTP\/1.1 200 OK<br \/>\n&lt; Content-Type: application\/json<br \/>\n&lt; Vary: X-Auth-Token<br \/>\n&lt; Date: Thu, 02 Aug 2012 01:21:00 GMT<br \/>\n&lt; Transfer-Encoding: chunked<br \/>\n&lt;<br \/>\n* Connection #0 to host 10.24.1.47 left intact<br \/>\n{&#8220;version&#8221;: {&#8220;status&#8221;: &#8220;beta&#8221;, &#8220;updated&#8221;: &#8220;2011-11-19T00:00:00Z&#8221;, &#8220;media-types&#8221;: [{&#8220;base&#8221;: &#8220;application\/json&#8221;, &#8220;type&#8221;: &#8220;application\/vnd.openstack.identity-v2.0+json&#8221;}, {&#8220;base&#8221;: &#8220;application\/xml&#8221;, &#8220;type&#8221;: &#8220;application\/vnd.openstack.identity-v2.0+xml&#8221;}], &#8220;id&#8221;: &#8220;v2.0&#8221;, &#8220;links&#8221;: [{&#8220;href&#8221;: &#8220;http:\/\/10.24.1.47:5000\/v2.0\/&#8221;, &#8220;rel&#8221;: &#8220;self&#8221;}, {&#8220;href&#8221;: &#8220;http:\/\/docs.openstack.org\/api\/openstack-identity-service\/2.0\/content\/&#8221;, &#8220;type&#8221;: &#8220;text\/html&#8221;, &#8220;rel&#8221;: &#8220;describedby&#8221;}, {&#8220;href&#8221;: &#8220;http:\/\/docs.openstack.org\/api\/openstack-identity-service\/2.0\/identity-dev-guide-2.0.pdf&#8221;, &#8220;type&#8221;: &#8220;application\/pdf&#8221;, &#8220;rel&#8221;: &#8220;describedby&#8221;}]}}* Closing connection #0<\/p>\n<p>\u8fd9\u91cc\u7684X-Auth-Token\u548cURL\u662f\u4ece\u4e0a\u9762\u7684swift\u547d\u4ee4\u51fa\u6765\u7684\uff1a<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">curl -k -v -H &#8216;X-Auth-Token:<\/span>\u00a0<span style=\"color: #6a0081;\">9cfa1f5ff4f24122b50bf1bfea06ae10<\/span><span style=\"color: #ff0000;\">&#8216;<\/span>\u00a0<span style=\"color: #6a0081;\">http:\/\/10.24.1.47:8080\/v1\/AUTH_94d38db32a7d4107beeed36d9e98bf06<\/span><\/b><br \/>\n* About to connect() to 10.24.1.47 port 8080 (#0)<br \/>\n*\u00a0\u00a0 Trying 10.24.1.47&#8230;<br \/>\n* connected<br \/>\n* Connected to 10.24.1.47 (10.24.1.47) port 8080 (#0)<br \/>\n&gt; GET \/v1\/AUTH_94d38db32a7d4107beeed36d9e98bf06 HTTP\/1.1<br \/>\n&gt; User-Agent: curl\/7.24.0 (x86_64-redhat-linux-gnu) libcurl\/7.24.0 NSS\/3.13.4.0 zlib\/1.2.5 libidn\/1.24 libssh2\/1.4.1<br \/>\n&gt; Host: 10.24.1.47:8080<br \/>\n&gt; Accept: *\/*<br \/>\n&gt; X-Auth-Token: 9cfa1f5ff4f24122b50bf1bfea06ae10<br \/>\n&gt;<br \/>\n&lt; HTTP\/1.1 204 No Content<br \/>\n&lt; X-Account-Object-Count: 0<br \/>\n&lt; X-Account-Bytes-Used: 0<br \/>\n&lt; X-Account-Container-Count: 0<br \/>\n&lt; Accept-Ranges: bytes<br \/>\n&lt; X-Trans-Id: tx9f12be72cf144e25a858528673841e91<br \/>\n&lt; Content-Length: 0<br \/>\n&lt; Date: Thu, 02 Aug 2012 01:18:08 GMT<br \/>\n&lt;<br \/>\n* Connection #0 to host 10.24.1.47 left intact<br \/>\n* Closing connection #0<\/p>\n<p># echo &#8220;test&#8221; &gt; test<br \/>\n# echo &#8220;test1&#8221; &gt; test1<br \/>\n#\u00a0<b><span style=\"color: #ff0000;\">swift -v -A http:\/\/10.24.1.47:5000\/v2.0 -U hanborq:admin -K 123456 upload test_dir test<\/span><\/b><br \/>\ntest<br \/>\n# swift -v -A http:\/\/10.24.1.47:5000\/v2.0 -U hanborq:admin -K 123456 upload test_dir test1<br \/>\ntest1<\/p>\n<p># swift -v -A http:\/\/10.24.1.47:5000\/v2.0 -U hanborq:admin -K 123456 list<br \/>\ntest_dir<\/p>\n<p>#\u00a0<b><span style=\"color: #ff0000;\">swift -v -A http:\/\/10.24.1.47:5000\/v2.0 -U hanborq:admin -K 123456 list test_dir<\/span><\/b><br \/>\ntest<br \/>\ntest1<\/p>\n<p># swift -v -A http:\/\/10.24.1.47:5000\/v2.0 -U hanborq:admin -K 123456 post test_dir test -m testKey:testValue<\/p>\n<p>#\u00a0<b><span style=\"color: #ff0000;\">swift -v -A http:\/\/10.24.1.47:5000\/v2.0 -U hanborq:admin -K 123456 download test_dir test<\/span><\/b><br \/>\ntest<\/p>\n<\/div>\n<div>#\u00a0<b><span style=\"color: #ff0000;\">swift -v -V 2 -A http:\/\/10.24.1.47:5000\/v2.0 -U hanborq:admin -K 123456 stat test_dir test<\/span><\/b><br \/>\nAccount: AUTH_94d38db32a7d4107beeed36d9e98bf06<br \/>\nContainer: test_dir<br \/>\nObject: test<br \/>\nContent Type: text\/plain<br \/>\nContent Length: 13<br \/>\nLast Modified: Thu, 02 Aug 2012 01:48:56 GMT<br \/>\nETag: d8e8fca2dc0f896fd7cb4cb0031ba249<br \/>\nMeta Testkey: testValue<br \/>\nAccept-Ranges: bytes<br \/>\nX-Trans-Id: txebf0263f223240afac082269ec17ee83<\/div>\n<div><\/div>\n<div><b>\u67e5\u770b\u5b9e\u9645linux\u5b58\u50a8\u76ee\u5f55\uff1a<\/b><\/div>\n<div># du -ah \/srv\/node\/sdc\/<br \/>\n16\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/lost+found<br \/>\n1024\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/accounts\/286\/0f2\/8f0c9bc2699f8b21bb87fbd9e4f810f2\/8f0c9bc2699f8b21bb87fbd9e4f810f2.db<br \/>\n0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/accounts\/286\/0f2\/8f0c9bc2699f8b21bb87fbd9e4f810f2\/8f0c9bc2699f8b21bb87fbd9e4f810f2.db.pending<br \/>\n1028\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/accounts\/286\/0f2\/8f0c9bc2699f8b21bb87fbd9e4f810f2<br \/>\n1032\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/accounts\/286\/0f2<br \/>\n1036\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/accounts\/286<br \/>\n1040\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/accounts<br \/>\n4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/objects\/17\/hashes.pkl<br \/>\n8\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/objects\/17\/b08\/089ab851c9eee4d593933a774e08db08\/1343872136.81044.data<br \/>\n12\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/objects\/17\/b08\/089ab851c9eee4d593933a774e08db08<br \/>\n16\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/objects\/17\/b08<br \/>\n24\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/objects\/17<br \/>\n8\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/objects\/76\/f76\/2665accb630458936218a6aa241aff76\/1343871780.63486.data<br \/>\n12\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/objects\/76\/f76\/2665accb630458936218a6aa241aff76<br \/>\n16\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/objects\/76\/f76<br \/>\n4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/objects\/76\/hashes.pkl<br \/>\n24\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/objects\/76<br \/>\n52\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/objects<br \/>\n4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/tmp<br \/>\n0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/containers\/308\/bb4\/9a5a30b593157c46887d0b6ddd531bb4\/9a5a30b593157c46887d0b6ddd531bb4.db.pending<br \/>\n1024\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/containers\/308\/bb4\/9a5a30b593157c46887d0b6ddd531bb4\/9a5a30b593157c46887d0b6ddd531bb4.db<br \/>\n1028\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/containers\/308\/bb4\/9a5a30b593157c46887d0b6ddd531bb4<br \/>\n1032\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/containers\/308\/bb4<br \/>\n1036\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/containers\/308<br \/>\n16\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/containers\/117\/d92\/3a87af06161074823d53e3711c3c0d92\/3a87af06161074823d53e3711c3c0d92.db<br \/>\n20\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/containers\/117\/d92\/3a87af06161074823d53e3711c3c0d92<br \/>\n24\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/containers\/117\/d92<br \/>\n28\u00a0\u00a0\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/containers\/117<br \/>\n1068\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/containers<br \/>\n2184\u00a0\u00a0\u00a0 \/srv\/node\/sdc\/<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Swift\u5bf9\u8c61\u5b58\u50a8 \u6240\u6709\u5b58\u50a8\u7684\u6587\u4ef6\u7cfb\u7edf\u683c\u5f0f\u6700\u597d\u4e3aext4\u6216\u8005xfs\uff0c\u4ee5\u4fbf\u652f\u6301xattrs\u5c5e\u6027\u3002 \u6bcf\u53f0\u673a\u5668\u90fd\u6309\u7167 &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[209,257,259,94,258],"class_list":["post-329","post","type-post","status-publish","format-standard","hentry","category-4","tag-openstack","tag-swift","tag-xattrs","tag-94","tag-258"],"views":1385,"_links":{"self":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/329","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=329"}],"version-history":[{"count":1,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/329\/revisions"}],"predecessor-version":[{"id":330,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/329\/revisions\/330"}],"wp:attachment":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=329"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}