2019年5月

Linux下配置网卡聚合交互式自动配置脚本

在我们日常Linux使用中,一般对于生产网都会使用双网卡或多网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可谓好处多多。而一般我们都会使用Linux操作系统下自带的网卡绑定模式。这一点不像Windows2008,操作系统没有网卡绑定功能,需要网卡产商针对windows操作系统定制网卡管理软件来做网卡绑定(windows2012操作系统中加入了网卡绑定功能)。
下面的绑定教程适用于Redhat和Centos 6系列和7系列版本

42676-hdfyjto4teg.png

非LACP绑定模式


此模式不需要在交换机做配置,即配即用
备份要配置的网卡文件,我在这里要配置eno1和eno2,

[root@server ~]# cd /etc/sysconfig/network-scripts/
[root@server network-scripts]# ls
ifcfg-eno1           ifdown       ifdown-routes    ifup-ib      ifup-sit
ifcfg-eno2           ifdown-bnep  ifdown-sit       ifup-ippp    ifup-Team
ifcfg-enp0s20f0u1u6  ifdown-eth   ifdown-Team      ifup-ipv6    ifup-TeamPort
ifcfg-enp175s0f0     ifdown-ib    ifdown-TeamPort  ifup-isdn    ifup-tunnel
ifcfg-enp175s0f1     ifdown-ippp  ifdown-tunnel    ifup-plip    ifup-wireless
ifcfg-enp6s0f0       ifdown-ipv6  ifup             ifup-plusb   init.ipv6-global
ifcfg-enp6s0f1       ifdown-isdn  ifup-aliases     ifup-post    network-functions
ifcfg-enp6s0f1.bak   ifdown-post  ifup-bnep        ifup-ppp     network-functions-ipv6
ifcfg-lo             ifdown-ppp   ifup-eth         ifup-routes
[root@server network-scripts]# cp ifcfg-eno1 ifcfg-eno1.bak
[root@server network-scripts]# cp ifcfg-eno2 ifcfg-eno2.bak
[root@server network-scripts]# 

分别编辑两个网卡的文件
先编辑ifcfg-eno1

[root@server network-scripts]# vi ifcfg-eno1
[root@server network-scripts]# cat ifcfg-eno1
DEVICE=eno1
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
NM_CONTROLLED=no

再编辑ifcfg-eno2

[root@server network-scripts]# vi ifcfg-eno2
[root@server network-scripts]# cat ifcfg-eno2
DEVICE=eno2
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
NM_CONTROLLED=no

最后新建bond0文件

[root@server network-scripts]# vi ifcfg-bond0
[root@server network-scripts]# cat ifcfg-bond0 
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
USERCTL=no
NM_CONTROLLED=no
BONDING_OPTS="mode=1 primary=eno1 miimon=100"

配置完成以后

6系列版本执行:service network restart
7系列版本执行:systemctl restart network

LACP绑定模式:

此模式需要在交换机上配置802.3ad 链路聚合,此模式也是真正的负载均衡模式,在分布式和高性能场景使用较多
备份要配置的网卡文件,我在这里要配置eno1和eno2,

[root@server ~]# cd /etc/sysconfig/network-scripts/
[root@server network-scripts]# ls
ifcfg-eno1           ifdown       ifdown-routes    ifup-ib      ifup-sit
ifcfg-eno2           ifdown-bnep  ifdown-sit       ifup-ippp    ifup-Team
ifcfg-enp0s20f0u1u6  ifdown-eth   ifdown-Team      ifup-ipv6    ifup-TeamPort
ifcfg-enp175s0f0     ifdown-ib    ifdown-TeamPort  ifup-isdn    ifup-tunnel
ifcfg-enp175s0f1     ifdown-ippp  ifdown-tunnel    ifup-plip    ifup-wireless
ifcfg-enp6s0f0       ifdown-ipv6  ifup             ifup-plusb   init.ipv6-global
ifcfg-enp6s0f1       ifdown-isdn  ifup-aliases     ifup-post    network-functions
ifcfg-enp6s0f1.bak   ifdown-post  ifup-bnep        ifup-ppp     network-functions-ipv6
ifcfg-lo             ifdown-ppp   ifup-eth         ifup-routes
[root@server network-scripts]# cp ifcfg-eno1 ifcfg-eno1.bak
[root@server network-scripts]# cp ifcfg-eno2 ifcfg-eno2.bak

分别编辑两个网卡的文件
先编辑ifcfg-eno1

[root@server network-scripts]# vi ifcfg-eno1
[root@server network-scripts]# cat ifcfg-eno1
DEVICE=eno1
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
NM_CONTROLLED=no

再编辑ifcfg-eno2

[root@server network-scripts]# vi ifcfg-eno2
[root@server network-scripts]# cat ifcfg-eno2
DEVICE=eno2
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
NM_CONTROLLED=no

最后新建bond0文件,ip地址信息根据环境自定义

[root@server network-scripts]# vi ifcfg-bond0
[root@server network-scripts]# cat ifcfg-bond0 
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
USERCTL=no
NM_CONTROLLED=no
BONDING_OPTS="mode=4 miimon=100 xmit_hash_policy=layer2+3"
配置完成以后
6系列版本执行:service network restart
7系列版本执行:systemctl restart network

三层交换机是具有路由功能的交换机,由于路由属于OSI模型中第三层网络层的功能,所以称为三层交换机。
三层交换机既可以工作在二层也可以工作在三层,可以部署在接入层,也可以部署在汇聚层,作为用户的网关。
如图所示,某公司拥有多个部门且位于不同网段,各部门均有访问Internet的需求。现要求用户通过三层交换机和路由器访问外部网络,且要求三层交换机作为用户的网关。
此章节摘自于华为官方文档,我做过类似的项目,所以放这里,以便以后查看
16584-st6lgq5346.png
配置思路
采用如下思路进行配置:

  1. 配置交换机作为用户的网关,通过VLANIF接口,实现跨网段用户互访。
  2. 配置交换机作为DHCP服务器,为用户分配IP地址。
  3. 配置路由器通过NAT转换,使用户可以访问外部网络。
    操作步骤
    步骤1 配置交换机

配置连接用户的接口和对应的VLANIF接口。

<HUAWEI> system-view
[HUAWEI] sysname Switch
[Switch] vlan batch 2 3
[Switch] interface gigabitethernet 0/0/2
[Switch-GigabitEthernet0/0/2] port link-type access   //配置接口接入类型为access
[Switch-GigabitEthernet0/0/2] port default vlan 2   //配置接口加入VLAN 2
[Switch-GigabitEthernet0/0/2] quit
[Switch] interface gigabitethernet 0/0/3
[Switch-GigabitEthernet0/0/3] port link-type access
[Switch-GigabitEthernet0/0/3] port default vlan 3   
[Switch-GigabitEthernet0/0/3] quit
[Switch] interface vlanif 2
[Switch-Vlanif2] ip address 192.168.1.1 24
[Switch-Vlanif2] quit
[Switch] interface vlanif 3
[Switch-Vlanif3] ip address 192.168.2.1 24
[Switch-Vlanif3] quit

配置连接路由器的接口和对应的VLANIF接口。

[Switch] vlan batch 100
[Switch] interface gigabitethernet 0/0/1
[Switch-GigabitEthernet0/0/1] port link-type access
[Switch-GigabitEthernet0/0/1] port default vlan 100   
[Switch-GigabitEthernet0/0/1] quit
[Switch] interface vlanif 100
[Switch-Vlanif100] ip address 192.168.100.2 24
[Switch-Vlanif100] quit

配置缺省路由。

[Switch] ip route-static 0.0.0.0 0.0.0.0 192.168.100.1   //缺省路由的下一跳是路由器接口的IP地址192.168.100.1

配置DHCP服务器。

[Switch] dhcp enable   
[Switch] interface vlanif 2
[Switch-Vlanif2] dhcp select interface   //DHCP使用接口地址池的方式为用户分配IP地址
[Switch-Vlanif2] dhcp server dns-list 114.114.114.114 223.5.5.5   //配置的DNS-List 114.114.114.114是公用的DNS服务器地址,是不区分运营商的。在实际应用中,请根据运营商分配的DNS进行配置
[Switch-Vlanif2] quit
[Switch] interface vlanif 3
[Switch-Vlanif3] dhcp select interface
[Switch-Vlanif3] dhcp server dns-list 114.114.114.114 223.5.5.5
[Switch-Vlanif3] quit

步骤2 配置路由器

配置连接交换机的接口对应的IP地址。

<Huawei> system-view
[Huawei] sysname Router
[Router] interface gigabitethernet 0/0/1
[Router-GigabitEthernet0/0/1] ip address 192.168.100.1 255.255.255.0   //配置的IP地址
192.168.100.1为交换机缺省路由的下一跳IP地址
[Router-GigabitEthernet0/0/1] quit

配置连接公网的接口对应的IP地址。

[Router] interface gigabitethernet 0/0/2
[Router-GigabitEthernet0/0/2] ip address 200.0.0.2 255.255.255.0   //配置连接公网接口的IP地址和公网的IP地址在同一网段
[Router-GigabitEthernet0/0/2] quit

配置缺省路由和回程路由。

[Router] ip route-static 0.0.0.0 0.0.0.0 200.0.0.1   //配置静态缺省路由的下一跳指向公网提供的IP地址200.0.0.1
[Router] ip route-static 192.168.0.0 255.255.0.0 192.168.100.2   //配置回程路由的下一跳就指向交换机上行接口的IP地址192.168.100.2

配置NAT功能,使内网用户可以访问外网。

[Router] acl number 2001
[Router-acl-basic-2001] rule 5 permit source 192.168.0.0 0.0.255.255   //NAT转换只对源IP地址是192.168.0.0/16网段的生效,并在接口GE0/0/2的出方向进行转换
[Router-acl-basic-2001] quit
[Router] interface gigabitethernet 0/0/2
[Router-GigabitEthernet0/0/2] nat outbound 2001
[Router-GigabitEthernet0/0/2] quit

步骤3 检查配置结果
配置PC1的IP地址为192.168.1.2/24,网关为192.168.1.1;PC2的IP地址为
192.168.2.2/24,网关为192.168.2.1。
配置外网PC的IP地址为200.0.0.1/24,网关为200.0.0.2。
配置完成后,PC1和PC2都可以Ping通外网的IP 200.0.0.1/24,PC1和PC2都可以访问
Internet。
----结束
配置文件
l Switch的配置文件

#
sysname Switch
#
vlan batch 2 to 3 100
#
dhcp enable
#
interface Vlanif2
 ip address 192.168.1.1 255.255.255.0
 dhcp select interface
 dhcp server dns-list 114.114.114.114 223.5.5.5
#
interface Vlanif3
 ip address 192.168.2.1 255.255.255.0
 dhcp select interface
 dhcp server dns-list 114.114.114.114 223.5.5.5
#
interface Vlanif100
 ip address 192.168.100.2 255.255.255.0
#
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 100
#
interface GigabitEthernet0/0/2
 port link-type access
 port default vlan 2
#
interface GigabitEthernet0/0/3
 port link-type access
 port default vlan 3
#
ip route-static 0.0.0.0 0.0.0.0 192.168.100.1
#
return
l Router的配置文件
#
sysname Router
#
acl number 2001
 rule 5 permit source 192.168.0.0 0.0.255.255
#
interface GigabitEthernet0/0/1
 ip address 192.168.100.1 255.255.255.0
#
interface GigabitEthernet0/0/2
 ip address 200.0.0.2 255.255.255.0
 nat outbound 2001
#
ip route-static 0.0.0.0 0.0.0.0 200.0.0.1
ip route-static 192.168.0.0 255.255.0.0 192.168.100.2
#
return

网络中部署VRRP负载分担时,多台设备同时承担业务,每个虚拟设备都包括一个Master设备和若干个Backup设备。如果为了接入备份需要同时部署冗余链路,则需要部署MSTP消除网络中的环路,保证流量的负载分担。

如图所示,主机通过SwitchC接入网络,SwitchC通过双上行连接SwitchA和SwitchB来接入Internet。由于接入备份的需要,用户部署了冗余链路。冗余备份链路的存在导致出现环网,可能会引起广播风暴和MAC地址表项被破坏。用户希望在存在冗余备份链路的同时消除网络中的环路,在一条上行链路断开的时候,流量能切换到另外一条上行链路转发,还能合理利用网络带宽。此时可以在网络中部署MSTP解决环路问题。MSTP可阻塞二层网络中的冗余链路,将网络修剪成树状,达到消除环路的目的。同时在SwitchA和SwitchB上配置VRRP,HostA以SwitchA为默认网关接入Internet,SwitchB作为备份网关;HostB以SwitchB为默认网关接入Internet,SwitchA作为备份网关,以实现可靠性及流量的负载分担。
此章节摘自于华为官方文档,我做过类似的项目,所以放这里,以便以后查看。
75113-9qgb2s42r8.png
67972-bny80u44koj.png

采用以下思路配置:

  1. 在处于环形网络中的交换设备上配置MSTP基本功能,包括:
    a. 配置MST域并创建多实例,配置VLAN2映射到MSTI1,VLAN3映射到MSTI2,实现流量的负载分担。
    b. 在MST域内,配置各实例的根桥与备份根桥。
    c. 配置各实例中某端口的路径开销值,实现将该端口阻塞。
    d. 使能MSTP,实现破除环路,包括:
    设备全局使能MSTP。
    除与终端设备相连的端口外,其他端口使能MSTP。
  2. 配置保护功能,实现对设备或链路的保护。例如:在各实例的根桥设备指定端口
    配置根保护功能。
  3. 配置设备的二层转发功能。
  4. 配置各设备端口IP地址及路由协议,使各设备间网络层连通。
  5. 在SwitchA和SwitchB上创建VRRP备份组1和VRRP备份组2,在备份组1中,配置SwitchA为Master设备,SwitchB为Backup设备;在备份组2中,配置SwitchB为Master设备,SwitchA为Backup设备。
    操作步骤
    步骤1 配置MSTP基本功能
  6. 配置SwitchA、SwitchB、SwitchC到域名为RG1的域内,创建实例MSTI1和实例
    MSTI2
    配置SwitchA的MST域。

    <HUAWEI> system-view
    [HUAWEI] sysname SwitchA
    [SwitchA] stp region-configuration //进入MST域视图。
    [SwitchA-mst-region] region-name RG1 //配置域名为RG1。
    [SwitchA-mst-region] instance 1 vlan 2 //将VLAN 2映射到实例1上。
    [SwitchA-mst-region] instance 2 vlan 3 //将VLAN 3映射到实例2上。
    [SwitchA-mst-region] active region-configuration //激活MST域的配置。
    [SwitchA-mst-region] quit

    配置SwitchB的MST域。

    <HUAWEI> system-view
    [HUAWEI] sysname SwitchB
    [SwitchB] stp region-configuration //进入MST域视图。
    [SwitchB-mst-region] region-name RG1 //配置域名为RG1。
    [SwitchB-mst-region] instance 1 vlan 2 //将VLAN 2映射到实例1上。
    [SwitchB-mst-region] instance 2 vlan 3 //将VLAN 3映射到实例2上。
    [SwitchB-mst-region] active region-configuration //激活MST域的配置。
    [SwitchB-mst-region] quit

    配置SwitchC的MST域。

    <HUAWEI> system-view
    [HUAWEI] sysname SwitchC
    [SwitchC] stp region-configuration //进入MST域视图。
    [SwitchC-mst-region] region-name RG1 //配置域名为RG1。
    [SwitchC-mst-region] instance 1 vlan 2 //将VLAN 2映射到实例1上。
    [SwitchC-mst-region] instance 2 vlan 3 //将VLAN 3映射到实例2上。
    [SwitchC-mst-region] active region-configuration //激活MST域的配置。
    [SwitchC-mst-region] quit
  7. 在域RG1内,配置MSTI1与MSTI2的根桥与备份根桥
    – 配置MSTI1的根桥与备份根桥

    # 配置SwitchA为MSTI1的根桥。
    [SwitchA] stp instance 1 root primary
    # 配置SwitchB为MSTI1的备份根桥。
    [SwitchB] stp instance 1 root secondary
    – 配置MSTI2的根桥与备份根桥
    # 配置SwitchB为MSTI2的根桥。
    [SwitchB] stp instance 2 root primary
    # 配置SwitchA为MSTI2的备份根桥。
    [SwitchA] stp instance 2 root secondary
  8. 配置实例MSTI1和MSTI2中将要被阻塞端口的路径开销值大于缺省值
    说明
    – 端口路径开销值取值范围由路径开销计算方法决定,这里选择使用华为计算方法为例,
    配置实例MSTI1和MSTI2中将被阻塞端口的路径开销值为20000。
    – 同一网络内所有交换设备的端口路径开销应使用相同的计算方法。

    # 配置SwitchA的端口路径开销计算方法为华为计算方法。
    [SwitchA] stp pathcost-standard legacy
    # 配置SwitchB的端口路径开销计算方法为华为计算方法。
    [SwitchB] stp pathcost-standard legacy
    #配置SwitchC的端口路径开销计算方法为华为计算方法,将端口GE1/0/1在实例MSTI2中的路径开销值配置为20000,将端口GE1/0/4在实例MSTI1中的路径开销值配置为20000。
    [SwitchC] stp pathcost-standard legacy
    [SwitchC] interface gigabitethernet 1/0/1
    [SwitchC-GigabitEthernet1/0/1] stp instance 2 cost 20000
    [SwitchC-GigabitEthernet1/0/1] quit
    [SwitchC] interface gigabitethernet 1/0/4
    [SwitchC-GigabitEthernet1/0/4] stp instance 1 cost 20000
    [SwitchC-GigabitEthernet1/0/4] quit
  9. 使能MSTP,实现破除环路
    – 设备全局使能MSTP

    # 在SwitchA上启动MSTP。
    [SwitchA] stp enable
    # 在SwitchB上启动MSTP。
    [SwitchB] stp enable
    # 在SwitchC上启动MSTP。
    [SwitchC] stp enable

    – 将与Host相连的端口配置为边缘端口

    [SwitchC] interface gigabitethernet 1/0/2
    [SwitchC-GigabitEthernet1/0/2] stp edged-port enable
    [SwitchC-GigabitEthernet1/0/2] quit
    [SwitchC] interface gigabitethernet 1/0/3
    [SwitchC-GigabitEthernet1/0/3] stp edged-port enable
    [SwitchC-GigabitEthernet1/0/3] quit
    (可选)配置SwitchC的BPDU保护功能。
    [SwitchC] stp bpdu-protection

    – 将与Router相连的端口配置为边缘端口

    # 配置SwitchA端口。
    [SwitchA] interface gigabitethernet 1/0/3
    [SwitchA-GigabitEthernet1/0/3] stp edged-port enable
    [SwitchA-GigabitEthernet1/0/3] quit
    (可选)配置SwitchA的BPDU保护功能。
    [SwitchA] stp bpdu-protection
    # 配置SwitchB端口。
    [SwitchB] interface gigabitethernet 1/0/3
    [SwitchB-GigabitEthernet1/0/3] stp edged-port enable
    [SwitchB-GigabitEthernet1/0/3] quit
    (可选)配置SwitchB的BPDU保护功能。
    [SwitchB] stp bpdu-protection

    说明
    如果与边缘端口相连的是使能了STP功能的网络设备,配置BPDU保护功能后,如果
    边缘端口收到BPDU报文,边缘端口将会被shutdown,边缘端口属性不变。
    步骤2 配置保护功能,如在各实例的根桥设备的指定端口配置根保护功能

    # 在SwitchA端口GE1/0/1上启动根保护。
    [SwitchA] interface gigabitethernet 1/0/1
    [SwitchA-GigabitEthernet1/0/1] stp root-protection
    [SwitchA-GigabitEthernet1/0/1] quit
    # 在SwitchB端口GE1/0/1上启动根保护。
    [SwitchB] interface gigabitethernet 1/0/1
    [SwitchB-GigabitEthernet1/0/1] stp root-protection
    [SwitchB-GigabitEthernet1/0/1] quit

    步骤3 配置处于环网中的设备的二层转发功能

    l 在交换设备SwitchA、SwitchB、SwitchC上创建VLAN2~3
    # 在SwitchA上创建VLAN2~3。
    [SwitchA] vlan batch 2 to 3
    # 在SwitchB上创建VLAN2~3。
    [SwitchB] vlan batch 2 to 3
    # 在SwitchC上创建VLAN2~3。
    [SwitchC] vlan batch 2 to 3

    l 将交换设备上接入环路中的端口加入VLAN

    # 将SwitchA端口GE1/0/1加入VLAN。
    [SwitchA] interface gigabitethernet 1/0/1
    [SwitchA-GigabitEthernet1/0/1] port link-type trunk
    [SwitchA-GigabitEthernet1/0/1] port trunk allow-pass vlan 2 to 3
    [SwitchA-GigabitEthernet1/0/1] quit
    # 将SwitchA端口GE1/0/2加入VLAN。
    [SwitchA] interface gigabitethernet 1/0/2
    [SwitchA-GigabitEthernet1/0/2] port link-type trunk
    [SwitchA-GigabitEthernet1/0/2] port trunk allow-pass vlan 2 to 3
    [SwitchA-GigabitEthernet1/0/2] quit
    # 将SwitchB端口GE1/0/1加入VLAN。
    [SwitchB] interface gigabitethernet 1/0/1
    [SwitchB-GigabitEthernet1/0/1] port link-type trunk
    [SwitchB-GigabitEthernet1/0/1] port trunk allow-pass vlan 2 to 3
    [SwitchB-GigabitEthernet1/0/1] quit
    # 将SwitchB端口GE1/0/2加入VLAN。
    [SwitchB] interface gigabitethernet 1/0/2
    [SwitchB-GigabitEthernet1/0/2] port link-type trunk
    [SwitchB-GigabitEthernet1/0/2] port trunk allow-pass vlan 2 to 3
    [SwitchB-GigabitEthernet1/0/2] quit
    # 将SwitchC端口GE1/0/1加入VLAN。
    [SwitchC] interface gigabitethernet 1/0/1
    [SwitchC-GigabitEthernet1/0/1] port link-type trunk
    [SwitchC-GigabitEthernet1/0/1] port trunk allow-pass vlan 2 to 3
    [SwitchC-GigabitEthernet1/0/1] quit
    # 将SwitchC端口GE1/0/2加入VLAN。
    [SwitchC] interface gigabitethernet 1/0/2
    [SwitchC-GigabitEthernet1/0/2] port link-type access
    [SwitchC-GigabitEthernet1/0/2] port default vlan 2
    [SwitchC-GigabitEthernet1/0/2] quit
    # 将SwitchC端口GE1/0/3加入VLAN。
    [SwitchC] interface gigabitethernet 1/0/3
    [SwitchC-GigabitEthernet1/0/3] port link-type access
    [SwitchC-GigabitEthernet1/0/3] port default vlan 3
    [SwitchC-GigabitEthernet1/0/3] quit
    # 将SwitchC端口GE1/0/4加入VLAN。
    [SwitchC] interface gigabitethernet 1/0/4
    [SwitchC-GigabitEthernet1/0/4] port link-type trunk
    [SwitchC-GigabitEthernet1/0/4] port trunk allow-pass vlan 2 to 3
    [SwitchC-GigabitEthernet1/0/4] quit

    步骤4 验证配置结果
    经过以上配置,在网络计算稳定后,执行以下操作,验证配置结果。
    说明
    本配置举例以实例1和实例2为例,因此不用关注实例0中端口的状态。
    在SwitchA上执行display stp brief命令,查看端口状态和端口的保护类型,结果如
    下:

    [SwitchA] display stp brief
      MSTID      Port                        Role  STP State       Protection
        0        GigabitEthernet1/0/1        DESI  FORWARDING      ROOT
        0        GigabitEthernet1/0/2        DESI  FORWARDING      NONE
        1        GigabitEthernet1/0/1        DESI  FORWARDING      ROOT
        1        GigabitEthernet1/0/2        DESI  FORWARDING      NONE
        2        GigabitEthernet1/0/1        DESI  FORWARDING      ROOT
        2        GigabitEthernet1/0/2        ROOT  FORWARDING      NONE

    在MSTI1中,由于SwitchA是根桥,SwitchA的端口GE1/0/2和GE1/0/1成为指定端口。在
    MSTI2中,SwitchA的端口GE1/0/1成为指定端口,端口GE1/0/2成为根端口。
    在SwitchB上执行display stp brief命令,结果如下:

    [SwitchB] display stp brief
      MSTID      Port                        Role  STP State       Protection
        0        GigabitEthernet1/0/1        DESI  FORWARDING      ROOT
        0        GigabitEthernet1/0/2        ROOT  FORWARDING      NONE
        1        GigabitEthernet1/0/1        DESI  FORWARDING      ROOT
        1        GigabitEthernet1/0/2        ROOT  FORWARDING      NONE
        2        GigabitEthernet1/0/1        DESI  FORWARDING      ROOT
        2        GigabitEthernet1/0/2        DESI  FORWARDING      NONE

    在MSTI2中,由于SwitchB是根桥,端口GE1/0/1和GE1/0/2在MSTI2中成为指定端口。
    在MSTI1中,SwitchB的端口GE1/0/1成为指定端口,端口GE1/0/2成为根端口。
    在SwitchC上执行display stp interface brief命令,结果如下:

     [SwitchC] display stp interface gigabitethernet 1/0/1 brief
      MSTID      Port                        Role  STP State       Protection
        0        GigabitEthernet1/0/1        ROOT  FORWARDING      NONE
        1        GigabitEthernet1/0/1        ROOT  FORWARDING      NONE
        2        GigabitEthernet1/0/1        ALTE  DISCARDING      NONE
    
     [SwitchC] display stp interface gigabitethernet 1/0/4 brief
      MSTID      Port                        Role  STP State       Protection
        0        GigabitEthernet1/0/4        ALTE  DISCARDING      NONE
        1        GigabitEthernet1/0/4        ALTE  DISCARDING      NONE
        2        GigabitEthernet1/0/4        ROOT  FORWARDING      NONE

    SwitchC的端口GE1/0/1在MSTI1中为根端口,在MSTI2中被阻塞。SwitchC的另一个端
    口GE1/0/4,在MSTI1中被阻塞,在MSTI2中为根端口。
    步骤5 配置设备间的网络互连
    配置设备各端口的IP地址,以SwitchA为例。SwitchB的配置与SwitchA类似,详见配
    置文件。

    [SwitchA] vlan batch 4
    [SwitchA] interface gigabitethernet 1/0/3
    [SwitchA-GigabitEthernet1/0/3] port link-type trunk
    [SwitchA-GigabitEthernet1/0/3] port trunk allow-pass vlan 4
    [SwitchA-GigabitEthernet1/0/3] quit
    [SwitchA] interface vlanif 2
    [SwitchA-Vlanif2] ip address 10.1.2.102 24
    [SwitchA-Vlanif2] quit
    [SwitchA] interface vlanif 3
    [SwitchA-Vlanif3] ip address 10.1.3.102 24
    [SwitchA-Vlanif3] quit
    [SwitchA] interface vlanif 4
    [SwitchA-Vlanif4] ip address 10.1.4.102 24
    [SwitchA-Vlanif4] quit

    配置SwitchA、SwitchB和路由器间采用OSPF协议进行互连。以SwitchA为例,
    SwitchB的配置与SwitchA类似,详见配置文件。

    [SwitchA] ospf 1
    [SwitchA-ospf-1] area 0
    [SwitchA-ospf-1-area-0.0.0.0] network 10.1.2.0 0.0.0.255
    [SwitchA-ospf-1-area-0.0.0.0] network 10.1.3.0 0.0.0.255
    [SwitchA-ospf-1-area-0.0.0.0] network 10.1.4.0 0.0.0.255
    [SwitchA-ospf-1-area-0.0.0.0] quit
    [SwitchA-ospf-1] quit

    步骤6 配置VRRP备份组
    在SwitchA和SwitchB上创建VRRP备份组1,配置SwitchA的优先级为120,抢占延时
    为20秒,作为Master设备;SwitchB的优先级为缺省值,作为Backup设备。

    [SwitchA] interface vlanif 2 
    [SwitchA-Vlanif2] vrrp vrid 1 virtual-ip 10.1.2.100 //创建组号为1的VRRP备份组并为备份组指定虚拟IP地址10.1.2.100。
    [SwitchA-Vlanif2] vrrp vrid 1 priority 120 //配置VRRP备份组1的优先级为120。
    [SwitchA-Vlanif2] vrrp vrid 1 preempt-mode timer delay 20 //配置VRRP备份组1抢占延时为20秒。
    [SwitchA-Vlanif2] quit
    [SwitchB] interface vlanif 2
    [SwitchB-Vlanif2] vrrp vrid 1 virtual-ip 10.1.2.100 //创建组号为1的VRRP备份组并为备份组指定虚拟IP地址10.1.2.100。
    [SwitchB-Vlanif2] quit

    在SwitchA和SwitchB上创建VRRP备份组2,配置SwitchB的优先级为120,抢占延时为
    20秒,作为Master设备;SwitchA的优先级为缺省值,作为Backup设备。

    [SwitchB] interface vlanif 3
    [SwitchB-Vlanif3] vrrp vrid 2 virtual-ip 10.1.3.100 //创建组号为2的VRRP备份组并为备份组指定虚拟IP地址10.1.3.100。
    [SwitchB-Vlanif3] vrrp vrid 2 priority 120 //配置VRRP备份组1的优先级为120。
    [SwitchB-Vlanif3] vrrp vrid 2 preempt-mode timer delay 20 //配置VRRP备份组2抢占延时为20秒。
    [SwitchB-Vlanif3] quit
    [SwitchA] interface vlanif 3
    [SwitchA-Vlanif3] vrrp vrid 2 virtual-ip 10.1.3.100 //创建组号为2的VRRP备份组并为备份组指定虚拟IP地址10.1.3.100。
    [SwitchA-Vlanif3] quit

    配置主机HostA的缺省网关为备份组1的虚拟IP地址10.1.2.100,配置主机HostB的缺省
    网关为备份组2的虚拟IP地址10.1.3.100。
    步骤7 验证配置结果
    完成上述配置后,在SwitchA上执行display vrrp命令,可以看到SwitchA在备份组1中
    作为Master设备,在备份组2中作为Backup设备。

     [SwitchA] display vrrp
       Vlanif2 | Virtual Router 1
         State : Master
         Virtual IP : 10.1.2.100
         Master IP : 10.1.2.102
         PriorityRun : 120
         PriorityConfig : 120                                                        
         MasterPriority : 120                                                        
         Preempt : YES   Delay Time : 20 s                                           
         TimerRun : 1 s                                                              
         TimerConfig : 1 s                                                           
         Auth type : NONE                                                            
         Virtual MAC : 0000-5e00-0101                                                
         Check TTL : YES                                                             
         Config type : normal-vrrp                                                   
         Backup-forward : disabled
         Create time : 2012-05-11 11:39:18                                           
         Last change time : 2012-05-26 11:38:58
       Vlanif3 | Virtual Router 2
         State : Backup
         Virtual IP : 10.1.3.100
         Master IP : 10.1.3.103
         PriorityRun : 100
         PriorityConfig : 100                                                        
         MasterPriority : 120                                                        
         Preempt : YES   Delay Time : 0 s                                            
         TimerRun : 1 s                                                              
         TimerConfig : 1 s                                                           
         Auth type : NONE                                                            
         Virtual MAC : 0000-5e00-0102                                                
         Check TTL : YES                                                             
         Config type : normal-vrrp                                                   
         Backup-forward : disabled
         Create time : 2012-05-11 11:40:18                                           
         Last change time : 2012-05-26 11:48:58

    在SwitchB上执行display vrrp命令,可以看到SwitchB在备份组1中作为Backup设备,
    在备份组2中作为Master设备。

     [SwitchB] display vrrp
       Vlanif2 | Virtual Router 1
         State : Backup
         Virtual IP : 10.1.2.100
         Master IP : 10.1.2.102
         PriorityRun : 100
         PriorityConfig : 100                                                        
         MasterPriority : 120                                                        
         Preempt : YES   Delay Time : 0 s                                            
         TimerRun : 1 s                                                              
         TimerConfig : 1 s                                                           
         Auth type : NONE                                                            
         Virtual MAC : 0000-5e00-0101                                                
         Check TTL : YES                                                             
         Config type : normal-vrrp                                                   
         Backup-forward : disabled
         Create time : 2012-05-11 11:39:18                                           
         Last change time : 2012-05-26 11:38:58
       Vlanif3 | Virtual Router 2
         State : Master
         Virtual IP : 10.1.3.100
         Master IP : 10.1.3.103
         PriorityRun : 120
         PriorityConfig : 120                                                        
         MasterPriority : 120                                                        
         Preempt : YES   Delay Time : 20 s                                            
         TimerRun : 1 s                                                              
         TimerConfig : 1 s                                                           
         Auth type : NONE                                                            
         Virtual MAC : 0000-5e00-0102                                                
         Check TTL : YES                                                             
         Config type : normal-vrrp                                                   
         Backup-forward : disabled
         Create time : 2012-05-11 11:40:18                                           
         Last change time : 2012-05-26 11:48:58 

    ----结束
    配置文件
    SwitchA的配置文件

#
sysname SwitchA
#
vlan batch 2 to 4
#
stp instance 1 root primary
stp instance 2 root secondary
stp bpdu-protection
stp pathcost-standard legacy
#
stp region-configuration
 region-name RG1
 instance 1 vlan 2
 instance 2 vlan 3
 active region-configuration  
#
interface Vlanif2
 ip address 10.1.2.102 255.255.255.0
 vrrp vrid 1 virtual-ip 10.1.2.100
 vrrp vrid 1 priority 120
 vrrp vrid 1 preempt-mode timer delay 20
#
interface Vlanif3
 ip address 10.1.3.102 255.255.255.0
 vrrp vrid 2 virtual-ip 10.1.3.100
#
interface Vlanif4
 ip address 10.1.4.102 255.255.255.0
 #
interface GigabitEthernet1/0/1
 port link-type trunk
 port trunk allow-pass vlan 2 to 3
 stp root-protection
#
interface GigabitEthernet1/0/2
 port link-type trunk
 port trunk allow-pass vlan 2 to 3
#
interface GigabitEthernet1/0/3
 port link-type trunk
 port trunk allow-pass vlan 4
 stp edged-port enable
#
ospf 1
 area 0.0.0.0
  network 10.1.2.0 0.0.0.255
  network 10.1.3.0 0.0.0.255
  network 10.1.4.0 0.0.0.255
#
return

SwitchB的配置文件

#
sysname SwitchB
#
vlan batch 2 to 3 5
#
stp instance 1 root secondary
stp instance 2 root primary
stp bpdu-protection
stp pathcost-standard legacy
#
stp region-configuration
 region-name RG1
 instance 1 vlan 2
 instance 2 vlan 3
 active region-configuration  
#
interface Vlanif2
 ip address 10.1.2.103 255.255.255.0
 vrrp vrid 1 virtual-ip 10.1.2.100
#
interface Vlanif3
 ip address 10.1.3.103 255.255.255.0
 vrrp vrid 2 virtual-ip 10.1.3.100
 vrrp vrid 2 priority 120
 vrrp vrid 2 preempt-mode timer delay 20
#
interface Vlanif5
 ip address 10.1.5.103 255.255.255.0
#
interface GigabitEthernet1/0/1
 port link-type trunk
 port trunk allow-pass vlan 2 to 3
 stp root-protection
#
interface GigabitEthernet1/0/2
 port link-type trunk
 port trunk allow-pass vlan 2 to 3
#
interface GigabitEthernet1/0/3
 port link-type trunk
 port trunk allow-pass vlan 5
 stp edged-port enable
#
ospf 1
 area 0.0.0.0
  network 10.1.2.0 0.0.0.255
  network 10.1.3.0 0.0.0.255
  network 10.1.5.0 0.0.0.255
#
return

SwitchC的配置文件

#
sysname SwitchC
#
vlan batch 2 to 3
#
stp bpdu-protection
stp pathcost-standard legacy
#
stp region-configuration
 region-name RG1
 instance 1 vlan 2
 instance 2 vlan 3
 active region-configuration  
#
interface GigabitEthernet1/0/1
 port link-type trunk
 port trunk allow-pass vlan 2 to 3
 stp instance 2 cost 20000
#
interface GigabitEthernet1/0/2
 port link-type access
 port default vlan 2
 stp edged-port enable
#
interface GigabitEthernet1/0/3
 port link-type access
 port default vlan 3
 stp edged-port enable
#
interface GigabitEthernet1/0/4
 port link-type trunk
 port trunk allow-pass vlan 2 to 3
 stp instance 1 cost 20000
#
return

AAA是指:authentication(认证)、authorization(授权)、accounting(计费)的简称,是网络安全的一种管理机制;Authentication是本地认证/授权,authorization和accounting是由远处radius(远程拨号认证系统)服务或hwtacacs(华为终端访问控制系统)服务器完成认证/授权;AAA是基于用户进行认证、授权、计费的,而NAC方案是基于接入设备接口进行认证的,在实际应用中,可以使用AAA的一种或两种服务

如果是一台刚初始化过的华为交换机,需要输入两次相同的密码作为登录交换机的登录密码,交换机上有console 端口 MEth管理端口 usb端口
通过串口线配置S5700 的管理IP地址,串口线接在交换机的console口,ip设置完成后网线接在ETH口:

<S5700> system-view                   
[S5700] interface MEth 0/0/1       
[S5700-MEth0/0/1]ip address 192.168.100.1 255.255.255.0              ///设置MEth管理端口的ip地址
[S5700-MEth0/0/1]quit
[S5700]ip route-static 0.0.0.0 0.0.0.0 192.168.200.1(gateway)
[S5700-MEth0/0/1]display ip interface MEth 0/0/1               ///查看MEth管理端口的配置信息
[S5700]  

生成本地密钥对

    <S5700> system-view
    [S5700] rsa local-key-pair create
    The key name will be: Host
    RSA keys defined for Host already exist.
    Confirm to replace them? (y/n)[n]:y
    The range of public key size is (512 ~ 2048).
    NOTES: If the key modulus is less than 2048,
    It will introduce potential security risks.
    Input the bits in the modulus[default = 2048]:2048
    Generating keys...
    ......................................................................................+++
    ....+++
    .......................................++++++++
    ..............++++++++

添加用户,设置ssh telent远程登录

<S5700> system-view                                        ///进入系统配置模式
[S5700]aaa                                                 ///进入AAA模式           
[S5700-aaa]local-user admin password irreversible-cipher admin@123        ///设置本地用户名和密码  cipher加密
[S5700-aaa]local-user admin service-type ssh telnet          ///设置用户设置登录ssh telnet服务
[S5700-aaa]display ssh server status             ///查看ssh服务是否生效
[S5700-aaa]display telnet server status            ///查看telnet服务是否生效
[S5700-aaa]local-user admin privilege level 15               ///设置用户级别
[S5700-aaa]q                                               ///退出AAA模式
设置vty 0 4远程登陆的虚拟端口

VTY是路由器的远程登陆的虚拟端口,0 4表示可以同时打开5个会话,line vty 0 4是进入VTY端口,对VTY端口进行配置,比如说配置密码,或者ACL.

[S5700]user-interface vty 0 4                     ///进入vty 0 4远程虚拟端口
[S5700-ui-vty0-4]authentication-mode aaa          ///为虚拟用户终端配置AAA身份验证模式
[S5700-ui-vty0-4]user privilege level 15          ///为虚拟用户终端配置用户级别
[S5700-ui-vty0-4]protocol inbound all             ///为虚拟用户终端配置使用的协议,all即都支持
[S5700-ui-vty0-4]protocol inbound telnet          ///为虚拟用户终端配置telnet协议,即可以使用telnet远程登录
[S5700-ui-vty0-4]protocol inbound ssh             ///为虚拟用户终端配置ssh协议,即用户可以使用ssh远程登录
[S5700]ssh user admin authentication-type password  ///为admin用户设置ssh认证为password,此命令对设置单一用户设置来说比较实用
[S5700]ssh authentication-type default password   ///设置ssh默认的认证方式为密码认证,对设置多个用户来说很实用
[S5700]ssh user admin service-type stelnet          ///为admin用户设置ssh认证服务类型为stelnet
[S5700]display ssh user-information admin           ///查看ssh服务admin用户的配置信息
[S5700]q                        ///退出系统设置视图
<S5700>save                      ///保存设置

配置带内管理IP地址

<S5700> system-view                                   //进入系统配置模式 
[S5700]interface Vlanif 1                             //进入三层 vlanif 接口
[S5700-Vlanif1]ip address 192.168.0.1  255.255.255.0  //配置管理 IP 地址
创建web登录管理账号
[S5700]http server enable                             ///系统视图下开启http服务
[S5700]http secure-server enable                      ///系统视图下开启http安全服务 即https
[S5700]aaa                                            //系统视图下进入aaa模式
[S5700-aaa]local-user admin privilege level 15        ///配置 http 登录名权限
[S5700-aaa]local-user admin service-type http         /// 开启 http 登录服务
[S5700-aaa]quit                                       /// 退出aaa模式

Domain ID
Domain ID是一串十六进数字,是交换机的唯一标示,范围在1-239。Brocade交换机的Domain ID可以动态配置,默认是1;也可以手动配置交换机Domain ID,比如当交换机级联出现Domain ID冲突的时候。交换机级联 Domain ID冲突可以被自动解决,如果两台交换机的Domain ID没有被设置为永久模式。

警告:
请不要将交换机domain id配置为0。如果domain id是0,将导致交换机不停重启。避免在FCS交换机(安全模式)上修改domain id,为了减少服务影响时间,推荐在san里面的其他交换机上面修改domain id。
Domain ID查看/修改步骤如下:

  1. 使用admin用户登录交换机
    输入fabricshow命令
    49799-r1wyzgxllki.png
    箭头(>)指向的交换机代表当前fabric里面的principal交换机。关于fabricshow命令输出结果详细解释如下:

    · Switch ID:由两部分组成,分配时交换机的domain id和交换机的D_ID。比如switch id=1:fffc01,冒号“:”左半部分的1代表交换机的domain id,有半部分的fffc01代表交换机十六进制的D_ID。
    · Worldwide Name:交换机的WWN。一共64位,使用16进制表示。
    · Enet IP Addr:交换机的IPv4管理地址。如果交换机启用IPv6,将显示静态配置的IPv6地址。
    · FC IP Addr:交换机的Fibre Channel IP地址
    · Name:交换机默认自带或者用户自定义的交换机名称,使用双引号(“”)包围,其中箭头(>)指向的交换机代表fabric里面的principal交换机。

    配置交换机Domain ID

下面是手动配置交换机domain id的步骤:

  1. 使用admin用户登录交换机
  2. 输入switchdisable命令禁用交换机(注意:要修改交换机domain id,需要首先禁用交换机)
  3. 输入configure命令
  4. 输入“Y”,如果看到“Fabric parameters”提示
    25208-s8oce79334.png
  5. 如果看到“Domain”提示,请输入独一无二的domain id。交换机可用的Domain ID范围是1-239。
    44324-l2crny60iv.png
  6. “Ctrl-D”默认后续配置并退出。
  7. 输入switchenable重新启用交换机

Nutanix Community Edition是100%的软件解决方案,不仅是免费的,而且还是功能齐全的Nutanix虚拟计算平台,其中包括“Acropolis”和“Prism”。使技术爱好者可以轻松地评估最新的超聚合技术,成本为零。此文档可以帮助你顺利地利用Nutanix CE搭建测试平台。
1 环境准备
Nutanix CE版本支持两种平台部署方式:一种是部署在物理服务器上,另外一种可以以虚拟机的形式部署。以下是使用Community Edition已经测试的过硬件配置建议。但是,与其他Community Edition用户一样,您可能会发现其他硬件和推荐的类型一样可以兼容,包含但不仅限于以下硬件平台:
1.1 硬件兼容型号举例

    Cisco    Cisco UCS C220 M3
    CPU: Intel Xeon E5-2609v2 2.5GHz
    RAM: 24GB DDR3
    SSD: Cisco Enterprise Value SSD - 240 GB
    HDD: Cisco - 500 GB - 2.5" SFF - SATA 6Gb/s - 7200 rpm
    NIC: Broadcom NetXtreme II 5709

    Dell    Dell PowerEdge R220
    CPU: Intel Xeon E3-1220v3 3.1GHz
    RAM: 32GB DDR3
    SSD: Kingston SSDNow E50 - 480GB
    HDD: 7.2k RPM SATA 3Gbps 2.5in - 1TB
    NIC: On-Board LOM 1GBE (LAN on Motherboard)

    HP    HP ProLiant DL320e Gen8 v2
    CPU: Intel Xeon E3-1220v3 3.1GHz
    RAM: 32GB DDR3
    SSD: Kingston SSDNow E50 - SSD - 240 GB
    HDD: HP Midline HDD - 500 GB - SATA 6Gb/s - 7200 rpm
    NIC: HP Ethernet 1Gb 2-port NC332i Adapter

    SuperMicro    SuperMicro SuperServer 1018D-73MTF
    CPU: Intel Xeon E3-¬1220v3 3.1GHz
    RAM: 32GB DDR3
    SSD: Seagate Pulsar.2 Enterprise SAS SSD - 200GB
    HDD: Seagate Constellation.2 SATA 6Gb/s 7.2K RPM 64M - 500GB
    NIC: Intel I210AT - Dual Gigabit Ethernet LAN

如果服务器不在以上的列表中,也可以查看以下链接:
http://next.nutanix.com/t5/Discussion-Forum/Post-your-hardware-config/m-p/3249#U3249
查找是否有兼容的型号。
1.2 硬件要求

    组件    推荐配置    说明 
    CPUs    Intel CPUs 支持 VT-x     至少配置4核; 2核给 Controller VM 专用。
    系统内存    至少16 GB 
    每个节点的CVM虚拟机,如果开启去重/压缩功能需要额外的内存开消。    如果想要使用AOS的去重和压缩功能,或者创建更多的虚拟机时,强烈建设配置32 GB 。
    网卡    基于Intel的网卡    一些 Community Edition 用户使用Broadcom 网卡也有成功的.
    HBA卡    Community Edition支持(AHCI) SATA, 或 LSI 控制器:
    IT 模式 (Nutanix测试显示IT模式的性能优于IR模式)
    IR 直通模式
    IR RAID-0模式    
    存储设备    每个节点的SSD/HDD数据最多为4块.    有些Community Edition 用户也有超过4个设备的成功案例.
    冷数据层    不低于500 GB
    最大 18 TB (3 x 6 TB HDDs)    用于冷数据存储的HDD 或 SSD
    热数据层    单个不低于200 GB SSD    将SSD(s)放在HDD之前(通常为0或1) 第一个槽位数字取决于制造商的标签。不支持基于NVMe的驱动器
    引导分区    每节点一个8 GB 以上的设备. 可以是内置的,也可以是外置的.    Nutanix已经成功测试过并使用了外部的USB设备和内部设备,比如SATA DOM 。建议使用USB 3.0 设备.
    注意:如果你使用USB驱动器,在任何时候,不要删除USB驱动器。
    固件    考虑为您将在Community Edition中使用的任何设备或硬件更新固件,以获得硬件供应商推荐的最新版本或建议版本。    

1.3 软件准备
Amazon S3下载链接:
https://s3.amazonaws.com/ntnx-portal/ce/2017.07.21/ce-2017.07.20-stable.img.gz
网盘下载链接:
https://share.weiyun.com/d14f3d74680d553bcad0ab4b9b073614
百度网盘链接: https://pan.baidu.com/s/1hsMpfla 密码: f7q4
CE 5.5版本
http://download.nutanix.com/ce/2018.01.31/ce-2018.01.31-stable.img.gz
百度网盘链接:https://pan.baidu.com/s/1XZrRomWATT33nUzNzGef6A 密码:ox20
2 安装部署
2.1 安排介质准备
使用工具将CE镜像刷到U盘 https://www.osforensics.com/tools/write-usb-images.html

    如果使用的是Linux或者是Mac OS,你可以使用dd命令去制作引导U盘 
    dd if=ce.img of=/dev/sdX
    其中X是USB驱动器的名称,ce.img是你解压后的镜像文件名。
    [Linux only]使用以下命令查找U盘驱动器的盘符:
    for i in /dev/sd?; do udevadm info --query=all --name=$i; done
    (OS X only) 列出所有存储设备:
    diskutil list
    (OS X only) 显示特定设备信息:
    diskutil info /dev/X
    x是你的USB设备.
    (OS X only) 为了加快封装镜像的速度,指定块大小为1 MB。:
    dd if=ce.img of=/dev/rdisk2 bs=1m

2.2 物理环境部署
详细的说明参照官方文档:
https://portal.nutanix.com/#/page/docs/details?targetId=Nutanix-Community-Edition-Getting-Started:Nutanix-Community-Edition-Getting-Started
•安装步骤
–使用U盘启动机器
–使用install用户进行配置
–使用cluster create命令创建集群
–首次访问Prism,必须保持网络连接,必须提前注册my.nutanix.com的账号用于身份验证
使用U盘引导
25468-cyz7zh1fv69.png
使用Install用户登录,不需要输入密码
26143-9f46nc8opf.png
选择键盘布局,使用Tab键选择“Proceed” 这将消除磁盘上的任何现有数据。
18317-fa2oxu0hk76.png
•输入IP地址信息
–Host IP: 10.68.69.101
–CVM IP: 10.68.69.102
–Netmask: 255.255.255.0
–Gateway: 10.68.69.1
–[x] Single controller DNS: 8.8.8.8
注意:安装需要连接Internet;只有一个设备时需要在Create single-mode cluster打勾选择
05713-9j455seyfcn.png
完成安装
39470-xfr3e5fd9k.png
2.3 虚拟机环境部署
•安装指南
–将CE镜像改为vmdk(如果是ESXi,使用vmkftools;如果是workstation,使用vmx文件)
–使用install用户进行配置
–使用cluster create命令创建集群
–首次访问Prism,必须保持网络连接,必须提前注册my.nutanix.com的账号用于身份验证
以Workstation部署CE为例
解压ce-2017.07.20-stable.img.gz文件,你将得到一个名为“ce-2017.07.20-stable.img”的文件,将此文件改成“ce-flat.vmdk”。根据以下内容再创建名为ce.vmdk的描述文件。
https://www.virtuallifestyle.nl/wp-content/uploads/2014/09/ce.txt
54946-fqx3d1tfhdu.png
1) 新建一个虚拟机
90477-d4uim9m3sxh.png
2) 设置虚拟机配置
07347-o5kofxyph5b.png
83084-lb4hunb00ee.png
35615-l2xwhaq7tid.png
63629-dl95hnz4dtu.png
55245-i2ca3f25a38.png
59098-t6boxh9ulc.png
如果是ESXi环境,将SCSI控制器设置成“准虚拟化”否则会一直卡在引导项。
3) 添加磁盘,这是很关键的一步,对于VM的第一个磁盘,附加一个现有的SATA磁盘。选择上面创建的映像/磁盘描述符文件。
56058-lltty9bs4xr.png
30802-fk1ry2qnnto.png
4) 除了第一个安装引导盘以外,再添加两块磁盘,第二块盘作为热数据层,第三块盘作为冷数据层。
19669-b8vbwwwpjo.png
17122-tbv2vhpvpt.png
ESXi的虚拟机,需要升级虚拟机版本10及以上,否则在这里设置不起作用,依然会报VT的错误。
5) 启动后,进行安装界面,安装方式跟之前物理环境中的过程一样。
65519-ox5eaxpbjsm.png
6) 如果你使用的不是SSD,则在环境检测过程中会报错,
58227-i1w0wilmy1.png
需要修改磁盘IOPS限制,从5000改为1000或更低。

vi /home/install/phx_iso/phoenix/sysUtil.py

74559-dft7hhtrspk.png
7) 运行以下命令,检查兼容性要求

sudo virt-host-validate 

78877-093hc8q9r1vu.png
8) 退出后,输入“install:进入安装界面,安装方式跟之前物理环境中的过程一样。
85394-ei381zx3n5.png
2.4 访问Prism界面
输入CVM的IP地址,使用admin/admin登录Prism,并修改密码
97326-lz1mhberoq.png
•按照提示使用my.nutanix.com的账号激活CE,此步骤需要访问Internet
13447-pio31nr4s1g.png
38679-q66a9mws67s.png
激活成功后,开启你的HCI之旅吧!Enjoy it!
95044-e9m68mj0eos.png
3 Nutanix常用功能点操作
3.1 显示配置集群管理地址
点击左上角集群名称,可以显示集群详细信息以及配置集群管理地址:
62245-r07tqwya73.png
3.2 Update Profile -- 更新用户信息
用于更新当前用户的联系方式,包括电子邮件地址

85806-w2741fok3p.png
3.3 Change Password -- 更改用户登录口令
修改用户名口令
96636-zh2zbwj9n5q.png
3.4 REST API Explorer -- 查询所有Rest API接口
71693-sqrhhfezje.png
02866-c3c9n73bgfi.png

3.5 Download nCLI -- 下载nCLI
下载命令行工具包nCLI,用于在windows或者其他支持Java平台的系统上可以通过命令行远程管理集群
19726-qhuhg6s05br.png
解压之后在命令行中运行,即可连接到远程集群,执行管理命令,如:
查询集群版本:
93498-a50t8keflhl.png
获取主机列表:
15883-1h55f8ygwko.png
3.6 Download Cmdlets Installer -- 下载并安装windows Cmdlets工具包
下载Windows Cmdlets工具包,可以提供Windows管理员用熟悉的Powershell进行集群管理
08838-i6knswrp1nf.png
88802-jcesro3yivm.png
93022-6vxqs3l7ld5.png
3.7 Support Portal -- 打开技术支持中心网站
当需要寻求技术支持时,可以直接从Prism界面中打开技术支持中心网站,并登陆即可
15759-uqxmqj04u4h.png
3.8 Help -- 打开文档中心网站
点击帮助时,可以打开在线的文档页面,查找所有Nutanix最新文档资料
18767-hjk1mdvds7.png
3.9 Health Tutorial -- 集群健康检查功能演示
点击Health Tutorial即可通过动画方式详细了解Nutanix Health Check功能如何使用
48014-9rpbn11qprt.png

3.10 Nutanix Next Community -- 打开Nutanix社区网站
点击Nutanix Next Community可以打开Nutanix社区网站寻求社区的协助
53450-q2n0tt19bl.png
3.11 Authentication Configuration -- 添加AD域管理验证
添加AD域名和验证的IP地址端口:ldap://10.91.233.78:389,可以使用AD进行用户验证
52091-jxx9secf078.png
实现域账号登陆
04173-zu7p0tk33ae.png
3.12 Role Mapping
可以将域账号中的角色映射为Nutanix的管理员用户或者普通用户
27007-t2d6aq37eu.png

3.13 Create User -- 创建用户
可以创建其他管理员用户或者非管理员用户
49214-t0hvk5s164.png

并使用该用户登陆
00970-4c2q4b58zsl.png

3.14 SMTP Server -- 配置邮件服务器地址
配置邮件服务器地址用于发送告警邮件
21283-tsiieemwaq.png

3.15 Alert Email Configuration -- 配置告警邮件
配置发送告警邮件给管理员或者Nutanix Support
73248-txl25itr917.png

3.16 Alert Policies -- 告警策略配置
针对不同告警,可以配置响应的告警策略通知管理员,避免发生告警风暴

13899-e5x1ngg9b3b.png
01319-10q3twk2z6h.png
3.17 Filesystem Whitelists -- 文件系统白名单
允许特定网段的IP访问Nutanix存储

43589-x4yd80a2qyp.png
3.18 Upgrade Software
简单的一键升级功能,可以同时支持升级NOS、Hypervisor、NCC和Firmware,并且实现无人值守升级过程。
20706-kqd34zy102r.png
25271-jvy9pnvn27.png
字符界面也可以查看升级过程
61839-bz7mmwzsrpb.png
3.19 Welcome Banner -- 自定义欢迎信息或者免责声明等
输入个性化欢迎信息或者免责声明,当用户打开网页即可看到该信息。
08076-p7cts691rvm.png

3.20 Name Server -- 配置Nutanix的DNS服务器地址
输入DNS服务器地址
58397-zlu115n2qfj.png
3.21 NTP Servers -- 配置NTP服务器
输入NTP服务器地址
98693-aisbex8siss.png

3.22 小结

 Nutanix的Prism作为统一的管理接口,不仅可以管理服务器、存储等基础架构,并且可以实时监控Nutanix平台上所有虚拟机状态,用户可以通过一个界面完成日常监控、维护、快速故障定位和诊断、在线升级vSphere和NOS、告警管理、用户管理等日常操作
 Nutanix更提供命令行接口和预定义Windows Cmdlets脚本,供高级用户开发自动化脚本以实现自动化运维操作
 Nutanix提供的REST API接口可以方便的与其他监控系统进行整合,简化运维人员日常运维成本。Nutanix也提供SCOM整合的监控管理工具包,便于用户将与现有Microsoft SCOM监控平台进行对接

资源来源于网络

开启GIZP压缩
适当的对文档类型开启Gzip压缩可以减少流量传输时间,大幅提高页面加载速度,节省带宽。

修改配置为

    gzip on; #开启gzip压缩功能
    gzip_min_length 10k; #设置允许压缩的页面最小字节数; 这里表示如果文件小于10个字节,就不用压缩,因为没有意义,本来就很小.
    gzip_buffers 4 16k; #设置压缩缓冲区大小,此处设置为4个16K内存作为压缩结果流缓存
    gzip_http_version 1.1; #压缩版本
    gzip_comp_level 2; #设置压缩比率,最小为1,处理速度快,传输速度慢;9为最大压缩比,处理速度慢,传输速度快; 这里表示压缩级别,可以是0到9中的任一个,级别越高,压缩就越小,节省了带宽资源,但同时也消耗CPU资源,所以一般折中为6
    gzip types text/css text/xml application/javascript; #制定压缩的类型,线上配置时尽可能配置多的压缩类型!
    gzip_disable "MSIE [1-6]\."; #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
    gzip vary on; #选择支持vary header;改选项可以让前端的缓存服务器缓存经过gzip压缩的页面; 这个可以不写,表示在传送数据时,给客户端说明我使用了gzip压缩
    设置expires页面缓存时间

合理配置expires可以起到控制页面缓存,减少服务器的请求的作用,具体详情配置可参看官方文档。以下配置可以在http段中或者

    server段中或者location段中加入
    location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {
       root /var/www/img/;
       expires 30d; # 30m:30 分钟,2h:2 小时,30d:30 天
    }
    控制图片等过期时间为30天,当然这个时间可以设置的更长。具体视情况而定
    优化事件处理模型use epoll

epoll用在linux上, kqueue用在bsd上, 不能物理上共存。如果你的服务器cpu较好,linux新内核,可考虑用epoll。

    events {
        #单个进程允许的客户端最大连接数
        worker_connections  20480;
        #收到一个新连接通知后接受尽可能多的连接。
        multi_accept on; 
        #使用epoll模型
        use epoll;
    }

高效文件传输模式

参数sendfile on(主要用于文件下载) 用于开启文件高效传输模式,同时将tcp_nopush on 和tcp_nodelay on 两个指令设置为on,可防止网络及磁盘I/O阻塞,提升Nginx工作效率。

    #开启高效文件传输模式
    sendfile on;
    #减少网络报文段数量
    tcp_nopush on;
    #提高I/O性能
    tcp_nodelay on;
    优化服务器域名的散列表大小

如果在 server_name 中配置了一个很长的域名,那么重载 Nginx 时会报错,因此需要使用 server_names_hash_max_size 来解决域名过长的问题。

域名散列表大小

    server_names_hash_bucket_size 64;
    server_names_hash_max_size 2048;

优化worker服务进程数

worker进程数最开始的设置可以等于CPU的核数,高流量高并发场合也可以考虑将进程数提高至CPU核数*2, 设置太多没有意义。

查看CPU总颗数:

    [root@nginx conf]# grep 'physical id' /proc/cpuinfo|sort|uniq|wc -l
    1
    #查看CPU总核数:
    [root@nginx conf]# grep processor /proc/cpuinfo |wc -l
    4
    #CPU的总核数4
    worker_processes  4;

FastCGI参数调优

    如果是动态请求(如 PHP),Nginx 就会把它通过FastCGI转发给 PHP引擎服务(即 php-fpm)进行解析。
    fastcgi_connect_timeout 240; # Nginx服务器和后端FastCGI服务器连接的超时时间
    
    fastcgi_send_timeout 240; # Nginx允许FastCGI服务器返回数据的超时时间,即在规定时间内后端服务器必须传完所有的数据,否则Nginx将断开这个连接
    
    fastcgi_read_timeout 240; # Nginx从FastCGI服务器读取响应信息的超时时间,表示连接建立成功后,Nginx等待后端服务器的响应时间
    
    fastcgi_buffer_size 64k; # Nginx FastCGI 的缓冲区大小,用来读取从FastCGI服务器端收到的第一部分响应信息的缓冲区大小
    
    fastcgi_buffers 4 64k; # 设定用来读取从FastCGI服务器端收到的响应信息的缓冲区大小和缓冲区数量
    
    fastcgi_busy_buffers_size 128k; # 用于设置系统很忙时可以使用的 proxy_buffers 大小
    
    fastcgi_temp_file_write_size 128k; # FastCGI 临时文件的大小
    
    # fastcti_temp_path /data/ngx_fcgi_tmp; # FastCGI 临时文件的存放路径
    
    fastcgi_cache_path /data/ngx_fcgi_cache levels=2:2 keys_zone=ngx_fcgi_cache:512m inactive=1d max_size=40g; # 缓存目
    fastcgi_cache ngx_fcgi_cache; # 缓存FastCGI生成的内容,比如PHP生成的动态内容
    
    fastcgi_cache_valid 200 302 1h; # 指定http状态码的缓存时间,这里表示将200和302缓存1小时
    
    fastcgi_cache_valid 301 1d; # 指定http状态码的缓存时间,这里表示将301缓存1天
    
    fastcgi_cache_valid any 1m; # 指定http状态码的缓存时间,这里表示将其他状态码缓存1分钟
    
    fastcgi_cache_min_uses 1; # 设置请求几次之后响应被缓存,1表示一次即被缓存
    
    fastcgi_cache_use_stale error timeout invalid_header http_500; # 定义在哪些情况下使用过期缓存
    
    fastcgi_cache_key http://$host$request_uri; # 定义 fastcgi_cache 的 key
    Log日志优化
    
    1. 关掉不需要的日志。
    location ~ .*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$ {
        access_log off;
    }
  1. 日志切割:nginx日志默认不做处理,都会存放到access.log,error.log, 导致越积越多。 可写个定时脚本按天存储,每天凌晨00:00执行。

     #!/bin/bash
     YESTERDAY=$(date -d "yesterday" +"%Y-%m-%d")     
     LOGPATH=/usr/local/openresty/nginx/logs/
     PID=${LOGPATH}nginx.pid
     mv ${LOGPATH}access.log ${LOGPATH}access-${YESTERDAY}.log
     mv ${LOGPATH}error.log ${LOGPATH}error-${YESTERDAY}.log
     kill -USR1 `cat ${PID}`

    资源防盗链

大量的盗链会对服务器和带宽造成很大的消耗, 防盗链主要两种方法。

1、根据 HTTP referer 实现防盗链

第一种,匹配后缀

    location ~ .*\.(gif|jpg|jpeg|png|bm|swf|flv|rar|zip|gz|bz2)$ {    # 指定需要使用防盗链的媒体资源
        access_log  off;                                              # 不记录防盗链的日志
        expires  15d;                                                 # 设置缓存时间
        valid_referers  none  blocked  *.test.com  *.abc.com;         # 表示这些地址可以访问上面的媒体资源
        if ($invalid_referer) {                                       # 如果地址不如上面指定的地址就返回403
            return 403
        }
    }

2、 根据 cookie 实现防盗链。cookie 是服务器贴在客户端身上的 "标签" ,服务器用它来识别客户端。

第二种,绑定目录

    location /images {  
        root /web/www/img;
        vaild_referers nono blocked *.spdir.com *.spdir.top;
        if ($invalid_referer) {
            return 403;
        }
    }

限制HTTP的请求方法

HTTP1.1定义了八种主要的方法,其中OPTIONS、DELETE等方法在生产环境可以被认为是不安全的,因此需要配置Nginx实现限制指定某些HTTP请求的方法来达到提升服务器安全的目的。

    if ($request_method !~ ^(GET|HEAD|POST)$ ) {
        return 501;
    }

通过限制上传服务器的Web服务(可以具体到文件)使用GET方法,防止用户通过上传服务器访问存储内容。

    if ($request_method !~ ^(GET)$ ) {
        return 501;
    }

控制客户端请求速率

    # 以请求的客户端IP作为key值,内存区域命名为one,分配10m内存空间,访问速率限制为1秒1次请求
    limit_req_zone $binary_remove_addr zone=one:10m rate=1r/s;
    # 使用前面定义的为one的内存空间,队列值为5,即可以有5个请求排队等候
    limit_req  zone=one burst=5; 

HTTPS配置优化

NGINX配置HTTPS性能优化方案一则:

1) HSTS的合理使用
2) 会话恢复的合理使用
3) Ocsp stapling的合理使用
4) TLS协议的合理配置
5) False Start的合理使用
6) SNI功能的合理使用,
7) HTTP 2.0的合理使用(Nginx在1.9.x版本就开始支持http2协议)
8) SSL硬件加速卡合理使用

以下是一个nginx优化https的配置模板:

    server {
        # 把ssl on;这行去掉,ssl写在443端口后面。这样http和https的链接都可以用
        listen 443 ssl http2 default_server;
        server_name  site.xxx.com;
     
        # HSTS的合理使用,max-age表明HSTS在浏览器中的缓存时间,includeSubdomainscam参数指定应该在所有子域上启用HSTS,preload参数表示预加载,通过Strict-Transport-Security: max-age=0将缓存设置为0可以撤销HSTS
        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
     
        ssl_certificate /usr/local/nginx/cert/server.pem; 
        ssl_certificate_key /usr/local/nginx/cert/server.key; 
     
        # 分配10MB的共享内存缓存,不同工作进程共享TLS会话信息
        ssl_session_cache shared:SSL:10m;
        # 设置会话缓存过期时间24h
        ssl_session_timeout 1440m;
     
        # TLS协议的合理配置
        # 指定TLS协议的版本,不安全的SSL2和SSL3要废弃掉
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        # 启用ssl_prefer_server_ciphers,用来告诉Nginx在TLS握手时启用服务器算法优先,由服务器选择适配算法而不是客户端
        ssl_prefer_server_ciphers on;
        # 优先选择支持前向加密的算法,且按照性能的优先顺序排列
        ssl_ciphers ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305 ECDHE-RSA-CHACHA20-POLY1305 ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES128-GCM-SHA256 DHE-RSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES128-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-ECDSA-AES128-SHA ECDHE-RSA-AES256-SHA384 ECDHE-RSA-AES128-SHA ECDHE-ECDSA-AES256-SHA384 ECDHE-ECDSA-AES256-SHA ECDHE-RSA-AES256-SHA DHE-RSA-AES128-SHA256 DHE-RSA-AES128-SHA DHE-RSA-AES256-SHA256 DHE-RSA-AES256-SHA ECDHE-ECDSA-DES-CBC3-SHA ECDHE-RSA-DES-CBC3-SHA EDH-RSA-DES-CBC3-SHA AES128-GCM-SHA256 AES256-GCM-SHA384 AES128-SHA256 AES256-SHA256 AES128-SHA AES256-SHA DES-CBC3-SHA !DSS";
     
        # 会话恢复的合理使用
        # 配置会话票证,减少了TLS握手的开销
        ssl_session_tickets on;
        # 生产key的命令通过openssl生成:openssl rand –out session_ticket.key 48
        ssl_session_ticket_key /usr/local/nginx/ssl_cert/session_ticket.key;
     
        #设置TLS日志格式
        log_format ssl "$time_local $server_name $remote_addr $connection $connnection_requests $ssl_protocol $ssl_cipher $ssl_session_id $ssl_session_reused";
        access_log /usr/local/nginx/logs/access.log ssl;
     
        # Ocsp stapling的合理使用
        # 启用OCSP stapling,指定更新文件内容,无需从服务商拉取
        ssl_stapling on;
        ssl_stapling_file /usr/local/nginx/oscp/stapling_file.ocsp;
        # 或者不指定更新文件内容,在线获取,valid表示缓存5分钟,resolver_timeout表示网络超时时间
        #resolver 8.8.8.8 8.8.4.4 223.5.5.5 valid=300s;
        #resolver_timeout 5s; 
        # 启用OCSP响应验证,OCSP信息响应适用的证书           
        ssl_stapling_verify on; 
        ssl_trusted_certificate /usr/local/nginx/ssl_cert/trustchain.crt;     
     
        root   html;
        index  index.html index.htm;
     
        location / {
            ...
        }
     
        error_page 403 /403.html;
        location = /403.html {
            root /usr/local/nginx/waf/403/default;
        }
        error_page 500 502 503 504 /502.html;
        location = /502.html {
            root /usr/local/nginx/waf/403/default;
        }
    }
    优化配置及详细注释事例
    
    #运行用户
    user nobody;
    #pid文件
    pid logs/nginx.pid;
    
    #Nginx基于事件的非阻塞多路复用模型(epoll或kquene)
    #一个进程在短时间内可以响应大量请求,工作进程设置与cpu数相同,避免cpu在多个进程间切换增加开销
    #==worker进程数,通常设置<=CPU数量,auto为自动检测,一般设置最大8个即可,再大性能提升较小或不稳定
    worker_processes auto;
    
    #==将每个进程绑定到特定cpu上,避免进程在cpu间切换的开销
    worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
    
    #==worker进程打开最大文件数,可CPU*10000设置,或设置系统最大数量655350
    worker_rlimit_nofile 102400;
    #全局错误日志
    error_log  logs/error.log;
    
    
    #events模块中包含nginx中所有处理连接的设置,并发响应能力的关键配置
    events {
        #==每个进程同时打开的最大连接数(最大并发数)
        worker_connections 102400;
        
        #==告诉nginx收到一个新链接通知后接受尽可能多的链接
        #multi_accept on;
        
        #一般http 1.1协议下,浏览器默认使用两个并发链接
        #如果是反向代理,nginx需要和客户端保持连接,还需要和后端服务器保持连接
        #Http服务器时,设置max_client=worker_processes*worker_connections/2
        #反向代理时,设置max_client=worker_processes*worker_connections/4    
        #==最大可用客户端数
        #max_client 
        
        #==使用非阻塞模型,设置复用客户端线程的轮训方法
        use epoll;
    }
    
    
    #http模块控制着nginx http处理的所有核心特性
    http {
        #打开或关闭错误页面中的nginx版本号等信息
        server_tokens on;
        #!server_tag on;
        #!server_info on;
        #==优化磁盘IO设置,指定nginx是否调用sendfile函数来输出文件,普通应用设为on,下载等磁盘IO高的应用,可设为off
        sendfile on;
        
        #缓存发送请求,启用如下两个配置,会在数据包达到一定大小后再发送数据
        #这样会减少网络通信次数,降低阻塞概率,但也会影响响应的及时性
        #比较适合于文件下载这类的大数据包通信场景
        #tcp_nopush on;
        #tcp_nodelay on;
    
        #==设置nginx是否存储访问日志,关闭这个可以让读取磁盘IO操作更快
        access_log on;
        #设置nginx只记录严重错误,可减少IO压力
        #error_log logs/error.log crit;
    
        #Http1.1支持长连接
        #降低每个链接的alive时间可在一定程度上提高响应连接数量
        #==给客户端分配keep-alive链接超时时间
        keepalive_timeout 30;
    
        #设置用户保存各种key的共享内存的参数,5m指的是5兆
        limit_conn_zone $binary_remote_addr zone=addr:5m;
        #为给定的key设置最大的连接数,这里的key是addr,设定的值是100,就是说允许每一个IP地址最多同时打开100个连接
        limit_conn addr 100;
    
        #include指在当前文件中包含另一个文件内容
        include mime.types;
        #设置文件使用默认的mine-type
        default_type text/html;
        #设置默认字符集
        charset UTF-8;
    
        #==设置nginx采用gzip压缩的形式发送数据,减少发送数据量,但会增加请求处理时间及CPU处理时间,需要权衡
        gzip on;
        #==加vary给代理服务器使用,针对有的浏览器支持压缩,有个不支持,根据客户端的HTTP头来判断是否需要压缩
        gzip_vary on;
        #nginx在压缩资源之前,先查找是否有预先gzip处理过的资源
        #!gzip_static on;
        #为指定的客户端禁用gzip功能
        gzip_disable "MSIE[1-6]\.";
        #允许或禁止压缩基于请求和相应的响应流,any代表压缩所有请求
        gzip_proxied any;
        #==启用压缩的最少字节数,如果请求小于1024字节则不压缩,压缩过程会消耗系统资源
        gzip_min_length 1024;
        #==数据压缩等级,1-9之间,9最慢压缩比最大,压缩比越大对系统性能要求越高
        gzip_comp_level 2;
        #需要压缩的数据格式
        gzip_types text/plain text/css text/xml text/javascript  application/json application/x-javascript application/xml application/xml+rss; 
    
        #静态文件缓存
        #==开启缓存的同时也指定了缓存文件的最大数量,20s如果文件没有被请求则删除缓存
        open_file_cache max=100000 inactive=20s;
        #==多长时间检查一次缓存的有效期
        open_file_cache_valid 30s;
        #==有效期内缓存文件最小的访问次数,只有访问超过2次的才会被缓存
        open_file_cache_min_uses 2;
        #当搜索一个文件时是否缓存错误信息
        open_file_cache_errors on;
    
        #==允许客户端请求的最大单文件字节数
        client_max_body_size 4m;
        #==客户端请求头缓冲区大小
        client_header_buffer_size 4k;
    
        #是否启用对发送给客户端的URL进行修改
        proxy_redirect off;
        #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #==nginx跟后端服务器连接超时时间(代理连接超时)
        proxy_connect_timeout 60;
        #==连接成功后,后端服务器响应时间(代理接收超时)
        proxy_read_timeout 120;
        #==后端服务器数据回传时间(代理发送超时)
        proxy_send_timeout 20;
        #==设置代理服务器(nginx)保存用户头信息的缓冲区大小
        proxy_buffer_size 32k;
        #==proxy_buffers缓冲区,网页平均在32k以下的设置
        proxy_buffers 4 128k;
        #==高负荷下缓冲大小(proxy_buffers*2)
        proxy_busy_buffers_size 256k;
        #==设定缓存文件夹大小,大于这个值,将从upstream服务器传
        proxy_temp_file_write_size 256k;
        #==1G内存缓冲空间,3天不用删除,最大磁盘缓冲空间2G
        proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:1024m inactive=3d max_size=2g;
    
    
        #设定负载均衡服务器列表
        upstream nginx.test.com{
            #后端服务器访问规则
            #ip_hash;
            #weight参数表示权重值,权值越高被分配到的几率越大
            #server 10.11.12.116:80 weight=5;
            #PC_Local
            server 10.11.12.116:80;
            #PC_Server
            server 10.11.12.112:80;
            #Notebook
            #server 10.11.12.106:80;
        }
    
        #server代表虚拟主机,可以理解为站点(挂载多个站点,只需要配置多个server及upstream节点即可)
        server {
            #监听80端口
            listen 80;
            #识别的域名,定义使用nginx.test.com访问
            server_name nginx.test.com;
            #设定本虚拟主机的访问日志
            access_log logs/nginx.test.com.access.log;
            
            #一个域名下匹配多个URI的访问,使用location进行区分,后面紧跟着的/代表匹配规则
            #如动态资源访问和静态资源访问会分别指向不同的位置的应用场景
            #
            # 基本语法规则:location [=|~|~*|^~] /uri/ {...} 
            # = 开头表示精确匹配
            # ^~ 开头表示uri以某个常规字符串开头,匹配成功后不再进行正则匹配
            # ~ 开头表示区分大小写的正则匹配
            # ~* 开头表示不区分大小写的正则匹配
            # !~ 开头表示区分大小写的不匹配的正则
            # !~* 开头表示不区分大小写的不匹配的正则
            # / 通用匹配,任何请求都会被匹配到
            #
            # 理解如下:
            # 有两种匹配模式:普通字符串匹配,正则匹配
            # 无开头引导字符或以=开头表示普通字符串匹配
            # 以~或~*开头表示正则匹配,~*表示不区分大小写
            # 【多个location时,先匹配普通字符串location,再匹配正则location】
            # 只识别URI部分,例如请求为“/test/1/abc.do?arg=xxx”
            # (1)先查找是否有=开头的精确匹配,即“location=/test/1/abc.do {...}”
            # (2)再查找普通匹配,以“最大前缀”为规则,如有以下两个location
            #    location /test/ {...}
            #    location /test/1/ {...}
            #    则匹配后一项
            # (3)匹配到一个普通location后,搜索并未结束,而是暂存当前结果,并继续进行正则搜索
            # (4)在所有正则location中找到第一个匹配项后,以此匹配项为最终结果
            # 【所以正则匹配项,匹配规则受定义前后顺序影响,但普通匹配不会】
            # (5)如果未找到正则匹配项,则以(3)中缓存的结果为最终结果
            # (6)如果一个匹配都没有,则返回404
            # location =/ {...}与location / {...}的差别
            # 前一个是精确匹配,只响应“/”的请求,所有“/xxx”形式的请求不会以“前缀匹配形式”匹配到它
            # 后一个正相反,所有请求必然都是以“/”开头,所以没有其他匹配结果时一定会执行到它
            # location ^~ / {...} ^~的意思是禁止正则匹配,表示匹配到此项后不再进行后续的正则搜索
            # 相当于普通匹配模式匹配成功后就以此结果为最终结果,停止进行后续的正则匹配
            location / {
                #定义服务器的默认网站根目录位置,可以写相对路径,也可以写绝对路径
                root html;
                #定义首页索引文件的名称
                index index.html index.htm;
                #定义转发后端负载服务器组
                proxy_pass http://nginx.test.com;
            }
    
            #定义错误提示页面
            error_page 500 502 503 504 /50x.html;
            location = /50x.html {
                root html;
            }
            #静态文件,nginx自己处理
            location ~ ^/(images|javascript|js|css|flash|media|static)/{
                root /var/www/virtual/htdocs;
                #过期时间1天
                expires 1d;
                #关闭媒体文件日志
                access_log off;
                log_not_found off;
            }
            #设定查看Nginx状态的地址
            location /NginxStatus {
                #!stub_status on; #无此关键字
                access_log off;
                auth_basic "NginxStatus";
                auth_basic_user_file conf/htpasswd;
            }
            #禁止访问的文件.htxxx
            location ~ /\.ht {
                #deny all;禁止访问,返回403
                deny all;
                #allow all;允许访问
            }
        }
        #网站较多的情况下ngxin又不会请求瓶颈可以考虑挂多个站点,并把虚拟主机配置单独放在一个文件内,引入进来
        #include website.conf;
    }

1.容灾备份的区别

容灾 (Disaster Tolerance):就是在上述的灾难发生时,在保证生产系统的数据尽量少丢失的情况下,保持生存系统的业务不间断地运行。

容错 (Fault Tolerance):指在计算机系统的软件、硬件发生故障时,保证计算机系统中仍能工作的能力。

02357-xgy2xhmorvt.png

区别 :容错可以通过硬件冗余、错误检查和热交换 再加上特殊的软件来实现,而容灾必须通过系统冗余、灾难检测和系统迁移等技术来实现。当设备故障不能通过容错机制解决而导致系统宕机时,这种故障的解决就属于容灾的范畴。

什么是灾难恢复 (Disaster Recovery):指的是在灾难发生后,将系统恢复到正常运作的能力。

区别 :容灾强调的是在灾难发生时,保证系统业务持续不 间断地运行的能力,而灾难恢复强调的灾难之后,系统的恢复能力。现在的容灾系统都包含着灾难恢复的功能,所以本文的讨论除了包括容灾方面的内容,还包括了 灾难恢复的部分内容。

容灾系统在企业中给与数据安全系数相当高的保障,但是容灾系统倒是是什么,他们是什么意思?恐怕连正在使用容灾备份的网络管理人员都不能解释。本文用最浅显的语言给大家解释容灾备份到底是什么。

2.容灾和备份的目的不同

容灾系统的目的在于保证系统数据和服务的“在线性”,即当系统发生故障时,仍然能够正常地向网络系统提供数据和服务,以使系统不致停顿。

而容灾备份技术的目的与此并不相同,备份是“将在线数据转移成离线数据的过程”,其目的在于应付系统数据中的逻辑错误和历史数据保存。

所以,在各种容错技术非常丰富的今天,备份系统仍然是不可替代的。

3.备份是基石

备份是指为防止系统出现操作失误或系统故障导致数据丢失,而将全系统或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。

备份是数据高可用的最后一道防线,其目的是为了系统数据崩溃时能够恢复数据。

4.容灾不可少

那么建设了备份系统,是否就不需要容灾备份系统?这还要看业务部门对RTO(恢复所需的时间指标)/RPO(能够恢复到的最新状态)指标的 期望值,如果允许1TB的数据库RTO=8小时,RPO=1天,那备份系统就能满足要求。同时,备份的目的在于应付系统数据中的逻辑错误和历史数据保存。只能够满足数据丢失、数据破坏时的数据恢复目的,而不能提供实时的业务接管功能。

因此容灾系统对于某些关键业务而言也是必不可少的。人们谈及容灾备份往往是针对当生产系统,不能正常工作时,其业务可由容灾系统接替这些业务,继续进行正常的工作。

能够提供很好的RTO和RPO指标。同时远程容灾系统具备应付各种灾难,特别是区域性与毁灭性灾难的能力,具备较为完善的数据保护与灾难恢复功能,保证灾难降临时数据的完整性及业务的连续性,并在最短时间内恢复业务系统的正常运行,将损失降到最小。

5.容灾不能替换备份

容灾系统会完整地把生产系统的任何变化复制到容灾端去,包括不想让它复制的工作,比如不小心把计费系统内的用户信息表删除了,同时容灾端的 用户信息表也会被完整地删除。如果是同步容灾,那容灾端同时就删除了;如果是异步容灾,那容灾端在数据异步复制的间隔内就会被删除。这时就需要从备份系统 中取出最新备份,来恢复被错误删除的信息。因此容灾系统的建设不能替代备份系统的建设。

6.规划企业安全保障体系考虑的因素

对于企业而言到底应该如何建设自己的灾备系统,是只建设备份系统、还是只建设容灾系统、还是需要二者同时建设、或者是分步骤的建设,谁先谁后等问题,主要根据业务的需求而定:

(1)需要防范的灾难类型:

企业信息系统可能遇到的灾难类型及其发生的比例如下:

对于“人为错误”、“软件损坏和程序错误”加上“病毒”等这些都称为逻辑错误,占总故障的 56%,这些错误只能通过备份系统才能防范;

对于“硬件和系统故障”以及“自然灾难”等故障可以通过在容灾系统(或者异地备份)来防范,占总故障率的44%。

(2)允许的RTO和RPO指标

从技术上看,衡量容灾系统有两个主要指标:RPO(Recovery Point Object)和RTO(Recovery Time Object),其中RPO代表了当灾难发生时允许丢失的数据量;而RTO则代表了系统恢复的时间。

一般而言:容灾系统能够提供较好的RTO和RPO指标。

(3)系统投资

总的说来,建设备份系统的投资远比建设标准意义的容灾系统的投资小得多:

备份系统的投资规模一般在几百万;

而最节省的一套容灾系统投资都将上千万;

7.常用的灾备组合方式

基于以上原因,业界在灾备系统的建设上一般按照以下几种方式:

Ø 建设机房内的本地备份系统

Ø 建设异地的备份系统

该方式可以备份系统的价格满足备份和异地容灾功能,能够避免主生产中心由于地震、火灾或其他灾害造成的数据丢失。

Ø 备份系统+异地容灾系统

这是一个较为理想化的容灾系统一体化解决方案,能够在很大程度上避免各种可能的错误

(文章来源网络,相关版权归原作者所有)

Nginx的几个常用配置和技巧

文章列举了几个Nginx常见的,实用的,有趣的配置,希望看过之后能说一句:学到了!
一个站点配置多个域名

    server {
        listen       80;
        server_name  site.cn b.site.cn;
    }

server_name 后跟多个域名即可,多个域名之间用空格分隔

一个服务配置多个站点

    server {
        listen       80;
        server_name  a.site.cn;
    
        location / {
            root /home/project/pa;
            index index.html;
        }
    }
    
    server {
        listen       80;
        server_name  site.cn b.site.cn;
    
        location / {
            root /home/project/pb;
            index index.html;
        }
    }
    
    server {
        listen       80;
        server_name  c.site.cn;
    
        location / {
            root /home/project/pc;
            index index.html;
        }
    }

基于Nginx虚拟主机配置实现,Nginx有三种类型的虚拟主机

基于IP的虚拟主机: 需要你的服务器上有多个地址,每个站点对应不同的地址,这种方式使用的比较少

基于端口的虚拟主机: 每个站点对应不同的端口,访问的时候使用ip:port的方式访问,可以修改listen的端口来使用

基于域名的虚拟主机: 使用最广的方式,上边例子中就是用了基于域名的虚拟主机,前提条件是你有多个域名分别对应每个站点,server_name填写不同的域名即可

nginx添加账号密码验证

    server {
        location / {
            auth_basic "please input user&passwd";
            auth_basic_user_file key/auth.key;
        }
    }

有很多服务通过nginx访问,但本身没有提供账号认证的功能,就可以通过nginx提供的authbase账号密码认证来实现,可以用以下脚本来生成账号的密码

    # cat pwd.pl 
    #!/usr/bin/perl
    use strict;
    my $pw=$ARGV[0] ;
    print crypt($pw,$pw)."\n";

使用方法:

    # perl pwd.pl site.cn
    opf8BImqCAXww
    # echo "admin:opf8BImqCAXww" > key/auth.key

nginx开启列目录

当你想让nginx作为文件下载服务器存在时,需要开启nginx列目录

    server {
        location download {
            autoindex on;
    
            autoindex_exact_size off;
            autoindex_localtime on;
        }
    }

autoindex_exact_size: 为on(默认)时显示文件的确切大小,单位是byte;改为off显示文件大概大小,单位KB或MB或GB

autoindex_localtime: 为off(默认)时显示的文件时间为GMT时间;改为on后,显示的文件时间为服务器时间

默认当访问列出的txt等文件时会在浏览器上显示文件的内容,如果你想让浏览器直接下载,加上下边的配置

    if ($request_filename ~* ^.*?\.(txt|pdf|jpg|png)$) {
        add_header Content-Disposition 'attachment';
    }

配置默认站点

    server {
        listen 80 default;
    }

当一个nginx服务上创建了多个虚拟主机时默认会从上到下查找,如果匹配不到虚拟主机则会返回第一个虚拟主机的内容,如果你想指定一个默认站点时,可以将这个站点的虚拟主机放在配置文件中第一个虚拟主机的位置,或者在这个站点的虚拟主机上配置listen default

不允许通过IP访问

    server {
        listen       80 default;
        server_name  _;
    
        return      404;
    }

可能有一些未备案的域名或者你不希望的域名将服务器地址指向了你的服务器,这时候就会对你的站点造成一定的影响,需要禁止IP或未配置的域名访问,我们利用上边所说的default规则,将默认流量都转到404去

上边这个方法比较粗暴,当然你也可以配置下所有未配置的地址访问时直接301重定向到你的网站去,也能为你的网站带来一定的流量

    server {
        rewrite ^/(.*)$ https://site.cn/$1    permanent;
    }

直接返回验证文件

    location = /XDFyle6tNA.txt {
        default_type text/plain;
        return 200 'd6296a84657eb275c05c31b10924f6ea';
    }

很多时候微信等程序都需要我们放一个txt的文件到项目里以验证项目归属,我们可以直接通过上边这种方式修改nginx即可,无需真正的把文件给放到服务器上

nginx配置upstream反向代理

    http {
        ...
        upstream tomcats {
            server 192.168.1.176 weight=1;
            server 192.168.1.177 weight=1;
        }
    
        server {
            location /site/ { 
                proxy_pass http://tomcats; 
    
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
            }
        }
    
    }

稍不注意可能会落入一个proxy_pass加杠不加杠的陷阱,这里详细说下proxy_pass http://tomcats与proxy_pass http://tomcats/的区别:

虽然只是一个/的区别但结果确千差万别。分为以下两种情况:

  1. 目标地址中不带uri(proxy_pass http://tomcats)。此时新的目标url中,匹配的uri部分不做修改,原来是什么就是什么。

    location /site/ {
        proxy_pass  http://192.168.1.135:8181;
    }
    
    http://domain/site/   -->     http://192.168.1.135:8181/site/
    http://domain/site/action/abc   -->     http://192.168.1.135:8181/site/action/abc
  2. 目标地址中带uri(proxy_pass http://tomcats/,/也是uri),此时新的目标url中,匹配的uri部分将会被修改为该参数中的uri。

    location /site/ {
        proxy_pass  http://192.168.1.135:8181/;
    }
    
    http://domain/site/   -->     http://192.168.1.135:8181
    http://domain/site/action/abc   -->     http://192.168.1.135:8181/action/abc

    nginx upstream开启keepalive

    upstream tomcat {
        server site.cn:8080;
        keepalive 1024;
    }
    
    server {
        location / {
            proxy_http_version 1.1;
            proxy_set_header Connection "";
    
            proxy_pass http://tomcat;
        }
    }

    nginx在项目中大多数情况下会作为反向代理使用,例如nginx后接tomcat,nginx后接php等,这时我们开启nginx和后端服务之间的keepalive能够减少频繁创建TCP连接造成的资源消耗,配置如上

keepalive: 指定每个nginxworker可以保持的最大连接数量为1024,默认不设置,即nginx作为client时keepalive未生效

proxy_http_version 1.1: 开启keepalive要求HTTP协议版本为HTTP 1.1

proxy_set_header Connection "": 为了兼容老的协议以及防止http头中有Connection close导致的keepalive失效,这里需要及时清掉HTTP头部的Connection

404自动跳转到首页

    server {
        location / {
           error_page 404 =  @site;
        }
    
        location @site {
           rewrite  .*  / permanent;
        }
    }

网站出现404页面不是特别友好,我们可以通过上边的配置在出现404之后给自动跳转到首页去