案例分析Swift重启失效
1. 报错详情
在重新启动 VMware 虚拟机后,我们发现 OpenStack 的 Swift 服务出现了 503 Service Unavailable 错误。经过排查,问题根源在于 Swift 服务所使用的存储挂载是临时挂载,而非永久挂载。
Swift 服务依赖于稳定的存储挂载来保证数据的一致性和持久性。在重新启动虚拟机之前,Swift 的存储节点使用了临时挂载的方式将存储设备挂载到了指定目录。这种方法在系统正常运行时是可行的,但在系统重启后,临时挂载的设置会被清除,导致存储设备无法自动挂载回原来的位置。因此,Swift 服务在尝试访问存储数据时找不到对应的挂载点,从而引发了 503 Service Unavailable 错误。
(1)swift服务正常状态如下
[root@controller ~]# swift stat
Account: AUTH_8bde12ff804e42498661b7454994c446
Containers: 0
Objects: 0
Bytes: 0
X-Put-Timestamp: 1690507907.67931
X-Timestamp: 1690507907.67931
X-Trans-Id: tx56d22fa138ab45908caab-0064c31a82
Content-Type: text/plain; charset=utf-8
X-Openstack-Request-Id: tx56d22fa138ab45908caab-0064c31a82
查看所有块设备
[root@compute ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 45.1G 0 lvm /home
sdb 8:16 0 100G 0 disk
├─sdb1 8:17 0 20G 0 part
│ ├─cinder--volumes-cinder--volumes--pool_tmeta 253:3 0 20M 0 lvm
│ │ └─cinder--volumes-cinder--volumes--pool 253:5 0 19G 0 lvm
│ └─cinder--volumes-cinder--volumes--pool_tdata 253:4 0 19G 0 lvm
│ └─cinder--volumes-cinder--volumes--pool 253:5 0 19G 0 lvm
├─sdb2 8:18 0 20G 0 part /swift/node/sdb2
└─sdb3 8:19 0 20G 0 part
sr0 11:0 1 4.4G 0 rom
(2)重启后报错如下
[root@controller ~]# source /etc/keystone/admin-openrc.sh
[root@controller ~]# swift stat
Account HEAD failed: http://controller:8080/v1/AUTH_8bde12ff804e42498661b7454994c446 503 Service Unavailable
Failed Transaction ID: tx1bac2f2ee5fe45cda0125-0064c3c108
(3)日志如下
[root@controller ~]# tail -f /var/log/swift/*
tail: cannot open '/var/log/swift/*' for reading: No such file or directory
tail: no files remaining
查看所有块设备
[root@compute ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 45.1G 0 lvm /home
sdb 8:16 0 100G 0 disk
├─sdb1 8:17 0 20G 0 part
│ ├─cinder--volumes-cinder--volumes--pool_tmeta 253:3 0 20M 0 lvm
│ │ └─cinder--volumes-cinder--volumes--pool 253:5 0 19G 0 lvm
│ └─cinder--volumes-cinder--volumes--pool_tdata 253:4 0 19G 0 lvm
│ └─cinder--volumes-cinder--volumes--pool 253:5 0 19G 0 lvm
├─sdb2 8:18 0 20G 0 part
└─sdb3 8:19 0 20G 0 part
sr0 11:0 1 4.4G 0 rom
loop0 7:0 0 20G 0 loop /swift/node
2. 解决办法
实际上是因为脚本里面设置的是临时挂载,重启后会失效,只需要重新挂载即可
在swift-compute脚本里面查看脚本内容
echo "/dev/$OBJECT_DISK /swift/node xfs loop,noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab
mkdir -p /swift/node/$OBJECT_DISK
mount /dev/$OBJECT_DISK /swift/node/$OBJECT_DISK
scp $HOST_NAME:/etc/swift/*.ring.gz /etc/swift/
(1)计算节点重新挂载生效
[root@compute ~]# umount /swift/node/
[root@compute ~]# source /etc/openstack/openrc.sh
[root@compute ~]# mount /dev/$OBJECT_DISK /swift/node/$OBJECT_DISK
[root@compute ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 45.1G 0 lvm /home
sdb 8:16 0 100G 0 disk
├─sdb1 8:17 0 20G 0 part
│ ├─cinder--volumes-cinder--volumes--pool_tmeta 253:3 0 20M 0 lvm
│ │ └─cinder--volumes-cinder--volumes--pool 253:5 0 19G 0 lvm
│ └─cinder--volumes-cinder--volumes--pool_tdata 253:4 0 19G 0 lvm
│ └─cinder--volumes-cinder--volumes--pool 253:5 0 19G 0 lvm
├─sdb2 8:18 0 20G 0 part /swift/node/sdb2
└─sdb3 8:19 0 20G 0 part
sr0 11:0 1 4.4G 0 rom
(2)控制节点验证
[root@controller ~]# source /etc/keystone/admin-openrc.sh
[root@controller ~]# swift stat
Account: AUTH_8bde12ff804e42498661b7454994c446
Containers: 0
Objects: 0
Bytes: 0
X-Put-Timestamp: 1690509333.32481
X-Timestamp: 1690509333.32481
X-Trans-Id: txcc8962b244bb4ff397885-0064c32014
Content-Type: text/plain; charset=utf-8
X-Openstack-Request-Id: txcc8962b244bb4ff397885-0064c32014