admin 发表于 2021-6-25 11:21:40

使用VRRP(L3HA)和Open vSwitch提供高可用性

一个具有网络管理接口的控制器节点。
两个网络节点有四个网络接口:管理、项目隧道网络、项目VLAN网络和外部(通常是Internet)。Open vSwitch网桥br-vlan必须包含VLAN接口上的一个端口,而Open vSwitch桥的br- ex必须在外部接口上包含一个端口。

至少有一个具有三个网络接口的计算节点:管理、项目隧道网络和项目VLAN网络。Open vSwitch网桥br-vlan必须在VLAN接口上包含一个端口。为了提高对网络流量的理解,网络和计算节点包含一个独立的网络接口,用于项目VLAN网络。在生产环境中,项目VLAN网络可以使用任何Open vSwitch网桥来访问网络接口。例如br-tun网桥
在示例配置中,管理网络使用10.0.0 / 24,隧道网络使用10.0.1.0 / 24,VRRP网络使用169.254.192.0 / 18,外部网络使用203.0.113.0 / 24。VLAN网络不需要IP地址范围,因为它只处理二级连接。
硬件要求
https://images2017.cnblogs.com/blog/1201418/201801/1201418-20180103152510096-1035823561.png
网络布局
https://images2017.cnblogs.com/blog/1201418/201801/1201418-20180103161604924-2142487340.png

服务布局
https://images2017.cnblogs.com/blog/1201418/201801/1201418-20180103161648284-917475399.png
注意:对于VLAN外部和项目网络,网络基础设施必须支持VLAN标记。为了获得VXLAN和GRE项目网络的最佳性能,网络基础设施应该支持巨型帧。
控制节点的OpenStack服务
在neutron.conf文件中具有数据库服务器的合适配置在neutron.conf文件中具有消息队列服务的合适配置。
在neutron.conf文件中具有openstack keystone服务的合适配置
在nova.conf文件中具有openstack计算 控制/管理服务的合适配置去使用Openstack 网络
neutron服务器服务、ML2插件和任何依赖关系。

网络节点的Openstack服务在neutron.conf文件中具有openstack keystone服务的合适配置
Open vSwitch服务、ML2插件、Open vSwitch代理、L3代理、DHCP代理、元数据代理和任何依赖关系。

计算节点的Openstack服务
在neutron.conf文件中具有openstack keystone服务的合适配置

在nova.conf文件中具有openstack计算 控制/管理服务的合适配置去使用Openstack网络Open vSwitch服务,ML2插件,OpenvSwitch代理,以及任何依赖项。

体系结构
一般的体系架构https://images2017.cnblogs.com/blog/1201418/201801/1201418-20180103164242456-298361593.png
网络节点包含以下组件:

Open vSwitch代理管理虚拟交换机之间的连接,以及通过虚拟端口与其他网络组件(如名称空间、Linux网桥和底层接口)进行交互。

管理qdhcp名称空间的DHCP代理。qdhcp名称空间为使用项目网络的实例提供DHCP服务。

L3代理使用keepalived管理qrouter名称空间和VRRP。qrouter名称空间提供了项目和外部网络之间以及项目网络之间的路由。它们还在实例和元数据代理之间路由元数据通信。

元数据代理处理实例的元数据操作。

网络节点组件回顾
https://images2017.cnblogs.com/blog/1201418/201801/1201418-20180103164518878-1511320467.png

网络节点组件连接
https://images2017.cnblogs.com/blog/1201418/201801/1201418-20180103164611362-1655709252.png
计算节点包含以下组件:

1.Open vSwitch代理管理虚拟交换机之间的连接,以及通过虚拟端口与其他网络组件(如名称空间、Linux网桥和底层接口)进行交互。

2.Linux网桥处理安全组。
注意:由于Open vSwitch和iptables的限制,网络服务使用Linux桥来管理实例的安全组。
计算节点组件回顾
https://images2017.cnblogs.com/blog/1201418/201801/1201418-20180103164818096-1107191021.png
计算节点组件连接
https://images2017.cnblogs.com/blog/1201418/201801/1201418-20180103164936159-1573347225.png
数据包流 L3HA机制简单地增加了场景:如果主路由器失败,则使用Open vSwitch提供给另一个路由器的快速故障转移到另一个路由器。

在正常的操作过程中,主路由器定期地通过一个隐藏的项目网络来传输心跳数据包,该网络连接所有的HA路由器以完成特定的项目。在默认情况下,这个网络使用的类型是在/etc/neutron/plugins/ml2_conf.ini的tenant_network_types选项中第一个值的类型。

如果备份路由器停止接收这些数据包,它就假定主路由器失效,并通过在qrouter名称空间中配置IP地址来提升自己到主路由器。在具有多个备份路由器的环境中,具有下一个最高优先级的路由器成为主路由器
注意:L3HA机制对所有路由器使用相同的优先级。因此,VRRP会将IP地址最高的备份路由器提升到主路由器。
示例配置
使用下面的示例配置作为在您的环境中部署该场景的模板。
控制节点1.配置常见的选项。编辑/etc/neutron/neutron.配置文件:https://common.cnblogs.com/images/copycode.gif
verbose = Truecore_plugin = ml2service_plugins = routerallow_overlapping_ips = Truerouter_distributed = Falsel3_ha = Truel3_ha_net_cidr = 169.254.192.0/18max_l3_agents_per_router = 3min_l3_agents_per_router = 2dhcp_agents_per_network = 2https://common.cnblogs.com/images/copycode.gif


2.配置ML2插件。编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件:
https://common.cnblogs.com/images/copycode.gif
type_drivers = flat,vlan,gre,vxlantenant_network_types = vlan,gre,vxlanmechanism_drivers = openvswitchflat_networks = externalnetwork_vlan_ranges = external,vlan:MIN_VLAN_ID:MAX_VLAN_IDtunnel_id_ranges = MIN_GRE_ID:MAX_GRE_IDvni_ranges = MIN_VXLAN_ID:MAX_VXLAN_IDvxlan_group = 239.1.1.1firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriverenable_security_group = Trueenable_ipset = Truehttps://common.cnblogs.com/images/copycode.gif


替换MIN_VLAN_ID、MAX_VLAN_ID、MIN_GRE_ID、MAX_GRE_ID、MIN_VXLAN_ID和MAX_VXLAN_ID和VLAN、GRE和VXLAN ID最小值,以及适合您的环境的最大值。
请注意:tenant_network_types选项中的第一个值在常规用户创建网络时成为默认项目网络类型。network_vlan_range选项中的外部值缺少VLAN ID范围,以支持管理用户使用任意VLAN ID。

3.启动服务


网络节点1.配置内核以启用包转发和禁用反向路径过滤。编辑/etc/sysctl.配置文件:net.ipv4.ip_forward=1net.ipv4.conf.default.rp_filter=0net.ipv4.conf.all.rp_filter=0
2.加载新内核配置:$ sysctl -p

3.配置常见的选项。编辑/etc/neutron/neutron.配置文件:verbose = True

4.配置Open vSwitch代理。编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件:https://common.cnblogs.com/images/copycode.gif
local_ip = TUNNEL_INTERFACE_IP_ADDRESSbridge_mappings = vlan:br-vlan,external:br-extunnel_types = gre,vxlanl2_population = Falsefirewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriverenable_security_group = Trueenable_ipset = Truehttps://common.cnblogs.com/images/copycode.gif


使用处理GRE / VXLAN项目网络的接口的IP地址替换TUNNEL_INTERFACE_IP_ADDRESS。
5.配置L3代理。编辑/etc/neutron/l3_agent.ini文件:
https://common.cnblogs.com/images/copycode.gif
verbose = Trueinterface_driver = neutron.agent.linux.interface.OVSInterfaceDriveruse_namespaces = Trueexternal_network_bridge =router_delete_namespaces = Trueagent_mode = legacyhttps://common.cnblogs.com/images/copycode.gif

注意:external_network_bridge选项故意不包含任何值。
6.配置DHCP代理。编辑/etc/neutron/dhcp_agent.ini文件:
https://common.cnblogs.com/images/copycode.gif
verbose = Trueinterface_driver = neutron.agent.linux.interface.OVSInterfaceDriverdhcp_driver = neutron.agent.linux.dhcp.Dnsmasquse_namespaces = Truedhcp_delete_namespaces = Truehttps://common.cnblogs.com/images/copycode.gif


7.(可选)为VXLAN项目网络减少MTU。https://common.cnblogs.com/images/copycode.gif


1.编辑/etc/neutron/dhcp_agent。ini文件:dnsmasq_config_file = /etc/neutron/dnsmasq-neutron.conf2.编辑/etc/neutron/dnsmasq-neutron.conf文件:dhcp-option-force=26,1450

https://common.cnblogs.com/images/copycode.gif


8.配置元数据代理。编辑/etc/neutron/metadata_agent.ini文件:verbose = Truenova_metadata_ip = controllermetadata_proxy_shared_secret = METADATA_SECRET

用合适的环境值替换METADATA_SECRET。
9.开始以下服务:    Open vSwitch    Open vSwitch agent    L3 agent    DHCP agent    Metadata agent

计算节点
1.配置内核以启用网桥上的iptables并禁用反向路径过滤。编辑/etc/sysctl.配置文件:net.ipv4.conf.default.rp_filter=0net.ipv4.conf.all.rp_filter=0net.bridge.bridge-nf-call-iptables=1net.bridge.bridge-nf-call-ip6tables=1
2.加载新内核配置:$ sysctl -p

3.配置常见的选项。编辑/etc/neutron/neutron.配置文件:verbose = True

4.配置Open vSwitch代理。编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件:https://common.cnblogs.com/images/copycode.gif
local_ip = TUNNEL_INTERFACE_IP_ADDRESSbridge_mappings = vlan:br-vlantunnel_types = gre,vxlanl2_population = Falsefirewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriverenable_security_group = Trueenable_ipset = Truehttps://common.cnblogs.com/images/copycode.gif


使用处理GRE / VXLAN项目网络的接口的IP地址替换TUNNEL_INTERFACE_IP_ADDRESS。
7.启动以下服务:    Open vSwitch    Open vSwitch agent

验证服务操作1.提供管理项目凭据。2.验证代理的存在和操作:https://common.cnblogs.com/images/copycode.gif
$ neutron agent-list+--------------------------------------+--------------------+----------+-------+----------------+---------------------------+| id                                 | agent_type         | host   | alive | admin_state_up | binary                  |+--------------------------------------+--------------------+----------+-------+----------------+---------------------------+| 0bfe5b5d-0b82-434e-b8a0-524cc18da3a4 | DHCP agent         | network1 | :-)   | True         | neutron-dhcp-agent      || 25224bd5-0905-4ec9-9f2d-3b17cdaf5650 | Open vSwitch agent | compute2 | :-)   | True         | neutron-openvswitch-agent || 29afe014-273d-42f3-ad71-8a226e40dea6 | L3 agent         | network1 | :-)   | True         | neutron-l3-agent          || 3bed5093-e46c-4b0f-9460-3309c62254a3 | DHCP agent         | network2 | :-)   | True         | neutron-dhcp-agent      || 54aefb1c-35f7-4ebf-a848-3bb4fe81dcf7 | Open vSwitch agent | network1 | :-)   | True         | neutron-openvswitch-agent || 91c9cc03-1678-4d7a-b0a7-fa1ac24e5516 | Open vSwitch agent | compute1 | :-)   | True         | neutron-openvswitch-agent || ac7b3f77-7e4d-47a6-9dbd-3358cfb67b61 | Open vSwitch agent | network2 | :-)   | True         | neutron-openvswitch-agent || ceef5c49-3148-4c39-9e15-4985fc995113 | Metadata agent   | network1 | :-)   | True         | neutron-metadata-agent    || d27ac19b-fb4d-4fec-b81d-e8c65557b6ec | L3 agent         | network2 | :-)   | True         | neutron-l3-agent          || f072a1ec-f842-4223-a6b6-ec725419be85 | Metadata agent   | network2 | :-)   | True         | neutron-metadata-agent    |+--------------------------------------+--------------------+----------+-------+----------------+---------------------------+https://common.cnblogs.com/images/copycode.gif


创建初始网络
这个示例创建了一个flat外部网络和一个VXLAN项目网络。

1.提供管理项目凭据。

2.创建外部网络:
https://common.cnblogs.com/images/copycode.gif
$ neutron net-create ext-net --router:external True \--provider:physical_network external --provider:network_type flatCreated a new network:+---------------------------+--------------------------------------+| Field                     | Value                              |+---------------------------+--------------------------------------+| admin_state_up            | True                                 || id                        | 5266fcbc-d429-4b21-8544-6170d1691826 || name                      | ext-net                              || provider:network_type   | flat                                 || provider:physical_network | external                           || provider:segmentation_id|                                    || router:external         | True                                 || shared                  | False                              || status                  | ACTIVE                               || subnets                   |                                    || tenant_id               | 96393622940e47728b6dcdb2ef405f50   |+---------------------------+--------------------------------------+https://common.cnblogs.com/images/copycode.gif


3.在外部网络上创建子网:
https://common.cnblogs.com/images/copycode.gif
$ neutron subnet-create ext-net 203.0.113.0/24 --name ext-subnet \--allocation-pool start=203.0.113.101,end=203.0.113.200 \--disable-dhcp --gateway 203.0.113.1Created a new subnet:+-------------------+----------------------------------------------------+| Field             | Value                                              |+-------------------+----------------------------------------------------+| allocation_pools| {"start": "203.0.113.101", "end": "203.0.113.200"} || cidr            | 203.0.113.0/24                                     || dns_nameservers   |                                                    || enable_dhcp       | False                                              || gateway_ip      | 203.0.113.1                                        || host_routes       |                                                    || id                | b32e0efc-8cc3-43ff-9899-873b94df0db1               || ip_version      | 4                                                || ipv6_address_mode |                                                    || ipv6_ra_mode      |                                                    || name            | ext-subnet                                       || network_id      | 5266fcbc-d429-4b21-8544-6170d1691826               || tenant_id         | 96393622940e47728b6dcdb2ef405f50                   |+-------------------+----------------------------------------------------+https://common.cnblogs.com/images/copycode.gif


请注意:

示例配置包含vlan作为第一个项目网络类型。只有管理用户才能创建其他类型的网络,比如GRE或VXLAN。下面的命令使用admin项目凭证创建一个VXLAN项目网络。

1.获得常规项目的ID。例如使用demo项目:
https://common.cnblogs.com/images/copycode.gif
$ openstack project show demo+-------------+----------------------------------+|   Field   |            Value               |+-------------+----------------------------------+| description |         Demo Tenant            ||   enabled   |               True               ||      id   | 443cd1596b2e46d49965750771ebbfe1 ||   name    |               demo               |+-------------+----------------------------------+https://common.cnblogs.com/images/copycode.gif


2.创建项目网络:
https://common.cnblogs.com/images/copycode.gif
$ neutron net-create demo-net \--tenant-id 443cd1596b2e46d49965750771ebbfe1 \--provider:network_type vxlanCreated a new network:+---------------------------+--------------------------------------+| Field                     | Value                              |+---------------------------+--------------------------------------+| admin_state_up            | True                                 || id                        | 7ac9a268-1ddd-453f-857b-0fd9552b645f || name                      | demo-net                           || provider:network_type   | vxlan                              || provider:physical_network |                                    || provider:segmentation_id| 1                                    || router:external         | False                              || shared                  | False                              || status                  | ACTIVE                               || subnets                   |                                    || tenant_id               | 443cd1596b2e46d49965750771ebbfe1   |+---------------------------+--------------------------------------+https://common.cnblogs.com/images/copycode.gif



3.提供常规项目凭证。下面的步骤使用demo项目。4.在项目网络上创建子网:
https://common.cnblogs.com/images/copycode.gif
$ neutron subnet-create demo-net 192.168.1.0/24 --name demo-subnet \--gateway 192.168.1.1Created a new subnet:+-------------------+--------------------------------------------------+| Field             | Value                                          |+-------------------+--------------------------------------------------+| allocation_pools| {"start": "192.168.1.2", "end": "192.168.1.254"} || cidr            | 192.168.1.0/24                                 || dns_nameservers   |                                                || enable_dhcp       | True                                             || gateway_ip      | 192.168.1.1                                    || host_routes       |                                                || id                | 2945790c-5999-4693-b8e7-50a9fc7f46f5             || ip_version      | 4                                                || ipv6_address_mode |                                                || ipv6_ra_mode      |                                                || name            | demo-subnet                                    || network_id      | 7ac9a268-1ddd-453f-857b-0fd9552b645f             || tenant_id         | 443cd1596b2e46d49965750771ebbfe1               |+-------------------+--------------------------------------------------+https://common.cnblogs.com/images/copycode.gif


5.创建一个项目路由器:
https://common.cnblogs.com/images/copycode.gif
$ neutron router-create demo-routerCreated a new router:+-----------------------+--------------------------------------+| Field               | Value                              |+-----------------------+--------------------------------------+| admin_state_up      | True                                 || distributed         | False                              || external_gateway_info |                                    || ha                  | True                                 || id                  | 7a46dba8-8846-498c-9e10-588664558473 || name                  | demo-router                        || routes                |                                    || status                | ACTIVE                               || tenant_id             | 443cd1596b2e46d49965750771ebbfe1   |+-----------------------+--------------------------------------+https://common.cnblogs.com/images/copycode.gif


注意:默认policy.json文件只允许管理项目在路由器创建期间启用/禁用HA,并查看路由器的HA标志。
6.在路由器上添加项目子网作为接口:$ neutron router-interface-add demo-router demo-subnetAdded interface 8de3e172-5317-4c87-bdc1-f69e359de92e to router demo-router.

7.在路由器上添加一个通向外部网络的网关:
$ neutron router-gateway-set demo-router ext-netSet gateway for router demo-router

验证网络操作
1.提供管理项目凭据。

2.在控制器节点上,验证HA网络的创建:https://common.cnblogs.com/images/copycode.gif
$ neutron net-list+--------------------------------------+----------------------------------------------------+-------------------------------------------------------+| id                                 | name                                             | subnets                                             |+--------------------------------------+----------------------------------------------------+-------------------------------------------------------+| 5266fcbc-d429-4b21-8544-6170d1691826 | ext-net                                          | b32e0efc-8cc3-43ff-9899-873b94df0db1 203.0.113.0/24   || e029b568-0fd7-4d10-bb16-f9e014811d10 | HA network tenant 443cd1596b2e46d49965750771ebbfe1 | ee30083f-eb4c-41ea-8937-1bae65740af4 169.254.192.0/18 || 7ac9a268-1ddd-453f-857b-0fd9552b645f | demo-net                                           | 2945790c-5999-4693-b8e7-50a9fc7f46f5 192.168.1.0/24   |+--------------------------------------+----------------------------------------------------+-------------------------------------------------------+https://common.cnblogs.com/images/copycode.gif


3.在控制器节点上,在多个网络节点上验证路由器的创建:
https://common.cnblogs.com/images/copycode.gif
$ neutron l3-agent-list-hosting-router demo-router+--------------------------------------+----------+----------------+-------+----------+| id                                 | host   | admin_state_up | alive | ha_state |+--------------------------------------+----------+----------------+-------+----------+| 29afe014-273d-42f3-ad71-8a226e40dea6 | network1 | True         | :-)   | active   || d27ac19b-fb4d-4fec-b81d-e8c65557b6ec | network2 | True         | :-)   | standby|+--------------------------------------+----------+----------------+-------+----------+https://common.cnblogs.com/images/copycode.gif


注意:老版本的python - neutronclient不支持ha_state字段。
4.在控制器节点上,在demo - router路由器上验证HA端口的创建:https://common.cnblogs.com/images/copycode.gif
$ neutron router-port-list demo-router+--------------------------------------+-------------------------------------------------+-------------------+----------------------------------------------------------------------------------------+| id                                 | name                                          | mac_address       | fixed_ips                                                                              |+--------------------------------------+-------------------------------------------------+-------------------+----------------------------------------------------------------------------------------+| 255d2e4b-33ba-4166-a13f-6531122641fe | HA port tenant 443cd1596b2e46d49965750771ebbfe1 | fa:16:3e:25:05:d7 | {"subnet_id": "8e8e4c7d-fa38-417d-a4e3-03ee5ab5493c", "ip_address": "169.254.192.1"}   || 374587d7-2acd-4156-8993-4294f788b55e |                                                 | fa:16:3e:82:a0:59 | {"subnet_id": "b32e0efc-8cc3-43ff-9899-873b94df0db1", "ip_address": "203.0.113.101"}   || 8de3e172-5317-4c87-bdc1-f69e359de92e |                                                 | fa:16:3e:10:9f:f6 | {"subnet_id": "2945790c-5999-4693-b8e7-50a9fc7f46f5", "ip_address": "192.168.1.1"}   || 90d1a59f-b122-459d-a94a-162a104de629 | HA port tenant 443cd1596b2e46d49965750771ebbfe1 | fa:16:3e:ae:3b:22 | {"subnet_id": "8e8e4c7d-fa38-417d-a4e3-03ee5ab5493c", "ip_address": "169.254.192.2"}   |+--------------------------------------+-------------------------------------------------+-------------------+----------------------------------------------------------------------------------------+https://common.cnblogs.com/images/copycode.gif



5.在网络节点上,验证qrouter和qdhcp名称空间的创建:
https://common.cnblogs.com/images/copycode.gif
网络节点1:$ ip netnsqrouter-7a46dba8-8846-498c-9e10-588664558473网络节点2:$ ip netnsqrouter-7a46dba8-8846-498c-9e10-588664558473https://common.cnblogs.com/images/copycode.gif

两个qrouter名称空间都应该使用相同的UUID。
请注意

在启动实例之前,qdhcp名称空间可能不存在。

6.在网络节点上,验证HA操作:网络节点1:https://common.cnblogs.com/images/copycode.gif
网络节点1:$ ip netns exec qrouter-7a46dba8-8846-498c-9e10-588664558473 ip addr show11: ha-255d2e4b-33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default    link/ether fa:16:3e:25:05:d7 brd ff:ff:ff:ff:ff:ff    inet 169.254.192.1/18 brd 169.254.255.255 scope global ha-255d2e4b-33       valid_lft forever preferred_lft forever    inet6 fe80::f816:3eff:fe25:5d7/64 scope link       valid_lft forever preferred_lft forever12: qr-8de3e172-53: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default    link/ether fa:16:3e:10:9f:f6 brd ff:ff:ff:ff:ff:ff    inet 192.168.1.1/24 scope global qr-8de3e172-53       valid_lft forever preferred_lft forever    inet6 fe80::f816:3eff:fe10:9ff6/64 scope link       valid_lft forever preferred_lft forever13: qg-374587d7-2a: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default    link/ether fa:16:3e:82:a0:59 brd ff:ff:ff:ff:ff:ff    inet 203.0.113.101/24 scope global qg-374587d7-2a       valid_lft forever preferred_lft forever    inet6 fe80::f816:3eff:fe82:a059/64 scope link       valid_lft forever preferred_lft foreverhttps://common.cnblogs.com/images/copycode.gif


网络节点2:
https://common.cnblogs.com/images/copycode.gif
$ ip netns exec qrouter-7a46dba8-8846-498c-9e10-588664558473 ip addr show11: ha-90d1a59f-b1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default    link/ether fa:16:3e:ae:3b:22 brd ff:ff:ff:ff:ff:ff    inet 169.254.192.2/18 brd 169.254.255.255 scope global ha-90d1a59f-b1       valid_lft forever preferred_lft forever    inet6 fe80::f816:3eff:feae:3b22/64 scope link       valid_lft forever preferred_lft forever12: qr-8de3e172-53: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default    link/ether fa:16:3e:10:9f:f6 brd ff:ff:ff:ff:ff:ff    inet6 fe80::f816:3eff:fe10:9ff6/64 scope link       valid_lft forever preferred_lft forever13: qg-374587d7-2a: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default    link/ether fa:16:3e:82:a0:59 brd ff:ff:ff:ff:ff:ff    inet6 fe80::f816:3eff:fe82:a059/64 scope link       valid_lft forever preferred_lft foreverhttps://common.cnblogs.com/images/copycode.gif

在每个网络节点上,qrouter命名空间应该包括ha、qr和qg接口。在主节点上,qr接口包含项目网络网关IP地址,qg接口包含外部网络上的项目路由器IP地址。在备份节点上,qr和qg接口不应该包含IP地址。在这两个节点上,ha接口应该在169.254.192.0 / 18范围内包含唯一的IP地址。
7.在网络节点上,在适当的网络接口上从主节点HA接口IP地址验证VRRPadvertisements :
网络节点1:https://common.cnblogs.com/images/copycode.gif
$ tcpdump -lnpi eth116:50:16.857294 IP 169.254.192.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 50, authtype none, intvl 2s, length 2016:50:18.858436 IP 169.254.192.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 50, authtype none, intvl 2s, length 2016:50:20.859677 IP 169.254.192.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 50, authtype none, intvl 2s, length 20https://common.cnblogs.com/images/copycode.gif


网络节点2:https://common.cnblogs.com/images/copycode.gif
$ tcpdump -lnpi eth116:51:44.911640 IP 169.254.192.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 50, authtype none, intvl 2s, length 2016:51:46.912591 IP 169.254.192.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 50, authtype none, intvl 2s, length 2016:51:48.913900 IP 169.254.192.1 > 224.0.0.18: VRRPv2, Advertisement, vrid 1, prio 50, authtype none, intvl 2s, length 20https://common.cnblogs.com/images/copycode.gif


示例输出使用网络接口eth1。

8.在路由器上确定项目网络的外部网络网关IP地址,通常是外部子网IP分配范围内的最低IP地址:https://common.cnblogs.com/images/copycode.gif
$ neutron router-port-list demo-router+--------------------------------------+-------------------------------------------------+-------------------+----------------------------------------------------------------------------------------+| id                                 | name                                          | mac_address       | fixed_ips                                                                              |+--------------------------------------+-------------------------------------------------+-------------------+----------------------------------------------------------------------------------------+| 255d2e4b-33ba-4166-a13f-6531122641fe | HA port tenant 443cd1596b2e46d49965750771ebbfe1 | fa:16:3e:25:05:d7 | {"subnet_id": "8e8e4c7d-fa38-417d-a4e3-03ee5ab5493c", "ip_address": "169.254.192.1"}   || 374587d7-2acd-4156-8993-4294f788b55e |                                                 | fa:16:3e:82:a0:59 | {"subnet_id": "b32e0efc-8cc3-43ff-9899-873b94df0db1", "ip_address": "203.0.113.101"}   || 8de3e172-5317-4c87-bdc1-f69e359de92e |                                                 | fa:16:3e:10:9f:f6 | {"subnet_id": "2945790c-5999-4693-b8e7-50a9fc7f46f5", "ip_address": "192.168.1.1"}   || 90d1a59f-b122-459d-a94a-162a104de629 | HA port tenant 443cd1596b2e46d49965750771ebbfe1 | fa:16:3e:ae:3b:22 | {"subnet_id": "8e8e4c7d-fa38-417d-a4e3-03ee5ab5493c", "ip_address": "169.254.192.2"}   |+--------------------------------------+-------------------------------------------------+-------------------+----------------------------------------------------------------------------------------+https://common.cnblogs.com/images/copycode.gif



9.在控制器节点或任何有访问外部网络的主机上,在项目路由器上ping外部网络网关IP地址:https://common.cnblogs.com/images/copycode.gif
$ ping -c 4 203.0.113.101PING 203.0.113.101 (203.0.113.101) 56(84) bytes of data.64 bytes from 203.0.113.101: icmp_req=1 ttl=64 time=0.619 ms64 bytes from 203.0.113.101: icmp_req=2 ttl=64 time=0.189 ms64 bytes from 203.0.113.101: icmp_req=3 ttl=64 time=0.165 ms64 bytes from 203.0.113.101: icmp_req=4 ttl=64 time=0.216 ms--- 203.0.113.101 ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 2999msrtt min/avg/max/mdev = 0.165/0.297/0.619/0.187 mshttps://common.cnblogs.com/images/copycode.gif



10.提供常规项目凭证。下面的步骤使用演示项目。

11.创建适当的安全组规则,允许ping和SSH访问实例。例如:https://common.cnblogs.com/images/copycode.gif
$ nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0+-------------+-----------+---------+-----------+--------------+| IP Protocol | From Port | To Port | IP Range| Source Group |+-------------+-----------+---------+-----------+--------------+| icmp      | -1      | -1      | 0.0.0.0/0 |            |+-------------+-----------+---------+-----------+--------------+$ nova secgroup-add-rule default tcp 22 22 0.0.0.0/0+-------------+-----------+---------+-----------+--------------+| IP Protocol | From Port | To Port | IP Range| Source Group |+-------------+-----------+---------+-----------+--------------+| tcp         | 22      | 22      | 0.0.0.0/0 |            |+-------------+-----------+---------+-----------+--------------+https://common.cnblogs.com/images/copycode.gif


12.在项目网络上启动一个具有接口的实例。例如,使用现有的CirrOS镜像:
https://common.cnblogs.com/images/copycode.gif
$ nova boot --flavor m1.tiny --image cirros \--nic net-id=7ac9a268-1ddd-453f-857b-0fd9552b645f demo-instance1+--------------------------------------+-----------------------------------------------+| Property                           | Value                                       |+--------------------------------------+-----------------------------------------------+| OS-DCF:diskConfig                  | MANUAL                                        || OS-EXT-AZ:availability_zone          | nova                                          || OS-EXT-STS:power_state               | 0                                             || OS-EXT-STS:task_state                | scheduling                                    || OS-EXT-STS:vm_state                  | building                                    || OS-SRV-USG:launched_at               | -                                             || OS-SRV-USG:terminated_at             | -                                             || accessIPv4                           |                                             || accessIPv6                           |                                             || adminPass                            | Z3uAd2utPUNu                                  || config_drive                         |                                             || created                              | 2015-08-10T15:06:24Z                        || flavor                               | m1.tiny (1)                                 || hostId                               |                                             || id                                 | 77149598-c839-400f-b948-db6993f0b40b          || image                              | cirros (125733d9-8d37-4d70-9a64-1c989cfa8e9c) || key_name                           |                                             || metadata                           | {}                                          || name                                 | demo-instance1                              || os-extended-volumes:volumes_attached | []                                          || progress                           | 0                                             || security_groups                      | default                                       || status                               | BUILD                                       || tenant_id                            | 443cd1596b2e46d49965750771ebbfe1            || updated                              | 2015-08-10T15:06:25Z                        || user_id                              | bdd4e165bdf94b258ddd4856340ed01c            |+--------------------------------------+-----------------------------------------------+https://common.cnblogs.com/images/copycode.gif


13.获得对实例的控制台访问。https://common.cnblogs.com/images/copycode.gif

1.测试连接到项目路由器:$ ping -c 4 192.168.1.1PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=0.357 ms64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=0.473 ms64 bytes from 192.168.1.1: icmp_req=3 ttl=64 time=0.504 ms64 bytes from 192.168.1.1: icmp_req=4 ttl=64 time=0.470 ms--- 192.168.1.1 ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 2998msrtt min/avg/max/mdev = 0.357/0.451/0.504/0.055 ms2.测试连接到互联网:$ ping -c 4 openstack.orgPING openstack.org (174.143.194.225) 56(84) bytes of data.64 bytes from 174.143.194.225: icmp_req=1 ttl=53 time=17.4 ms64 bytes from 174.143.194.225: icmp_req=2 ttl=53 time=17.5 ms64 bytes from 174.143.194.225: icmp_req=3 ttl=53 time=17.7 ms64 bytes from 174.143.194.225: icmp_req=4 ttl=53 time=17.5 ms--- openstack.org ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 3003msrtt min/avg/max/mdev = 17.431/17.575/17.734/0.143 ms
https://common.cnblogs.com/images/copycode.gif


14.在外部网络上创建浮动IP地址:https://common.cnblogs.com/images/copycode.gif
$ neutron floatingip-create ext-netCreated a new floatingip:+---------------------+--------------------------------------+| Field               | Value                              |+---------------------+--------------------------------------+| fixed_ip_address    |                                    || floating_ip_address | 203.0.113.102                        || floating_network_id | 5266fcbc-d429-4b21-8544-6170d1691826 || id                  | 20a6b5dd-1c5c-460e-8a81-8b5cf1739307 || port_id             |                                    || router_id         |                                    || status            | DOWN                                 || tenant_id         | 443cd1596b2e46d49965750771ebbfe1   |+---------------------+--------------------------------------+https://common.cnblogs.com/images/copycode.gif


15.将浮动IP地址与实例关联:$ nova floating-ip-associate demo-instance1 203.0.113.102

16.验证添加到实例的浮动IP地址:https://common.cnblogs.com/images/copycode.gif
$ nova list+--------------------------------------+----------------+--------+------------+-------------+-----------------------------------------+| ID                                 | Name         | Status | Task State | Power State | Networks                              |+--------------------------------------+----------------+--------+------------+-------------+-----------------------------------------+| 77149598-c839-400f-b948-db6993f0b40b | demo-instance1 | ACTIVE | -          | Running   | demo-net=192.168.1.3, 203.0.113.102   |+--------------------------------------+----------------+--------+------------+-------------+-----------------------------------------+https://common.cnblogs.com/images/copycode.gif


17.在控制器节点或任何访问外部网络的主机上,ping与实例关联的浮动IP地址:
https://common.cnblogs.com/images/copycode.gif
$ ping -c 4 203.0.113.102PING 203.0.113.102 (203.0.113.112) 56(84) bytes of data.64 bytes from 203.0.113.102: icmp_req=1 ttl=63 time=3.18 ms64 bytes from 203.0.113.102: icmp_req=2 ttl=63 time=0.981 ms64 bytes from 203.0.113.102: icmp_req=3 ttl=63 time=1.06 ms64 bytes from 203.0.113.102: icmp_req=4 ttl=63 time=0.929 ms--- 203.0.113.102 ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 3002msrtt min/avg/max/mdev = 0.929/1.539/3.183/0.951 ms

admin 发表于 2021-12-7 15:10:05

安全组允许VRRP协议
直接在控制台导航:项目-访问&安全,搜索虚机所在的安全组, 然后点击后面的管理规则按钮进入规则列表;点击添加规则按钮,弹出框里,在规则的下拉选里选择 其他协议, 然后再 端口 文本框输入 112, 最后点击添加按钮即可 # VRRP协议的端口号是112
页: [1]
查看完整版本: 使用VRRP(L3HA)和Open vSwitch提供高可用性