ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

OpenStack Glance服务迁移实践指南

OpenStack Glance服务迁移实践指南

1. OpenStack Glance服务迁移概述

在OpenStack云平台的实际运维中,随着业务规模扩大,将核心服务从控制节点分离出来独立部署是常见的架构优化手段。最近我就完成了将Glance镜像服务从控制节点迁移到独立主机的完整过程。这种迁移不仅能减轻控制节点负载,还能提高镜像服务的安全性和可用性。

迁移的核心目标是将Glance服务及其所有相关组件(包括数据库、配置文件和镜像文件)完整地转移到新主机上,同时确保OpenStack其他服务(如Nova计算服务)能够无缝地继续使用镜像服务。整个过程涉及服务状态管理、数据库操作、配置文件调整和权限设置等多个技术环节。

2. 迁移前的准备工作

2.1 环境检查与规划

在开始迁移前,必须对现有环境进行全面检查:

  1. 服务状态确认:使用openstack image list命令验证当前Glance服务正常运行,记录现有镜像数量和状态。
  2. 资源评估:新主机应满足Glance服务的资源需求,特别是存储空间(/var/lib/glance/images目录)需要足够容纳所有镜像文件。
  3. 网络连通性:确保新主机与控制节点、计算节点之间的网络畅通,特别是9292端口(Glance API)和9191端口(Glance Registry)的访问。

重要提示:建议在业务低峰期进行迁移操作,避免影响生产环境中的实例创建和镜像上传操作。

2.2 备份策略制定

迁移过程中可能出现的风险要求我们建立完善的备份机制:

  1. 数据库备份:除了Glance数据库,还需要备份Keystone的endpoint相关数据。
  2. 配置文件备份:保存/etc/glance目录下的所有配置文件。
  3. 镜像文件备份:复制/var/lib/glance/images目录下的所有文件到安全位置。

我通常会使用以下命令创建时间戳标记的备份目录:

BACKUP_DIR=/backup/glance_migration_$(date +%Y%m%d_%H%M%S) mkdir -p $BACKUP_DIR

3. 迁移步骤详解

3.1 停止原Glance服务

在控制节点上停止并禁用Glance服务是迁移的第一步:

systemctl stop openstack-glance-api.service openstack-glance-registry.service systemctl disable openstack-glance-api.service openstack-glance-registry.service

验证服务确实已停止:

systemctl status openstack-glance-api.service openstack-glance-registry.service

预期输出应显示"inactive (dead)"状态。

3.2 新主机数据库部署

在新主机上安装MariaDB数据库:

yum install mariadb mariadb-server python2-PyMySQL -y systemctl start mariadb systemctl enable mariadb

执行安全初始化:

mysql_secure_installation

在交互过程中,建议设置root密码、移除匿名用户、禁止root远程登录等安全选项。

3.3 Glance数据库迁移

3.3.1 原数据库备份

在控制节点上备份Glance数据库:

mysqldump -u root -p glance > glance.sql

将备份文件传输到新主机:

scp glance.sql root@新主机IP:/opt/
3.3.2 数据库恢复

在新主机上创建空数据库并导入数据:

mysql -u root -p -e "CREATE DATABASE glance;" mysql -u root -p glance < /opt/glance.sql

验证数据导入:

mysql -u root -p -e "USE glance; SHOW TABLES;"

应看到images、image_properties等Glance相关表。

3.3.3 数据库权限配置

为Glance服务创建专用数据库用户并授权:

mysql -u root -p -e " GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS'; GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS'; FLUSH PRIVILEGES;"

安全建议:生产环境中应使用强密码替换'GLANCE_DBPASS',并考虑限制glance用户的访问IP范围。

3.4 Glance服务安装与配置

3.4.1 软件包安装

在新主机上安装Glance组件:

yum install openstack-glance -y
3.4.2 配置文件迁移

从原控制节点复制配置文件:

scp -rp root@控制节点IP:/etc/glance/* /etc/glance/

关键配置修改:

  1. 更新数据库连接信息(glance-api.conf和glance-registry.conf):
[database] connection = mysql+pymysql://glance:GLANCE_DBPASS@新主机IP/glance
  1. 检查并更新[keystone_authtoken]部分的相关配置,确保认证信息正确。

  2. 验证存储后端配置(通常为file或ceph),确保与新主机环境匹配。

3.4.3 服务启动与验证

启动Glance服务:

systemctl start openstack-glance-api.service openstack-glance-registry.service systemctl enable openstack-glance-api.service openstack-glance-registry.service

检查服务状态:

systemctl status openstack-glance-api.service systemctl status openstack-glance-registry.service

通过CLI验证:

openstack image list

应能正常显示原有镜像列表。

3.5 镜像文件迁移

将镜像文件从原主机复制到新主机:

scp -rp /var/lib/glance/images/* root@新主机IP:/var/lib/glance/images/

在新主机上修正文件权限:

chown -R glance:glance /var/lib/glance/images

验证镜像可访问性:

ls -l /var/lib/glance/images

应显示所有镜像文件,且属主为glance用户。

3.6 Keystone服务端点更新

Glance服务迁移后,需要更新Keystone中的服务端点信息:

  1. 备份Keystone的endpoint数据:
mysqldump -u root -p keystone endpoint > endpoint.sql
  1. 修改endpoint.sql文件,替换controller为新的Glance主机IP:
sed -i 's#http://controller:9292#http://新主机IP:9292#g' endpoint.sql
  1. 恢复修改后的数据:
mysql -u root -p keystone < endpoint.sql

验证端点更新:

openstack endpoint list | grep glance

应显示新的主机IP地址。

3.7 计算节点配置更新

所有Nova计算节点需要更新Glance API地址:

在每个节点上执行:

sed -i 's#http://controller:9292#http://新主机IP:9292#g' /etc/nova/nova.conf

重启相关服务:

  • 控制节点:
systemctl restart openstack-nova-api.service
  • 每个计算节点:
systemctl restart openstack-nova-compute.service

4. 迁移后验证

4.1 基本功能验证

  1. 列出所有镜像:
openstack image list
  1. 上传新镜像测试:
openstack image create --file cirros-0.5.2-x86_64-disk.img --disk-format qcow2 --container-format bare --public cirros-test
  1. 检查镜像详情:
openstack image show cirros-test

4.2 集成测试

创建使用新镜像的实例:

openstack server create --image cirros-test --flavor m1.tiny test-instance

检查实例状态:

openstack server show test-instance

应显示实例状态为ACTIVE。

4.3 性能监控

观察新Glance主机的资源使用情况:

top df -h ss -tulnp | grep glance

5. 常见问题与解决方案

5.1 镜像上传失败

现象:上传镜像时出现"Could not establish connection to glance API"错误。

排查步骤:

  1. 检查Glance服务状态:
systemctl status openstack-glance-api
  1. 验证端口监听:
ss -tulnp | grep 9292
  1. 检查防火墙规则:
iptables -L -n

解决方案:

  • 确保9292端口开放
  • 检查SELinux状态,必要时临时设置为permissive模式

5.2 实例创建时找不到镜像

现象:Nova报错"No valid host was found"或"Image not found"。

排查步骤:

  1. 确认Nova配置文件中glance_api_servers指向正确
  2. 检查Nova与Glance服务的通信:
curl http://新主机IP:9292

解决方案:

  • 确保所有计算节点都更新了nova.conf
  • 重启nova-compute服务

5.3 数据库连接问题

现象:Glance服务日志中出现数据库连接错误。

排查步骤:

  1. 检查数据库服务状态:
systemctl status mariadb
  1. 测试数据库连接:
mysql -u glance -pGLANCE_DBPASS -h 新主机IP glance -e "SHOW TABLES;"

解决方案:

  • 验证数据库用户权限
  • 检查bind-address配置(/etc/my.cnf.d/server.cnf)

6. 迁移后的优化建议

  1. 日志配置优化: 在/etc/glance/glance-api.conf中调整日志级别和轮转策略:

    [DEFAULT] debug = false log_file = /var/log/glance/api.log log_dir = /var/log/glance
  2. 存储后端优化: 考虑使用更高效的存储后端,如Ceph RBD,特别是当镜像数量较多时。

  3. 定期维护计划:

    • 设置定期数据库备份
    • 实施镜像清理策略,移除不再使用的镜像
  4. 监控告警配置: 添加对以下指标的监控:

    • Glance服务进程状态
    • API响应时间
    • 存储空间使用率
  5. 高可用部署: 对于生产环境,建议部署多个Glance API实例,配合负载均衡器实现高可用。

通过这次迁移实践,我深刻体会到OpenStack组件解耦带来的运维灵活性。独立部署的Glance服务不仅提高了系统稳定性,还为后续的横向扩展奠定了基础。在实际操作中,数据库的一致性和服务端点的及时更新是两个最需要关注的要点。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进