tiup鏡像為部署集群或通過tiup執行相關工具的源,可以是本地的離線鏡像(本地的一個目錄)或遠程鏡像。
官網介紹的tiup的安裝命令如下:
curl --proto '=https' --tlsv1.2 -sSf //tiup-mirrors.pingcap.com/install.sh | sh
當在可連接互聯網的機器上執行官方tiup的命令時,實際上只是按照tiup的二進制文件,并且將tiup鏡像設置為官方鏡像地址。
tiup的離線鏡像目錄的結構如下:
+ <mirror-dir> # 鏡像根目錄
|-- root.json # 鏡像根證書
|-- {2..N}.root.json # 鏡像根證書
|-- {1..N}.index.json # 組件/用戶索引
|-- {1..N}.{component}.json # 組件元信息
|-- {component}-{version}-{os}-{arch}.tar.gz # 組件二進制包
|-- snapshot.json # 鏡像最新快照
|-- timestamp.json # 鏡像最新時間戳
|--+ commits # 鏡像更新日志(可刪除)
|--+ commit-{ts1..tsN}
|-- {N}.root.json
|-- {N}.{component}.json
|-- {N}.index.json
|-- {component}-{version}-{os}-{arch}.tar.gz
|-- snapshot.json
|-- timestamp.json
|--+ keys # 鏡像私鑰(可移動到其他位置)
|-- {hash1..hashN}-root.json # 根證書私鑰
|-- {hash}-index.json # 索引私鑰
|-- {hash}-snapshot.json # 快照私鑰
|-- {hash}-timestamp.json # 時間戳私鑰
將鏡像包解壓后,直接運行安裝腳本local_install.sh即可離線安裝tiup,安裝完后會自動設置tiup的mirror為它自己所在的離線鏡像目錄,并會自動在~/.bash_profile的PATH中添加tiup所在的運行目錄。
tiup鏡像源設置
文件~/.tiup/tiup.toml中設置了tiup鏡像的地址或目錄,可通過查看tiup.toml中的內容得知當前鏡像的地址,或通過命令tiup mirror show查看當前鏡像的地址。
修改離線鏡像可以通過設置方式:
- 環境變量?TIUP_MIRRORS?,當執行tiup命令時,將會自動設置mirror為TIUP_MIRRORS指定的地址
- 執行
tiup mirror set {PATH}命令設置mirror,PATH為離線鏡像的目錄或遠程鏡像的地址
在設置mirror后,tiup會重新從鏡像中下載各個組件的元信息文件(component.json)到.tiup/manifests中。
通過tiup list {組件}可以查看當前鏡像中存在的組件以及工具以及版本,例如:
$ tiup list tidb
Available versions for tidb:
Version Installed Release Platforms
------- --------- ------- ---------
v7.1.3 2024-01-15T07:06:27Z linux/amd64,linux/arm64
該鏡像中包括了v7.1.3版本,amd64和arm64兩種架構的tidb-server
tiup離線鏡像管理
tiup mirror命令清單如下:
- genkey: 生成私鑰文件
- sign: 使用私鑰文件對特定文件進行簽名
- init: 創建一個空的鏡像
- set: 設置當前鏡像
- grant: 為當前鏡像引入新的組件管理員
- publish: 向當前鏡像推送新的組件**
- modify: 修改當前鏡像中的組件屬性,主要是啟用/禁用某個組件或它的某個版本
- rotate: 更新當前鏡像中的根證書
- clone: 從已有鏡像克隆一個新的鏡像
- merge: 合并鏡像
下面主要介紹通過publish, clone, merge這幾個子命令,進行離線鏡像的管理。
創建新鏡像
命令 tiup mirror clone 從當前鏡像中克隆出一個新的鏡像,可以指定自己需要的版本,組件,平臺等信息。新舊鏡像的組件相同,但使用的簽名密鑰不同。
tiup mirror clone <target-dir> [global version] [flags]
下面舉例說明如何創建自定義鏡像
示例一:從官方鏡像中克隆v7.5.0版本的鏡像,包括所有組件以及arm64和amd64兩個架構
- 在一個可連接互聯網的機器上安裝tiup
curl --proto '=https' --tlsv1.2 -sSf //tiup-mirrors.pingcap.com/install.sh | sh
- 執行以下命令clone鏡像
tiup mirror clone /data/tidb-community-server-v7.5.0-linux v7.5.0 --arch amd64,arm64 --os linux
以上命令將從官方鏡像中下載所有組件的v7.5.0版本和兩個架構的包到目錄/data/tidb-community-server-v7.5.0-linux中,其中如果組件沒有v7.5.0版本,將會下載該組件的最新版本。其中,離線鏡像包中包括了tiup組件,將該離線鏡像包上傳到離線環境,直接執行local_install.sh即可離線安裝tiup。該鏡像可以部署arm64和amd64兩種架構的集群。
示例二:從示例一的離線鏡像中分離出amd64架構的鏡像
- 將當前tiup鏡像目錄設置為示例一的鏡像目錄
tiup mirror set /data/tidb-community-server-v7.5.0-linux
- 從離線鏡像中克隆出amd64架構的鏡像
tiup mirror clone /data/tidb-community-server-v7.5.0-linux-amd64 v7.5.0 --arch amd64 --os linux
執行完了之后/data/tidb-community-server-v7.5.0-linux-amd64中將只包括amd64架構的組件包
合并鏡像
命令 tiup mirror merge 用于合并一個或多個鏡像到當前鏡像
執行此命令需要滿足幾個條件:
- 目標鏡像的所有組件的管理員 ID 必須在當前鏡像中存在。
- 執行該命令用戶的
${TIUP_HOME}/keys目錄中有上述管理員 ID 在當前鏡像中對應的所有私鑰(可以使用命令tiup mirror set將當前鏡像切換成目前有權限修改的鏡像)。
也就是將當前鏡像中的keys目錄中的內容復制到~/.tiup/keys中
tiup mirror merge <mirror-dir-1> [mirror-dir-N] [flags]
下面通過舉例介紹如何合并鏡像
示例三:將v7.5.0版本和v7.1.3版本的鏡像合并,創建包括這兩個版本的離線鏡像
- v7.5.0版本的鏡像目錄:/data/tidb-community-server-v7.5.0-linux,v7.1.3版本的鏡像:/data/tidb-community-server-v7.1.3-linux,將當前鏡像設置為v7.5.0
tiup mirror set /data/tidb-community-server-v7.5.0-linux
- 查看當前鏡像中tidb-server的版本
$ tiup list tidb
Available versions for tidb:
Version Installed Release Platforms
------- --------- ------- ---------
v7.5.0 2024-01-15T07:06:27Z linux/amd64,linux/arm64
- 將當前鏡像的keys目錄復制到~/.tiup/中
cd /data/tidb-community-server-v7.5.0-linux
cp -r keys ~/.tiup/
- 將7.1.3版本的鏡像合并到當前鏡像
tiup mirror merge /data/tidb-community-server-v7.1.3-linux
- 查看當前鏡像中的tidb-server版本
$ tiup list tidb
Available versions for tidb:
Version Installed Release Platforms
------- --------- ------- ---------
v7.1.3 2024-01-15T07:06:27Z linux/amd64,linux/arm64
v7.5.0 2024-01-15T07:06:27Z linux/amd64,linux/arm64
執行以上命令后,/data/tidb-community-server-v7.5.0-linux鏡像包可同時部署和管理v7.1.3和v7.5.0版本的集群。
修改鏡像
若需要將離線鏡像中的某個組件替換為我們自己編譯的包,不能直接通過替換鏡像中的tar包來實現,因為每個組件的包在鏡像中都有對應的校驗值,直接替換tar包會導致校驗失敗,需要通過tiup mirror publish命令來修改鏡像中的組件包。
tiup mirror publish <comp-name> <version> <tarball> <entry> [flags]
使用tiup mirror publish時其中需要指定key,如果需要修改官方的組件包,需要將key指定為pingcap官方的key,即**{mirror}/keys/xxxx-pingcap.json**,其中{mirror}為鏡像包的路徑,每個包中的keys的文件名是不一樣的,我們需要使用的key是pingcap.json結尾。
下面通過舉例來說明如何修改鏡像
示例四:將當前鏡像中的v7.5.0版本的tidb-server替換為自己編譯的tidb-server
- 將自己編譯的tidb-server打包進一個tar包中
tar -zcf my-tidb-server.tar.gz tidb-server
- 查看當前鏡像中的keys
$ ls /data/tidb-community-server-v7.5.0-linux/keys/
1c12ba5663b5b3ed-root.json 32762dfd5812ac40-timestamp.json 88c0aff47103fa21-root.json ed54a0bef7fa53fb-index.json
1f29fe4561a59dd0-pingcap.json 4ff9c9ada34ab32e-root.json c941efba22aac7eb-snapshot.json
- 執行tiup mirror publish命令修改替換tidb-server包
tiup mirror publish tidb v7.5.0 my-tidb-server.tar.gz tidb-server -k /data/tidb-community-server-v7.5.0-linux/keys/1f29fe4561a59dd0-pingcap.json --arch amd64
執行以上命令部署集群時將會自動部署自己編譯的tidb-server
總結
本文檔通過舉例的方式來說明如果創建和管理離線鏡像包,為需要離線環境部署tidb的場景提供參考。