1. 项目概述
在CentOS 7.9系统上部署OpenStack Train版本的Dashboard组件——Horizon,是构建私有云平台的关键一步。Horizon作为OpenStack的官方Web界面,为用户提供了直观的操作入口,让管理员和终端用户能够通过浏览器轻松管理计算、存储和网络资源。
我曾在多个企业级OpenStack部署项目中负责Horizon的安装配置工作,发现很多工程师在部署过程中容易忽略一些关键配置细节。本文将结合实战经验,详细讲解在CentOS 7.9环境下部署Horizon的完整流程,包括依赖解决、配置文件优化以及常见问题处理。
2. 环境准备与依赖安装
2.1 系统基础配置
在开始部署前,确保你的CentOS 7.9系统已经完成以下准备工作:
- 配置正确的时区和时间同步:
bash复制timedatectl set-timezone Asia/Shanghai
yum install -y chrony
systemctl enable --now chronyd
- 禁用SELinux以避免权限问题:
bash复制setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
- 配置OpenStack Train仓库:
bash复制yum install -y centos-release-openstack-train
yum update -y
注意:生产环境中不建议完全禁用SELinux,可以通过设置适当的SELinux策略来保持安全性。这里为了简化部署过程暂时禁用。
2.2 安装必要依赖包
Horizon作为Web应用,需要以下基础组件支持:
bash复制yum install -y python3-mod_wsgi httpd memcached python3-memcached
systemctl enable --now httpd
systemctl enable --now memcached
安装过程中常见问题及解决方案:
- 如果遇到Python依赖冲突,可以尝试:
bash复制yum install -y python3-openstackclient python3-pip
pip3 install --upgrade pip
- 内存不足时memcached启动失败,可调整配置:
bash复制sed -i 's/^-m 64/-m 256/' /etc/sysconfig/memcached
systemctl restart memcached
3. Horizon安装与配置
3.1 软件包安装
安装Horizon核心软件包:
bash复制yum install -y openstack-dashboard
这个命令会自动安装以下关键组件:
- Django框架
- Horizon核心代码
- OpenStack客户端库
- 必要的静态资源文件
3.2 主配置文件调整
编辑/etc/openstack-dashboard/local_settings文件,进行关键配置:
- 配置OpenStack服务端点:
python复制OPENSTACK_HOST = "controller" # 替换为你的控制节点主机名/IP
ALLOWED_HOSTS = ['*'] # 生产环境应指定具体域名
- 配置Memcached会话存储:
python复制CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
- 启用必要的OpenStack服务:
python复制OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_API_VERSIONS = {
"identity": 3,
"image": 2,
"volume": 3,
}
- 配置时区(与系统时区保持一致):
python复制TIME_ZONE = "Asia/Shanghai"
3.3 Apache配置优化
默认安装会创建/etc/httpd/conf.d/openstack-dashboard.conf文件,建议进行以下优化:
- 调整WSGI进程数(根据服务器配置):
apache复制WSGIDaemonProcess dashboard processes=4 threads=10 user=apache group=apache
- 启用压缩提高加载速度:
apache复制AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
- 配置静态文件缓存:
apache复制<Directory /usr/share/openstack-dashboard/static>
ExpiresActive On
ExpiresDefault "access plus 1 month"
</Directory>
完成配置后重启服务:
bash复制systemctl restart httpd
4. 安全加固与权限配置
4.1 防火墙配置
确保防火墙允许HTTP/HTTPS访问:
bash复制firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
4.2 密钥轮换
Horizon使用SECRET_KEY进行加密操作,建议定期更换:
bash复制openssl rand -base64 64 | tee /etc/openstack-dashboard/.secret_key_store
chown root:apache /etc/openstack-dashboard/.secret_key_store
chmod 640 /etc/openstack-dashboard/.secret_key_store
然后在local_settings中引用:
python复制with open('/etc/openstack-dashboard/.secret_key_store') as f:
SECRET_KEY = f.read().strip()
4.3 多域支持配置
如果使用多域Keystone,需要额外配置:
python复制OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'
5. 高级功能配置
5.1 主题定制
Horizon支持自定义主题,创建自定义主题目录:
bash复制mkdir -p /usr/share/openstack-dashboard/static/themes/custom
cp -r /usr/share/openstack-dashboard/static/dashboard /usr/share/openstack-dashboard/static/themes/custom/
然后在local_settings中启用:
python复制AVAILABLE_THEMES = [
('default', 'Default', 'themes/default'),
('custom', 'Custom', 'themes/custom'),
]
DEFAULT_THEME = 'custom'
5.2 日志配置
调整日志级别和输出位置:
python复制LOG_DIR = "/var/log/horizon"
DEBUG = False
LOG_LEVEL = "INFO"
确保日志目录存在并有正确权限:
bash复制mkdir -p /var/log/horizon
chown apache:apache /var/log/horizon
5.3 会话超时设置
调整会话超时时间(单位:秒):
python复制SESSION_TIMEOUT = 3600 # 1小时
SESSION_COOKIE_AGE = 3600
SESSION_SAVE_EVERY_REQUEST = True
6. 常见问题排查
6.1 登录页面无法访问
可能原因及解决方案:
- Apache服务未运行:
bash复制systemctl status httpd
journalctl -xe
- 端口冲突:
bash复制netstat -tulnp | grep ':80'
- SELinux阻止访问(如果未完全禁用):
bash复制setsebool -P httpd_can_network_connect on
6.2 页面加载缓慢
优化建议:
- 检查Memcached状态:
bash复制echo "stats" | nc 127.0.0.1 11211
- 启用静态文件压缩:
apache复制AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
- 调整WSGI进程数:
apache复制WSGIDaemonProcess dashboard processes=8 threads=25
6.3 服务端点不可达
检查步骤:
- 验证Keystone端点:
bash复制openstack catalog list
- 检查网络连通性:
bash复制curl -v http://controller:5000/v3
- 验证证书(如使用HTTPS):
bash复制openssl s_client -connect controller:5000
7. 性能调优与监控
7.1 WSGI参数优化
根据服务器配置调整/etc/httpd/conf.d/openstack-dashboard.conf:
apache复制WSGIDaemonProcess dashboard processes=8 threads=25 user=apache group=apache display-name=%{GROUP}
WSGIProcessGroup dashboard
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
参数说明:
- processes:建议为CPU核心数的1.5-2倍
- threads:每个进程的线程数,建议20-30
7.2 静态文件缓存
配置浏览器缓存静态资源:
apache复制<Directory /usr/share/openstack-dashboard/static>
ExpiresActive On
ExpiresDefault "access plus 1 month"
Header append Cache-Control "public"
</Directory>
7.3 监控仪表板
配置Horizon自身监控:
- 安装必要的Python包:
bash复制pip3 install django-prometheus
- 在
local_settings中添加:
python复制INSTALLED_APPS += ('django_prometheus',)
MIDDLEWARE.insert(0, 'django_prometheus.middleware.PrometheusBeforeMiddleware')
MIDDLEWARE.append('django_prometheus.middleware.PrometheusAfterMiddleware')
- 配置Prometheus抓取端点:
yaml复制- job_name: 'horizon'
metrics_path: '/metrics'
static_configs:
- targets: ['horizon-server:80']
8. 备份与恢复策略
8.1 配置文件备份
建议定期备份以下关键文件:
bash复制tar czvf horizon-backup-$(date +%Y%m%d).tar.gz \
/etc/openstack-dashboard/ \
/usr/share/openstack-dashboard/ \
/etc/httpd/conf.d/openstack-dashboard.conf
8.2 数据库备份
Horizon使用Django数据库存储会话等信息:
bash复制python3 /usr/share/openstack-dashboard/manage.py dumpdata > horizon-db-$(date +%Y%m%d).json
8.3 恢复流程
- 恢复配置文件:
bash复制tar xzvf horizon-backup-20230101.tar.gz -C /
- 恢复数据库:
bash复制python3 /usr/share/openstack-dashboard/manage.py loaddata horizon-db-20230101.json
- 重启服务:
bash复制systemctl restart httpd memcached
9. 升级与维护
9.1 小版本升级
bash复制yum clean all
yum update -y openstack-dashboard
systemctl restart httpd
9.2 大版本升级
- 备份现有配置和数据(见第8节)
- 禁用当前仓库,启用新版本仓库:
bash复制yum-config-manager --disable centos-release-openstack-train
yum-config-manager --enable centos-release-openstack-ussuri
- 执行升级:
bash复制yum update -y
9.3 回滚步骤
如果升级后出现问题:
- 降级软件包:
bash复制yum downgrade -y openstack-dashboard
-
恢复备份的配置文件
-
重启服务
10. 生产环境最佳实践
10.1 高可用部署
建议的HA架构:
- 多台Horizon服务器,通过负载均衡器分发
- 共享的Memcached集群
- 数据库后端使用Galera集群
配置示例(以HAProxy为例):
haproxy复制frontend horizon-http
bind *:80
option forwardfor
default_backend horizon-servers
backend horizon-servers
balance roundrobin
server horizon1 192.168.1.101:80 check
server horizon2 192.168.1.102:80 check
10.2 安全加固建议
- 启用HTTPS:
bash复制yum install -y mod_ssl
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/pki/tls/private/horizon.key \
-out /etc/pki/tls/certs/horizon.crt
- 配置HTTP严格传输安全:
apache复制Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
- 禁用不必要的HTTP方法:
apache复制<Location "/">
<LimitExcept GET POST HEAD>
Deny from all
</LimitExcept>
</Location>
10.3 性能基准测试
使用Apache Benchmark测试性能:
bash复制ab -n 1000 -c 100 http://localhost/dashboard/
关键指标监控:
- 请求处理时间(Time per request)
- 失败率(Failed requests)
- 吞吐量(Requests per second)
根据测试结果调整WSGI参数和Memcached配置
