背景
=================
最近在做的事,簡單來講,就是一套系統差不多有10多臺虛擬機,都是centos系統,版本主要是7.3、7.6、7.9,現在centos停止維護了,轉為了centos stream,而centos stream的定位是:Red Hat Enterprise Linux (RHEL) 開發之前持續交付的發行版,作為rhel的上游,更新迭代比較頻繁,不穩定,對于生產系統來說是無法接受的。
那就只能轉其他系統,具體轉哪種呢,選擇是很多的,簡單列幾個我了解到的,和centos兼容性比較好,操作習慣也基本相同的操作系統,以下部分內容來自于大模型。
國際上來說的話,免費的主要有rocky linux、alma linux,這兩個我看網頁提到的比較多;有錢的話,可以直接買RHEL。
- Rocky Linux
? 完全兼容RHEL: 由原 CentOS 創始人發起,與Red Hat Enterprise Linux(RHEL)實現100%二進制兼容,無縫遷移原有CentOS應用環境134。
? 長期支持:提供長達10年的更新周期(如Rocky Linux 9支持至2032年),社區驅動確保維護透明性259。
- AlmaLinux
? RHEL克隆版:與RHEL完全兼容,由CloudLinux公司贊助,承諾長期維護(如AlmaLinux 9支持至2029年)128。
其他我看到的提到的,還有oracle linux(https://www.oracle.com/linux/)、VzLinux、Springdale Linux。
國內來說,免費的話,就是兩個:
- Anolis OS(龍蜥操作系統)
? 背后是阿里,完全兼容CentOS生態:提供CentOS 7/8到Anolis OS的一鍵遷移工具,支持國產CPU架構(如鯤鵬、飛騰)。
-
openEuler (歐拉)
背后是華為,高性能與多架構支持:優化內核調度,適配x86、ARM架構,適用于服務器、云計算、邊緣計算。
付費的話,操作系統我比較知道的是麒麟和統信,我們最近兩年上的項目,基本要求從硬件到軟件,都要信創,像服務端操作系統就是用的麒麟V10。
而統信,我了解不多,聽說是一些桌面版操作系統在用,體驗貌似一般。
我之前,有點奇怪,為什么運維同事最終會選擇openEuler,技術上來說,感覺應該都還好,反正都是linux內核,從企業角度來說,為什么不選國外的rocky linux和alma linux,那自然是因為,一方面是信創要求,另一方面,是在出了難以解決的問題時,能尋求到技術支持,有時廠商還能幫忙背下鍋。
選擇國內的,為啥選了openeuler,而不是麒麟v10呢,那是因為麒麟v10是要收費的,能省點就省點唄。
那要免費,怎么選了openeuler而不是阿里龍蜥呢,我在查閱資料的過程中發現,麒麟V10,就是屬于openEuler生態,銀河麒麟V10服務器版基于openEuler社區的開源技術路線開發,其內核直接采用了openEuler的長期支持(LTS)版本。
這個在openeuler的官網就能看到:
https://www.openeuler.org/zh/download/commercial-release/
所以,我估計,運維也是考慮到之前已經用了麒麟V10,大家用著比較習慣了,所以這次就直接選了openeuler。
而在我這一兩周用起來,感覺和用centos是一樣的,感覺和RHEL系兼容還是挺不錯。下面就開始介紹本次是準備怎么做遷移。
openEuler介紹
===========================
openEuler是一款開源操作系統。當前openEuler內核源于Linux,支持鯤鵬及其他多種處理器,適用于數據庫、大數據、云計算、人工智能等應用場景。
目前的版本(2025年4月),有這幾個(https://www.openeuler.org/zh/download/):
openEuler 25.03,這個是社區創新版本,我們一般不選;
然后主要的LTS是下面這幾個:
openEuler 24.03 LTS SP1
openEuler 22.03 LTS SP4
運維組選定的是openEuler 22.03 LTS SP4。
我看了下,白皮書的內容還比較詳細,可以讀一下。
額外說下,22.03就是表示是2022年03月發布的,但SP4不是這個時間發布的。
另外,在白皮書中,可以看到該版本中的linux內核版本是5.10.
https://www.openeuler.org/whitepaper/openEuler 22.03 LTS SP4 技術白皮書.pdf
遷移方式之遷移工具
=========================
openeuler也提供了遷移工具x2openeuler,可以看官網這里。
我畫了個簡單的圖,說明下這個工具的大體架構。這個工具,你可以理解成一個后臺管理系統,帶界面,后臺是python開發的,也帶個數據庫marial db。
工具要對目標主機升級的時候,先把目標節點的ip加進來(以及ssh相關用戶名密碼),
后續,python后臺,就會通過ssh通道,傳一些腳本到目標主機上執行,比如檢查環境是否滿足升級條件等等。
這其中,有個條件比較重要,就是目標主機需要配置一個yum源,其中需要提供openEuler操作系統的相關組件。
比如,我這邊就給目標主機配置了一個yum源:
[openEuler-everything]
name=openEuler-everything
baseurl=https://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/openEuler-22.03-LTS-SP4/everything/x86_64/RPM-GPG-KEY-openEuler[openEuler-EPOL]
name=openEuler-epol
baseurl=https://repo.openeuler.org/openEuler-22.03-LTS-SP4/EPOL/main/x86_64/
enabled=1
gpgcheck=0[openEuler-2203-lts-sp4-update]
name=openEuler-2203-lts-sp4-update
baseurl=https://repo.openeuler.org/openEuler-22.03-LTS-SP4/update/x86_64/
enabled=1
gpgcheck=0
其他需要注意的,就是升級過程前,會檢查目標主機的磁盤空間是否足夠(因為需要從openEuler源下載各種軟件的rpm),我當時在本地虛擬機測試,磁盤空間小了,檢查一直通不過。
說下為啥最終怎么沒選用工具升級,因為對這個工具的研究還是不太深入,而且時間有點趕。這個工具是原地升級,工具內部怎么實現的,是黑盒;另外,本次測試,升級完成后,我發現,內核參數還是差了很多(這應該很多也是正常的,因為原系統是centos7.3,而openEuler的linux內核都是5.10了,比centos7.3的內核版本高了不少):
當時就是黑盒的感覺比較重,然后時間也比較趕,我們這個服務器上有哪些東西我們也比較清楚(上面還有些源碼編譯的軟件,肯定是要重新裝,沒法遷移的,這個工具應該是只能遷移yum/rpm安裝的軟件)。另外,上線的時候,進行原地升級,我和運維同事認為,風險比較大,不如弄一臺新的機器出來,完全重新部署一遍(當然原地升級,其實也可以在線上對原來的虛擬機先打個快照了再操作,有問題就回滾快照),到時候有問題,流量切回原來的centos主機就行。
最終的升級思路
=======================
-
計算線上的centos7.3服務器,進行過哪些變更,要盡量覆蓋完全
那怎么才能知道有哪些差異呢,我們的方式是,我在本地弄了個虛擬機,從網上下載了centos 7.3 1611版本的iso,完全部署了一個全新的原始的centos 7.3.
然后在原始7.3和線上7.3上,執行各種內核配置、配置文件查看/導出的命令,然后進行對比,就能找出差異項來。
-
申請全新的機器,部署目標系統openEuler 22.03 LTS SP4,然后對前面計算出來的差異,逐一進行配置:包括操作系統級別、系統軟件級別、業務軟件級別的各種差異。
-
最終上線時,先把原centos機器的ip(ip1)改成其他的(臨時ip),然后把openEuler的ip改成ip1,看看業務是否正常;如果有問題,就把openeuler機器關了,然后把centos機器的ip改回來,應該就能恢復正常。(可能需要考慮部分機器上有arp緩存)
升級步驟–差異計算
=========================
我們大概整理了這樣的文件(初版,不全),看看需要對哪些差異進行對比。其實,這也是最核心的部分,如果有遺漏,就可能會導致出問題。
當然,我們最終還會提交測試組進行業務測試,只要業務測試能通過,說明大的問題就沒有。
最終整理的,比較全面的一個版本如下,通過對應的命令查看兩邊系統是否有差異,以下也部分涉及如何修改:
os層面
/etc/sysctl.conf
查看是否修改了內核參數。
sysctl -a
Copysysctl -a 這個的差異會比較多,需要仔細看一下。部分差異是正常的,比如本地虛擬機的內存、磁盤空間大小、網卡名稱、cpu個數不一致,都會導致一些內核參數的默認值不一樣
lang/locale
Copyecho $LANG
vim /etc/locale.conf如果有變更,則需要修改,如改成中文:
可先查看支持的中文locale:
[root@localhost ~]# locale -a|grep zh_CN
zh_CN.utf8vim /etc/locale.conf
LANG="zh_CN.utf8"刷新:
source /etc/locale.conf
[root@localhost ~]# echo $LANG
zh_CN.utf8
環境變量
Copy/etc/profile
/etc/bashrc
~/.bashrc
selinux
Copy[root@localhost ~]# getenforce
Enforcing (打開狀態)vim /etc/selinux/config
修改:
SELINUX=disabled重啟服務器后,再次執行:
[root@localhost ~]# getenforce
Disabled
firewalld
Copysystemctl status firewalld
systemctl stop firewalld
systemctl status firewalldsystemctl disable firewalld
ip、dns
-
設置ipv4
-
設置ipv6
-
設置dns服務器:
Copyvim /etc/resolv.conf
-
設置本地hosts
Copyvim /etc/hosts
cron
Copyvi /etc/crontab
user
Copyvi /etc/passwd
vi /etc/group
內核模塊
查看內核模塊并按字母序排序,方便對比
Copylsmod | tail -n +2 | sort -k1
repo
Copycd /etc/yum.repos.d/
ll
swap
Copyswapon --show
cat /proc/sys/vm/swappiness
軟件
接下來,我們需要查看原系統通過yum、rpm等方式安裝了哪些軟件。
yum
Copyyum --setopt=history_list_view=commands history list all
rpm -qa --last
Copyrpm -qa --last
systemctl service
Copysystemctl list-unit-files --type=service
我們在這里發現,運維組后期安裝的很多agent(監控類的),所以這些也需要在新機器重新安裝
ntp
Copy設置時間校準服務
nfs掛載
Copy/etc/fstab 文件是 Linux 系統中用于定義和管理文件系統的掛載信息的配置文件
動態庫路徑
應用軟件,如果涉及到c++相關的代碼,就可能有這部分。我們正好涉及了,有兩個動態庫(so文件),是需要放到/usr/lib64下的,不然就會加載失敗報錯。
像linux下,動態庫的默認路徑有這么幾個,所以大家要有這塊的意識,別漏了:
linux下,有默認值,如上面這幾個路徑;另外,如果有設置LD_LIBRARY_PATH環境變量,那么java.library.path的值就等于默認的幾個路徑(/usr/lib64、/lib64、/lib、/usr/lib) + LD_LIBRARY_PATH的值。
基礎軟件及業務軟件
如jdk、以及一些通過源碼編譯安裝的程序(如nginx、redis這類)
文件、文件夾對比
各種業務軟件,可能還涉及到在某些目錄下寫入了一些文件,可能也需要遷移,這個就大家自己看著弄了。
我們這邊是會把軟件全部在openeuler上再重新部署一遍,包括jdk、servlet容器等等。
差異對比
最終就是上面的各項配置導到不同文件,然后beyond compare對比下。
差異執行
====================
這個沒啥說的了,下載openeuler的iso,安裝,然后分析上述對比出來的哪些差異,需要應用到新的系統中,然后執行就行了,最終執行完,可以重啟下服務器,避免有的改了忘了使其生效。
總結
==================
可以發現,步驟還是比較繁瑣的,而且,這樣也不能保證萬無一失,所以還是要進行充分的測試為宜。選這種方式,也要先做好方案,然后拉會評審,大家認可這樣的方案才行,畢竟這個方案,需要運維、測試的全力配合,工作量也不小。
為什么還是選了這個方案,主要還是這次要升級的是其中接入層的兩臺機器(系統比較重要,上面部署了openresty等接入層服務,這種c程序,反正也要編譯安裝,沒法自動遷移),所以要求穩,對黑盒遷移工具還不夠了解,促使我們做了這個選擇。
老的centos 7.3,運行了很多年了,這次從零開始部署,也能方便大家把相關組件摸清楚,在保證出現問題能及時回退的情況下,我們認為這樣做也值得。后續面對不那么重要的系統,可能也是會用工具來升級。
🔥運維干貨分享
- 軟考高級系統架構設計師備考學習資料
- 軟考高級網絡規劃設計師備考學習資料
- Kubernetes CKA認證學習資料分享
- AI大模型學習資料合集
- 信息安全管理體系(ISMS)制度模板分享
- 免費文檔翻譯工具(支持word、pdf、ppt、excel)
- PuTTY中文版安裝包
- MobaXterm中文版安裝包
- pinginfoview網絡診斷工具中文版
- Xshell、Xsftp、Xmanager中文版安裝包
- Typora簡單易用的Markdown編輯器
- Window進程監控工具,能自動重啟進程和卡死檢測
- 免費Oracle 數據庫學習資源 零基礎到進階
- Spring 源碼學習資料
- 畢業設計高質量畢業答辯 PPT 模板