zoukankan      html  css  js  c++  java
  • openstack(liberty):部署实验平台(三,简单版本软件安装 之cinder,swift)

    今天这里追加存储相关的部署,主要是Block和Object,为了看到效果,简单的部署在单节点上,即Block一个节点,Object对应一个节点。

    读者可能会觉得我这个图和之前的两个post有点点不同,对,存储的两个节点不同,这个没有关系,之所以有着个变化,是我没有时间继续在这个项目上投入了,我要进入另一个相对更紧急的项目,不说了,计划总不如变化快。。。扯淡了。

    部署cinder。

    序号cx表示在controller节点上的操作,序号为ccx表示在cinder节点上的操作。

    c1. 准备数据库

    1 mysql -u root -p
    2 CREATE DATABASE cinder;
    3 GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'openstack';
    4 GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'openstack';

    c2. 创建服务

     1 source admin-openrc.sh
     2 
     3 openstack user create --domain default --password-prompt cinder
     4 openstack role add --project service --user cinder admin
     5 
     6 openstack service create --name cinder   --description "OpenStack Block Storage" volume
     7 openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
     8 
     9 openstack endpoint create --region RegionOne volume public http://node0:8776/v1/%(tenant_id)s
    10 openstack endpoint create --region RegionOne volume internal http://node0:8776/v1/%(tenant_id)s
    11 openstack endpoint create --region RegionOne volume admin http://node0:8776/v1/%(tenant_id)s
    12 
    13 openstack endpoint create --region RegionOne volumev2 public http://node0:8776/v1/%(tenant_id)s
    14 openstack endpoint create --region RegionOne volumev2 internal http://node0:8776/v1/%(tenant_id)s
    15 openstack endpoint create --region RegionOne volumev2 admin http://node0:8776/v1/%(tenant_id)s

    c3. 安装组件

    1 yum install openstack-cinder python-cinderclient

    c4.配置/etc/cinder/cinder.conf,下面是要修改的,配置文件中的其他部分可以保留默认的信息。

     1 [DEFAULT]
     2 rpc_backend = rabbit
     3 auth_strategy = keystone
     4 my_ip = 192.168.1.100
     5 verbose = True
     6 
     7 [database]
     8 connection = mysql://cinder:openstack@node0/cinder
     9 
    10 [oslo_messaging_rabbit]
    11 rabbit_host = node0
    12 rabbit_userid = openstack
    13 rabbit_password = openstack
    14 
    15 [keystone_authtoken]
    16 auth_uri = http://node0:5000
    17 auth_url = http://node0:35357
    18 auth_plugin = password
    19 project_domain_id = default
    20 user_domain_id = default
    21 project_name = service
    22 username = cinder
    23 password = openstack
    24 
    25 [oslo_concurrency]
    26 lock_path = /var/lib/cinder/tmp

    c5. 同步数据库

    su -s /bin/sh -c "cinder-manage db sync" cinder
      1 [root@node0 opt]# su -s /bin/sh -c "cinder-manage db sync" cinder
      2 No handlers could be found for logger "oslo_config.cfg"
      3 /usr/lib/python2.7/site-packages/oslo_db/sqlalchemy/enginefacade.py:241: NotSupportedWarning: Configuration option(s) ['use_tpool'] not supported
      4   exception.NotSupportedWarning
      5 2016-02-24 09:26:25.731 1199 INFO migrate.versioning.api [-] 0 -> 1... 
      6 2016-02-24 09:26:27.005 1199 INFO migrate.versioning.api [-] done
      7 2016-02-24 09:26:27.005 1199 INFO migrate.versioning.api [-] 1 -> 2... 
      8 2016-02-24 09:26:27.338 1199 INFO migrate.versioning.api [-] done
      9 2016-02-24 09:26:27.339 1199 INFO migrate.versioning.api [-] 2 -> 3... 
     10 2016-02-24 09:26:27.396 1199 INFO migrate.versioning.api [-] done
     11 2016-02-24 09:26:27.397 1199 INFO migrate.versioning.api [-] 3 -> 4... 
     12 2016-02-24 09:26:27.731 1199 INFO migrate.versioning.api [-] done
     13 2016-02-24 09:26:27.731 1199 INFO migrate.versioning.api [-] 4 -> 5... 
     14 2016-02-24 09:26:27.814 1199 INFO migrate.versioning.api [-] done
     15 2016-02-24 09:26:27.814 1199 INFO migrate.versioning.api [-] 5 -> 6... 
     16 2016-02-24 09:26:27.889 1199 INFO migrate.versioning.api [-] done
     17 2016-02-24 09:26:27.889 1199 INFO migrate.versioning.api [-] 6 -> 7... 
     18 2016-02-24 09:26:27.964 1199 INFO migrate.versioning.api [-] done
     19 2016-02-24 09:26:27.964 1199 INFO migrate.versioning.api [-] 7 -> 8... 
     20 2016-02-24 09:26:28.014 1199 INFO migrate.versioning.api [-] done
     21 2016-02-24 09:26:28.014 1199 INFO migrate.versioning.api [-] 8 -> 9... 
     22 2016-02-24 09:26:28.072 1199 INFO migrate.versioning.api [-] done
     23 2016-02-24 09:26:28.073 1199 INFO migrate.versioning.api [-] 9 -> 10... 
     24 2016-02-24 09:26:28.123 1199 INFO migrate.versioning.api [-] done
     25 2016-02-24 09:26:28.124 1199 INFO migrate.versioning.api [-] 10 -> 11... 
     26 2016-02-24 09:26:28.214 1199 INFO migrate.versioning.api [-] done
     27 2016-02-24 09:26:28.214 1199 INFO migrate.versioning.api [-] 11 -> 12... 
     28 2016-02-24 09:26:28.297 1199 INFO migrate.versioning.api [-] done
     29 2016-02-24 09:26:28.298 1199 INFO migrate.versioning.api [-] 12 -> 13... 
     30 2016-02-24 09:26:28.381 1199 INFO migrate.versioning.api [-] done
     31 2016-02-24 09:26:28.381 1199 INFO migrate.versioning.api [-] 13 -> 14... 
     32 2016-02-24 09:26:28.465 1199 INFO migrate.versioning.api [-] done
     33 2016-02-24 09:26:28.465 1199 INFO migrate.versioning.api [-] 14 -> 15... 
     34 2016-02-24 09:26:28.489 1199 INFO migrate.versioning.api [-] done
     35 2016-02-24 09:26:28.489 1199 INFO migrate.versioning.api [-] 15 -> 16... 
     36 2016-02-24 09:26:28.548 1199 INFO migrate.versioning.api [-] done
     37 2016-02-24 09:26:28.548 1199 INFO migrate.versioning.api [-] 16 -> 17... 
     38 2016-02-24 09:26:28.807 1199 INFO migrate.versioning.api [-] done
     39 2016-02-24 09:26:28.807 1199 INFO migrate.versioning.api [-] 17 -> 18... 
     40 2016-02-24 09:26:28.991 1199 INFO migrate.versioning.api [-] done
     41 2016-02-24 09:26:28.992 1199 INFO migrate.versioning.api [-] 18 -> 19... 
     42 2016-02-24 09:26:29.074 1199 INFO migrate.versioning.api [-] done
     43 2016-02-24 09:26:29.074 1199 INFO migrate.versioning.api [-] 19 -> 20... 
     44 2016-02-24 09:26:29.132 1199 INFO migrate.versioning.api [-] done
     45 2016-02-24 09:26:29.133 1199 INFO migrate.versioning.api [-] 20 -> 21... 
     46 2016-02-24 09:26:29.183 1199 INFO migrate.versioning.api [-] done
     47 2016-02-24 09:26:29.183 1199 INFO migrate.versioning.api [-] 21 -> 22... 
     48 2016-02-24 09:26:29.257 1199 INFO migrate.versioning.api [-] done
     49 2016-02-24 09:26:29.257 1199 INFO migrate.versioning.api [-] 22 -> 23... 
     50 2016-02-24 09:26:29.349 1199 INFO migrate.versioning.api [-] done
     51 2016-02-24 09:26:29.349 1199 INFO migrate.versioning.api [-] 23 -> 24... 
     52 2016-02-24 09:26:29.649 1199 INFO migrate.versioning.api [-] done
     53 2016-02-24 09:26:29.649 1199 INFO migrate.versioning.api [-] 24 -> 25... 
     54 2016-02-24 09:26:30.158 1199 INFO migrate.versioning.api [-] done
     55 2016-02-24 09:26:30.158 1199 INFO migrate.versioning.api [-] 25 -> 26... 
     56 2016-02-24 09:26:30.183 1199 INFO migrate.versioning.api [-] done
     57 2016-02-24 09:26:30.184 1199 INFO migrate.versioning.api [-] 26 -> 27... 
     58 2016-02-24 09:26:30.191 1199 INFO migrate.versioning.api [-] done
     59 2016-02-24 09:26:30.192 1199 INFO migrate.versioning.api [-] 27 -> 28... 
     60 2016-02-24 09:26:30.200 1199 INFO migrate.versioning.api [-] done
     61 2016-02-24 09:26:30.200 1199 INFO migrate.versioning.api [-] 28 -> 29... 
     62 2016-02-24 09:26:30.208 1199 INFO migrate.versioning.api [-] done
     63 2016-02-24 09:26:30.208 1199 INFO migrate.versioning.api [-] 29 -> 30... 
     64 2016-02-24 09:26:30.216 1199 INFO migrate.versioning.api [-] done
     65 2016-02-24 09:26:30.217 1199 INFO migrate.versioning.api [-] 30 -> 31... 
     66 2016-02-24 09:26:30.233 1199 INFO migrate.versioning.api [-] done
     67 2016-02-24 09:26:30.233 1199 INFO migrate.versioning.api [-] 31 -> 32... 
     68 2016-02-24 09:26:30.342 1199 INFO migrate.versioning.api [-] done
     69 2016-02-24 09:26:30.342 1199 INFO migrate.versioning.api [-] 32 -> 33... 
     70 /usr/lib64/python2.7/site-packages/sqlalchemy/sql/schema.py:2922: SAWarning: Table 'encryption' specifies columns 'volume_type_id' as primary_key=True, not matching locally specified columns 'encryption_id'; setting the current primary key columns to 'encryption_id'. This warning may become an exception in a future release
     71   ", ".join("'%s'" % c.name for c in self.columns)
     72 2016-02-24 09:26:30.600 1199 INFO migrate.versioning.api [-] done
     73 2016-02-24 09:26:30.600 1199 INFO migrate.versioning.api [-] 33 -> 34... 
     74 2016-02-24 09:26:30.675 1199 INFO migrate.versioning.api [-] done
     75 2016-02-24 09:26:30.675 1199 INFO migrate.versioning.api [-] 34 -> 35... 
     76 2016-02-24 09:26:30.759 1199 INFO migrate.versioning.api [-] done
     77 2016-02-24 09:26:30.759 1199 INFO migrate.versioning.api [-] 35 -> 36... 
     78 2016-02-24 09:26:30.860 1199 INFO migrate.versioning.api [-] done
     79 2016-02-24 09:26:30.860 1199 INFO migrate.versioning.api [-] 36 -> 37... 
     80 2016-02-24 09:26:30.942 1199 INFO migrate.versioning.api [-] done
     81 2016-02-24 09:26:30.943 1199 INFO migrate.versioning.api [-] 37 -> 38... 
     82 2016-02-24 09:26:31.059 1199 INFO migrate.versioning.api [-] done
     83 2016-02-24 09:26:31.059 1199 INFO migrate.versioning.api [-] 38 -> 39... 
     84 2016-02-24 09:26:31.134 1199 INFO migrate.versioning.api [-] done
     85 2016-02-24 09:26:31.134 1199 INFO migrate.versioning.api [-] 39 -> 40... 
     86 2016-02-24 09:26:31.502 1199 INFO migrate.versioning.api [-] done
     87 2016-02-24 09:26:31.502 1199 INFO migrate.versioning.api [-] 40 -> 41... 
     88 2016-02-24 09:26:31.577 1199 INFO migrate.versioning.api [-] done
     89 2016-02-24 09:26:31.577 1199 INFO migrate.versioning.api [-] 41 -> 42... 
     90 2016-02-24 09:26:31.586 1199 INFO migrate.versioning.api [-] done
     91 2016-02-24 09:26:31.586 1199 INFO migrate.versioning.api [-] 42 -> 43... 
     92 2016-02-24 09:26:31.594 1199 INFO migrate.versioning.api [-] done
     93 2016-02-24 09:26:31.594 1199 INFO migrate.versioning.api [-] 43 -> 44... 
     94 2016-02-24 09:26:31.602 1199 INFO migrate.versioning.api [-] done
     95 2016-02-24 09:26:31.602 1199 INFO migrate.versioning.api [-] 44 -> 45... 
     96 2016-02-24 09:26:31.610 1199 INFO migrate.versioning.api [-] done
     97 2016-02-24 09:26:31.611 1199 INFO migrate.versioning.api [-] 45 -> 46... 
     98 2016-02-24 09:26:31.619 1199 INFO migrate.versioning.api [-] done
     99 2016-02-24 09:26:31.619 1199 INFO migrate.versioning.api [-] 46 -> 47... 
    100 2016-02-24 09:26:31.643 1199 INFO migrate.versioning.api [-] done
    101 2016-02-24 09:26:31.644 1199 INFO migrate.versioning.api [-] 47 -> 48... 
    102 2016-02-24 09:26:31.719 1199 INFO migrate.versioning.api [-] done
    103 2016-02-24 09:26:31.719 1199 INFO migrate.versioning.api [-] 48 -> 49... 
    104 2016-02-24 09:26:31.852 1199 INFO migrate.versioning.api [-] done
    105 2016-02-24 09:26:31.853 1199 INFO migrate.versioning.api [-] 49 -> 50... 
    106 2016-02-24 09:26:31.936 1199 INFO migrate.versioning.api [-] done
    107 2016-02-24 09:26:31.936 1199 INFO migrate.versioning.api [-] 50 -> 51... 
    108 2016-02-24 09:26:32.019 1199 INFO migrate.versioning.api [-] done
    109 2016-02-24 09:26:32.020 1199 INFO migrate.versioning.api [-] 51 -> 52... 
    110 2016-02-24 09:26:32.120 1199 INFO migrate.versioning.api [-] done
    111 2016-02-24 09:26:32.120 1199 INFO migrate.versioning.api [-] 52 -> 53... 
    112 2016-02-24 09:26:32.378 1199 INFO migrate.versioning.api [-] done
    113 2016-02-24 09:26:32.378 1199 INFO migrate.versioning.api [-] 53 -> 54... 
    114 2016-02-24 09:26:32.470 1199 INFO migrate.versioning.api [-] done
    115 2016-02-24 09:26:32.470 1199 INFO migrate.versioning.api [-] 54 -> 55... 
    116 2016-02-24 09:26:32.662 1199 INFO migrate.versioning.api [-] done
    117 2016-02-24 09:26:32.662 1199 INFO migrate.versioning.api [-] 55 -> 56... 
    118 2016-02-24 09:26:32.670 1199 INFO migrate.versioning.api [-] done
    119 2016-02-24 09:26:32.670 1199 INFO migrate.versioning.api [-] 56 -> 57... 
    120 2016-02-24 09:26:32.678 1199 INFO migrate.versioning.api [-] done
    121 2016-02-24 09:26:32.678 1199 INFO migrate.versioning.api [-] 57 -> 58... 
    122 2016-02-24 09:26:32.686 1199 INFO migrate.versioning.api [-] done
    123 2016-02-24 09:26:32.686 1199 INFO migrate.versioning.api [-] 58 -> 59... 
    124 2016-02-24 09:26:32.695 1199 INFO migrate.versioning.api [-] done
    125 2016-02-24 09:26:32.695 1199 INFO migrate.versioning.api [-] 59 -> 60... 
    126 2016-02-24 09:26:32.703 1199 INFO migrate.versioning.api [-] done
    127 [root@node0 opt]# 
    View Code

    c6. 配置nova /etc/nova/nova.conf

    1 [cinder]
    2 os_region_name = RegionOne

    c7. 重启计算API服务 (费比较长的时间

    1 systemctl restart openstack-nova-api.service
      1 /var/log/message:
      2 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.869 18958 INFO oslo_service.service [-] Child 18979 exited with status 0
      3 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.870 18958 INFO oslo_service.service [-] Child 18986 killed by signal 15
      4 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.871 18958 INFO oslo_service.service [-] Child 18990 exited with status 0
      5 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.872 18958 INFO oslo_service.service [-] Child 18977 exited with status 0
      6 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.880 18958 INFO oslo_service.service [-] Child 19019 exited with status 0
      7 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.882 18958 INFO oslo_service.service [-] Child 19023 killed by signal 15
      8 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.883 18958 INFO oslo_service.service [-] Child 19025 exited with status 0
      9 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.885 18958 INFO oslo_service.service [-] Child 18984 exited with status 0
     10 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.886 18958 INFO oslo_service.service [-] Child 19018 exited with status 0
     11 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.886 18958 INFO oslo_service.service [-] Child 19024 exited with status 0
     12 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.887 18958 INFO oslo_service.service [-] Child 18983 exited with status 0
     13 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.890 18958 INFO oslo_service.service [-] Child 19010 killed by signal 15
     14 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.891 18958 INFO oslo_service.service [-] Child 19017 killed by signal 15
     15 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.894 18958 INFO oslo_service.service [-] Child 18980 exited with status 0
     16 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.896 18958 INFO oslo_service.service [-] Child 19021 exited with status 0
     17 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.896 18958 INFO oslo_service.service [-] Child 18978 exited with status 0
     18 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.897 18958 INFO oslo_service.service [-] Child 18992 exited with status 0
     19 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.898 18958 INFO oslo_service.service [-] Child 19026 killed by signal 15
     20 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.899 18958 INFO oslo_service.service [-] Child 18987 exited with status 0
     21 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.901 18958 INFO oslo_service.service [-] Child 18991 killed by signal 15
     22 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.901 18958 INFO oslo_service.service [-] Child 19016 killed by signal 15
     23 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.902 18958 INFO oslo_service.service [-] Child 19012 exited with status 0
     24 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.902 18958 INFO oslo_service.service [-] Child 19013 exited with status 0
     25 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.904 18958 INFO oslo_service.service [-] Child 18982 killed by signal 15
     26 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.904 18958 INFO oslo_service.service [-] Child 19015 killed by signal 15
     27 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.905 18958 INFO oslo_service.service [-] Child 19020 killed by signal 15
     28 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.906 18958 INFO oslo_service.service [-] Child 18988 killed by signal 15
     29 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.909 18958 INFO oslo_service.service [-] Child 18981 exited with status 0
     30 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.910 18958 INFO oslo_service.service [-] Child 19022 killed by signal 15
     31 Feb 24 09:39:06 node0 nova-api: 2016-02-24 09:39:06.911 18958 INFO oslo_service.service [-] Child 19011 killed by signal 15
     32 Feb 24 09:39:07 node0 dnsmasq-dhcp[21792]: DHCPDISCOVER(ns-3bf4d3fc-7e) 90:b1:1c:2e:01:b4 no address available
     33 Feb 24 09:39:15 node0 dnsmasq-dhcp[21792]: DHCPDISCOVER(ns-3bf4d3fc-7e) 90:b1:1c:2e:01:b4 no address available
     34 Feb 24 09:39:25 node0 dnsmasq-dhcp[21792]: DHCPDISCOVER(ns-3bf4d3fc-7e) 90:b1:1c:2e:01:b4 no address available
     35 Feb 24 09:39:37 node0 dnsmasq-dhcp[21792]: DHCPDISCOVER(ns-3bf4d3fc-7e) 90:b1:1c:2e:01:b4 no address available
     36 Feb 24 09:39:43 node0 dnsmasq-dhcp[21792]: DHCPDISCOVER(ns-3bf4d3fc-7e) 90:b1:1c:2e:01:b4 no address available
     37 Feb 24 09:39:45 node0 dnsmasq-dhcp[21792]: DHCPDISCOVER(ns-3bf4d3fc-7e) 90:b1:1c:2e:01:b4 no address available
     38 Feb 24 09:39:52 node0 dnsmasq-dhcp[21792]: DHCPDISCOVER(ns-3bf4d3fc-7e) 90:b1:1c:2e:01:b4 no address available
     39 Feb 24 09:39:59 node0 dnsmasq-dhcp[21792]: DHCPDISCOVER(ns-3bf4d3fc-7e) 90:b1:1c:2e:01:b4 no address available
     40 Feb 24 09:40:01 node0 systemd: Started Session 3527 of user root.
     41 Feb 24 09:40:01 node0 systemd: Starting Session 3527 of user root.
     42 Feb 24 09:40:11 node0 dnsmasq-dhcp[21792]: DHCPDISCOVER(ns-3bf4d3fc-7e) 90:b1:1c:2e:01:b4 no address available
     43 Feb 24 09:40:25 node0 dnsmasq-dhcp[21792]: DHCPDISCOVER(ns-3bf4d3fc-7e) 90:b1:1c:2e:01:b4 no address available
     44 Feb 24 09:40:33 node0 nova-scheduler: 2016-02-24 09:40:33.386 9375 INFO nova.scheduler.host_manager [req-57515c80-9016-43ab-ad68-73f9dc626f5e - - - - -] Successfully synced instances from host 'node1'.
     45 Feb 24 09:40:36 node0 systemd: openstack-nova-api.service stop-sigterm timed out. Killing.
     46 Feb 24 09:40:36 node0 systemd: openstack-nova-api.service: main process exited, code=killed, status=9/KILL
     47 Feb 24 09:40:36 node0 systemd: Unit openstack-nova-api.service entered failed state.
     48 Feb 24 09:40:36 node0 systemd: openstack-nova-api.service failed.
     49 Feb 24 09:40:36 node0 systemd: Starting OpenStack Nova API Server...
     50 Feb 24 09:40:39 node0 nova-api: No handlers could be found for logger "oslo_config.cfg"
     51 Feb 24 09:40:39 node0 nova-api: 2016-02-24 09:40:39.872 2039 INFO oslo_service.periodic_task [-] Skipping periodic task _periodic_update_dns because its interval is negative
     52 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.157 2039 INFO nova.api.openstack [-] Loaded extensions: ['extensions', 'flavors', 'image-metadata', 'image-size', 'images', 'ips', 'limits', 'os-access-ips', 'os-admin-actions', 'os-admin-password', 'os-agents', 'os-aggregates', 'os-assisted-volume-snapshots', 'os-attach-interfaces', 'os-availability-zone', 'os-baremetal-nodes', 'os-block-device-mapping', 'os-cells', 'os-certificates', 'os-cloudpipe', 'os-config-drive', 'os-console-auth-tokens', 'os-console-output', 'os-consoles', 'os-create-backup', 'os-deferred-delete', 'os-disk-config', 'os-evacuate', 'os-extended-availability-zone', 'os-extended-server-attributes', 'os-extended-status', 'os-extended-volumes', 'os-fixed-ips', 'os-flavor-access', 'os-flavor-extra-specs', 'os-flavor-manage', 'os-flavor-rxtx', 'os-floating-ip-dns', 'os-floating-ip-pools', 'os-floating-ips', 'os-floating-ips-bulk', 'os-fping', 'os-hide-server-addresses', 'os-hosts', 'os-hypervisors', 'os-instance-actions', 'os-instance-usage-audit-log', 'os-keypairs', 'os-lock-server', 'os-migrate-server', 'os-migrations', 'os-multinic', 'os-multiple-create', 'os-networks', 'os-networks-associate', 'os-pause-server', 'os-personality', 'os-preserve-ephemeral-rebuild', 'os-quota-class-sets', 'os-quota-sets', 'os-remote-consoles', 'os-rescue', 'os-scheduler-hints', 'os-security-group-default-rules', 'os-security-groups', 'os-server-diagnostics', 'os-server-external-events', 'os-server-groups', 'os-server-password', 'os-server-usage', 'os-services', 'os-shelve', 'os-simple-tenant-usage', 'os-suspend-server', 'os-tenant-networks', 'os-used-limits', 'os-user-data', 'os-virtual-interfaces', 'os-volumes', 'server-metadata', 'servers', 'versions']
     53 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.161 2039 WARNING oslo_config.cfg [-] Option "username" from group "keystone_authtoken" is deprecated. Use option "user-name" from group "keystone_authtoken".
     54 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.317 2039 INFO nova.api.openstack [-] Loaded extensions: ['extensions', 'flavors', 'image-metadata', 'image-size', 'images', 'ips', 'limits', 'os-access-ips', 'os-admin-actions', 'os-admin-password', 'os-agents', 'os-aggregates', 'os-assisted-volume-snapshots', 'os-attach-interfaces', 'os-availability-zone', 'os-baremetal-nodes', 'os-block-device-mapping', 'os-cells', 'os-certificates', 'os-cloudpipe', 'os-config-drive', 'os-console-auth-tokens', 'os-console-output', 'os-consoles', 'os-create-backup', 'os-deferred-delete', 'os-disk-config', 'os-evacuate', 'os-extended-availability-zone', 'os-extended-server-attributes', 'os-extended-status', 'os-extended-volumes', 'os-fixed-ips', 'os-flavor-access', 'os-flavor-extra-specs', 'os-flavor-manage', 'os-flavor-rxtx', 'os-floating-ip-dns', 'os-floating-ip-pools', 'os-floating-ips', 'os-floating-ips-bulk', 'os-fping', 'os-hide-server-addresses', 'os-hosts', 'os-hypervisors', 'os-instance-actions', 'os-instance-usage-audit-log', 'os-keypairs', 'os-lock-server', 'os-migrate-server', 'os-migrations', 'os-multinic', 'os-multiple-create', 'os-networks', 'os-networks-associate', 'os-pause-server', 'os-personality', 'os-preserve-ephemeral-rebuild', 'os-quota-class-sets', 'os-quota-sets', 'os-remote-consoles', 'os-rescue', 'os-scheduler-hints', 'os-security-group-default-rules', 'os-security-groups', 'os-server-diagnostics', 'os-server-external-events', 'os-server-groups', 'os-server-password', 'os-server-usage', 'os-services', 'os-shelve', 'os-simple-tenant-usage', 'os-suspend-server', 'os-tenant-networks', 'os-used-limits', 'os-user-data', 'os-virtual-interfaces', 'os-volumes', 'server-metadata', 'servers', 'versions']
     55 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.479 2039 INFO nova.wsgi [-] osapi_compute listening on 0.0.0.0:8774
     56 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.479 2039 INFO oslo_service.service [-] Starting 16 workers
     57 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.482 2039 INFO oslo_service.service [-] Started child 2050
     58 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.485 2050 INFO nova.osapi_compute.wsgi.server [-] (2050) wsgi starting up on http://0.0.0.0:8774/
     59 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.486 2039 INFO oslo_service.service [-] Started child 2051
     60 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.489 2039 INFO oslo_service.service [-] Started child 2052
     61 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.490 2051 INFO nova.osapi_compute.wsgi.server [-] (2051) wsgi starting up on http://0.0.0.0:8774/
     62 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.492 2052 INFO nova.osapi_compute.wsgi.server [-] (2052) wsgi starting up on http://0.0.0.0:8774/
     63 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.493 2039 INFO oslo_service.service [-] Started child 2053
     64 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.495 2053 INFO nova.osapi_compute.wsgi.server [-] (2053) wsgi starting up on http://0.0.0.0:8774/
     65 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.496 2039 INFO oslo_service.service [-] Started child 2054
     66 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.500 2039 INFO oslo_service.service [-] Started child 2055
     67 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.501 2054 INFO nova.osapi_compute.wsgi.server [-] (2054) wsgi starting up on http://0.0.0.0:8774/
     68 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.502 2055 INFO nova.osapi_compute.wsgi.server [-] (2055) wsgi starting up on http://0.0.0.0:8774/
     69 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.503 2039 INFO oslo_service.service [-] Started child 2056
     70 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.507 2039 INFO oslo_service.service [-] Started child 2057
     71 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.507 2056 INFO nova.osapi_compute.wsgi.server [-] (2056) wsgi starting up on http://0.0.0.0:8774/
     72 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.509 2057 INFO nova.osapi_compute.wsgi.server [-] (2057) wsgi starting up on http://0.0.0.0:8774/
     73 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.510 2039 INFO oslo_service.service [-] Started child 2058
     74 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.513 2058 INFO nova.osapi_compute.wsgi.server [-] (2058) wsgi starting up on http://0.0.0.0:8774/
     75 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.514 2039 INFO oslo_service.service [-] Started child 2059
     76 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.518 2039 INFO oslo_service.service [-] Started child 2060
     77 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.518 2059 INFO nova.osapi_compute.wsgi.server [-] (2059) wsgi starting up on http://0.0.0.0:8774/
     78 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.521 2039 INFO oslo_service.service [-] Started child 2061
     79 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.522 2060 INFO nova.osapi_compute.wsgi.server [-] (2060) wsgi starting up on http://0.0.0.0:8774/
     80 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.524 2061 INFO nova.osapi_compute.wsgi.server [-] (2061) wsgi starting up on http://0.0.0.0:8774/
     81 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.525 2039 INFO oslo_service.service [-] Started child 2062
     82 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.528 2039 INFO oslo_service.service [-] Started child 2063
     83 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.528 2062 INFO nova.osapi_compute.wsgi.server [-] (2062) wsgi starting up on http://0.0.0.0:8774/
     84 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.531 2063 INFO nova.osapi_compute.wsgi.server [-] (2063) wsgi starting up on http://0.0.0.0:8774/
     85 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.532 2039 INFO oslo_service.service [-] Started child 2064
     86 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.534 2064 INFO nova.osapi_compute.wsgi.server [-] (2064) wsgi starting up on http://0.0.0.0:8774/
     87 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.535 2039 INFO oslo_service.service [-] Started child 2065
     88 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.538 2039 INFO nova.network.driver [-] Loading network driver 'nova.network.linux_net'
     89 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.539 2065 INFO nova.osapi_compute.wsgi.server [-] (2065) wsgi starting up on http://0.0.0.0:8774/
     90 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.766 2039 INFO nova.wsgi [-] metadata listening on 0.0.0.0:8775
     91 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.767 2039 INFO oslo_service.service [-] Starting 16 workers
     92 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.772 2039 INFO oslo_service.service [-] Started child 2072
     93 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.775 2072 INFO nova.metadata.wsgi.server [-] (2072) wsgi starting up on http://0.0.0.0:8775/
     94 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.777 2039 INFO oslo_service.service [-] Started child 2073
     95 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.780 2073 INFO nova.metadata.wsgi.server [-] (2073) wsgi starting up on http://0.0.0.0:8775/
     96 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.782 2039 INFO oslo_service.service [-] Started child 2074
     97 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.785 2074 INFO nova.metadata.wsgi.server [-] (2074) wsgi starting up on http://0.0.0.0:8775/
     98 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.787 2039 INFO oslo_service.service [-] Started child 2075
     99 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.789 2075 INFO nova.metadata.wsgi.server [-] (2075) wsgi starting up on http://0.0.0.0:8775/
    100 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.792 2039 INFO oslo_service.service [-] Started child 2076
    101 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.794 2076 INFO nova.metadata.wsgi.server [-] (2076) wsgi starting up on http://0.0.0.0:8775/
    102 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.797 2039 INFO oslo_service.service [-] Started child 2077
    103 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.799 2077 INFO nova.metadata.wsgi.server [-] (2077) wsgi starting up on http://0.0.0.0:8775/
    104 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.801 2039 INFO oslo_service.service [-] Started child 2078
    105 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.804 2078 INFO nova.metadata.wsgi.server [-] (2078) wsgi starting up on http://0.0.0.0:8775/
    106 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.806 2039 INFO oslo_service.service [-] Started child 2079
    107 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.808 2079 INFO nova.metadata.wsgi.server [-] (2079) wsgi starting up on http://0.0.0.0:8775/
    108 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.810 2039 INFO oslo_service.service [-] Started child 2080
    109 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.813 2080 INFO nova.metadata.wsgi.server [-] (2080) wsgi starting up on http://0.0.0.0:8775/
    110 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.815 2039 INFO oslo_service.service [-] Started child 2081
    111 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.818 2081 INFO nova.metadata.wsgi.server [-] (2081) wsgi starting up on http://0.0.0.0:8775/
    112 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.820 2039 INFO oslo_service.service [-] Started child 2082
    113 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.823 2082 INFO nova.metadata.wsgi.server [-] (2082) wsgi starting up on http://0.0.0.0:8775/
    114 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.825 2039 INFO oslo_service.service [-] Started child 2083
    115 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.828 2083 INFO nova.metadata.wsgi.server [-] (2083) wsgi starting up on http://0.0.0.0:8775/
    116 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.830 2039 INFO oslo_service.service [-] Started child 2084
    117 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.833 2084 INFO nova.metadata.wsgi.server [-] (2084) wsgi starting up on http://0.0.0.0:8775/
    118 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.835 2039 INFO oslo_service.service [-] Started child 2085
    119 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.837 2085 INFO nova.metadata.wsgi.server [-] (2085) wsgi starting up on http://0.0.0.0:8775/
    120 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.840 2039 INFO oslo_service.service [-] Started child 2086
    121 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.842 2086 INFO nova.metadata.wsgi.server [-] (2086) wsgi starting up on http://0.0.0.0:8775/
    122 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.844 2039 INFO oslo_service.service [-] Started child 2087
    123 Feb 24 09:40:40 node0 systemd: Started OpenStack Nova API Server.
    124 Feb 24 09:40:40 node0 nova-api: 2016-02-24 09:40:40.847 2087 INFO nova.metadata.wsgi.server [-] (2087) wsgi starting up on http://0.0.0.0:8775/
    View Code

    c8. 启动cinder服务

    1 systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
    2 systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service

    下面开始在Block节点上部署cinder。

    cc1. 安装工具包

    1 yum install lvm2
    2 
    3 systemctl enable lvm2-lvmetad.service
    4 systemctl start lvm2-lvmetad.service

    cc2. 创建LVM物理卷及卷组

    1 pvcreate /dev/sdb
    2 
    3 vgcreate cinder-volumes /dev/sdb

    cc3. 配置/etc/lvm/lvm.conf

    If your storage nodes use LVM on the operating system disk, you must also add the associated device to the filter. For example, if the /dev/sda device contains the operating system:

    filter = [ "a/sda/", "a/sdb/", "r/.*/"]
    

    Similarly, if your compute nodes use LVM on the operating system disk, you must also modify the filter in the /etc/lvm/lvm.conf file on those nodes to include only the operating system disk. For example, if the /dev/sda device contains the operating system:

    filter = [ "a/sda/", "r/.*/"]

    我的配置信息如下(这里出现了笔误的,后续会提到错误信息):

     1         # Example
     2         # Accept every block device:
     3         # filter = [ "a|.*/|" ]
     4         # Reject the cdrom drive:
     5         # filter = [ "r|/dev/cdrom|" ]
     6         # Work with just loopback devices, e.g. for testing:
     7         # filter = [ "a|loop|", "r|.*|" ]
     8         # Accept all loop devices and ide drives except hdc:
     9         # filter = [ "a|loop|", "r|/dev/hdc|", "a|/dev/ide|", "r|.*|" ]
    10         # Use anchors to be very specific:
    11         # filter = [ "a|^/dev/hda8$|", "r|.*/|" ]
    12         # 
    13         # This configuration option has an automatic default value.
    14         # filter = [ "a|.*/|" ]
    15         filter = [ "a/sda/", "a/sdb/", "r/.*/"]

    cc4. 安装组件

    1 yum install openstack-cinder targetcli python-oslo-policy

    cc5. 配置/etc/cinder/cinder.conf

     1 [DEFAULT]
     2 rpc_backend = rabbit
     3 auth_strategy = keystone
     4 my_ip =192.168.1.120
     5 enabled_backends = lvm
     6 glance_host = node0
     7 verbose = True
     8 
     9 [oslo_concurrency]
    10 lock_path = /var/lib/cinder/tmp
    11 
    12 [keystone_authtoken]
    13 auth_uri = http://node0:5000
    14 auth_url = http://node0:35357
    15 auth_plugin = password
    16 project_domain_id = default
    17 user_domain_id = default
    18 project_name = service
    19 username = cinder
    20 password = openstack
    21 
    22 [oslo_messaging_rabbit]
    23 rabbit_host = node0
    24 rabbit_userid = openstack
    25 rabbit_password = openstack
    26 
    27 [database]
    28 connection = mysql://cinder:openstack@node0/cinder
    29 
    30 [lvm]
    31 volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
    32 volume_group = cinder-volumes
    33 iscsi_protocol = iscsi
    34 iscsi_helper = lioadm

    cc6. 启动服务

    1 systemctl enable openstack-cinder-volume.service target.service
    2 systemctl start openstack-cinder-volume.service target.service

    cc7. 验证服务

    1 source admin-openrc.sh
    2 
    3 [root@node0 opt]# cinder service-list
    4 +------------------+-----------+------+---------+-------+----------------------------+-----------------+
    5 |      Binary      |    Host   | Zone |  Status | State |         Updated_at         | Disabled Reason |
    6 +------------------+-----------+------+---------+-------+----------------------------+-----------------+
    7 | cinder-scheduler |   node0   | nova | enabled |   up  | 2016-02-24T05:45:09.000000 |        -        |
    8 |  cinder-volume   | node2@lvm | nova | enabled |  down |             -              |        -        |
    9 +------------------+-----------+------+---------+-------+----------------------------+-----------------+
    1 [root@node0 opt]# cinder-manage service list
    2 No handlers could be found for logger "oslo_config.cfg"
    3 /usr/lib/python2.7/site-packages/oslo_db/sqlalchemy/enginefacade.py:241: NotSupportedWarning: Configuration option(s) ['use_tpool'] not supported
    4   exception.NotSupportedWarning
    5 Binary           Host                                 Zone             Status     State Updated At
    6 cinder-scheduler node0                                nova             enabled    :-)   2016-02-24 05:56:49
    7 cinder-volume    node2@lvm                            nova             enabled    XXX   None      
    8 [root@node0 opt]# 

    发现出了问题,上面的node2没有正常工作,是down的状态,对于这个问题,我首先查看了下ntp是否同步上,就是node2和node0之间,发现是没有问题的!

    1 [root@node2 ~]# ntpdate node0
    2  1 Mar 09:14:21 ntpdate[26469]: adjust time server 192.168.1.100 offset -0.000001 sec

    那这个问题会不会是配置的问题呢?看日志,查看/var/log/cinder/volume.log:

     1 2016-02-24 13:33:30.563 3928 INFO cinder.service [-] Starting cinder-volume node (version 7.0.1)
     2 2016-02-24 13:33:30.565 3928 INFO cinder.volume.manager [req-d78b5d83-26f9-45d1-96a8-52c422c294e3 - - - - -] Starting volume driver LVMVolumeDriver (3.0.0)
     3 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager [req-d78b5d83-26f9-45d1-96a8-52c422c294e3 - - - - -] Failed to initialize driver.
     4 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager Traceback (most recent call last):
     5 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager   File "/usr/lib/python2.7/site-packages/cinder/volume/manager.py", line 368, in init_host
     6 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager     self.driver.check_for_setup_error()
     7 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager   File "/usr/lib/python2.7/site-packages/osprofiler/profiler.py", line 105, in wrapper
     8 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager     return f(*args, **kwargs)
     9 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager   File "/usr/lib/python2.7/site-packages/cinder/volume/drivers/lvm.py", line 269, in check_for_setup_error
    10 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager     lvm_conf=lvm_conf_file)
    11 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager   File "/usr/lib/python2.7/site-packages/cinder/brick/local_dev/lvm.py", line 86, in __init__
    12 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager     if self._vg_exists() is False:
    13 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager   File "/usr/lib/python2.7/site-packages/cinder/brick/local_dev/lvm.py", line 123, in _vg_exists
    14 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager     run_as_root=True)
    15 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager   File "/usr/lib/python2.7/site-packages/cinder/utils.py", line 155, in execute
    16 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager     return processutils.execute(*cmd, **kwargs)
    17 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager   File "/usr/lib/python2.7/site-packages/oslo_concurrency/processutils.py", line 275, in execute
    18 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager     cmd=sanitized_cmd)
    19 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager ProcessExecutionError: Unexpected error while running command.
    20 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager Command: sudo cinder-rootwrap /etc/cinder/rootwrap.conf env LC_ALL=C vgs --noheadings -o name cinder-volumes
    21 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager Exit code: 5
    22 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager Stdout: u''
    23 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager Stderr: u'  Invalid filter pattern "i"a/sda/",".
    '
    24 2016-02-24 13:33:30.690 3928 ERROR cinder.volume.manager
    25 2016-02-24 13:33:30.756 3928 INFO oslo.messaging._drivers.impl_rabbit [req-8941ff35-6d20-4e5e-97c6-79fdbbfb508d - - - - -] Connecting to AMQP server on node0:5672
    26 2016-02-24 13:33:30.780 3928 INFO oslo.messaging._drivers.impl_rabbit [req-8941ff35-6d20-4e5e-97c6-79fdbbfb508d - - - - -] Connected to AMQP server on node0:5672
    27 2016-02-24 13:33:40.800 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".
    28 2016-02-24 13:33:50.805 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".
    29 2016-02-24 13:34:00.809 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".
    30 2016-02-24 13:34:10.819 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".
    31 2016-02-24 13:34:20.824 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".
    32 2016-02-24 13:34:30.824 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".
    33 2016-02-24 13:34:31.796 3928 WARNING cinder.volume.manager [req-41b39517-4c6e-4e91-a594-488f3d25e68e - - - - -] Update driver status failed: (config name lvm) is uninitialized.
    34 2016-02-24 13:34:40.833 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".
    35 2016-02-24 13:34:50.838 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".
    36 2016-02-24 13:35:00.838 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".
    37 2016-02-24 13:35:10.848 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".
    38 2016-02-24 13:35:20.852 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".
    39 2016-02-24 13:35:30.852 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".
    40 2016-02-24 13:35:31.797 3928 WARNING cinder.volume.manager [req-aacbae0b-cce8-4bc9-9c6a-2e3098f34c25 - - - - -] Update driver status failed: (config name lvm) is uninitialized.
    41 2016-02-24 13:35:40.861 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".
    42 2016-02-24 13:35:50.866 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".
    43 2016-02-24 13:36:00.866 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".
    44 2016-02-24 13:36:10.876 3928 ERROR cinder.service [-] Manager for service cinder-volume node2@lvm is reporting problems, not sending heartbeat. Service will appear "down".

    果然是配置中有问题,filter里面出现了笔误,多了一个i字符。更正后,再次启动cinder-volume服务。再次verify:

     1 [root@node0 opt]# cinder service-list
     2 +------------------+-----------+------+---------+-------+----------------------------+-----------------+
     3 |      Binary      |    Host   | Zone |  Status | State |         Updated_at         | Disabled Reason |
     4 +------------------+-----------+------+---------+-------+----------------------------+-----------------+
     5 | cinder-scheduler |   node0   | nova | enabled |   up  | 2016-02-24T06:04:49.000000 |        -        |
     6 |  cinder-volume   | node2@lvm | nova | enabled |   up  | 2016-02-24T06:04:51.000000 |        -        |
     7 +------------------+-----------+------+---------+-------+----------------------------+-----------------+
     8 [root@node0 opt]# 
     9 [root@node0 opt]# 
    10 [root@node0 opt]# cinder-manage service list
    11 No handlers could be found for logger "oslo_config.cfg"
    12 /usr/lib/python2.7/site-packages/oslo_db/sqlalchemy/enginefacade.py:241: NotSupportedWarning: Configuration option(s) ['use_tpool'] not supported
    13   exception.NotSupportedWarning
    14 Binary           Host                                 Zone             Status     State Updated At
    15 cinder-scheduler node0                                nova             enabled    :-)   2016-02-24 06:04:49
    16 cinder-volume    node2@lvm                            nova             enabled    :-)   2016-02-24 06:04:51

    一切正常启动了,OK,cinder部署告捷了!

    最后部署swift。swift主要包含两部分的部署,和cinder类似,controller和object 节点的部署。 就软件组成来说,swift主要包含proxy-server,account server,container server以及object server几个部分。其中proxy-server原则上可以部署在任何机器节点上,在我这个环境中,我部署在controller节点上了,其他三个,部署在object节点上。

    下面,用sx表示在controller节点的部署信息,ssx表示在object节点上的部署信息。

    s1. 创建服务(注意,proxy-server安装,不需要创建数据库)

     1 source admin-openrc.sh
     2 
     3 openstack user create --domain default --password-prompt swift
     4 openstack role add --project service --user swift admin
     5 
     6 openstack service create --name swift --description "OpenStack Object Storage" object-store
     7 
     8 openstack endpoint create --region RegionOne object-store public http://node0:8080/v1/AUTH_%(tenant_id)s
     9 openstack endpoint create --region RegionOne object-store internal http://node0:8080/v1/AUTH_%(tenant_id)s
    10 openstack endpoint create --region RegionOne object-store admin http://node0:8080/v1/AUTH_%(tenant_id)s

    s2. 安装组件

    1 yum install openstack-swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached

    s3. 配置/etc/swift/proxy-server.conf

    这里,需要先下载原始版本的配置文件到指定目录下,然后修改配置。

    curl -o /etc/swift/proxy-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/proxy-server.conf-sample?h=stable/libert
      1 [DEFAULT]
      2 bind_port = 8080
      3 swift_dir = /etc/swift
      4 user = swift
      5 
      6 # Enables exposing configuration settings via HTTP GET /info.
      7 # expose_info = true
      8 
      9 # Key to use for admin calls that are HMAC signed.  Default is empty,
     10 # which will disable admin calls to /info.
     11 # admin_key = secret_admin_key
     12 #
     13 # Allows the ability to withhold sections from showing up in the public calls
     14 # to /info.  You can withhold subsections by separating the dict level with a
     15 # ".".  The following would cause the sections 'container_quotas' and 'tempurl'
     16 # to not be listed, and the key max_failed_deletes would be removed from
     17 # bulk_delete.  Default value is 'swift.valid_api_versions' which allows all
     18 # registered features to be listed via HTTP GET /info except
     19 # swift.valid_api_versions information
     20 # disallowed_sections = swift.valid_api_versions, container_quotas, tempurl
     21 
     22 # Use an integer to override the number of pre-forked processes that will
     23 # accept connections.  Should default to the number of effective cpu
     24 # cores in the system.  It's worth noting that individual workers will
     25 # use many eventlet co-routines to service multiple concurrent requests.
     26 # workers = auto
     27 #
     28 # Maximum concurrent requests per worker
     29 # max_clients = 1024
     30 #
     31 # Set the following two lines to enable SSL. This is for testing only.
     32 # cert_file = /etc/swift/proxy.crt
     33 # key_file = /etc/swift/proxy.key
     34 #
     35 # expiring_objects_container_divisor = 86400
     36 # expiring_objects_account_name = expiring_objects
     37 #
     38 # You can specify default log routing here if you want:
     39 # log_name = swift
     40 # log_facility = LOG_LOCAL0
     41 # log_level = INFO
     42 # log_headers = false
     43 # log_address = /dev/log
     44 # The following caps the length of log lines to the value given; no limit if
     45 # set to 0, the default.
     46 # log_max_line_length = 0
     47 #
     48 # This optional suffix (default is empty) that would be appended to the swift transaction
     49 # id allows one to easily figure out from which cluster that X-Trans-Id belongs to.
     50 # This is very useful when one is managing more than one swift cluster.
     51 # trans_id_suffix =
     52 #
     53 # comma separated list of functions to call to setup custom log handlers.
     54 # functions get passed: conf, name, log_to_console, log_route, fmt, logger,
     55 # adapted_logger
     56 # log_custom_handlers =
     57 #
     58 # If set, log_udp_host will override log_address
     59 # log_udp_host =
     60 # log_udp_port = 514
     61 #
     62 # You can enable StatsD logging here:
     63 # log_statsd_host = localhost
     64 # log_statsd_port = 8125
     65 # log_statsd_default_sample_rate = 1.0
     66 # log_statsd_sample_rate_factor = 1.0
     67 # log_statsd_metric_prefix =
     68 #
     69 # Use a comma separated list of full url (http://foo.bar:1234,https://foo.bar)
     70 # cors_allow_origin =
     71 # strict_cors_mode = True
     72 #
     73 # client_timeout = 60
     74 # eventlet_debug = false
     75 
     76 [pipeline:main]
     77 pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server
     78 
     79 [app:proxy-server]
     80 use = egg:swift#proxy
     81 # You can override the default log routing for this app here:
     82 # set log_name = proxy-server
     83 # set log_facility = LOG_LOCAL0
     84 # set log_level = INFO
     85 # set log_address = /dev/log
     86 #
     87 # log_handoffs = true
     88 # recheck_account_existence = 60
     89 # recheck_container_existence = 60
     90 # object_chunk_size = 65536
     91 # client_chunk_size = 65536
     92 #
     93 # How long the proxy server will wait on responses from the a/c/o servers.
     94 # node_timeout = 10
     95 #
     96 # How long the proxy server will wait for an initial response and to read a
     97 # chunk of data from the object servers while serving GET / HEAD requests.
     98 # Timeouts from these requests can be recovered from so setting this to
     99 # something lower than node_timeout would provide quicker error recovery
    100 # while allowing for a longer timeout for non-recoverable requests (PUTs).
    101 # Defaults to node_timeout, should be overriden if node_timeout is set to a
    102 # high number to prevent client timeouts from firing before the proxy server
    103 # has a chance to retry.
    104 # recoverable_node_timeout = node_timeout
    105 #
    106 # conn_timeout = 0.5
    107 #
    108 # How long to wait for requests to finish after a quorum has been established.
    109 # post_quorum_timeout = 0.5
    110 #
    111 # How long without an error before a node's error count is reset. This will
    112 # also be how long before a node is reenabled after suppression is triggered.
    113 # error_suppression_interval = 60
    114 #
    115 # How many errors can accumulate before a node is temporarily ignored.
    116 # error_suppression_limit = 10
    117 #
    118 # If set to 'true' any authorized user may create and delete accounts; if
    119 # 'false' no one, even authorized, can.
    120 # allow_account_management = false
    121 #
    122 # Set object_post_as_copy = false to turn on fast posts where only the metadata
    123 # changes are stored anew and the original data file is kept in place. This
    124 # makes for quicker posts; but since the container metadata isn't updated in
    125 # this mode, features like container sync won't be able to sync posts.
    126 # object_post_as_copy = true
    127 #
    128 # If set to 'true' authorized accounts that do not yet exist within the Swift
    129 # cluster will be automatically created.
    130 account_autocreate = true
    131 #
    132 # If set to a positive value, trying to create a container when the account
    133 # already has at least this maximum containers will result in a 403 Forbidden.
    134 # Note: This is a soft limit, meaning a user might exceed the cap for
    135 # recheck_account_existence before the 403s kick in.
    136 # max_containers_per_account = 0
    137 #
    138 # This is a comma separated list of account hashes that ignore the
    139 # max_containers_per_account cap.
    140 # max_containers_whitelist =
    141 #
    142 # Comma separated list of Host headers to which the proxy will deny requests.
    143 # deny_host_headers =
    144 #
    145 # Prefix used when automatically creating accounts.
    146 # auto_create_account_prefix = .
    147 #
    148 # Depth of the proxy put queue.
    149 # put_queue_depth = 10
    150 #
    151 # Storage nodes can be chosen at random (shuffle), by using timing
    152 # measurements (timing), or by using an explicit match (affinity).
    153 # Using timing measurements may allow for lower overall latency, while
    154 # using affinity allows for finer control. In both the timing and
    155 # affinity cases, equally-sorting nodes are still randomly chosen to
    156 # spread load.
    157 # The valid values for sorting_method are "affinity", "shuffle", and "timing".
    158 # sorting_method = shuffle
    159 #
    160 # If the "timing" sorting_method is used, the timings will only be valid for
    161 # the number of seconds configured by timing_expiry.
    162 # timing_expiry = 300
    163 #
    164 # The maximum time (seconds) that a large object connection is allowed to last.
    165 # max_large_object_get_time = 86400
    166 #
    167 # Set to the number of nodes to contact for a normal request. You can use
    168 # '* replicas' at the end to have it use the number given times the number of
    169 # replicas for the ring being used for the request.
    170 # request_node_count = 2 * replicas
    171 #
    172 # Which backend servers to prefer on reads. Format is r<N> for region
    173 # N or r<N>z<M> for region N, zone M. The value after the equals is
    174 # the priority; lower numbers are higher priority.
    175 #
    176 # Example: first read from region 1 zone 1, then region 1 zone 2, then
    177 # anything in region 2, then everything else:
    178 # read_affinity = r1z1=100, r1z2=200, r2=300
    179 # Default is empty, meaning no preference.
    180 # read_affinity =
    181 #
    182 # Which backend servers to prefer on writes. Format is r<N> for region
    183 # N or r<N>z<M> for region N, zone M. If this is set, then when
    184 # handling an object PUT request, some number (see setting
    185 # write_affinity_node_count) of local backend servers will be tried
    186 # before any nonlocal ones.
    187 #
    188 # Example: try to write to regions 1 and 2 before writing to any other
    189 # nodes:
    190 # write_affinity = r1, r2
    191 # Default is empty, meaning no preference.
    192 # write_affinity =
    193 #
    194 # The number of local (as governed by the write_affinity setting)
    195 # nodes to attempt to contact first, before any non-local ones. You
    196 # can use '* replicas' at the end to have it use the number given
    197 # times the number of replicas for the ring being used for the
    198 # request.
    199 # write_affinity_node_count = 2 * replicas
    200 #
    201 # These are the headers whose values will only be shown to swift_owners. The
    202 # exact definition of a swift_owner is up to the auth system in use, but
    203 # usually indicates administrative responsibilities.
    204 # swift_owner_headers = x-container-read, x-container-write, x-container-sync-key, x-container-sync-to, x-account-meta-temp-url-key, x-account-meta-temp-url-key-2, x-container-meta-temp-url-key, x-container-meta-temp-url-key-2, x-account-access-control
    205 
    206 [filter:tempauth]
    207 use = egg:swift#tempauth
    208 # You can override the default log routing for this filter here:
    209 # set log_name = tempauth
    210 # set log_facility = LOG_LOCAL0
    211 # set log_level = INFO
    212 # set log_headers = false
    213 # set log_address = /dev/log
    214 #
    215 # The reseller prefix will verify a token begins with this prefix before even
    216 # attempting to validate it. Also, with authorization, only Swift storage
    217 # accounts with this prefix will be authorized by this middleware. Useful if
    218 # multiple auth systems are in use for one Swift cluster.
    219 # The reseller_prefix may contain a comma separated list of items. The first
    220 # item is used for the token as mentioned above. If second and subsequent
    221 # items exist, the middleware will handle authorization for an account with
    222 # that prefix. For example, for prefixes "AUTH, SERVICE", a path of
    223 # /v1/SERVICE_account is handled the same as /v1/AUTH_account. If an empty
    224 # (blank) reseller prefix is required, it must be first in the list. Two
    225 # single quote characters indicates an empty (blank) reseller prefix.
    226 # reseller_prefix = AUTH
    227 
    228 #
    229 # The require_group parameter names a group that must be presented by
    230 # either X-Auth-Token or X-Service-Token. Usually this parameter is
    231 # used only with multiple reseller prefixes (e.g., SERVICE_require_group=blah).
    232 # By default, no group is needed. Do not use .admin.
    233 # require_group =
    234 
    235 # The auth prefix will cause requests beginning with this prefix to be routed
    236 # to the auth subsystem, for granting tokens, etc.
    237 # auth_prefix = /auth/
    238 # token_life = 86400
    239 #
    240 # This allows middleware higher in the WSGI pipeline to override auth
    241 # processing, useful for middleware such as tempurl and formpost. If you know
    242 # you're not going to use such middleware and you want a bit of extra security,
    243 # you can set this to false.
    244 # allow_overrides = true
    245 #
    246 # This specifies what scheme to return with storage urls:
    247 # http, https, or default (chooses based on what the server is running as)
    248 # This can be useful with an SSL load balancer in front of a non-SSL server.
    249 # storage_url_scheme = default
    250 #
    251 # Lastly, you need to list all the accounts/users you want here. The format is:
    252 #   user_<account>_<user> = <key> [group] [group] [...] [storage_url]
    253 # or if you want underscores in <account> or <user>, you can base64 encode them
    254 # (with no equal signs) and use this format:
    255 #   user64_<account_b64>_<user_b64> = <key> [group] [group] [...] [storage_url]
    256 # There are special groups of:
    257 #   .reseller_admin = can do anything to any account for this auth
    258 #   .admin = can do anything within the account
    259 # If neither of these groups are specified, the user can only access containers
    260 # that have been explicitly allowed for them by a .admin or .reseller_admin.
    261 # The trailing optional storage_url allows you to specify an alternate url to
    262 # hand back to the user upon authentication. If not specified, this defaults to
    263 # $HOST/v1/<reseller_prefix>_<account> where $HOST will do its best to resolve
    264 # to what the requester would need to use to reach this host.
    265 # Here are example entries, required for running the tests:
    266 user_admin_admin = admin .admin .reseller_admin
    267 user_test_tester = testing .admin
    268 user_test2_tester2 = testing2 .admin
    269 user_test_tester3 = testing3
    270 user_test5_tester5 = testing5 service
    271 
    272 # To enable Keystone authentication you need to have the auth token
    273 # middleware first to be configured. Here is an example below, please
    274 # refer to the keystone's documentation for details about the
    275 # different settings.
    276 #
    277 # You'll need to have as well the keystoneauth middleware enabled
    278 # and have it in your main pipeline so instead of having tempauth in
    279 # there you can change it to: authtoken keystoneauth
    280 #
    281 [filter:authtoken]
    282 # paste.filter_factory = keystonemiddleware.auth_token:filter_factory
    283 # identity_uri = http://keystonehost:35357/
    284 # auth_uri = http://keystonehost:5000/
    285 # admin_tenant_name = service
    286 # admin_user = swift
    287 # admin_password = password
    288 #
    289 # delay_auth_decision defaults to False, but leaving it as false will
    290 # prevent other auth systems, staticweb, tempurl, formpost, and ACLs from
    291 # working. This value must be explicitly set to True.
    292 # delay_auth_decision = False
    293 #
    294 # cache = swift.cache
    295 # include_service_catalog = False
    296 #
    297 paste.filter_factory = keystonemiddleware.auth_token:filter_factory
    298 auth_uri = http://node0:5000
    299 auth_url = http://node0:35357
    300 auth_plugin = password
    301 project_domain_id = default
    302 user_domain_id = default
    303 project_name = service
    304 username = swift
    305 password = openstack
    306 delay_auth_decision = true
    307 auth_protocol = http
    308 
    309 [filter:keystoneauth]
    310 use = egg:swift#keystoneauth
    311 # The reseller_prefix option lists account namespaces that this middleware is
    312 # responsible for. The prefix is placed before the Keystone project id.
    313 # For example, for project 12345678, and prefix AUTH, the account is
    314 # named AUTH_12345678 (i.e., path is /v1/AUTH_12345678/...).
    315 # Several prefixes are allowed by specifying a comma-separated list
    316 # as in: "reseller_prefix = AUTH, SERVICE". The empty string indicates a
    317 # single blank/empty prefix. If an empty prefix is required in a list of
    318 # prefixes, a value of '' (two single quote characters) indicates a
    319 # blank/empty prefix. Except for the blank/empty prefix, an underscore ('_')
    320 # character is appended to the value unless already present.
    321 # reseller_prefix = AUTH
    322 #
    323 # The user must have at least one role named by operator_roles on a
    324 # project in order to create, delete and modify containers and objects
    325 # and to set and read privileged headers such as ACLs.
    326 # If there are several reseller prefix items, you can prefix the
    327 # parameter so it applies only to those accounts (for example
    328 # the parameter SERVICE_operator_roles applies to the /v1/SERVICE_<project>
    329 # path). If you omit the prefix, the option applies to all reseller
    330 # prefix items. For the blank/empty prefix, prefix with '' (do not put
    331 # underscore after the two single quote characters).
    332 operator_roles = admin, user
    333 #
    334 # The reseller admin role has the ability to create and delete accounts
    335 # reseller_admin_role = ResellerAdmin
    336 #
    337 # This allows middleware higher in the WSGI pipeline to override auth
    338 # processing, useful for middleware such as tempurl and formpost. If you know
    339 # you're not going to use such middleware and you want a bit of extra security,
    340 # you can set this to false.
    341 # allow_overrides = true
    342 #
    343 # If is_admin is true, a user whose username is the same as the project name
    344 # and who has any role on the project will have access rights elevated to be
    345 # the same as if the user had an operator role. Note that the condition
    346 # compares names rather than UUIDs. This option is deprecated.
    347 # is_admin = false
    348 #
    349 # If the service_roles parameter is present, an X-Service-Token must be
    350 # present in the request that when validated, grants at least one role listed
    351 # in the parameter. The X-Service-Token may be scoped to any project.
    352 # If there are several reseller prefix items, you can prefix the
    353 # parameter so it applies only to those accounts (for example
    354 # the parameter SERVICE_service_roles applies to the /v1/SERVICE_<project>
    355 # path). If you omit the prefix, the option applies to all reseller
    356 # prefix items. For the blank/empty prefix, prefix with '' (do not put
    357 # underscore after the two single quote characters).
    358 # By default, no service_roles are required.
    359 # service_roles =
    360 #
    361 # For backwards compatibility, keystoneauth will match names in cross-tenant
    362 # access control lists (ACLs) when both the requesting user and the tenant
    363 # are in the default domain i.e the domain to which existing tenants are
    364 # migrated. The default_domain_id value configured here should be the same as
    365 # the value used during migration of tenants to keystone domains.
    366 # default_domain_id = default
    367 #
    368 # For a new installation, or an installation in which keystone projects may
    369 # move between domains, you should disable backwards compatible name matching
    370 # in ACLs by setting allow_names_in_acls to false:
    371 # allow_names_in_acls = true
    372 
    373 [filter:healthcheck]
    374 use = egg:swift#healthcheck
    375 # An optional filesystem path, which if present, will cause the healthcheck
    376 # URL to return "503 Service Unavailable" with a body of "DISABLED BY FILE".
    377 # This facility may be used to temporarily remove a Swift node from a load
    378 # balancer pool during maintenance or upgrade (remove the file to allow the
    379 # node back into the load balancer pool).
    380 # disable_path =
    381 
    382 [filter:cache]
    383 use = egg:swift#memcache
    384 # You can override the default log routing for this filter here:
    385 # set log_name = cache
    386 # set log_facility = LOG_LOCAL0
    387 # set log_level = INFO
    388 # set log_headers = false
    389 # set log_address = /dev/log
    390 #
    391 # If not set here, the value for memcache_servers will be read from
    392 # memcache.conf (see memcache.conf-sample) or lacking that file, it will
    393 # default to the value below. You can specify multiple servers separated with
    394 # commas, as in: 10.1.2.3:11211,10.1.2.4:11211
    395 memcache_servers = 127.0.0.1:11211
    396 #
    397 # Sets how memcache values are serialized and deserialized:
    398 # 0 = older, insecure pickle serialization
    399 # 1 = json serialization but pickles can still be read (still insecure)
    400 # 2 = json serialization only (secure and the default)
    401 # If not set here, the value for memcache_serialization_support will be read
    402 # from /etc/swift/memcache.conf (see memcache.conf-sample).
    403 # To avoid an instant full cache flush, existing installations should
    404 # upgrade with 0, then set to 1 and reload, then after some time (24 hours)
    405 # set to 2 and reload.
    406 # In the future, the ability to use pickle serialization will be removed.
    407 # memcache_serialization_support = 2
    408 #
    409 # Sets the maximum number of connections to each memcached server per worker
    410 # memcache_max_connections = 2
    411 #
    412 # More options documented in memcache.conf-sample
    413 
    414 [filter:ratelimit]
    415 use = egg:swift#ratelimit
    416 # You can override the default log routing for this filter here:
    417 # set log_name = ratelimit
    418 # set log_facility = LOG_LOCAL0
    419 # set log_level = INFO
    420 # set log_headers = false
    421 # set log_address = /dev/log
    422 #
    423 # clock_accuracy should represent how accurate the proxy servers' system clocks
    424 # are with each other. 1000 means that all the proxies' clock are accurate to
    425 # each other within 1 millisecond.  No ratelimit should be higher than the
    426 # clock accuracy.
    427 # clock_accuracy = 1000
    428 #
    429 # max_sleep_time_seconds = 60
    430 #
    431 # log_sleep_time_seconds of 0 means disabled
    432 # log_sleep_time_seconds = 0
    433 #
    434 # allows for slow rates (e.g. running up to 5 sec's behind) to catch up.
    435 # rate_buffer_seconds = 5
    436 #
    437 # account_ratelimit of 0 means disabled
    438 # account_ratelimit = 0
    439 
    440 # DEPRECATED- these will continue to work but will be replaced
    441 # by the X-Account-Sysmeta-Global-Write-Ratelimit flag.
    442 # Please see ratelimiting docs for details.
    443 # these are comma separated lists of account names
    444 # account_whitelist = a,b
    445 # account_blacklist = c,d
    446 
    447 # with container_limit_x = r
    448 # for containers of size x limit write requests per second to r.  The container
    449 # rate will be linearly interpolated from the values given. With the values
    450 # below, a container of size 5 will get a rate of 75.
    451 # container_ratelimit_0 = 100
    452 # container_ratelimit_10 = 50
    453 # container_ratelimit_50 = 20
    454 
    455 # Similarly to the above container-level write limits, the following will limit
    456 # container GET (listing) requests.
    457 # container_listing_ratelimit_0 = 100
    458 # container_listing_ratelimit_10 = 50
    459 # container_listing_ratelimit_50 = 20
    460 
    461 [filter:domain_remap]
    462 use = egg:swift#domain_remap
    463 # You can override the default log routing for this filter here:
    464 # set log_name = domain_remap
    465 # set log_facility = LOG_LOCAL0
    466 # set log_level = INFO
    467 # set log_headers = false
    468 # set log_address = /dev/log
    469 #
    470 # storage_domain = example.com
    471 # path_root = v1
    472 
    473 # Browsers can convert a host header to lowercase, so check that reseller
    474 # prefix on the account is the correct case. This is done by comparing the
    475 # items in the reseller_prefixes config option to the found prefix. If they
    476 # match except for case, the item from reseller_prefixes will be used
    477 # instead of the found reseller prefix. When none match, the default reseller
    478 # prefix is used. When no default reseller prefix is configured, any request
    479 # with an account prefix not in that list will be ignored by this middleware.
    480 # reseller_prefixes = AUTH
    481 # default_reseller_prefix =
    482 
    483 [filter:catch_errors]
    484 use = egg:swift#catch_errors
    485 # You can override the default log routing for this filter here:
    486 # set log_name = catch_errors
    487 # set log_facility = LOG_LOCAL0
    488 # set log_level = INFO
    489 # set log_headers = false
    490 # set log_address = /dev/log
    491 
    492 [filter:cname_lookup]
    493 # Note: this middleware requires python-dnspython
    494 use = egg:swift#cname_lookup
    495 # You can override the default log routing for this filter here:
    496 # set log_name = cname_lookup
    497 # set log_facility = LOG_LOCAL0
    498 # set log_level = INFO
    499 # set log_headers = false
    500 # set log_address = /dev/log
    501 #
    502 # Specify the storage_domain that match your cloud, multiple domains
    503 # can be specified separated by a comma
    504 # storage_domain = example.com
    505 #
    506 # lookup_depth = 1
    507 
    508 # Note: Put staticweb just after your auth filter(s) in the pipeline
    509 [filter:staticweb]
    510 use = egg:swift#staticweb
    511 
    512 # Note: Put tempurl before dlo, slo and your auth filter(s) in the pipeline
    513 [filter:tempurl]
    514 use = egg:swift#tempurl
    515 # The methods allowed with Temp URLs.
    516 # methods = GET HEAD PUT POST DELETE
    517 #
    518 # The headers to remove from incoming requests. Simply a whitespace delimited
    519 # list of header names and names can optionally end with '*' to indicate a
    520 # prefix match. incoming_allow_headers is a list of exceptions to these
    521 # removals.
    522 # incoming_remove_headers = x-timestamp
    523 #
    524 # The headers allowed as exceptions to incoming_remove_headers. Simply a
    525 # whitespace delimited list of header names and names can optionally end with
    526 # '*' to indicate a prefix match.
    527 # incoming_allow_headers =
    528 #
    529 # The headers to remove from outgoing responses. Simply a whitespace delimited
    530 # list of header names and names can optionally end with '*' to indicate a
    531 # prefix match. outgoing_allow_headers is a list of exceptions to these
    532 # removals.
    533 # outgoing_remove_headers = x-object-meta-*
    534 #
    535 # The headers allowed as exceptions to outgoing_remove_headers. Simply a
    536 # whitespace delimited list of header names and names can optionally end with
    537 # '*' to indicate a prefix match.
    538 # outgoing_allow_headers = x-object-meta-public-*
    539 
    540 # Note: Put formpost just before your auth filter(s) in the pipeline
    541 [filter:formpost]
    542 use = egg:swift#formpost
    543 
    544 # Note: Just needs to be placed before the proxy-server in the pipeline.
    545 [filter:name_check]
    546 use = egg:swift#name_check
    547 # forbidden_chars = '"`<>
    548 # maximum_length = 255
    549 # forbidden_regexp = /./|/../|/.$|/..$
    550 
    551 [filter:list-endpoints]
    552 use = egg:swift#list_endpoints
    553 # list_endpoints_path = /endpoints/
    554 
    555 [filter:proxy-logging]
    556 use = egg:swift#proxy_logging
    557 # If not set, logging directives from [DEFAULT] without "access_" will be used
    558 # access_log_name = swift
    559 # access_log_facility = LOG_LOCAL0
    560 # access_log_level = INFO
    561 # access_log_address = /dev/log
    562 #
    563 # If set, access_log_udp_host will override access_log_address
    564 # access_log_udp_host =
    565 # access_log_udp_port = 514
    566 #
    567 # You can use log_statsd_* from [DEFAULT] or override them here:
    568 # access_log_statsd_host = localhost
    569 # access_log_statsd_port = 8125
    570 # access_log_statsd_default_sample_rate = 1.0
    571 # access_log_statsd_sample_rate_factor = 1.0
    572 # access_log_statsd_metric_prefix =
    573 # access_log_headers = false
    574 #
    575 # If access_log_headers is True and access_log_headers_only is set only
    576 # these headers are logged. Multiple headers can be defined as comma separated
    577 # list like this: access_log_headers_only = Host, X-Object-Meta-Mtime
    578 # access_log_headers_only =
    579 #
    580 # By default, the X-Auth-Token is logged. To obscure the value,
    581 # set reveal_sensitive_prefix to the number of characters to log.
    582 # For example, if set to 12, only the first 12 characters of the
    583 # token appear in the log. An unauthorized access of the log file
    584 # won't allow unauthorized usage of the token. However, the first
    585 # 12 or so characters is unique enough that you can trace/debug
    586 # token usage. Set to 0 to suppress the token completely (replaced
    587 # by '...' in the log).
    588 # Note: reveal_sensitive_prefix will not affect the value
    589 # logged with access_log_headers=True.
    590 # reveal_sensitive_prefix = 16
    591 #
    592 # What HTTP methods are allowed for StatsD logging (comma-sep); request methods
    593 # not in this list will have "BAD_METHOD" for the <verb> portion of the metric.
    594 # log_statsd_valid_http_methods = GET,HEAD,POST,PUT,DELETE,COPY,OPTIONS
    595 #
    596 # Note: The double proxy-logging in the pipeline is not a mistake. The
    597 # left-most proxy-logging is there to log requests that were handled in
    598 # middleware and never made it through to the right-most middleware (and
    599 # proxy server). Double logging is prevented for normal requests. See
    600 # proxy-logging docs.
    601 
    602 # Note: Put before both ratelimit and auth in the pipeline.
    603 [filter:bulk]
    604 use = egg:swift#bulk
    605 # max_containers_per_extraction = 10000
    606 # max_failed_extractions = 1000
    607 # max_deletes_per_request = 10000
    608 # max_failed_deletes = 1000
    609 
    610 # In order to keep a connection active during a potentially long bulk request,
    611 # Swift may return whitespace prepended to the actual response body. This
    612 # whitespace will be yielded no more than every yield_frequency seconds.
    613 # yield_frequency = 10
    614 
    615 # Note: The following parameter is used during a bulk delete of objects and
    616 # their container. This would frequently fail because it is very likely
    617 # that all replicated objects have not been deleted by the time the middleware got a
    618 # successful response. It can be configured the number of retries. And the
    619 # number of seconds to wait between each retry will be 1.5**retry
    620 
    621 # delete_container_retry_count = 0
    622 
    623 # Note: Put after auth and staticweb in the pipeline.
    624 [filter:slo]
    625 use = egg:swift#slo
    626 # max_manifest_segments = 1000
    627 # max_manifest_size = 2097152
    628 # min_segment_size = 1048576
    629 # Start rate-limiting SLO segment serving after the Nth segment of a
    630 # segmented object.
    631 # rate_limit_after_segment = 10
    632 #
    633 # Once segment rate-limiting kicks in for an object, limit segments served
    634 # to N per second. 0 means no rate-limiting.
    635 # rate_limit_segments_per_sec = 0
    636 #
    637 # Time limit on GET requests (seconds)
    638 # max_get_time = 86400
    639 
    640 # Note: Put after auth and staticweb in the pipeline.
    641 # If you don't put it in the pipeline, it will be inserted for you.
    642 [filter:dlo]
    643 use = egg:swift#dlo
    644 # Start rate-limiting DLO segment serving after the Nth segment of a
    645 # segmented object.
    646 # rate_limit_after_segment = 10
    647 #
    648 # Once segment rate-limiting kicks in for an object, limit segments served
    649 # to N per second. 0 means no rate-limiting.
    650 # rate_limit_segments_per_sec = 1
    651 #
    652 # Time limit on GET requests (seconds)
    653 # max_get_time = 86400
    654 
    655 # Note: Put after auth in the pipeline.
    656 [filter:container-quotas]
    657 use = egg:swift#container_quotas
    658 
    659 # Note: Put after auth in the pipeline.
    660 [filter:account-quotas]
    661 use = egg:swift#account_quotas
    662 
    663 [filter:gatekeeper]
    664 use = egg:swift#gatekeeper
    665 # You can override the default log routing for this filter here:
    666 # set log_name = gatekeeper
    667 # set log_facility = LOG_LOCAL0
    668 # set log_level = INFO
    669 # set log_headers = false
    670 # set log_address = /dev/log
    671 
    672 [filter:container_sync]
    673 use = egg:swift#container_sync
    674 # Set this to false if you want to disallow any full url values to be set for
    675 # any new X-Container-Sync-To headers. This will keep any new full urls from
    676 # coming in, but won't change any existing values already in the cluster.
    677 # Updating those will have to be done manually, as knowing what the true realm
    678 # endpoint should be cannot always be guessed.
    679 # allow_full_urls = true
    680 # Set this to specify this clusters //realm/cluster as "current" in /info
    681 # current = //REALM/CLUSTER
    682 
    683 # Note: Put it at the beginning of the pipeline to profile all middleware. But
    684 # it is safer to put this after catch_errors, gatekeeper and healthcheck.
    685 [filter:xprofile]
    686 use = egg:swift#xprofile
    687 # This option enable you to switch profilers which should inherit from python
    688 # standard profiler. Currently the supported value can be 'cProfile',
    689 # 'eventlet.green.profile' etc.
    690 # profile_module = eventlet.green.profile
    691 #
    692 # This prefix will be used to combine process ID and timestamp to name the
    693 # profile data file.  Make sure the executing user has permission to write
    694 # into this path (missing path segments will be created, if necessary).
    695 # If you enable profiling in more than one type of daemon, you must override
    696 # it with an unique value like: /var/log/swift/profile/proxy.profile
    697 # log_filename_prefix = /tmp/log/swift/profile/default.profile
    698 #
    699 # the profile data will be dumped to local disk based on above naming rule
    700 # in this interval.
    701 # dump_interval = 5.0
    702 #
    703 # Be careful, this option will enable profiler to dump data into the file with
    704 # time stamp which means there will be lots of files piled up in the directory.
    705 # dump_timestamp = false
    706 #
    707 # This is the path of the URL to access the mini web UI.
    708 # path = /__profile__
    709 #
    710 # Clear the data when the wsgi server shutdown.
    711 # flush_at_shutdown = false
    712 #
    713 # Clear the data when the wsgi server shutdown.
    714 # flush_at_shutdown = false
    715 #
    716 # unwind the iterator of applications
    717 # unwind = false
    718 
    719 # Note: Put after slo, dlo in the pipeline.
    720 # If you don't put it in the pipeline, it will be inserted automatically.
    721 [filter:versioned_writes]
    722 use = egg:swift#versioned_writes
    723 # Enables using versioned writes middleware and exposing configuration
    724 # settings via HTTP GET /info.
    725 # WARNING: Setting this option bypasses the "allow_versions" option
    726 # in the container configuration file, which will be eventually
    727 # deprecated. See documentation for more details.
    728 # allow_versioned_writes = false
    View Code

    接下来,配置swift节点:

    ss1. 安装组件,基本配置。

    1 yum install xfsprogs rsync
    2 
    3 mkfs.xfs /dev/sdb
    4 mkdir -p /srv/node/sdb

    下面看看我的swift节点的磁盘信息吧:

     1 [root@node3 opt]# fdisk -l
     2 
     3 Disk /dev/sda: 500.1 GB, 500107862016 bytes, 976773168 sectors
     4 Units = sectors of 1 * 512 = 512 bytes
     5 Sector size (logical/physical): 512 bytes / 512 bytes
     6 I/O size (minimum/optimal): 512 bytes / 512 bytes
     7 Disk label type: dos
     8 Disk identifier: 0x0005b206
     9 
    10    Device Boot      Start         End      Blocks   Id  System
    11 /dev/sda1   *        2048     1026047      512000   83  Linux
    12 /dev/sda2         1026048   976773119   487873536   8e  Linux LVM
    13 
    14 Disk /dev/sdb: 500.1 GB, 500107862016 bytes, 976773168 sectors
    15 Units = sectors of 1 * 512 = 512 bytes
    16 Sector size (logical/physical): 512 bytes / 512 bytes
    17 I/O size (minimum/optimal): 512 bytes / 512 bytes
    18 
    19 
    20 Disk /dev/mapper/centos00-swap: 16.9 GB, 16919822336 bytes, 33046528 sectors
    21 Units = sectors of 1 * 512 = 512 bytes
    22 Sector size (logical/physical): 512 bytes / 512 bytes
    23 I/O size (minimum/optimal): 512 bytes / 512 bytes
    24 
    25 
    26 Disk /dev/mapper/centos00-root: 53.7 GB, 53687091200 bytes, 104857600 sectors
    27 Units = sectors of 1 * 512 = 512 bytes
    28 Sector size (logical/physical): 512 bytes / 512 bytes
    29 I/O size (minimum/optimal): 512 bytes / 512 bytes
    30 
    31 
    32 Disk /dev/mapper/centos00-home: 429.0 GB, 428972441600 bytes, 837836800 sectors
    33 Units = sectors of 1 * 512 = 512 bytes
    34 Sector size (logical/physical): 512 bytes / 512 bytes
    35 I/O size (minimum/optimal): 512 bytes / 512 bytes

    ss2. 配置/etc/fstab

    在这个文件末尾添加下面一行信息:

    1 /dev/sdb /srv/node/sdb xfs noatime,nodiratime,nobarrier,logbufs=8 0 2

    ss3. 挂载磁盘

    1 mount /srv/node/sdb

    ss4. 配置/etc/rsyncd.conf,追加下面的信息。

     1 uid = swift
     2 gid = swift
     3 log file = /var/log/rsyncd.log
     4 pid file = /var/run/rsyncd.pid
     5 address = 192.168.1.130
     6 
     7 [account]
     8 max connections = 2
     9 path = /srv/node/
    10 read only = false
    11 lock file = /var/lock/account.lock
    12 
    13 [container]
    14 max connections = 2
    15 path = /srv/node/
    16 read only = false
    17 lock file = /var/lock/container.lock
    18 
    19 [object]
    20 max connections = 2
    21 path = /srv/node/
    22 read only = false
    23 lock file = /var/lock/object.lock

    ss5. 启动服务

    1 systemctl enable rsyncd.service
    2 systemctl start rsyncd.service

    ss6. 安装分组件

    1 yum install openstack-swift-account openstack-swift-container openstack-swift-object

    ss7. 配置account,container,object

    1 curl -o /etc/swift/account-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/account-server.conf-sample?h=stable/liberty
    2 curl -o /etc/swift/container-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/container-server.conf-sample?h=stable/liberty
    3 curl -o /etc/swift/object-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/object-server.conf-sample?h=stable/liberty

    /etc/swift/account-server.conf,其他部分信息保持默认值。

     1 [DEFAULT]
     2 bind_ip = 192.168.1.130
     3 bind_port = 6002
     4 user = swift
     5 swift_dir = /etc/swift
     6 devices = /srv/node
     7 mount_check = true
     8 
     9 [pipeline:main]
    10 pipeline = healthcheck recon account-server
    11 
    12 [filter:recon]
    13 use = egg:swift#recon
    14 recon_cache_path = /var/cache/swift

    /etc/swift/container-server.conf,其他部分信息保持默认值。

     1 [DEFAULT]
     2 bind_ip = 192.168.1.130
     3 bind_port = 6001
     4 user = swift
     5 swift_dir = /etc/swift
     6 devices = /srv/node
     7 mount_check = true
     8 
     9 [pipeline:main]
    10 pipeline = healthcheck recon container-server
    11 
    12 [filter:recon]
    13 use = egg:swift#recon
    14 recon_cache_path = /var/cache/swift

    /etc/swift/object-server.conf,其他部分信息保持默认值。

     1 [DEFAULT]
     2 bind_ip = 192.168.1.130
     3 bind_port = 6000
     4 user = swift
     5 swift_dir = /etc/swift
     6 devices = /srv/node
     7 mount_check = true
     8 
     9 [pipeline:main]
    10 pipeline = healthcheck recon object-server
    11 
    12 [filter:recon]
    13 use = egg:swift#recon
    14 recon_cache_path = /var/cache/swift
    15 recon_lock_path = /var/lock

    ss8.修改属组

    1 chown -R swift:swift /srv/node
    2 
    3 mkdir -p /var/cache/swift
    4 chown -R root:swift /var/cache/swift

    下面的操作又回到了controller节点上:

    s4. 创建account ring,首先要cd到/etc/swift目录。

    1 swift-ring-builder account.builder create 10 3 1
    2 
    3 swift-ring-builder account.builder add --region 1 --zone 1 --ip 192.168.1.130 --port 6002 --device sdb --weight 100
    4 
    5 swift-ring-builder account.builder rebalance

    s5. 创建container ring,首先要cd到/etc/swift目录。

    1 swift-ring-builder container.builder create 10 3 1
    2 
    3 swift-ring-builder container.builder add --region 1 --zone 1 --ip 192.168.1.130 --port 6001 --device sdb --weight 100
    4 
    5 swift-ring-builder container.builder rebalance

    s5. 创建object ring,首先要cd到/etc/swift目录。

    1 swift-ring-builder object.builder create 10 3 1
    2 
    3 swift-ring-builder object.builder add --region 1 --zone 1 --ip 192.168.1.130 --port 6000 --device sdb --weight 100
    4 
    5 swift-ring-builder object.builder rebalance

    s6. Copy the account.ring.gz, container.ring.gz, and object.ring.gz files to the /etc/swift directory on each storage node and any additional nodes running the proxy service.

    s7. 配置/etc/swift/swift.conf。然后将配置好的文件copy到node3(其他任何运行object节点以及运行了proxy-server的节点上)

    1 curl -o /etc/swift/swift.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/swift.conf-sample?h=stable/liberty

    /etc/swift/swift.conf

    1 [swift-hash]
    2 swift_hash_path_suffix = shihuc
    3 swift_hash_path_prefix = openstack
    4 
    5 [storage-policy:0]
    6 name = Policy-0
    7 default = yes

    s8. 修改属组

    1 chown -R root:swift /etc/swift

    s9. 启动服务(controller 节点以及运行了proxy-server的节点)

    1 systemctl enable openstack-swift-proxy.service memcached.service
    2 systemctl start openstack-swift-proxy.service memcached.service

    s10. 启动account,container以及object服务 (node3 object节点)

    1 systemctl enable openstack-swift-account.service openstack-swift-account-auditor.service   openstack-swift-account-reaper.service openstack-swift-account-replicator.service
    2 systemctl start openstack-swift-account.service openstack-swift-account-auditor.service openstack-swift-account-reaper.service openstack-swift-account-replicator.service
    3 systemctl enable openstack-swift-container.service openstack-swift-container-auditor.service openstack-swift-container-replicator.service openstack-swift-container-updater.service
    4 systemctl start openstack-swift-container.service openstack-swift-container-auditor.service openstack-swift-container-replicator.service openstack-swift-container-updater.service
    5 systemctl enable openstack-swift-object.service openstack-swift-object-auditor.service openstack-swift-object-replicator.service openstack-swift-object-updater.service
    6 systemctl start openstack-swift-object.service openstack-swift-object-auditor.service openstack-swift-object-replicator.service openstack-swift-object-updater.service

    最后,就是验证了。首先添加环境参数(controller节点)

    1 echo "export OS_AUTH_VERSION=3"  | tee -a admin-openrc.sh demo-openrc.sh
     1 [root@node0 opt]# swift stat
     2                         Account: AUTH_c6669377868c438f8a81cc234f85338f
     3                      Containers: 1
     4                         Objects: 0
     5                           Bytes: 0
     6 Containers in policy "policy-0": 1
     7    Objects in policy "policy-0": 0
     8      Bytes in policy "policy-0": 0
     9     X-Account-Project-Domain-Id: default
    10                     X-Timestamp: 1456454203.32398
    11                      X-Trans-Id: txaee8904dd48f484bb7534-0056d4f908
    12                    Content-Type: text/plain; charset=utf-8
    13                   Accept-Ranges: bytes

    看到上面的信息,说明基本已经成功了。下面来看看传文件,查询等操作,看到下面的内容,说明一切都可以了,成功!

    1 [root@node0 opt]# swift upload C1 admin-openrc.sh 
    2 admin-openrc.sh
    3 [root@node0 opt]# 
    4 [root@node0 opt]# swift list
    5 C1
    6 [root@node0 opt]# swift list C1
    7 admin-openrc.sh
    8 [root@node0 opt]#

    在这里,需要说明的是,在部署swift的时候遇到的问题!

    problem1:

    1 [root@node0 opt]# swift stat -v
    2 /usr/lib/python2.7/site-packages/keystoneclient/service_catalog.py:196: UserWarning: Providing attr without filter_value to get_urls() is deprecated as of the 1.7.0 release and may be removed in the 2.0.0 release. Either both should be provided or neither should be provided.
    3   'Providing attr without filter_value to get_urls() is '
    4 Account HEAD failed: http://node0:8080/v1/AUTH_c6669377868c438f8a81cc234f85338f 503 Service Unavailable

    这个503的错误,通过查询controller节点的/var/log/message信息:

     1 Feb 26 10:02:30 localhost swift-account-server: Traceback (most recent call last):
     2 Feb 26 10:02:30 localhost swift-account-server: File "/usr/bin/swift-account-server", line 23, in <module>
     3 Feb 26 10:02:30 localhost swift-account-server: sys.exit(run_wsgi(conf_file, 'account-server', **options))
     4 Feb 26 10:02:30 localhost swift-account-server: File "/usr/lib/python2.7/site-packages/swift/common/wsgi.py", line 888, in run_wsgi
     5 Feb 26 10:02:30 localhost swift-account-server: loadapp(conf_path, global_conf=global_conf)
     6 Feb 26 10:02:30 localhost swift-account-server: File "/usr/lib/python2.7/site-packages/swift/common/wsgi.py", line 384, in loadapp
     7 Feb 26 10:02:30 localhost swift-account-server: ctx = loadcontext(loadwsgi.APP, conf_file, global_conf=global_conf)
     8 Feb 26 10:02:30 localhost swift-account-server: File "/usr/lib/python2.7/site-packages/swift/common/wsgi.py", line 368, in loadcontext
     9 Feb 26 10:02:30 localhost swift-account-server: global_conf=global_conf)
    10 Feb 26 10:02:30 localhost swift-account-server: File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 296, in loadcontext
    11 Feb 26 10:02:30 localhost swift-account-server: global_conf=global_conf)
    12 Feb 26 10:02:30 localhost swift-account-server: File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 320, in _loadconfig
    13 Feb 26 10:02:30 localhost swift-account-server: return loader.get_context(object_type, name, global_conf)
    14 Feb 26 10:02:30 localhost swift-account-server: File "/usr/lib/python2.7/site-packages/swift/common/wsgi.py", line 64, in get_context
    15 Feb 26 10:02:30 localhost swift-account-server: object_type, name=name, global_conf=global_conf)
    16 Feb 26 10:02:30 localhost swift-account-server: File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 450, in get_context
    17 Feb 26 10:02:30 localhost swift-account-server: global_additions=global_additions)
    18 Feb 26 10:02:30 localhost swift-account-server: File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 562, in _pipeline_app_context
    19 Feb 26 10:02:30 localhost swift-account-server: for name in pipeline[:-1]]
    20 Feb 26 10:02:30 localhost swift-account-server: File "/usr/lib/python2.7/site-packages/swift/common/wsgi.py", line 64, in get_context
    21 Feb 26 10:02:30 localhost swift-account-server: object_type, name=name, global_conf=global_conf)
    22 Feb 26 10:02:30 localhost swift-account-server: File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 408, in get_context
    23 Feb 26 10:02:30 localhost swift-account-server: object_type, name=name)
    24 Feb 26 10:02:30 localhost swift-account-server: File "/usr/lib/python2.7/site-packages/paste/deploy/loadwsgi.py", line 587, in find_config_section
    25 Feb 26 10:02:30 localhost swift-account-server: self.filename))
    26 Feb 26 10:02:30 localhost swift-account-server: LookupError: No section 'healthcheck' (prefixed by 'filter') found in config /etc/swift/account-server.conf
    27 Feb 26 10:02:30 localhost systemd: openstack-swift-account.service: main process exited, code=exited, status=1/FAILURE
    28 Feb 26 10:02:30 localhost systemd: Unit openstack-swift-account.service entered failed state.
    29 Feb 26 10:02:30 localhost systemd: openstack-swift-account.service failed.

    发现,没有healthcheck段,这个就需要去检测配置文件了,account-server, container-server, object-server。起初,我的这三个配置文件,获取过程是有问题的。里面的确没有这个healthcheck段,起初我的配置是通过wget -qO target source这种方式获取的,没有注意这个操作指令是错的。对照官方的guide重新配置后,重启account,container以及object的服务,通过systemd-cgls命令查看swift相关的服务都起来了。说明配置没有问题了。再次verify:

     1 [root@node0 swift]# swift stat -v
     2 /usr/lib/python2.7/site-packages/keystoneclient/service_catalog.py:196: UserWarning: Providing attr without filter_value to get_urls() is deprecated as of the 1.7.0 release and may be removed in the 2.0.0 release. Either both should be provided or neither should be provided.
     3   'Providing attr without filter_value to get_urls() is '
     4      StorageURL: http://node0:8080/v1/AUTH_c6669377868c438f8a81cc234f85338f
     5      Auth Token: 98bd7931a5834f6dba424dcab9a14d3a
     6         Account: AUTH_c6669377868c438f8a81cc234f85338f
     7      Containers: 0
     8         Objects: 0
     9           Bytes: 0
    10 X-Put-Timestamp: 1456453671.08880
    11     X-Timestamp: 1456453671.08880
    12      X-Trans-Id: tx952ca1fe02b94b35b11d4-0056cfb826
    13    Content-Type: text/plain; charset=utf-8
    14 [root@node0 swift]# 

    problem2:

    1 /usr/lib/python2.7/site-packages/keystoneclient/service_catalog.py:196: UserWarning: Providing attr without filter_value to get_urls() is deprecated as of the 1.7.0 release and may be removed in the 2.0.0 release. Either both should be provided or neither should be provided.
    2   'Providing attr without filter_value to get_urls() is '

    针对上面swift指令执行后,出现的下面的warning信息的解决办法,很简单,就是要给swift指令提供region信息。我在admin-openrc.sh中添加了export OS_REGION_NAME=RegionOne,然后source admin-openrc.sh之后,再次执行swift的指令,就不再报这个warning了。

    最后上传一个swift相关的dashboard的截图,作为结束!

  • 相关阅读:
    python一次性解压多层嵌套zip压缩包
    zabbix自定义监控项、添加图形、设置触发器、远程执行命令
    制作自己的docker镜像
    vue-router的Import() 异步加载模块问题的解决方案
    Idea Maven配置镜像地址总出问题,麻烦检查一下这里!(最新)
    杂谈:开发人员如何进行复杂业务的学习?让boss刮目相看
    Spring Boot 2.x 基础案例:整合Dubbo 2.7.3+Nacos1.1.3(配置中心)
    整理一些大厂的开源平台及github,向他们看齐...
    Spring Boot 2.x 基础案例:整合Dubbo 2.7.3+Nacos1.1.3(最新版)
    Java图片处理:ico格式转 PNG/JPG等格式
  • 原文地址:https://www.cnblogs.com/shihuc/p/5229983.html
Copyright © 2011-2022 走看看