原文
一致性網路裝置命名,即consistent network device naming
一、為什麼需要這個
伺服器通常有多塊網絡卡,有板載整合的,同時也有插在pcie插槽的。
linux系統的命名原來是eth0,eth1這樣的形式,但是這個編號往往不一定準確對應網絡卡介面的物理順序。
為解決這類問題,dell開發了biosdevname方案。
systemd v197版本中將dell的方案作了進一步的一般化拓展。
目前的centos既支援dell的biosdevname,也支援systemd的方案。
二、centos7中的命名策略
scheme 1: 如果從bios中能夠取到可用的,板載網絡卡的索引號,則使用這個索引號命名,例如: eno1,如不能則嘗試scheme 2
scheme 2: 如果從bios中能夠取到可以用的,網絡卡所在的pci-e熱插拔插槽的索引號,則使用這個索引號命名,例如: ens1,如不能則嘗試scheme 3
scheme 3:如果能拿到裝置所連線的物理位置資訊,則使用這個資訊命名,例如:enp2s0,如不能則嘗試scheme 5
scheme 5:傳統的kernel命名方法,例如: eth0,這種命名方法的結果不可預知的,即可能第二塊網絡卡對應eth0,第一塊網絡卡對應eth1。
scheme 4 使用網絡卡的mac位址來命名,這個方法一般不使用。
三、biosdevname和net.ifnames兩種命名規範
net.ifnames的命名規範為: 裝置型別+裝置位置+數字
裝置型別:
en 表示ethernet
wl 表示wlan
ww 表示無線廣域網wwan
裝置位置:
實際的例子:
eno1 板載網絡卡
enp0s2 pci網絡卡
ens33 pci網絡卡
wlp3s0 pci無線網絡卡
wwp0s29f7u2i2 4g modem
wlp0s2f1u4u1 連線在usb hub上的無線網絡卡
enx78e7d1ea46da pci網絡卡
----------------------------------------
biosdevname的命名規範為
實際的例子:
em1 板載網絡卡
p3p4 pci網絡卡
p3p4_1 虛擬網絡卡
四、systemd中的實際執行順序
按照如下順序執行udev的rule
1./usr/lib/udev/rules.d/60-net.rules
2./usr/lib/udev/rules.d/71-biosdevname.rules
3./lib/udev/rules.d/75-net-description.rules
4./usr/lib/udev/rules.d/80-net-name-slot.rules
60-net.rules
使用/lib/udev/rename_device這個程式,去查詢/etc/sysconfig/network-scripts/下所有以ifcfg-開頭的檔案
如果在ifcfg-xx中匹配到hwaddr=xx:xx:xx:xx:xx:xx引數的網絡卡介面
則選取device=yyyy中設定的名字作為網絡卡名稱。
71-biosdevname.rules
如果系統中安裝了biosdevname,且核心引數未指定biosdevname=0,且上一步沒有重新命名網絡卡,則按照biosdevname的命名規範,從bios中取相關資訊來命名網絡卡。
主要是取smbios中的type 9 (system slot) 和 type 41 (onboard devices extended information)
不過要求smbios的版本要高於2.6,且系統中要安裝biosdevname程式。
75-net-description.rules
udev通過檢查網絡卡資訊,填寫如下這些udev的屬性值
id_net_name_onboard
id_net_name_slot
id_net_name_path
id_net_name_mac
80-net-name-slot.rules
如果在60-net.rules ,71-biosdevname.rules這兩條規則中沒有重新命名網絡卡,且核心未指定net.ifnames=0引數
則udev依次嘗試使用以下屬性值來命名網絡卡,如果這些屬性值都沒有,則網絡卡不會被重新命名。
id_net_name_onboard
id_net_name_slot
id_net_name_path
上邊的71-biosdevname.rules 是實際執行biosdevname
的policy
75-net-description.rules和
80-net-name-slot.rules實際執行
scheme 1,2,3
根據上述的過程,可見網絡卡命名受 biosdevname和net.ifnames這兩個核心引數影響。
這兩個引數都可以在grub配置中提供。
biosdevname=0是系統預設值(dell伺服器預設是1),
net.ifnames=1是系統預設值:
#vi /boot/grub/grub.conf
kernel /boot/vmlinuz biosdevname=1
initrd /boot/initrd.img
第二節所說的scheme的策略順序是系統預設的。
如系統bios符合要求,且系統中安裝了biosdevname,且biosdevname=1啟用,則biosdevname優先;
如果bios不符合biosdevname要求或biosdevname=0,則仍然是systemd的規則優先。
如果使用者自己定義了udev rule來修改核心裝置名字,則使用者規則優先。
核心引數組合使用的時候,其結果如下:
預設核心引數(biosdevname=0,net.ifnames=1): 網絡卡名 "enp5s2"
biosdevname=1,net.ifnames=0:網絡卡名 "em1"
biosdevname=0,net.ifnames=0:網絡卡名 "eth0" (最傳統的方式,eth0 eth1 傻傻分不清)
參考文件:
保證一致性嗎 Kafka的一致性保證
魚和熊掌不可兼得。系統設計需要根據具體的應用場景做出權衡。系統設計者可以通過配置kafka,來得到不同程度的需求滿足。每個kafka主題 topic 都分為多個分割槽 partitions 每個分割槽可以具有多個副本 replica 其中乙個副本是主分割槽 leader 所有讀寫請求都由主分割槽提供...
同步非同步中的一致性
共識問題 可稱作協作,所有正確的程序對提議的值達成一致。分布式系統中,節點之間通過通訊,對請求達成一致的定序。問題定義 程序pi處於未決狀態 undecideed 提議集合d中的某個值vi。程序之間相互通訊,交換各自的提議。每個程序設定自己的決定變數 decision variable 進入決定狀態...
HBase的一致性
hbase是乙個強一致性資料庫,不是 最終一致性 資料庫,官網給出的介紹 strongly consistent reads writes hbase is not an eventually consistent datastore.this makes it very suitable for ...