CentOS 7過保了,換什么OS發(fā)行版更好?
太長不看
EL 的兼容發(fā)行版中,RockyLinux 的兼容性最好,建議使用 8.9 或 9.3。如果有“國產(chǎn)化”要求,Anolis 8 (RHCK 內(nèi)核)也有極好的兼容性。AlmaLinux,OracleLinux,CentOS Stream 有些兼容性上的小問題,謹(jǐn)慎按需使用。Euler 屬于獨(dú)一檔的拉垮 —— 誰要是用這個(gè),祝他好運(yùn)。
Debian 系發(fā)行版穩(wěn)定性也非常不錯(cuò),鑒于 Debian 11 下個(gè)月就 EOL 了,當(dāng)下最合適的選擇是 Debian 12 bookworm。Ubuntu 的話桌面不錯(cuò),但作為服務(wù)端操作系統(tǒng)還是拉垮了,如果不是有特殊需求(比如 NVIDIA 驅(qū)動(dòng)),還是用 Debian 更合適。如果用 Ubuntu,當(dāng)下最合適的版本仍然是 22.04 jammy。
測試場景
Pigsty,作為一個(gè)不使用容器/編排方案,直接基于裸操作系統(tǒng)發(fā)行版的 PostgreSQL 數(shù)據(jù)庫發(fā)行版,幾乎跟所有的主流 Linux OS 發(fā)行版都需要打交道。
Pigsty 作為這些操作系統(tǒng)發(fā)行版的直接用戶,場景非常具有代表性 —— 在裸操作系統(tǒng)上運(yùn)行世界上最先進(jìn)且最流行的開源關(guān)系型數(shù)據(jù)庫 PostgreSQL,以及企業(yè)級(jí)數(shù)據(jù)庫服務(wù)所需要的完整軟件組件 —— 包括:
PostgreSQL 生命周期中的6個(gè)大版本(12 - 17), 255個(gè)擴(kuò)展插件;還有幾十個(gè)常用的主機(jī)節(jié)點(diǎn)軟件包,Prometheus / Grafana 可觀測性全家桶,以及 ETCD / MinIO / Redis 等輔助組件。
圖片
我們的標(biāo)準(zhǔn)也很簡單 —— 這些發(fā)行版官方倉庫以及 PGDG、Pigsty 提供的 APT / RPM 軟件包能否在沒有任何依賴沖突的情況下成功安裝。
圖片
我們測試了 EL / Deb 系的主要操作系統(tǒng)發(fā)行版,最后保留了 7 個(gè)主要的發(fā)行版大版本:EL 7,8,9 ; Debian 11/12 ; 以及 Ubuntu 20.04 與 22.04 的支持。在這個(gè)過程中,也對各個(gè)操作系統(tǒng)發(fā)行版的體驗(yàn)有了一個(gè)直觀認(rèn)識(shí)。
任何上游 OS 軟件包的變化,也會(huì)第一時(shí)間在我們的發(fā)行版構(gòu)建過程中體現(xiàn)出來。每當(dāng)有執(zhí)行在線安裝的用戶反饋 RPM / APT 裝不上,或者原本跑的好好的工作流出現(xiàn)依賴錯(cuò)漏,我們就知道上游操作系統(tǒng)發(fā)行版又翻車了。
CentOS 7.9
當(dāng)然,不同系統(tǒng),翻車的頻率是不一樣的。我不得不承認(rèn),很多用戶停留在 CentOS 7.9 是有原因的 —— 就跟很多 MySQL 用戶仍然在使用 5.7 一樣。在我們這幾年的構(gòu)建過程中,CentOS 7.9 確實(shí)是最穩(wěn)定的操作系統(tǒng) —— 一次 Break 的記錄都沒有。
當(dāng)然這一點(diǎn)也很好理解,EL7 作為一個(gè)已經(jīng)不再更新的版本,當(dāng)然很難再出現(xiàn)什么幺蛾子。同時(shí),它對于大多數(shù)用例場景已經(jīng)足夠好了 —— 至少能跑起來 Docker 。
CentOS 7.9 有一些特定的優(yōu)點(diǎn),例如在我們的場景中,離線軟件包大小是最小的(比其他系統(tǒng)少了 20 % ~ 30% ),安裝速度是最快的,穩(wěn)定性也是最高的 —— 我從來不擔(dān)心在 7.9 上翻車。
但是,CentOS 7.9 確實(shí)太老了,在一些新功能、新軟件、新版本的支持上已經(jīng)跟不上腳步了。例如,PostgreSQL 16 已經(jīng)不在再提供對 CentOS 7.9 的支持了,使用 Rust 編寫的 PG 插件也沒法在 EL7 上編譯運(yùn)行。
圖片
綜上所述,對于那些也不需要什么新功能,也懶得升級(jí)打補(bǔ)丁,在隔離內(nèi)網(wǎng)安靜地跑到地老天荒的系統(tǒng),EL 7 也許還是一個(gè)不錯(cuò)的選擇。但因?yàn)楣δ軐?shí)在太老了,在下一個(gè)版本的 Pigsty 中,我們也會(huì)正式在開源版中放棄對 EL7 的支持。
EL 8 & EL9
EL8 和 EL9 是目前 EL 系的主力版本,目前小版本號(hào)已經(jīng)到了 8.9 與 9.3 ( 8.10 與 9.4 剛出)。對于我們的場景來說,EL8 的 PostgreSQL 軟件包支持要比 EL9 更齊全豐富一些,所以我們默認(rèn)推薦使用的版本是 EL8 (RockyLinu 8.9)。
從軟件穩(wěn)定性上看,EL8 和 EL9 都 偶爾 會(huì)出現(xiàn)依賴崩裂的情況。(頻率大概一兩個(gè)月一次),PGDG YUM 倉庫的維護(hù)者 Devrim 跟我吐槽說,每兩周上游系統(tǒng)軟件一更新,他那兒就有一堆活要整。當(dāng)然,Devrim 老爺子要是來不及調(diào)整梳理依賴變動(dòng),我這里就會(huì)感知到 Break,最常見的就是 LLVM 包版本沖突問題。
當(dāng)然這些問題一直都是存在的,Pigsty 采用的辦法就是每次發(fā)行新版本的時(shí)候,把所有要用的 RPM/APT 及其依賴都下載下來,打一個(gè)離線軟件包。這樣用戶在安裝的時(shí)候,就不需要使用互聯(lián)網(wǎng)訪問,也不會(huì)遇到某個(gè)包一升級(jí)把整個(gè)環(huán)境給帶崩的問題。
盡管 EL 8,EL9 在穩(wěn)定性上不如 CentOS 7.9。但反過來說,在功能活性上就要比 EL 7 好太多了:有持續(xù)更新的安全補(bǔ)丁,編譯器版本更高了,軟件包也更齊全,也支持 ebpf 一類的新特性。作為利弊權(quán)衡,確實(shí)是當(dāng)下 EL 系統(tǒng)的更優(yōu)選。
Debian & Ubuntu
另一個(gè)與 CentOS 7 幾乎同樣穩(wěn)定的操作系統(tǒng)是 Debian 12,同樣沒有出現(xiàn)什么編譯錯(cuò)誤。這一點(diǎn)其實(shí)讓我非常驚訝 —— 很多運(yùn)維老師傅都說 Debian 很穩(wěn),但只有自己用過才對這一點(diǎn)有深刻體驗(yàn)。作為一個(gè)與 PostgreSQL 調(diào)性極為相合,同樣由純粹開源社區(qū)驅(qū)動(dòng)的操作系統(tǒng)發(fā)行版來說,這一點(diǎn)實(shí)為不易。
作為 Debian 的衍生發(fā)行版,Ubuntu 以 Linux 中極為出色的桌面體驗(yàn)與支持而著稱。但服務(wù)器操作系統(tǒng)不 Care 這個(gè) —— 然而 Ubuntu 服務(wù)器系統(tǒng)的使用體驗(yàn)確實(shí)比 Debian / EL 落后一個(gè)檔次。出現(xiàn)依賴崩壞的次數(shù)最為頻繁,瞎JB改的地方也最多。但 Ubuntu 也有著自身的優(yōu)點(diǎn),那就是 NVIDIA 驅(qū)動(dòng)支持。如果你要運(yùn)行 PostgresML 這樣的機(jī)器學(xué)習(xí)擴(kuò)展,那么確實(shí)沒有其他好辦法 —— 你只能選擇 Ubuntu。
圖片
Ubuntu 20.04 和 Debian 11 因?yàn)榘姹靖希猿霈F(xiàn)錯(cuò)誤的頻率會(huì)更高一些。特別是考慮到下個(gè)月 Debian 11 就 EOL 了,明年四月 20.04 也 EOL 了,如果沒有其他的理由,我認(rèn)為在當(dāng)下,用這兩個(gè)系統(tǒng)就是給自己找不自在。
從另一個(gè)方向上,Ubuntu 24.04 noble 雖然出來了,但它太新了,以至于 PostgreSQL 相關(guān)的軟件包都還不齊全,所以目前還不適合生產(chǎn)環(huán)境。
EL兼容版本哪家強(qiáng)
當(dāng)然,EL (Enterprise Linux)是一個(gè)操作系統(tǒng)發(fā)行版家族,有許多的“兼容發(fā)行版”。我們使用的是 RockyLinux 8.9 和 RockyLinux 9.3 ,這是有原因的。
RockyLinux 的創(chuàng)始人就是原來 CentOS 的創(chuàng)始人,CentOS 被紅帽收購后又另起爐灶搞的新 Fork。目前基本已經(jīng)占據(jù)了原本 CentOS 的生態(tài)位 —— 免費(fèi)的企業(yè)級(jí) Linux 發(fā)行版。
最重要的是,PostgreSQL 官方源明確聲明支持的 EL 系 OS 除了 RHEL 之外就是 RockyLinux 。PGDG 構(gòu)建環(huán)境就是 Rocky 8.9 與 9.3(6/7用的是 CentOS)。說白了,在 PG 這個(gè)用例里面,EL 系里兼容性最好的肯定是 Rocky,甚至RedHat 的 EL 都不一定有 Rocky 好。
AlmaLinux / Oracle Linux / CentOS Stream 的兼容性相比 Rocky 要拉跨一些,不是所有的 EL RPM 包都能直接安裝成功:經(jīng)常性出現(xiàn)依賴錯(cuò)漏問題。大部分包可以從它們自己的源里面找到補(bǔ)上 —— 有些兼容性問題,但基本上屬于可以解決的小麻煩。
AlmaLinux 的兼容性問題相對小一點(diǎn),可以作為 RockyLinux 的下位替代。其他這幾個(gè) OS 發(fā)行版整體體驗(yàn)很一般,考慮到 Rocky 已經(jīng)足夠好了,如果沒有特殊理由,我覺得沒有必要折騰自己。
國產(chǎn)操作系統(tǒng)
也有一些 EL 兼容的 “國產(chǎn)化” 操作系統(tǒng) —— 比如 龍蜥 / OpenAnolis 是阿里云牽頭的國產(chǎn)化操作系統(tǒng),就號(hào)稱 100% 兼容EL。本來我并沒抱太大期望:只是有用戶想用,我就支持一下,但實(shí)際效果超出了預(yù)期:EL8 的所有 RPM 包都一遍過,適配除了處理下 /etc/os-release 之外沒有任何額外工作。
適配了 Anolis 一個(gè),就等于適配了十幾種 “國產(chǎn)操作系統(tǒng)系統(tǒng)”發(fā)行版:阿里云、統(tǒng)信軟件、中國移動(dòng)、麒麟軟件、中標(biāo)軟件、凝思軟件、浪潮信息、中科方德、新支點(diǎn)、軟通動(dòng)力、博彥科技,可以說是很劃算了。
騰訊的 openCloudOS 兼容性也還可以,有個(gè)小問題是內(nèi)核模塊里沒有 softdog ,其他倒是問題不大,但總歸是比 Anolis 差一點(diǎn)。如果您有“國產(chǎn)化”操作系統(tǒng)方面的需求,選擇 OpenAnolis 或衍生的商業(yè)發(fā)行版,是一個(gè)不錯(cuò)的選擇。
OpenEuler 屬于最 拉 的獨(dú)一檔,歐拉要是泉下有知估計(jì)能給氣活過來。號(hào)稱 EL兼容,但用起來完全不是這么回事。例如:在 PostgreSQL 內(nèi)核與核心擴(kuò)展中, postgresql* ,patroni ,postgis,pgbadger,pgbouncer 全部都需要重新編譯。而且因?yàn)槭褂昧瞬煌姹镜?LLVM,所有插件的 LLVMJIT 也都必須重新編譯才能使用,費(fèi)了非常多的功夫才完成支持,還不得不閹割掉一些功能,總的來說使用體驗(yàn)非常糟糕。(當(dāng)然這種糟心的“國產(chǎn)”兼容性支持是永遠(yuǎn)不可能開源的,必須定一個(gè)天價(jià)賣給那些 選擇吃翔 的客戶,才能彌補(bǔ)一些精神損失)
其他的一些 “國產(chǎn)操作系統(tǒng)” ,有的是純換皮或者做個(gè)桌面,這種還能湊合用用,有些喜歡亂魔改的,這種我的建議是碰都不要碰。