OpenStack源码安装报错整理
1 MySQL
1.1 MySQL连接数
大多数OpenStack服务都使用MySQL数据库来存储信息,各组件直接的调用都需要修改MySQL的存储信息或者验证存储信息。MySQL连接数不够会杀死正在执行的SQL,导致各组件之间的调用失败。
解决这个问题需要调整MySQL配置文件中最max_connections参数和MySQL system参数。
[root@localhost ~]# vi /etc/my.cnf
[mysqld]
max_connections=1024
[root@localhost ~]# vi /usr/lib/systemd/system/mariadb.service
[serivce]
LimitNOFILE=65535
LimitNPROC=65535
1.2 MySQL Client连接失败
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/home/mysql/mysql.sock’
MySQL Client在登录的时候会默认去找/var/lib这个目录找mysqld.sock文件,如果Mysql启动失败或者修改了MySQL存储路径自然就找不到了。添加如下配置:
[root@localhost ~]# vi /etc/my.cnf.d/client.cnf
[client-mariadb]
socket=/home/mysql/mysql.sock
[root@localhost ~]# systemctl start mariadb
2 RabbitMQ
2.1 RabbitMQ用户名不匹配
OpenStack使用RabbitMQ来协调服务之间的操作和状态信息。消息队列服务通常在控制器节点运行。RabbitMQ需要关注的是用户名和密码问题。如果用户名和密码错误,各组件直接的调用都会失败,所有虚拟机无法访问。这时候需要修改RabbitMQ用来提供服务的用户名和密码:
[root@localhost ~]# rabbitmqctl list_users
[root@localhost ~]# rabbitmqctl change_password username ‘newpasswd’
2.2 RabbitMQ端口不通
ERROR oslo.messaging._drivers.impl_rabbit [-] [94fc1201-373b-451f-a9e2-46fc81b5de20] AMQP server on controller:5672 is unreachable: [Errno 111] ECONNREFUSED. Trying again in 24 seconds.: error: [Errno 111] ECONNREFUSED
RabbitMQ 5672端口不可用。可能出于两种情况:一是RabbitMQ启动失败,状态错误。查看RbbitMQ状态。二是5672端口被墙,关闭firewalld防火墙并且查看iptables规则。
[root@localhost ~]# systemctl status rabbitmq-server
[root@localhost ~]# systemctl stop firewadll
[root@localhost ~]# iptables -S
[root@localhost ~]# iptables -F
3 Memcached
Memcached的作用是缓存身份服务身份验证机制的令牌。在正常运行中Memached一般不会出现问题。需要注意的一点是要确保端口不被墙。
4 Etcd
4.1 Etcd集群状态
cluster may be unhealthy: failed to list members
Error: client: etcd cluster is unavailable or misconfigured; error #0: dial tcp 127.0.0.1:2379: getsockopt: connection refused ;
error #1: dial tcp 127.0.0.1:4001: getsockopt: connection refused
error #0: dial tcp 127.0.0.1:2379: getsockopt: connection refused
error #1: dial tcp 127.0.0.1:4001: getsockopt: connection refused
OpenStack官网配置错,因为在Etcd的配置文件中的ETCD_LISTEN_CLIENT_URLS参数中,只写入了http://ip:2379,没有写入http://127.0.0.1:2379,添加后集群正常。
[root@localhost ~]# vi /etc/etcd/etcd.conf
ETCD_DATA_DIR="/home/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.4.145:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.4.145:2379,http://127.0.0.1:2379"
ETCD_NAME="controller"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.4.145:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.4.145:2379"
ETCD_INITIAL_CLUSTER="controller=http://192.168.4.145:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
5 Libvirtd
5.1 Libvirtd用户与用户组
KVM cannot access storage file (as uid:107,gid:107)permission denied
这一系列没有权限而导致的创建虚机失败需要调整libvirt的默认权限。
[root@localhost ~]# vi /etc/libvirt/qemu.conf
user=root
group=root
5.2 Libvirtd用户与用户组
Libvirtd Could not reopen file:Permission denied
dynamic_ownership = 1这个参数意思是Libvirtd是否有权限动态修改文件所有权,默认为1。在一般情况下user和group设置为root是拥有所有文件的所有权。但是,因为这个参数的存在导致创建虚拟机报错。当注释后,创建虚拟机正常,可能是因为版本问题而导致的bug。
[root@localhost ~]# vi /etc/libvirt/qemu.conf
user=root
group=root
#dynamic_ownership = 1
6 Keystone
6.1 同步数据库问题
OperationalError) no such table: project u’INSERT INTO project (id, name, domain_id, des
cription, enabled, extra) VALUES (?, ?, ?, ?, ?, ?)’ (’70c0487ba99743719d6721a34560fca2′, u’admin’, ‘default’, u’Admin Tenant’, 1, ‘{}’)
这个问题是因为Kyestone中表不存在,也就是说同步Keystone数据库失败导致,需要再次同步数据库。如果再次失败需要检查配置文件数据库连接配置是否有错误。
[root@localhost ~]# mysql -uroo -p
MariaDB [ (none) ] use keystone;
MariaDB [ (none) ] show tables;
Empty set (0.00 sec)
[root@localhost ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
6.2 OpenStackcliet错误码
下面是在创建用户或者service等服务时可能出现的错误码和解决方式。
401 #验证失败,keystone相关用户账户密码设置错误,时间不同步,或者输入的项目名称不对。
403 #可能未初始化OS_token变量,需要使用source命令使其生效,也可能是配置的配置文件未生效,需要重启相关服务。
409 #keystone创建用户,用户已存在。
500 #服务器内部错误,服务配置有问题,看日志,检查配置。
503 #keystone相关账户密码设置有问题,请将相关的账户删除,重新创建即可。
7 Nova
7.1 MySQL连接丢失
ERROR oslo_db.sqlalchemy.engines [-] Database connection was found disconnected; reconnecting: DBConnectionError: (pymysql.err.OperationalError) (2013, ‘Lost connection to MySQL server during query’) [SQL: u’SELECT 1′] (Background on this error at: http://sqlalche.me/e/e3q8)
字面意思是在查询的过程中丢失MySQL连接,即某个MySQL长连接很久没有新的请求发起,达到了server端的timeout,被server强行关闭。解决这个问题需要在MySQL配置文件中修改wait_timeout参数。
[root@localhost ~]# vi /etc/my.cnf
[mysqld]
wait_timeout=28800
7.2 新增节点报错
ERROR nova.scheduler.client.report [req-fb678c94-091f-4dd3-bd44-49068015a07e – – – – -] [req-a7dd9b65-4ef2-4822-8110-f4a311839683] Failed to create resource provider record in placement API for UUID 73542ad1-f32b-4ba8-a62c-98ec704234c3. Got 409: {“errors”: [{“status”: 409, “request_id”: “req-a7dd9b65-4ef2-4822-8110-f4a311839683”, “detail”: “There was a conflict when trying to complete your request.\n\n Conflicting resource provider name: compute already exists. “, “title”: “Conflict”}]}.
一台计算机点故障导致不能继续工作,将其移出集群,节点恢复后再重新加入发现报错。这主要原因是因为数据库中数据冲突导致。更新nova库、nova_api库中对应resource_providers表中的UUID即可。
[root@localhost ~]# mysql -uroot -p
MariaDB [nova_api]> update resource_providers set uuid='4d9ed4b4-f3a2-4e5d-9d8e-2f657a844a04' where name='compute' and uuid='e131e7c4-f7db-4889-8c34-e750e7b129da';
7.3 Nova-vnc报错
INFO nova.console.websocketproxy [req-a9ef9047-7b5b-4251-b2c3-3de8fa2db7d1 – – – – -] handler exception: [Errno 113] EHOSTUNREACH
在OpenStack上创建虚机成功,登录控制台时显示vnc报错1006,查看Nova日志,确定是因为计算节点防火墙没有关闭或者iptables没有过滤vnc端口。
[root@localhost ~]# systemct stop firewalld
[root@localhost ~]# iptables -I INPUT -p tcp --ports 5900:6100 -j ACCEPT
8 Glance
8.1 权限问题
Glance报错基本都是因为权限问题而导致的。如果修改了Glance存储路径,需要给修改后的路径glance:glance权限。
9 Neutron
9.1 虚拟机不通外网
虚拟机不通外网主要原因有很多,首先网络类型是否误设置为Local:Local型网络只适合虚拟机与虚拟机之间互通,网络所在的网桥不会连接服务器的物理网卡,所以Local型网络的虚拟机是与外网不通的。
- 虚拟机是否启动,如果它没有运行,可以通过查看Nova日志查看问题。
[root@localhost ~]# openstack servier list
[root@localhost ~]# tail -f /var/log/nova/nova-compute
- 安全组问题,在默认安全组下可能不允许一些协议通过,所以需要配置安全组。
[root@localhost ~]# openstack security group show default
- 查看Neutron各agent状态是否正确,如果down,查看日志解决。
[root@localhost ~]# openstack network agent list