问题描述
尝试使用 devstack 安装 openstack 时,运行命令 ./stack.sh
后出现此错误
ovn-central.service 的作业因超时而失败。 详情参见“systemctl status ovn-central.service”和“journalctl -xe”。
运行命令 systemctl status ovn-central.service
给了我这个输出:
我知道我必须更改超时值,但我不知道该怎么做
日志文件:
我需要解决这个问题。
解决方法
我遇到了和你一样的错误。我尝试将超时设置为更大的数字,例如 600 秒,您可以在此链接中查看第一个答案:how-to-change-systemd-service-timeout-value
但实际上这不是正确的解决方案。您可以使用 systemctl status
来查找该服务的启动脚本,而正是 ovn-sbctl init
阻止了重新启动过程。
stack@lil-u18:~/devstack$ systemctl status ovn-central.service
● ovn-central.service - LSB: OVN central components
Loaded: loaded (/etc/init.d/ovn-central; static; vendor preset: enabled)
Active: activating (start) since Wed 2021-06-23 10:02:29 CST; 10min ago
Docs: man:systemd-sysv-generator(8)
Cntrl PID: 3527 (ovn-central)
Tasks: 5 (limit: 3654)
CGroup: /system.slice/ovn-central.service
├─ 3527 /bin/sh /etc/init.d/ovn-central start
├─ 3534 /bin/sh /usr/share/openvswitch/scripts/ovn-ctl start_northd
├─ 3558 ovn-sbctl init
├─24463 /bin/sh /usr/share/openvswitch/scripts/ovn-ctl start_northd
└─24489 ovn-sbctl init
尝试ovn-sbctl --verbose init
打印错误信息,如下:
stack@lil-u18:~/devstack$ ovn-sbctl --verbose init
2021-06-23T02:13:06Z|00002|reconnect|DBG|unix:/var/run/openvswitch/ovnsb_db.sock: entering BACKOFF
2021-06-23T02:13:06Z|00003|stream_unix|DBG|/var/run/openvswitch/ovnsb_db.sock: connection failed (No such file or directory)
2021-06-23T02:13:06Z|00004|reconnect|INFO|unix:/var/run/openvswitch/ovnsb_db.sock: connecting...
2021-06-23T02:13:06Z|00005|reconnect|DBG|unix:/var/run/openvswitch/ovnsb_db.sock: entering CONNECTING
2021-06-23T02:13:06Z|00006|reconnect|INFO|unix:/var/run/openvswitch/ovnsb_db.sock: connection attempt failed (No such file or directory)
2021-06-23T02:13:06Z|00007|reconnect|DBG|unix:/var/run/openvswitch/ovnsb_db.sock: entering BACKOFF
2021-06-23T02:13:06Z|00008|poll_loop|DBG|wakeup due to 0-ms timeout at ../lib/ovsdb-idl.c:1404
2021-06-23T02:13:07Z|00009|poll_loop|DBG|wakeup due to 1000-ms timeout at ../lib/reconnect.c:643
如您所见,连接失败是因为 ovnsb_db.sock
缺失,并且不断重试,因此设置 systemctl 服务的 timeout
无济于事。在我的实践中,我将超时设置为 15 分钟,但它仍然失败。
我也遇到了同样的问题。这是我修复它的方法。
The OVN named daemons are stored in /var/run/ovn
openvswitch -> /var/run/openvswitch/
ovnnb_db.ctl=
ovnnb_db.pid
ovnnb_db.sock=
ovn-northd.176946.ctl=
ovn-northd.pid
ovnsb_db.ctl=
ovnsb_db.pid
ovnsb_db.sock=
The OVS named daemons are stored in /var/run/openvswitch
br-ex.mgmt=
br-ex.snoop=
db.sock=
ovsdb-server.176376.ctl=
ovsdb-server.pid
ovs-vswitchd.176528.ctl=
ovs-vswitchd.pid
问题在于在脚本 lib/neutron_plugins/ovn_agent (lib/neutron_plugins/ovn_agent:start_ovn) 的函数 start_ovn 中使用了 $OVS_RUNDIR 变量。
我所做的是在函数中用 $OVN_RUNDIR 替换 $OVS_RUNDIR。在重新运行 stack.sh 之前我必须做的另一个修复是手动删除(untack.sh 不会这样做)链接“/var/run/ovn/openvswitch”。
因此,在修复脚本 lib/neutron_plugins/ovn_agent、运行 unstack.sh 并手动删除一个杂散链接文件后,我重新运行了 stack.sh,经过近一周的反复试验,我启动并运行了 devstack。
这是我应用替换的原始代码:(lib/neutron_plugins/ovn_agent:function start_ovn)
690 # Wait for the service to be ready
691 wait_for_sock_file $OVS_RUNDIR/ovnnb_db.sock
692 wait_for_sock_file $OVS_RUNDIR/ovnsb_db.sock
693
694 if is_service_enabled tls-proxy; then
695 sudo ovn-nbctl --db=unix:$OVS_RUNDIR/ovnnb_db.sock set-ssl $INT_CA_DIR/private/$DEVSTACK_CERT_NAME.key $INT_CA_DIR/$DEVSTACK_CERT_NAME.cr>
696 sudo ovn-sbctl --db=unix:$OVS_RUNDIR/ovnsb_db.sock set-ssl $INT_CA_DIR/private/$DEVSTACK_CERT_NAME.key $INT_CA_DIR/$DEVSTACK_CERT_NAME.cr>
697 fi
698 sudo ovn-nbctl --db=unix:$OVS_RUNDIR/ovnnb_db.sock set-connection p${OVN_PROTO}:6641:$SERVICE_LISTEN_ADDRESS -- set connection . inactivity_p>
699 sudo ovn-sbctl --db=unix:$OVS_RUNDIR/ovnsb_db.sock set-connection p${OVN_PROTO}:6642:$SERVICE_LISTEN_ADDRESS -- set connection . inactivity_p>
700 sudo ovs-appctl -t $OVS_RUNDIR/ovnnb_db.ctl vlog/set console:off syslog:$OVN_DBS_LOG_LEVEL file:$OVN_DBS_LOG_LEVEL
701 sudo ovs-appctl -t $OVS_RUNDIR/ovnsb_db.ctl vlog/set console:off syslog:$OVN_DBS_LOG_LEVEL file:$OVN_DBS_LOG_LEVEL