Placement具体功能如下:
1 通过HTTP请求来跟踪和过滤资源
2 数据保存在本地数据库中
3 具备丰富的资源管理和筛选策略
6.1 配置Placement数据库
#在任意控制节点创建数据库,数据库自动同步,以controller160节点为例;
#使用root登陆数据库:
mysql -u root -p
#创建placement数据库:
CREATE DATABASE placement;
#授予对placement数据库的访问权限,刷新退出数据库:
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' \
IDENTIFIED BY 'placement.123';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' \
IDENTIFIED BY 'placement.123';
flush privileges;
exit
6.2 加载管理凭证
source adminrc.sh
6.3 创建Placement相关服务凭证
#在任意控制节点操作,以controller160节点为例;
#创建Placement服务用户,并设置密码为placement.123
openstack user create --domain default --password-prompt placement
#输出
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 14ef4d440ffa4dbcacbcb06a4eaab5d5 |
| name | placement |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
#赋予Placement服务用户服务管理员权限及角色,无输出
openstack role add --project service --user placement admin
#创建Placement服务
openstack service create --name placement --description "Placement API" placement
#输出
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Placement API |
| enabled | True |
| id | 45965cc75d244cb5a5b9129c22b99e0f |
| name | placement |
| type | placement |
+-------------+----------------------------------+
6.4 创建Placement API endpoints
#public
openstack endpoint create --region RegionOne placement public http://controller168:8778
#输出
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 076a9ddd7b3744dda89f8de6fcff62a0 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 45965cc75d244cb5a5b9129c22b99e0f |
| service_name | placement |
| service_type | placement |
| url | http://controller168:8778 |
+--------------+----------------------------------+
#internal
openstack endpoint create --region RegionOne placement internal http://controller168:8778
#输出
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 3dc8d8e0fcd24b45a4a02984063e1e97 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 45965cc75d244cb5a5b9129c22b99e0f |
| service_name | placement |
| service_type | placement |
| url | http://controller168:8778 |
+--------------+----------------------------------+
#admin
openstack endpoint create --region RegionOne placement admin http://controller168:8778
#输出
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 0c148527e7b848ec864ba3b3d969aef7 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 45965cc75d244cb5a5b9129c22b99e0f |
| service_name | placement |
| service_type | placement |
| url | http://controller168:8778 |
+--------------+----------------------------------+
6.5 部署与配置Placement - ALL Controller
#安装包
yum install openstack-placement-api -y
#备份Placement配置
cp /etc/placement/placement.conf /etc/placement/placement.conf.bak
egrep -v "^$|^#" /etc/placement/placement.conf.bak >/etc/placement/placement.conf
#配置Placement配置文件,在对应项底下增加以下字段
#vim /etc/placement/placement.conf
[placement_database]
# ...
connection = mysql+pymysql://placement:placement.123@controller168/placement
[api]
# ...
auth_strategy = keystone
[keystone_authtoken]
# ...
www_authenticate_uri = http://controller168:5000
auth_url = http://controller168:5000
memcached_servers = controller160:11211,controller161:11211,controller162:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = placement
password = placement.123
#配置00-nova-placement-api.conf
sed -i "s/Listen\ 8778/Listen\ 172.16.1.160:8778/g" /etc/httpd/conf.d/00-nova-placement-api.conf
sed -i "s/*:8778/172.16.1.160:8778/g" /etc/httpd/conf.d/00-nova-placement-api.conf
#vim /etc/httpd/conf.d/00-placement-api.conf
#在#SSLCertificateKeyFile ...底下添加
#Placement API
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
#填充placement数据库,无输出
su -s /bin/sh -c "placement-manage db sync" placement
#验证placement数据库是否正常写入:
mysql -h controller168 -uplacement -pplacement.123 -e "use placement;show tables;"
#重启apache服务,并配置开机启动:
systemctl restart httpd
6.6 Placement服务验证
#加载管理凭证
source adminrc.sh
#执行状态检查,都为success为正常
placement-status upgrade check
#输出
+----------------------------------+
| Upgrade Check Results |
+----------------------------------+
| Check: Missing Root Provider IDs |
| Result: Success |
| Details: None |
+----------------------------------+
| Check: Incomplete Consumers |
| Result: Success |
| Details: None |
+----------------------------------+
6.7 设置pcs资源
#前面keystone已经设置过httpd的服务,因为placement也是使用httpd服务,因此不需要再重复设置!
至此,Placement服务已部署完毕,如有问题请联系我改正,感激不尽!
5.x 部署过程遇到的问题汇总
eg.1 执行su -s /bin/sh -c "placement-manage db sync" placement 报错
1044, "Access denied for user 'placement'@'%' to database 'placement'"
解决方案:
1 查看授权表,发现权限没有被打开
SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user;
+-----------+-----------+-------------------------------------------+------------+------------+
| host | user | password | Grant_priv | Super_priv |
+-----------+-----------+-------------------------------------------+------------+------------+
| localhost | root | *2683A2B8A9DE120C7B5CC6D45B5F7A2E708FAFCF | Y | Y |
| localhost | keystone | *2431959D1DBB9DEF2BB0E90F0C08387220989A5F | N | N |
| % | keystone | *2431959D1DBB9DEF2BB0E90F0C08387220989A5F | N | N |
| % | root | *2683A2B8A9DE120C7B5CC6D45B5F7A2E708FAFCF | N | N |
| localhost | glance | *4BED54445326D0D3477C30025D66AF8911CA854F | N | N |
| % | glance | *4BED54445326D0D3477C30025D66AF8911CA854F | N | N |
| localhost | placement | *7F75AD3C141B7CD8E66685A5505B1630D896092F | N | N |
| % | placement | *7F75AD3C141B7CD8E66685A5505B1630D896092F | N | N |
+-----------+-----------+-------------------------------------------+------------+------------+
2 更新用户权限:
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
或者
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'devops';
FLUSH PRIVILEGES;
+-----------+-----------+-------------------------------------------+------------+------------+
| host | user | password | Grant_priv | Super_priv |
+-----------+-----------+-------------------------------------------+------------+------------+
| localhost | root | *2683A2B8A9DE120C7B5CC6D45B5F7A2E708FAFCF | Y | Y |
| localhost | keystone | *2431959D1DBB9DEF2BB0E90F0C08387220989A5F | N | N |
| % | keystone | *2431959D1DBB9DEF2BB0E90F0C08387220989A5F | N | N |
| % | root | *2683A2B8A9DE120C7B5CC6D45B5F7A2E708FAFCF | Y | Y |
| localhost | glance | *4BED54445326D0D3477C30025D66AF8911CA854F | N | N |
| % | glance | *4BED54445326D0D3477C30025D66AF8911CA854F | N | N |
| localhost | placement | *7F75AD3C141B7CD8E66685A5505B1630D896092F | N | N |
| % | placement | *7F75AD3C141B7CD8E66685A5505B1630D896092F | N | N |
+-----------+-----------+-------------------------------------------+------------+------------+
eg2.root@controller160:~# placement-status upgrade check
SQL connection failed. 10 attempts left.
SQL connection failed. 9 attempts left.
SQL connection failed. 8 attempts left.
SQL connection failed. 7 attempts left.
SQL connection failed. 6 attempts left.
SQL connection failed. 5 attempts left.
解决方案:
1 检查mysql 3306是否启用
2 检查connection URL是否配置及密码是否正确
3 检查本机hosts文件是否有录入各节点对应的host列表