此檔案記錄Centos實際生產環境遇到的一些疑難雜點且比較實用的設定,以此紀錄形成知識歸檔。
因客戶業務系統從vmware遷移至openstack,原來網路卡名是ens開頭,遷移到opensatck是eth開頭,
現在客戶要求保留原有的網路卡名,通過修改udev組態檔實現。
$ vim /etc/udev/rules.d/70-persistent-ipoib.rules
ACTION=="add", SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="58:c7:ac:c7:45:76", NAME="ens32"
$ reboot
# ATTR{address}=="現有網路卡的mac地址"
# NAME="改成的網路卡名"
執行在openstack的虛擬機器器有多網路卡的承載不同的物理平面的網路,比如業務網、管理網、儲存網等。但是預設路由只有一條,所以只能通過靜態路由來指定路由。
default via 10.0.54.1 dev eth1
$ cat << EOF > /etc/sysconfig/network-scripts/route-eth0
10.0.44.0/24 via 10.0.43.1 dev eth0
EOF
$ systemctl restart network
# 存取的目標網路 via 管理網閘道器 dev 管理網的interface
# 動態生效靜態路由(不用重啟network)
$ route add -net 10.0.44.0/24 gw 10.0.43.1
$ ip route add 10.0.44.0/24 via 10.0.43.1 dev eth0
# 獲取IP地址走的是哪條路由
$ ip route get 10.0.26.211
local 10.0.26.211 dev lo src 10.0.26.211
cache <local>
# 動態生效預設路由
$ route add default gw gateway_ip
在生產環境,有可能伺服器只有一個業務口可用,而上聯交換機埠做了trunk口模式,可以採用此方法進行設定通訊。
# eth2修改為自己的網路卡名
$ cat > /etc/sysconfig/network-scripts/ifcfg-eth2 << EOF
# Created by cloud-init on instance boot automatically, do not edit.
BOOTPROTO=none
DEVICE=eth2
NAME=eth2
ONBOOT=yes
TYPE=Ethernet
EOF
# eth2.760修改為自己的網路卡名和vlan
$ cat > /etc/sysconfig/network-scripts/ifcfg-eth2.760 << EOF
BOOTPROTO=none
NAME=eth2.760
DEVICE=eth2.760
ONBOOT=yes
IPADDR=192.168.10.20
PREFIX=24
NETWORK=192.168.10.1
VLAN=yes
EOF
在生產環境業務網路通常跑的業務流量比較大,萬兆口通常不夠用且不可靠,所以要做聚合,本文以bond4鏈路聚合為例(比較常用)。
伺服器設定bond4,上聯交換機埠要做動態鏈路聚合
# ens2f0介面,作為bond4的其中一個介面
# MASTER=bond名字
$ cat << EOF > /etc/sysconfig/network-scripts/ifcfg-ens2f0
TYPE=Ethernet
PROXY_METHOD=none
BOOTPROTO=none
NAME=ens2f0
DEVICE=ens2f0
ONBOOT=yes
MASTER=bondmg
SLAVE=yes
EOF
# ens1f0介面,作為bond4的其中一個介面
# MASTER=bond名字
$ cat << EOF > /etc/sysconfig/network-scripts/ifcfg-ens1f0
TYPE=Ethernet
PROXY_METHOD=none
BOOTPROTO=none
NAME=ens1f0
DEVICE=ens1f0
ONBOOT=yes
MASTER=bondmg
SLAVE=yes
EOF
# 設定bond4
# ifcfg-bond名字
$ cat << EOF > /etc/sysconfig/network-scripts/ifcfg-bondmg
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
BOOTPROTO=static # 如果使用子介面,則把這行注視掉
IPADDR=192.168.1.7 # 如果使用bond子介面,則把這行注視掉
NETMASK=255.255.255.0 # 如果使用bond子介面,則把這行注視掉
DEFROUTE=yes # 如果使用bond子介面,則把這行注視掉
IPV4_FAILURE_FATAL=no
NAME=bondmg
DEVICE=bondmg
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS='mode=4 miimon=100 lacp_rate=1 xmit_hash_policy=1'
EOF
# 如果走bond子介面,則設定,否則跳過。
# ifcfg-bond名字.vlan_id
cat << EOF > /etc/sysconfig/network-scripts/ifcfg-bondmg.102
TYPE=Ethernet
PROXY_METHOD=none
DEFROUTE=yes
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.1.7
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
IPV4_FAILURE_FATAL=no
NAME=bondmg.102
DEVICE=bondmg.102
ONBOOT=yes
VLAN=yes
EOF
在雲生產環境,虛擬機器器通常遇到網路不通,可通過tcpdump or ovs-tcpdump工具進行抓包判斷那個路徑丟包。
在ovs環境下,抓取ovs的bridge or port 可採用ovs-tcpdump
# 抓取bonddata的包
$ tcpdump -i bonddata [arp or icmp] host [vm_ip or vm_gateway] -nne
# 抓取ovs br-int的包
$ ovs-tcpdum -i br-int [arp or icmp] host [vm_ip or vm_gateway] -nne
# 抓取bonddata的[in or out]的包
$ tcpdump -i bonddata [arp or icmp] host [vm_ip or vm_gateway] -Q [in or out] -nne
# 抓取bonddata 的vxlan包
$ tcpdump -i bonddata dst 172.18.70.72(目的pod物理業務網路卡IP) and udp
在雲生產環境,虛擬機器器通常採用dhcp的方式獲取到IP,但是會出現一個問題,有時候會出現虛擬機器器的IP沒了。是因為IPv4的dhclient程序設定為「非持久化」,當dhclient向DHCP伺服器傳送一次請求報文而無響應,則會間隔一段時間後退出,退出值為2。要設定dhclient為持久化才得以解決該問題PERSISTENT_DHCLIENT=1
,這樣dhclient會向DHCP伺服器反覆傳送請求報文。
$ vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
USERCTL=yes
TYPE=Ethernet
DEFROUTE=no # 設定是否為預設路由
HWADDR=fa:16:3e:3f:7a:d5
PERSISTENT_DHCLIENT=1 # dhclient程序設定為「持久化」
執行在openstack的虛擬機器器有多網路卡的承載不同的物理平面的網路,比如業務網、管理網、儲存網等。但是預設路由只有一條,所以只能通過靜態路由來指定路由。
# 動態生效靜態路由(不用重啟network)
$ route add -net 10.63.0.0/16 gw 10.64.29.1
$ ip route add 10.63.0.0/16 via 10.64.29.1 dev ens9
# 持久化靜態路由設定
$ vim /etc/network/interfaces
auto ens9
iface ens9 inet static
address 10.64.29.44
netmask 255.255.255.0
up route add -net 10.63.0.0 netmask 255.255.0.0 gw 10.64.29.1 ens9
檢查IP走的路由。
# 獲取10.63.0.5從哪條路由出去
$ ip route get 10.63.0.5
10.63.0.5 dev ens9 src 10.64.29.1
cache
# 刪除路由
$ ip route del 10.63.0.0/16