# 管理虚拟IP地址
#### 操作场景
虚拟IP（Virtual IP Address）是从VPC子网网段中划分的一个内网IP地址，是一种可以独立申请和删除的内网IP地址，适用于以下场景：
- 将一个或者多个虚拟IP同时绑定至一个云服务器，可以通过任意一个IP地址（私有IP/虚拟IP）访问云服务器。通常当单个云服务器内同时部署了多种业务，此时可以通过不同的虚拟IP访问各个业务。

- 将一个虚拟IP同时绑定至多个云服务器，虚拟IP需要搭配高可用软件（比如Keepalived），用来搭建高可用的主备集群。为了提升服务的高可用性，避免单点故障，您可以用"一主一备"或"一主多备"的方法组合使用云服务器，这些云服务器对外呈现为一个虚拟IP。当主云服务器故障时，备云服务器可以转为主云服务器并继续对外提供服务，以此达到高可用性HA（High Availability）的目的。
 
本文介绍为ECS绑定和配置虚拟IP的操作指导。
#### 背景知识
通常情况下，云服务器使用私有IP地址进行内网通信，虚拟IP地址拥有私有IP地址同样的网络接入能力，包括VPC内二三层通信、VPC之间对等连接通信、EIP公网通信、接入VPN和云专线的能力。云服务器的私有IP、虚拟IP以及EIP的典型使用场景示意图，请参见[图1]。
- 私有IP地址：用于内网通信，不能访问公网。
- 虚拟IP：搭配Keepalived构建高可用集群，多个ECS构建的集群对外呈现一个虚拟IP。
- EIP：用于公网通信。
图1云服务器（ECS）不同IP地址的使用场景示意图   
![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0000001952856164.png "点击放大")
更多关于虚拟IP地址的内容，请参见[虚拟IP地址概述](https://support.huaweicloud.com/usermanual-vpc/vpc_vip_0001.html)。
#### 约束与限制
建议一个ECS绑定的虚拟IP数量不超过8个。如果一个ECS绑定多个虚拟IP，通常不同的虚拟IP承载不同业务，业务过多的情况下，不同业务可能会导致云服务器超负荷从而影响实际体验。
#### 绑定虚拟IP地址
1. 登录[ECS控制台](https://console.huaweicloud.com/ecm/?#/ecs/manager/vmList)，进入弹性云服务器列表页面。
2. 在弹性云服务器列表中，单击待绑定虚拟IP地址的弹性云服务器名称。 系统跳转至该弹性云服务器详情页面。
   
3. 选择"弹性网卡"页签，单击"管理虚拟IP地址"。
4. 选择"IP地址管理"页签，在需要绑定弹性公网IP或者弹性云服务器的虚拟IP地址所在行的操作列下，单击"绑定弹性公网IP"或者"绑定服务器"。 多个主备部署的弹性云服务器可以在绑定虚拟IP地址时选择同一个虚拟IP地址，增强容灾性能。
   
5. 单击"确定"。
 
#### 登录ECS配置虚拟IP地址
当为一个ECS绑定一个虚拟IP或者多个虚拟IP时，在控制台执行完绑定虚拟IP的操作后，您还需要参考以下章节，登录弹性云服务器手工配置虚拟IP地址。
本文提供以下操作系统的配置示例，其他操作系统，请您参考对应官网帮助文档进行配置。
- Linux系统：CentOS 8.2 64bit、Ubuntu 22.04 server 64bit、Huawei Cloud EulerOS 2.0 标准版 64位、Debian 12.0.0 64bit、SUSE Linux Enterprise Server 15 SP5 64bit
- Windows系统：Windows Server
 
- [CentOS]
  以下操作以"CentOS 8.2 64bit"为例，供您参考。
  1. 执行以下命令，查看并记录需要绑定虚拟IP的网卡及对应连接。
     **nmcli connection**
     回显类似如下信息：
     ```
     [root@ecs-centos ~]# nmcli connection
     NAME         UUID                                  TYPE      DEVICE 
     System eth0  5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet  eth0   
     System eth1  9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04  ethernet  --     
     System eth2  3a73717e-65ab-93e8-b518-24f5af32dc0d  ethernet  --     
     System eth3  c5ca8081-6db2-4602-4b46-d771f4330a6d  ethernet  --     
     System eth4  84d43311-57c8-8986-f205-9c78cd6ef5d2  ethernet  --
     ```
     本示例的回显信息说明如下：
     - **DEVICE** 列的**eth0**为需要绑定虚拟IP的网卡。
     
     - **NAME** 列的**System eth0**为网卡对应的连接。
      
  
  2. 执行以下命令，在目标网卡连接中添加虚拟IP。
     **nmcli connection modify "** *网卡对应的连接名称* **"** **+** **ipv4.addresses** *虚拟IP地址*
     参数说明如下：
     - 网卡对应的连接名称：为[1]中查到的网卡对应的连接，本示例中为**System eth0**。
     
     - 虚拟IP地址：待添加的虚拟IP地址，如果一次添加多个虚拟IP地址，多个虚拟IP地址之间用","隔开。
     
     
     命令示例：
     - 添加单个虚拟IP：**nmcli connection modify "System eth0" +ipv4.addresses 192.168.0.22**
     
     - 添加多个虚拟IP：**nmcli connection modify "System eth0" +ipv4.addresses 192.168.0.22,192.168.0.23**
       
  
  3. 执行以下命令，使[2]的配置生效。
     **nmcli connection up "** *网卡对应的连接名称* **"**
     命令示例：
     **nmcli connection up "System eth0"**
     回显类似如下信息：
     ```
     [root@ecs-centos ~]# nmcli connection up "System eth0"
     Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
     ```
     
  
  4. 执行以下命令，检查虚拟IP配置是否成功。 **ip a**
     回显类似如下信息，可以看到eth0网卡下存在虚拟IP地址，为**192.168.0.22** 。
     ```
     [root@ecs-centos ~]# ip a
     1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
         link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
         inet 127.0.0.1/8 scope host lo
            valid_lft forever preferred_lft forever
         inet6 ::1/128 scope host 
            valid_lft forever preferred_lft forever
     2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
         link/ether fa:16:3e:54:ac:fa brd ff:ff:ff:ff:ff:ff
         inet 192.168.0.22/32 scope global noprefixroute eth0
            valid_lft forever preferred_lft forever
         inet 192.168.0.78/24 brd 192.168.0.255 scope global dynamic noprefixroute eth0
            valid_lft 315359994sec preferred_lft 315359994sec
         inet6 fe80::f816:3eff:fe54:acfa/64 scope link 
            valid_lft forever preferred_lft forever
     ```
     ![](https://support.huaweicloud.com/usermanual-ecs/public_sys-resources/note_3.0-zh-cn.png)
     **以上方法配置完成后，弹性云服务器重启后，配置不会丢失。**
     **如果您需要删除已添加的虚拟IP，可以使用以下方法：**
     1. 在目标网卡连接中删除虚拟IP。 **nmcli connection modify "** *网卡对应的连接名称* **"** **-** **ipv4.addresses** *虚拟IP地址*
        一次删除多个虚拟IP地址时，多个IP之间用","隔开，命令示例：
        - 删除单个虚拟IP：**nmcli connection modify "System eth0" -ipv4.addresses 192.168.0.22**
        
        - 删除多个虚拟IP：**nmcli connection modify "System eth0" -ipv4.addresses 192.168.0.22,192.168.0.23**
          
     
     2. 参考[3]，使删除操作生效。
       
   
- [Ubuntu]
  以下操作以"Ubuntu 22.04 server 64bit"为例，当弹性云服务器的操作系统为**Ubuntu 22** 和**Ubuntu 20** 时，请您参考下述方法。
  1. 执行以下命令，查看并记录需要绑定虚拟IP的网卡。 **ifconfig**
     回显类似如下信息，本示例中绑定虚拟IP的网卡名称为**eth0** 。
     ```
     root@ecs-X-Ubuntu:~# ifconfig
     eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
             inet 172.16.0.210  netmask 255.255.255.0  broadcast 172.16.0.255
             inet6 fe80::f816:3eff:fe01:f1c3  prefixlen 64  scopeid 0x20<link>
             ether fa:16:3e:01:f1:c3  txqueuelen 1000  (Ethernet)
             RX packets 43915  bytes 63606486 (63.6 MB)
             RX errors 0  dropped 0  overruns 0  frame 0
             TX packets 3364  bytes 455617 (455.6 KB)
             TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
     ...
     ```
     
  
  2. 执行以下命令，进入"/etc/netplan"目录。 **cd /etc/netplan**
     
  
  3. 执行以下命令，为目标网卡添加虚拟IP地址。
     1. 执行以下命令，打开配置文件"01-netcfg.yaml"。 **vim 01-netcfg.yaml**
        
     
     2. 按i进入编辑模式。
     
     3. 在对应网卡配置区域内，添加虚拟IP地址。 本示例为**eth0**添加虚拟IP地址，待添加内容如下：
        **addresses:**
        **- 172.16.0.26/32**
        添加后文件内容如下：
        ```
        network:
            version: 2
            renderer: NetworkManager
            ethernets:
                eth0:
                    dhcp4: true
                    addresses:
                    - 172.16.0.26/32
                eth1:
                    dhcp4: true
                eth2:
                    dhcp4: true
                eth3:
                    dhcp4: true
                eth4:
                    dhcp4: true
        ```
        
     
     4. 添加完成后，按"ESC"，并输入":wq!"，保存后退出文件。
      
  
  4. 执行以下命令，使[3]的配置生效。
     **netplan apply**
     
  
  5. 执行以下命令，检查虚拟IP配置是否成功。 **ip a**
     回显类似如下信息，可以看到eth0网卡下存在虚拟IP地址，为**172.16.0.26** 。
     ```
     root@ecs-X-Ubuntu:/etc/netplan# ip a
     ...
     2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
         link/ether fa:16:3e:01:f1:c3 brd ff:ff:ff:ff:ff:ff
         altname enp0s3
         altname ens3
         inet 172.16.0.26/32 scope global noprefixroute eth0
            valid_lft forever preferred_lft forever
         inet 172.16.0.210/24 brd 172.16.0.255 scope global dynamic noprefixroute eth0
            valid_lft 107999971sec preferred_lft 107999971sec
         inet6 fe80::f816:3eff:fe01:f1c3/64 scope link 
            valid_lft forever preferred_lft forever
     ```
     ![](https://support.huaweicloud.com/usermanual-ecs/public_sys-resources/note_3.0-zh-cn.png)
     **以上方法配置完成后，弹性云服务器重启后，配置不会丢失。**
     **如果您需要删除已添加的虚拟IP，可以使用以下方法：**
     1. 参考[3]，打开配置文件"01-netcfg.yaml"，并删除对应网卡下虚拟IP的地址。
     
     2. 参考[4]，使删除操作生效。
       
   
- [Windows Server]
  以下操作以"Windows Server"为例，供您参考。
  1. 在"控制面板 \> 网络和共享中心"路径下，单击对应的本地连接。
  
  2. 在打开的本地连接页面中，单击"属性"。
  
  3. 在"网络"页签中选择"Internet 协议版本 4 （TCP/IPv4）"。
  
  4. 单击"属性"。
  
  5. 选择"使用下面的IP地址"，IP地址配置为弹性云服务器的私有IP地址，例如：10.0.0.101。
     图2配置私有IP地址   
     ![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0000001166530288.png "点击放大") 
  
  6. 单击"高级"。
  
  7. 在"IP设置"页签内"IP地址"区域，单击"添加"。 添加虚拟IP地址，例如：10.0.0.154。
     图3配置虚拟IP地址   
     ![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0000001166370364.png "点击放大") 
  
  8. 单击"确定"，保存更改。
  
  9. 在"开始"菜单中打开Windows命令行窗口，执行以下命令确认是否配置了虚拟IP地址。 **ipconfig /all**
     回显样例中IPv4 Address包含虚拟IP地址10.0.0.154，表示弹性云服务器内部网卡的虚拟IP地址配置正常。
     
     
   
#### 相关操作
当不再使用虚拟IP时，可以删除虚拟IP地址，详细内容，请参考[删除虚拟IP地址](https://support.huaweicloud.com/usermanual-vpc/vpc_vip_0009.html)。
弹性云服务器的网卡解绑并删除虚拟IP地址后，需要在弹性云服务器上手工删除虚拟IP地址。
**Linux系统** （本文以"CentOS 7.2 64bit"为例，其他规格请参考对应官网帮助文档）
1. 执行以下命令，查看并记录需要删除虚拟IP的网卡及对应连接。
   **nmcli connection**
   回显类似如下信息：
   ![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0000001326291534.png "点击放大")
   本示例的回显信息说明如下：
   - **DEVICE** 列的**eth0**为需要删除虚拟IP的网卡。
   
   - **NAME** 列的**Wired connection 1**为网卡对应的连接。
    
2. 执行以下命令，在目标连接中删除虚拟IP。 **nmcli connection delete "** *CONNECTION* **" ipv4.addresses** *VIP*
   参数说明如下：
   - CONNECTION：为步骤[1]中查到的网卡对应的连接。
   
   - VIP：待删除的虚拟IP地址。
    
3. 执行以下命令，使配置生效。 **nmcli connection up "** *CONNECTION* **"**
   命令示例：
   **nmcli connection up "** **Wired connection 1** **"**
   
4. 执行以下命令，检查虚拟IP配置是否成功。 **ip a**
   可以看到eth0网卡下已经不存在添加的虚拟IP地址。
   
 
