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 --reload2. 数据库与消息队列部署
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_installation2.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 memcached3.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/v13.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#healthcheck3.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-object4.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 --all5. 性能优化与故障处理
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 -p5.2 常见故障排查
问题1:代理服务无法启动
- 检查
/var/log/swift/proxy-server.log日志 - 验证Keystone认证配置是否正确
- 确认memcached服务正常运行
问题2:对象上传失败
- 检查存储节点磁盘空间
- 验证环文件是否同步到所有节点
- 检查防火墙规则是否允许6000-6002端口通信
问题3:集群状态不一致
- 运行
swift-recon --all检查各节点状态 - 使用
swift-dispersion-report检查数据分布 - 检查网络延迟和带宽是否满足要求
5.3 容量扩展方案
添加新存储节点步骤:
- 在新节点安装Swift存储服务
- 格式化并挂载存储设备
- 将节点加入现有环
- 重新平衡环并分发新配置文件
- 逐步调整权重实现平滑迁移
我在实际部署中发现,当存储节点超过10个时,建议考虑引入区域(zone)概念,将节点按机架或地理位置分组,提高数据可靠性。同时,定期使用swift-ring-builder检查环的平衡状态,当不平衡分数超过10时应该考虑重新平衡。