☰
CentOS 7.9部署OpenStack Swift对象存储实战指南
2026/10/31 12:49:14 网站建设 项目流程

1. 环境准备与基础配置

在CentOS 7.9上部署OpenStack Train版的Swift服务前,需要确保基础环境符合要求。我建议使用全新安装的CentOS 7.9最小化系统,避免与其他服务产生冲突。

1.1 系统初始化配置

首先执行系统更新并安装基础工具包:

yum update -y yum install -y epel-release yum install -y vim wget net-tools chrony

设置主机名并配置hosts文件:

hostnamectl set-hostname swift-controller echo "192.168.100.10 swift-controller" >> /etc/hosts

注意:生产环境中建议配置DNS解析而非直接修改hosts文件

1.2 时间同步配置

分布式存储对时间同步要求极高,配置chrony服务:

systemctl enable chronyd systemctl start chronyd chronyc sources # 验证时间源

1.3 防火墙配置

Swift使用以下端口:

  • 6000-6002:对象服务端口
  • 8080:代理服务端口

配置防火墙规则:

firewall-cmd --permanent --add-port={6000-6002/tcp,8080/tcp} firewall-cmd --reload

2. 数据库与消息队列部署

Swift依赖MySQL和RabbitMQ进行元数据存储和消息传递。

2.1 MySQL安装配置

安装MariaDB服务器:

yum install -y mariadb mariadb-server python2-PyMySQL

创建配置文件/etc/my.cnf.d/openstack.cnf:

[mysqld] bind-address = 192.168.100.10 default-storage-engine = innodb innodb_file_per_table = on max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8

启动并配置MySQL:

systemctl enable mariadb systemctl start mariadb mysql_secure_installation

2.2 RabbitMQ安装配置

安装RabbitMQ:

yum install -y rabbitmq-server systemctl enable rabbitmq-server systemctl start rabbitmq-server

添加OpenStack用户:

rabbitmqctl add_user openstack RABBIT_PASS rabbitmqctl set_permissions openstack ".*" ".*" ".*"

3. Swift服务安装与配置

3.1 基础依赖安装

安装Swift所需软件包:

yum install -y openstack-swift-proxy python-swiftclient \ python-keystoneclient python-keystonemiddleware memcached

配置memcached:

sed -i 's/127.0.0.1/0.0.0.0/' /etc/sysconfig/memcached systemctl enable memcached systemctl start memcached

3.2 创建Swift服务账户

在Keystone中创建Swift服务用户:

openstack user create --domain default --password SWIFT_PASS swift openstack role add --project service --user swift admin openstack service create --name swift --description "OpenStack Object Storage" object-store

创建API端点:

openstack endpoint create --region RegionOne object-store public http://swift-controller:8080/v1/AUTH_%\(tenant_id\)s openstack endpoint create --region RegionOne object-store internal http://swift-controller:8080/v1/AUTH_%\(tenant_id\)s openstack endpoint create --region RegionOne object-store admin http://swift-controller:8080/v1

3.3 配置Swift代理服务

创建配置文件/etc/swift/proxy-server.conf:

[DEFAULT] bind_port = 8080 user = swift workers = 4 [pipeline:main] pipeline = healthcheck cache authtoken keystoneauth proxy-server [app:proxy-server] use = egg:swift#proxy account_autocreate = True [filter:keystoneauth] use = egg:swift#keystoneauth operator_roles = admin,user [filter:authtoken] paste.filter_factory = keystonemiddleware.auth_token:filter_factory auth_uri = http://swift-controller:5000 auth_url = http://swift-controller:35357 memcached_servers = swift-controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = swift password = SWIFT_PASS [filter:cache] use = egg:swift#memcache memcache_servers = swift-controller:11211 [filter:healthcheck] use = egg:swift#healthcheck

3.4 配置Swift存储节点

在每个存储节点上执行以下操作:

安装Swift存储服务:

yum install -y openstack-swift-account openstack-swift-container openstack-swift-object xfsprogs

格式化并挂载存储设备(以/dev/sdb为例):

mkfs.xfs -f /dev/sdb mkdir -p /srv/node/sdb echo "/dev/sdb /srv/node/sdb xfs noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab mount /srv/node/sdb chown -R swift:swift /srv/node

配置Swift存储服务:

# /etc/swift/account-server.conf [DEFAULT] devices = /srv/node bind_ip = 0.0.0.0 bind_port = 6002 user = swift log_facility = LOG_LOCAL2 [pipeline:main] pipeline = recon account-server [filter:recon] use = egg:swift#recon recon_cache_path = /var/cache/swift

类似配置container-server.conf和object-server.conf文件,分别使用端口6001和6000。

4. 集群部署与验证

4.1 初始化Swift集群

在控制节点上生成配置文件:

cd /etc/swift swift-ring-builder account.builder create 10 3 1 swift-ring-builder container.builder create 10 3 1 swift-ring-builder object.builder create 10 3 1

添加存储节点到环(对每个存储节点执行):

swift-ring-builder account.builder add --region 1 --zone 1 --ip STORAGE_NODE_IP --port 6002 --device sdb --weight 100 swift-ring-builder container.builder add --region 1 --zone 1 --ip STORAGE_NODE_IP --port 6001 --device sdb --weight 100 swift-ring-builder object.builder add --region 1 --zone 1 --ip STORAGE_NODE_IP --port 6000 --device sdb --weight 100

平衡环并分发配置文件:

swift-ring-builder account.builder rebalance swift-ring-builder container.builder rebalance swift-ring-builder object.builder rebalance scp *.ring.gz *.builder swift-controller:/etc/swift/

4.2 启动Swift服务

在控制节点启动代理服务:

systemctl enable openstack-swift-proxy systemctl start openstack-swift-proxy

在存储节点启动存储服务:

systemctl enable openstack-swift-account openstack-swift-container openstack-swift-object systemctl start openstack-swift-account openstack-swift-container openstack-swift-object

4.3 功能验证

创建测试容器并上传对象:

swift post test-container dd if=/dev/zero of=test-file bs=1M count=100 swift upload test-container test-file swift list test-container

检查集群状态:

swift-stat swift-recon --all

5. 性能优化与故障处理

5.1 性能调优参数

在/etc/swift/swift.conf中添加:

[swift-hash] # 确保所有节点一致 swift_hash_path_prefix = changeme swift_hash_path_suffix = changeme [storage-policy:0] name = Policy-0 default = yes

调整内核参数提升性能:

echo "net.ipv4.tcp_keepalive_time = 600" >> /etc/sysctl.conf echo "net.ipv4.tcp_keepalive_intvl = 60" >> /etc/sysctl.conf echo "net.ipv4.tcp_keepalive_probes = 20" >> /etc/sysctl.conf sysctl -p

5.2 常见故障排查

问题1:代理服务无法启动

  • 检查/var/log/swift/proxy-server.log日志
  • 验证Keystone认证配置是否正确
  • 确认memcached服务正常运行

问题2:对象上传失败

  • 检查存储节点磁盘空间
  • 验证环文件是否同步到所有节点
  • 检查防火墙规则是否允许6000-6002端口通信

问题3:集群状态不一致

  • 运行swift-recon --all检查各节点状态
  • 使用swift-dispersion-report检查数据分布
  • 检查网络延迟和带宽是否满足要求

5.3 容量扩展方案

添加新存储节点步骤:

  1. 在新节点安装Swift存储服务
  2. 格式化并挂载存储设备
  3. 将节点加入现有环
  4. 重新平衡环并分发新配置文件
  5. 逐步调整权重实现平滑迁移

我在实际部署中发现,当存储节点超过10个时,建议考虑引入区域(zone)概念,将节点按机架或地理位置分组,提高数据可靠性。同时,定期使用swift-ring-builder检查环的平衡状态,当不平衡分数超过10时应该考虑重新平衡。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询