网易云网络部署参考方案-网易云网络服务研发实践|网易云
浙江大学计算机学院本科、博士毕业。网易专业技术委员会委员、网易云计算基础设施研发负责人。专注于云计算、虚拟化、软件自定义网络(SDN)、分布式存储、大数据处理等技术。
在网易云网
浙江大学计算机学院本科、博士毕业。网易专业技术委员会委员、网易云计算基础设施研发负责人。专注于云计算、虚拟化、软件自定义网络(SDN)、分布式存储、大数据处理等技术。 在网易云网络服务研发实践(一)(二)中,我们介绍了第一代、第二代云网络服务的功能、网络逻辑架构、技术选型以及自研功能与优化。今天,我们详细介绍网易云网络部署参考方案。 部署架构 上图(点开看图更清晰)展示了网易私有云IaaS平台中第二代云网络服务的部署架构。如图所示,第二代云网络服务部署环境中的物理节点主要可分为三类:控制节点、计算/网络节点和公共服务节点。 >>>>控制节点 控制节点负责运行私有云IaaS平台中的计算/网络服务的主控调度(nova-scheduler、neutron-server),以及身份验证服务(keystone)与镜像服务(glance),是整个私有云IaaS平台的指挥中心。为了提高整个服务的请求处理能力与可靠性,我们部署了两个控制节点。每个控制节点上都部署了nova-scheduler、glance、keystone服务,并将对外提供API的glance-api、keystone服务做了负载均衡处理,从而提高了控制节点的可用能力。在此要注意的是,由于Neutron架构的限制,neutron-server目前只能单点部署。 >>>>计算/网络节点 在OpenStack的设计中,计算与网络服务在部署上是相对独立的,一个物理节点可以只提供网络服务,也只可以提供计算服务,同时还可以同时提供计算/网络服务。为了节约硬件成本并最大程度利用硬件资源以及提高云网络服务可用能力,私有云IaaS平台在物理节点上同时部署计算和网络服务,我们称这类物理节点为计算/网络节点.实际上,计算/网络节点负责提供计算虚拟化(云主机)和网络虚拟化(云网络)的能力。 计算/网络节点上部署了一系列OpenStack Nova和Neutron服务,以及一些依赖的系统软件:qemu/libvirt、Open vSwitch、Openvpn-server、Dnsmasq。在计算/网络节点中部署Nova组件方面,为了提高IaaS平台API的访问可用程度和性能,我们在每个计算/网络节点上都部署了nova-api,并使用了HAProxy实现了API访问的高可用。 在计算/网络节点中部署网络服务Neutron组件方面, neutron-openvswitch-agent(ovs-agent) 是一个重要且必须部署的Neutron子服务。它负责与底层的虚拟交换机Open vSwitch交互,为云主机提供最基本的网络设备,同时将所有计算/网络节点上的虚拟网络连接起来。而负责云主机IP自动分配的neutron-dhcp-agent(dhcp-agent)子服务、负责提供云主机三层访问能力的neutron-l3-agent(l3-agent)以及负责获取访问云主机元信息的metadata-agent子服务则不需要在每个计算/网络节点上都部署,只需在IaaS平台的部分计算/网络节点上部署即可。 >>>>公共服务节点 公共服务节点部署了私有云IaaS平台的计算/网络服务所依赖数据库、消息队列、缓存等基础服务。由于这些基础服务的稳定性直接影响了私有云IaaS平台服务的稳定性,我们将这些服务独立安装在专用的物理节点上单独运维,并做高可用部署以提高可靠性。 系统内核及Open vSwitch版本选型 除了依赖稳定的Neutron服务外,云网络服务的正常稳定地运行,还依赖一个稳定的底层Linux系统内核以及一系列系统软件。因此,如何选择系统内核版本以及这些系统软件特别是云网络所依赖开源虚拟交换机Open vSwitch的版本,也是研发云网络服务中要考虑评估的重要内容。 网易云网络服务选择使用Linux内核3.10.x版本,主要是考虑以下几点: 1、尽量保证一个内核满足全部下层平台的要求。在3.10.x版本内核中,所有虚拟化技术基本完成,包括KVM,Virtio,VXLAN以及LXC未来可能会使用到的user namespace。 2、Neutron所依赖的Open vSwitch模块在3.10.x版本内核下的支持也非常好,同时在我们的测试过程中,没有遇到过问题。 3、更重要的是Linux社区对Linux 3.10版本也提供长时间支持(LTS),后续修正的bug都会backport到3.10中,综合上述原因,我们选择Linux 3.10.x版本作为云计算平台唯一使用内核版本,并且后续会持续跟进3.10分支上的bug修复。 网易云网络服务目前使用Open vSwitch的2.1.2版本,一个重要的原因是Open vSwitch 的2.1.2版本中提供了一个核心功能:TCP包标记位。后续我们计划研发的防火墙功能会依赖Open vSwitch 2.1.2版本提供的这个功能。考虑到对Open vSwitch升级的代价,后续为了避免后续对Open vSwitch的升级,我们决定使用Open vSwitch的2.1.2版本。此外,虽然Open vSwitch 的2.1.2版本不是长时间维护版本,但是在我们内部几个月的测试过程中,未发现其有任何方面问题,并且持续稳定运行良好。 OpenStack关键配置介绍 OpenStack 的配置项成百上千,大部分配置项都是可以使用默认值的,否则光是理解这么多的配置项的含义就足以让运维人员崩溃,尤其是对那些并不熟悉源码的运维人员来说更是如此。下面将列举并详细解释网易云网络服务中所用到OpenStack的关键配置项及其意义。 Nova关键配置 Nova.conf neutron_url = {neutron_api_url}:{neutron_api_port} Neutron服务的API地址 network_api_class = nova.network.neutronv2.api.API 配置Nova使用Neutron而不是Nova-Network响应Nova中的网络API请求 libvirt_vif_driver = nova.virt.libvirt.vif.LibvirtGenericVIFDriver linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver 配置使用Open vSwitch创建虚拟机使用的网络设备 libvirt_use_virtio_for_bridges = True 为Qemu/KVM虚拟机的网络设备开启Virtio特性 service_neutron_metadata_proxy = True 开启Neutron的Metadata API代理服务 Neutron关键配置 Neutron.conf core_plugin = ml2 配置Neutron的核心插件,通常我们都使用ML2作为Neutron的核心插件。 allow_overlapping_ips = True 在Open vSwitch的帮助下,我们可以让每个云环境租户拥有一个独立的二层网络互不影响,开启这个配置以允许不同的网络中可以出现相同重复的IP地址。 dhcp_agents_per_network = 2 配置每个网络中dhcp-agent的数量。每个dhcp-agent中都运行着一个Dnsmasq进程作为DHCP server响应租户云主机的DHCP请求,根据DHCP协议的机制,一个网络中每个DHCP server都可以响应client的请求不会有冲突,这样在每个云环境租户的网络中都运行两个dhcp-agent后,可以有效的防止单个dhcp-agent挂掉导致的虚拟机丢失IP的问题。 amqp_durable_queues = True 开启AMQP消息队列持久化,防止消息丢失造成的服务异常。 dhcp_agent.ini interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver 配置dhcp-agent的interface driver。由于我们使用的是Open vSwitch,这里使用OVSInterfaceDriver。 tunnel_vxlan_mtu = 1400 tunnel_gre_mtu = 1400 配置VxLan和GRE隧道的MTU。 dhcp_delete_namespaces = True 配置dhcp-agent主动删除不用的namespace,以防止宿主机上可能出现的无用network namespace残留的问题。 l3_agent.ini/vpn_agent.ini interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver 配置l3-agent/vpn-agent的interface driver。由于我们使用的是Open vSwitch,这里使用OVSInterfaceDriver。 router_delete_namespaces = True 配置l3-agent/vpn-agent主动删除不用的namespace,以防止宿主机上可能出现的无用network namespace残留的问题。 enable_dual_nat = True 开启l3-agent/vpn-agent节点的两次NAT功能,该功能前文详细介绍过。 ml2_conf.ini type_drivers = local,flat,vlan,gre,vxlan,svlan mechanism_drivers = svlan,OpenvSwitch,l2population 配置ML2的Type Driver和Mechanism Driver。Type Driver主要和数据库打交道,管理一些抽象的概念体;Mechanism Driver则主要和底层技术打交道,负责底层实现。在网易云网络实际应用中,主要使用的Type Driver是VXLAN和SVLAN。 local_ip = {server_local_ip} 配置ovs-agent的本地IP,配置错误将导致Open vSwitch网络不同。 enable_tunneling = True 配置使用Open vSwitch隧道,我们主要是用的是VXLAN隧道。 l2_population = True 配置使用L2 Population,减少广播造成的网络拥塞。 总结 使用Neutron组件替代Nova networking模块,为第二代云网络服务的设计提供了更多灵活性。Nova networking模块只提供最基础的几种网络接入方案,但是基于Neutron研发的第二外云网络服务提供的功能,权衡易用性、灵活性,我们能够设计出最适合使用的网络模型。Neutron从2012年诞生以来,发展非常迅速,核心方面实现了ML2架构,基于Open vSwitch的灵活网络框架,支持Flat/VLAN/隧道等连接方式,能够满足大部分网络结构需求。L3方面实现了可以灵活控制的Router网易云计算,通过Router API可以随意连接两个或多个网络,并且还提供浮动IP与SNAT的支持。在外围支持方面,有VPN接入支持,能够把外部网络通过互联网接入到Neutron网络中。 虽然现在Neutron已经能满足大部分虚拟网络的需求,但是还有许多需要改进的地方,我们会继续跟进社区开发,同时补全社区遗漏的部分,同时也希望更多开发者加入到Neutron社区中。 网易云信∣真正稳定的IM云服务 ID:neteaseim 长按关注,惊喜就在下期 (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |