本文为minxihou的翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou

JmilkFan:minxihou的技术博文方向是 算法&Openstack自动化 ,写得很好,值得推荐。 : )

目录

译者在自动化部署的时候遇到了很多问题,这个时候不得不求向devstack官档。所以翻译出来以备以后查询。翻译中很多不足之处还望指教。写这个的老外用词有点抽象和狂野….

本文为博主翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou

本指南将会引导你如何配置openstack网络节点,网络节点会使用到ML2插件和OpenvSwitch机制。

1 单网卡的网络节点配置

在有些开发者实验环境中,主机有且只有一个可用的网卡可用的情况。这种情况下物理网卡加入到Open vSwitch中,然后IP地址配在网桥中。这样这个接口充当着三个角色,为自己网络节点服务传输数据,为OpenStack API传输数据,为管理节点传输数据。

警告:当配置单网卡模式的网络节点时,有可能会出现一个临时故障,有可能你的IP地址从你的机器的物理网卡中移除,然后配置在了OVS网桥上。如果你从其他机器用SSH链接到这台机器,可能有一定的风险导致你的SSH会话session中断(因为的arp缓存失效),这样的话将可能中断stack.sh脚本的运行,使整个部署处于一个未完成的状态。为了解决这种情况可以为stack.sh单独的开一个session这样能让stack.sh脚本继续运行。

1.1 物理网卡设置

在大多数使用Devstack部署单网络接口的情况下,网卡一般有自己的路由用于连接外部网络和DHCP服务器。因为网络节点开放了一个外网连接端口,其他想要连接到网络节点的机器(例如想做调试)可以通过这个共享的外网子网段来连接到neutron。在local.conf配置文件中对这个外网设定了一个合理的MTU值,该值为1500(MTU Maximun Transmission Unit: 最大传输单元,一般设置默认值也就是1500)。下面给出了实验的网络拓扑图:

1.2 Devstack配置

以下是对主机名为devstack-1完整的local.conf配置文件。配置文件会运行所有的API和服务,也提供虚拟化服务用于创建实例。

[[local|localrc]]
HOST_IP=172.18.161.6
SERVICE_HOST=172.18.161.6
MYSQL_HOST=172.18.161.6
RABBIT_HOST=172.18.161.6
GLANCE_HOSTPORT=172.18.161.6:9292
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret # Do not use Nova-Network
disable_service n-net
# Enable Neutron
ENABLED_SERVICES+=,q-svc,q-dhcp,q-meta,q-agt,q-l3 ## Neutron options
Q_USE_SECGROUP=True
FLOATING_RANGE="172.18.161.0/24"
FIXED_RANGE="10.0.0.0/24"
Q_FLOATING_ALLOCATION_POOL=start=172.18.161.250,end=172.18.161.254
PUBLIC_NETWORK_GATEWAY="172.18.161.1"
PUBLIC_INTERFACE=eth0 # Open vSwitch provider networking configuration
Q_USE_PROVIDERNET_FOR_PUBLIC=True
OVS_PHYSICAL_BRIDGE=br-ex
PUBLIC_BRIDGE=br-ex
OVS_BRIDGE_MAPPINGS=public:br-ex

1.3 多计算节点

我们假设你按照以上的步骤部署完了第一个节点之后你想做多节点测试和多节点之间的网络。

1.3.1 物理网络设置



当我们用Devstack安装部署完Neutron节点之后(从上配置文件可以看出keystone和glance也做了配置),客户在devstack-2上创建实例(devstack-2作为计算机节点)的时候,L3代理服务会把devstack1和devstack2的通讯(nova与keystone节点的通讯访问)压缩封装在VXLAN隧道进行传输。

stack@devstack-2:~/devstack$ sudo ovs-vsctl show
8992d965-0ba0-42fd-90e9-20ecc528bc29
Bridge br-int
fail_mode: secure
Port br-int
Interface br-int
type: internal
Port patch-tun
Interface patch-tun
type: patch
options: {peer=patch-int}
Bridge br-tun
fail_mode: secure
Port "vxlan-c0a801f6"
Interface "vxlan-c0a801f6"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="172.18.161.7", out_key=flow, remote_ip="172.18.161.6"}
Port patch-int
Interface patch-int
type: patch
options: {peer=patch-tun}
Port br-tun
Interface br-tun
type: internal
ovs_version: "2.0.2"

L3代理运行在控制节点devstack-1上,Open vSwitch同样配置在控制节点上。Open vSwitch会把从网络节点发过来的包解封装,然后转发到eth0链接的br-ex网桥上。

stack@devstack-1:~/devstack$ sudo ovs-vsctl show
422adeea-48d1-4a1f-98b1-8e7239077964
Bridge br-tun
fail_mode: secure
Port br-tun
Interface br-tun
type: internal
Port patch-int
Interface patch-int
type: patch
options: {peer=patch-tun}
Port "vxlan-c0a801d8"
Interface "vxlan-c0a801d8"
type: vxlan
options: {df_default="true", in_key=flow, local_ip="172.18.161.6", out_key=flow, remote_ip="172.18.161.7"}
Bridge br-ex
Port phy-br-ex
Interface phy-br-ex
type: patch
options: {peer=int-br-ex}
Port "eth0"
Interface "eth0"
Port br-ex
Interface br-ex
type: internal
Bridge br-int
fail_mode: secure
Port "tapce66332d-ea"
tag: 1
Interface "tapce66332d-ea"
type: internal
Port "qg-65e5a4b9-15"
tag: 2
Interface "qg-65e5a4b9-15"
type: internal
Port "qr-33e5e471-88"
tag: 1
Interface "qr-33e5e471-88"
type: internal
Port "qr-acbe9951-70"
tag: 1
Interface "qr-acbe9951-70"
type: internal
Port br-int
Interface br-int
type: internal
Port patch-tun
Interface patch-tun
type: patch
options: {peer=patch-int}
Port int-br-ex
Interface int-br-ex
type: patch
options: {peer=phy-br-ex}
ovs_version: "2.0.2"

br-int是Open vSwitch驱动机制创建的一个网桥。br-int可以看做是一个集成网桥,在这个网桥内创建对实例的各个端口,也可以在这个网桥中创建虚拟交换机。br-ex是一个OVS网桥用于链接物理网卡接口(例如eth0)。各个节点向控制节点发送的消息可以通过这个br-ex来接收,然后br-ex会把包转发到devstack-1上各自服务的网络端口上。br-ex同样接收外网ip向devstack-1上发送的包。br-tun隧道是用来链接openstack的计算节点的,这个网桥隧道主要用于计算节点和网络节点间的通讯,使用的是VXLAN协议。计算节点上的实例与网络节点链接同样使用这个br-tun网桥隧道(例如devstack-1和devstack-2的通讯)。

译者注:

什么是网桥:网桥工作在数据链路层,将两个局域网(LAN)连起来,根据MAC地址(物理地址)来转发,可以看作一个“低层的路由器”(路由器工作在网络层,根据网路地址比如IP地址进行转发)。它可以有效地链接两个LAN,使本地通信限制在本网段内,并转发相应的信号至另一网段,网桥通常用于链接数量不多的,同一类型的网段。

什么是VXLAN介绍:

VXLAN全称Virtual eXtensible LAN,是一种覆盖网络技术或隧道技术。VXLAN将虚拟机发出的数据包封装在UDP中,并使用物理网络的IP/MAC作为outer-header进行封装,然后在物理IP网上传输,到达目的地后由隧道终结点解封并将数据发送给目标虚拟机。

什么是隧道技术:

隧道技术(Tunneling)是一种通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送。新的帧头提供路由信息,以便通过互联网传递被封装的负载数据。

这里所说的隧道类似于点到点的连接,这种方式能够使来自许多信息源的网络业务在同一个基础设施中通过不同的隧道进行传输。隧道技术使用点对点通信协议代替了交换连接,通过路由网络来连接数据地址。隧道技术允许授权移动用户或已授权的用户在任何时间、任何地点访问企业网络。

通过隧道的建立,可实现:

* 将数据流强制送到特定的地址

* 隐藏私有的网络地址

* 在IP网上传递非IP数据包

* 提供数据安全支持。

如果难以理解说什么的看以下拓扑图:

1.4 Devstack计算节点配置

使用最小化配置文件来配置主机devstack-2。

[[local|localrc]]
HOST_IP=172.18.161.7
SERVICE_HOST=172.18.161.6
MYSQL_HOST=172.18.161.6
RABBIT_HOST=172.18.161.6
GLANCE_HOSTPORT=172.18.161.6:9292
ADMIN_PASSWORD=secret
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret ## Neutron options
PUBLIC_INTERFACE=eth0
ENABLED_SERVICES=n-cpu,rabbit,q-agt

传输流程:计算节点向网络节点发起任何数据链接时,先由计算节点eth0网卡发出通过计算节点的NAT转换指向了neutron的l3代理,之后由l3代理提保证算节点和网络节点通讯。

2 配置Open vSwith 和 networks

译者注:Open vSwitch为开放虚拟交换标准,虚拟交换就是利用虚拟平台,通过软件的方式形成交换机部件。

在有些情况下需要使用neutron组件来提供网络的拓展服务,这样可以利用neutron来配置网络上的一个外部路由器,通过nova创建的实例可以连接到由neutron管理的外部路由器。

在有些实验环境中,物理网络的路由已经被预先配置了,openstack的开发人员仅仅只被给了一个vlan标签和一个IP地址段范围。这样的话通过devstack创建的虚拟机实例通过三层网络来连接到外网路由器。(译者认为这里是没有使用neutron的L3-agent,而是使用了nova-network使创建的实例与外网通讯),这种模式与neutron L3服务原理截然不同。

2.1 物理网络设置



在计算节点上,第一个网卡接口eth0是用来与openstack管理节点来通讯的,可以通过ssh使用root权限来登录该机器。

stack@compute:~$ ifconfig eth0
eth0 Link encap:Ethernet HWaddr bc:16:65:20:af:fc
inet addr:10.0.0.3

eth1网卡是手动配置的在开机引导的时没有IP地址。如何配置网卡请参阅你所使用操作系统相对应技术文档。对于Ubuntu,网卡配置文件/etc/network/interfaces包含以下信息:

auto eth1
iface eth1 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE 0.0.0.0 down

第二个物理接口,eth1需要添加到br-ex网桥中用于实例虚机访问外部网络。

stack@compute:~$ sudo ovs-vsctl add-br br-ex
stack@compute:~$ sudo ovs-vsctl add-port br-ex eth1
stack@compute:~$ sudo ovs-vsctl show
9a25c837-32ab-45f6-b9f2-1dd888abcf0f
Bridge br-ex
Port br-ex
Interface br-ex
type: internal
Port phy-br-ex
Interface phy-br-ex
type: patch
options: {peer=int-br-ex}
Port "eth1"
Interface "eth1"

2.2 配置服务

控制节点

在这个例子中,控制节点将会运行绝大部分openstack的API和管理服务(keystone,glance,nova,neutron).

计算节点

在这个例子中,计算节点负责运行实例,同时运行neutron-openvswitch-agent服务来提供网络访问,运行nova-cpmpute服务提供计算服务。

2.3 Devstack配置

下面的代码片是使用devstack配置controller节点:

HOST_IP=10.0.0.2
SERVICE_HOST=10.0.0.2
MYSQL_HOST=10.0.0.2
RABBIT_HOST=10.0.0.2
GLANCE_HOSTPORT=10.0.0.2:9292
PUBLIC_INTERFACE=eth1 ADMIN_PASSWORD=secret
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret ## Neutron options
Q_USE_SECGROUP=True
ENABLE_PROJECT_VLANS=True
PROJECT_VLAN_RANGE=3001:4000
PHYSICAL_NETWORK=default
OVS_PHYSICAL_BRIDGE=br-ex Q_USE_PROVIDER_NETWORKING=True # Do not use Nova-Network
disable_service n-net # Neutron
ENABLED_SERVICES+=,q-svc,q-dhcp,q-meta,q-agt ## Neutron Networking options used to create Neutron Subnets FIXED_RANGE="203.0.113.0/24"
NETWORK_GATEWAY=203.0.113.1
PROVIDER_SUBNET_NAME="provider_net"
PROVIDER_NETWORK_TYPE="vlan"
SEGMENTATION_ID=2010

在这个配置参考中,我们定义FIXED_RANGE为一个IPV4的公网网段。对于特殊实例来说我们使用RFC5737中定义的特殊TEST-NET-3子网。在你设置你的devstack时,FIXED_RANGE配置的是你或者你组织分配给你的公网IP段,这样的话你可以通过外网来连接你的虚机实例。

通过devstack配置计算节点node1.

HOST_IP=10.0.0.3
SERVICE_HOST=10.0.0.2
MYSQL_HOST=10.0.0.2
RABBIT_HOST=10.0.0.2
GLANCE_HOSTPORT=10.0.0.2:9292
ADMIN_PASSWORD=secret
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret # Services that a compute node runs
ENABLED_SERVICES=n-cpu,rabbit,q-agt ## Open vSwitch provider networking options
PHYSICAL_NETWORK=default
OVS_PHYSICAL_BRIDGE=br-ex
PUBLIC_INTERFACE=eth1
Q_USE_PROVIDER_NETWORKING=True

在配置node2节点的时候大部分配置项目都和node1一样除开HOST_IP需要改成10.0.0.4。

Devstack会配置提供网络选项(通过将Q_USE_PROVIDER_NETWORKING置成True)。Devstack会为OVS_PHYSICAL_BRIDGE配置项里定义的br-ex网桥自动加入你在PUBLIC_INTERFACE里定义的接口。

例如使用上面的配置,创建了一个网桥,网桥名为br-ex并由Open vSwitch管理。计算节点中第二个网卡接口eth1会加入到这个网桥为虚机提供网络访问。

3 注意事项

3.1 配置非标准MTU的物理网络

neutron规定的MTU值是默认Ethernet标准的1500bytes。

如果想要设置不同的MTU值可以在部署neutron节点时在local.conf配置文件的neutron小节中加入如下参数。如果你有网络设备支持超大帧,你同样可以按照如下方法将MTU值置成9000。

[[post-config|/$Q_PLUGIN_CONF_FILE]]
global_physnet_mtu = 9000

3.2 禁用除iptables之外的防火墙

如果加载使用了其他的防火墙devstack可能不能正常工作。可能会出现虚机实例可以通过ICMP来访问外部网络,但是实例与外部通讯的TCP和UDP的包将不会通过防火墙。这个问题的根本原因是其他的防火墙被应用并且适用了在了所有端口(意思就是全部deny掉了)。解决这种问题的方法是只保留iptables防火墙,以避免多防火墙设置冲突。

在Fedora操作系统中配置防火墙如下:(译者注:在RHEL和Centos 7以上版本需要关闭firewall,ebtables,ip6tables,开启iptables防火墙)

sudo service iptables save
sudo systemctl disable firewalld
sudo systemctl enable iptables
sudo systemctl stop firewalld
sudo systemctl start iptables

在发行版的Linux操作系统中包含配置防火墙和禁用防火墙功能。注意,在Ubuntu操作系统中默认是不会开启ufw防火墙的。如果发现ufw防火墙是enabled状态需要将它禁用掉可以执行以下指令:

sudo service iptables save
sudo ufw disable

3.3 配置ML2拓展插件

拓展插件ML2的参数为Q_ML2_PLUGIN_EXT_DRIVERS,默认包括了端口安全。如果你想不使用任何拓展驱动(包括端口安全),那么可以在Q_ML2_PLUGIN_EXT_DRIVERS后面什么都不写。

3.4 使用自带网桥替代Open vSwitch

配置使用自带网桥的二层驱动非常直接了当。配置Linux系统自带网桥与配置Open vSwitch单网卡模式是非常类似的,只是在接口映射那有微小的不同。

[[local|localrc]]
HOST_IP=172.18.161.6
SERVICE_HOST=172.18.161.6
MYSQL_HOST=172.18.161.6
RABBIT_HOST=172.18.161.6
GLANCE_HOSTPORT=172.18.161.6:9292
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret # Do not use Nova-Network
disable_service n-net
# Enable Neutron
ENABLED_SERVICES+=,q-svc,q-dhcp,q-meta,q-agt,q-l3 ## Neutron options
Q_USE_SECGROUP=True
FLOATING_RANGE="172.18.161.0/24"
FIXED_RANGE="10.0.0.0/24"
Q_FLOATING_ALLOCATION_POOL=start=172.18.161.250,end=172.18.161.254
PUBLIC_NETWORK_GATEWAY="172.18.161.1"
PUBLIC_INTERFACE=eth0 Q_USE_PROVIDERNET_FOR_PUBLIC=True # Linuxbridge Settings
Q_AGENT=linuxbridge
LB_PHYSICAL_INTERFACE=eth0
PUBLIC_PHYSICAL_NETWORK=default
LB_INTERFACE_MAPPINGS=default:eth0

3.5 使用MacVTap来取代Open vSwitch

( 译者注: Macvtap是一个新的设备驱动程序,旨在简化虚拟化的桥接网络。它取代基于macvlan设备驱动模块的TUN / TAP和桥驱动器的组合。一个macvtap终点(endpoint)是一个字符设备,主要遵循的TUN/ TAP ioctl接口,可以直接使用KVM/qemu和其他支持TUN / TAP接口的虚拟机管理程序。终点(endpoint)扩展了现有的网络接口,较低的设备,在同一个以太网段上的,拥有自己的MAC地址。通常情况下,这是用来使双方的客户机和主机直接显示的主机连接到交换机上的。)

安全组现在不支持MacVTap代理。因为这样,devstack在计算节点上配置NoopFirewall驱动。

MacVTap代理不支持L3,dhcp和元数据代理。因为这样你可以选择如下的部署方案。

3.5.1 使用配置驱动,外部L3,dhcp来提供网络服务的单节点模型

如果L3和dhcp服务是由其他服务器提供的,或者你不想使用它们,那么以下情况适用这种配置:

[[local|localrc]]
HOST_IP=10.0.0.2
SERVICE_HOST=10.0.0.2
MYSQL_HOST=10.0.0.2
RABBIT_HOST=10.0.0.2
ADMIN_PASSWORD=secret
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret Q_ML2_PLUGIN_MECHANISM_DRIVERS=macvtap
Q_USE_PROVIDER_NETWORKING=True #Enable Neutron services
disable_service n-net
enable_plugin neutron git://git.openstack.org/openstack/neutron
ENABLED_SERVICES+=,q-agt,q-svc ## MacVTap agent options
Q_AGENT=macvtap
PHYSICAL_NETWORK=default FIXED_RANGE="203.0.113.0/24"
NETWORK_GATEWAY=203.0.113.1
PROVIDER_SUBNET_NAME="provider_net"
PROVIDER_NETWORK_TYPE="vlan"
SEGMENTATION_ID=2010 [[post-config|/$Q_PLUGIN_CONF_FILE]]
[macvtap]
physical_interface_mappings = $PHYSICAL_NETWORK:eth1 [[post-config|$NOVA_CONF]]
force_config_drive = True

3.5.2 配置了MacVTap计算节点的多节点模式

这种情况适用于你想让openstack提供L3,dhcp和元数据服务。这些服务运行在网络节点上,控制节点上有相对应的网络服务来服务与之通讯,网络节点上还跑着其他L2代理(这个例子使用的是Open vSwitch)。网络节点需要配置VLAN租户网络。

对于OVS,配置与之前2.2中讲述的配置大致一致,只需要将下列配置项加入local.conf文件中,这样就能加载MacVTap驱动机制。

[[local|localrc]]
...
Q_ML2_PLUGIN_MECHANISM_DRIVERS=openvswitch,linuxbridge,macvtap
...

对于使用MacVTap的计算节点,用以后配置项来配置local.conf。

HOST_IP=10.0.0.3
SERVICE_HOST=10.0.0.2
MYSQL_HOST=10.0.0.2
RABBIT_HOST=10.0.0.2
ADMIN_PASSWORD=secret
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret # Services that a compute node runs
disable_all_services
enable_plugin neutron git://git.openstack.org/openstack/neutron
ENABLED_SERVICES+=n-cpu,q-agt ## MacVTap agent options
Q_AGENT=macvtap
PHYSICAL_NETWORK=default [[post-config|/$Q_PLUGIN_CONF_FILE]]
[macvtap]
physical_interface_mappings = $PHYSICAL_NETWORK:eth1

官方原文地址:

http://docs.openstack.org/developer/devstack/guides/neutron.html#ovs-provider-network-controller

使用Devstack部署neutron网络节点的更多相关文章

  1. openstack (5)-- 部署 Neutron 网络服务

    Neutron 概念: 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能需要创建.修改和删除网络,网络的连 ...

  2. OpenStack IceHouse 部署 - 5 - 网络节点部署

    Neutron网络服务(网络节点)     目录 [隐藏]  1 参考 2 前置工作 2.1 调整内核参数 3 安装 4 配置 4.1 keystone对接 4.2 rabbitmq对接 4.3 me ...

  3. Neutron网络学习

    学习 Neutron 系列文章: 转http://www.cnblogs.com/sammyliu/p/4622563.html (1)Neutron 所实现的网络虚拟化 (2)Neutron Ope ...

  4. Neutron网络性能测试与分析(一) CVR

    测试环境:网络节点运行在Intel(R) Xeon(R) CPU E5-2630 v3服务器上,网卡使用intel的万兆卡82599ES 测试仪使用本人基于dpdk编写的程序,基本上可以打满万兆卡,小 ...

  5. Openstack 网络服务 Neutron计算节点部署(十)

    Neutron计算节点部署 安装组件,安装的服务器是192.168.137.12 1.安装软件包 yum install -y openstack-neutron-linuxbridge ebtabl ...

  6. Openstack 网络服务 Neutron计算节点部署 (十一)

    一) Neutron计算节点部署 1.安装软件包 # yum install -y openstack-neutron-linuxbridge ebtables ipset 2.配置文件neutron ...

  7. OpenStack Havana 部署在Ubuntu 12.04 Server 【OVS+GRE】(二)——网络节点的安装

    序:OpenStack Havana 部署在Ubuntu 12.04 Server [OVS+GRE] 网络节点: 1.安装前更新系统 安装好ubuntu 12.04 Server 64bits后,进 ...

  8. CentOS7安装OpenStack(Rocky版)-06.安装Neutron网络服务(控制节点)

    上一章介绍了独立的nova计算节点的安装方法,本章分享openstack的网络服务neutron的安装配制方法 ------------------- 完美的分割线 ----------------- ...

  9. Openstack实践(1)部署使用实例及neutron网络

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://www.cnblogs.com/SuperXJ/ 如何快速部署使用openstack,使用kolla吧,o ...

随机推荐

  1. CSS制作红桃心

    这里主要用到了before与after属性之前之后 代码: <!DOCTYPE html> <html> <head> <meta charset=" ...

  2. NX二次开发-Block UI C++界面Face Collector(面收集器)控件的获取(持续补充 )

    Face Collector(面收集器)控件的获取 NX9+VS2012 #include <uf.h> #include <uf_obj.h> UF_initialize() ...

  3. 记一次Tomcat运行失败记录

    记一次Tomcat运行失败记录 如图tomcat运行之后会出现这样的情况,在网上百度之后大部分都说的是web.xml或者其他配置文件的问题,但是根据网上修改了之后却还是老样子. 这里有比较好的网址可以 ...

  4. maven学习整理-基础知识

    1.maven认识 maven是一种自动化的构建工具,它主要解决的问题有: ①项目中的划分规则:原先我们用package或文件夹的形式来划分不同模块,导致在一个项目中存在大量的文件夹和包代码显得庞大: ...

  5. (转)Java中Image的水平翻转、缩放与自由旋转操作

    来自:http://cping1982.blog.51cto.com/601635/130066/ 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责 ...

  6. axios的介绍及使用

    特点:支持promise API . 拦截请求和响应.转换请求数据和响应数据.取消请求.自动转换JSON数据.客户端支持防御XSRF等: axios请求方法(需后端定义):get获取数据. post提 ...

  7. String.join() --Java8中String类新增方法

    序言 在看别人的代码时发现一个方法String.join(),因为之前没有见过所以比较好奇. 跟踪源码发现源码很给力,居然有用法示例,以下是源码: /** * Returns a new String ...

  8. window 对象常见的事件

    1.页面加载事件 方式1:window.onload = function(){ } window.addEventListener('load',function(){ }) window.onlo ...

  9. java oop第11章_反射、BaseDao的进一步改造

      引言:从Java5开始,Java中引用了一个新的概念反射,当程序运行时,能动态感知到程序中拥有的所以信息,这个获取信息的过程是采用反射机制来完成. 一.       Class类: Class类用 ...

  10. centos7.x部署php7.0、mysql

    1.安装httpd yum install httpd systemctl start httpd.service #启动命令 systemctl stop httpd.service #停止命令 s ...