Year: 2021

2 Posts

thumbnail
OpenStack 部署记录
OpenStack 部署记录 在三台服务器上部署 OpenStack,毕设课题的一部分。 课题名称是“基于NFV的虚拟网络设计”,实际上就是帮老师在新采购的三台服务器上部署 OpenStack 构建私有云。 设备 Ubuntu1: Intel Xeon Silver 4210 @2.20GHz Samsung 16G RDIMM DDR4 with ECC @2666MHz (M393A2K40CB2-CTD) Toshiba 2T HDD @7200RPM (MG04ACA) Ubuntu 18.04 LTS CentOS1, CentOS2: Intel Xeon Silver 4210 @2.20GHz Samsung RDIMM with ECC 16G DDR4 @2933MHz * 4 (M393A2K40CB2-CVF) Toshiba 2T HDD @7200RPM (MG04ACA) CentOS 7 直接以系统 + 数字命名设备,服务器的配置很奇妙。Ubuntu 仅仅只有 16G 的内存,剩下两台服务器莫名其妙要装 CentOS。明明装 Ubuntu 的原因是不熟悉 CentOS,为了更长的支持时间也可以选择 Ubuntu 20.04 LTS。 架构 从默认源安装,Ubuntu 18.04 TLS 只有 Queens,而 CentOS 可以选择 Train, Stein, Rocky, Queens。 Ubuntu TLS 可以使用 UCA 支持 Ussuri, Train, Stein。 自然是尽可能选择新版本,部署最小化安装的 OpenStack Train。 Ubuntu: 控制节点 Keystone, identity service Glance, image service Placement, placement service Neutron, networking service Horizon, dashboard CentOS1: 计算节点 Nova, compute service CentOS2: 计算节点 Nova, compute service 手动部署 Docs: <https://docs.openstack.org/queens/install/index.html> Environment Docs: <https://docs.openstack.org/install-guide/environment.html> 最开始没注意到这一部分,里面有硬件配置要求,以及一些必须的相关环境的配置。 Keystone Docs: <https://docs.openstack.org/keystone/queens/install/keystone-install-ubuntu.html> su -s /bin/sh -c "keystone-manage db_sync" keystone 这里有个坑,在运行完这条命令之后,神奇地不会有任何 Console 输出,即使有错误运行失败也一样。导致开始安装 Glance 后我才发现有问题,且不知道问题出在哪。 运行完之后一定要在 MariaDB 里执行 USE keystone; SHOW TABLES;,手动检查数据库初始化是否成功。 如果运行失败需,查看日志需要使用 --log-file 参数指定输出日志文件。 这条命令在 Debain/Ubuntu 默认的 MariaDB/MySQL 配置下运行是一定会出现错误的。 Index column size too large. The maximum column size is 767 bytes. Debain/Ubuntu 的 MariaDB/MySQL 默认使用 utf8mb4 作为字符集,造成 InnoDB 表索引字段长度超过限制。需要修改数据库的字符集为 utf8,同时修改相应的字符序。 Glance…
ip6tables 踩坑
先说结论,ip6tables 需要允许 ICMPv6 通过,IPv6 高度依赖 ICMPv6。 iptables IPv4 的规则主要参考了 Debian 的文档 iptables *filter -A INPUT -i lo -j ACCEPT -m comment --comment "Loopback" -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 7/minute -j ACCEPT -m comment --comment "Ping" -A INPUT -p tcp --dport 80 -j ACCEPT -m comment --comment "HTTP" -A INPUT -p tcp --dport 443 -j ACCEPT -m comment --comment "HTTPS" -A OUTPUT -j ACCEPT -A INPUT -j DROP -A FORWARD -j DROP COMMIT ip6tables 复制粘贴 IPv4 的规则,改下协议,搞定 IPv6 无法连接。 ip6tables 资料不多,查了好久才看到 GitHub 上的一份规则,里面关于 ICMPv6 有一行注释 # Accept all ICMP packets. Unlike with IPv4, it's not a good idea to block ICMPv6 traffic as IPv6 is much more heavily dependent on it: ip6tables -A INPUT -p ipv6-icmp -j ACCEPT 参考 ICMPv6 的 Wiki,原因之一应该是 IPv6 的 NDP 协议。NDP 用于替代 IPv4 的 ARP,且基于 ICMPv6,而 ARP 则是基于 IPv4 的。ICMPv6 整合实现了 IPv4 中的 ICMP、ARP 以及 IGMP 的所有功能,为了正常使用 IPv6 ,需要允许 ICMPv6 流量通过。