運維-技能大雜燴

2022-07-15 18:04:29

描述

  此檔案記錄Centos實際生產環境遇到的一些疑難雜點且比較實用的設定,以此紀錄形成知識歸檔。

技能1: centos7修改網路卡名

  因客戶業務系統從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="改成的網路卡名"
技能2: centos7 設定靜態路由

  執行在openstack的虛擬機器器有多網路卡的承載不同的物理平面的網路,比如業務網、管理網、儲存網等。但是預設路由只有一條,所以只能通過靜態路由來指定路由。

  • for example:
    • 虛擬機器器eth0是管理網:10.0.43.0/24
    • 虛擬機器器eth1是業務網:10.0.54.0/24
    • 虛擬機器器預設路由是業務網default via 10.0.54.1 dev eth1
    • 現在虛擬機器器的管理網,想要跟10.0.44.0/24管理網通,就要設定靜態路由打通,不然會走業務網出去導致網路不通。
$ 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 
技能3: centos7單網路卡設定子介面

  在生產環境,有可能伺服器只有一個業務口可用,而上聯交換機埠做了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
技能4: centos7雙網路卡設定bond4

  在生產環境業務網路通常跑的業務流量比較大,萬兆口通常不夠用且不可靠,所以要做聚合,本文以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
技能5: centos進行抓包

  在雲生產環境,虛擬機器器通常遇到網路不通,可通過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
技能6: centos IPv4的dhclient守護行程持久化設定

  在雲生產環境,虛擬機器器通常採用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程序設定為「持久化」

技能7: unbuntu 靜態路由設定

  執行在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

技能6: 如何檢視某個IP走的是哪條路?

  檢查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