java型別轉換拓展
一、Ceph分散式儲存
1.1、Ceph檔案系統簡述
Ceph是一個統一的分散式儲存系統,設計初衷是提供較好的效能、可靠性和可擴充套件性。
Ceph專案最早起源於Sage就讀博士期間的工作(最早的成果於2004年發表),並隨後貢獻給開源社群。在經過了數年的發展之後,目前已得到眾多雲計算廠商的支援並被廣泛應用。RedHat及OpenStack都可與Ceph整合以支援虛擬機器映象的後端儲存。
中文學習網:http://docs.ceph.org.cn/1.2、Ceph的優點
高效能
a. 摒棄了傳統的集中式儲存元資料定址的方案,採用CRUSH演算法,資料分佈均衡,並行度高。
b.考慮了容災域的隔離,能夠實現各類負載的副本放置規則,例如跨機房、機架感知等。
c. 能夠支援上千個儲存節點的規模,支援TB到PB級的資料。
高可用性
a. 副本數可以靈活控制。
b. 支援故障域分隔,資料強一致性。
c. 多種故障場景自動進行修復自愈。
d. 沒有單點故障,自動管理。
高可擴充套件性
a. 去中心化。
b. 擴充套件靈活。
c. 隨著節點增加而線性增長。
特性豐富
a. 支援三種儲存介面:塊儲存、檔案儲存、物件儲存。
b. 支援自定義介面,支援多種語言驅動
二、Ceph架構和名稱解釋
2.1、Ceph架構
2.2、Ceph核心元件及概念介紹
- Monitor
一個Ceph叢集需要多個Monitor組成的小叢集,它們通過Paxos同步資料,用來儲存OSD的元資料。
- OSD
OSD全稱Object Storage Device,也就是負責響應客戶端請求返回具體資料的程序。一個Ceph叢集一般都有很多個OSD。
- MDS
MDS全稱Ceph Metadata Server,是CephFS服務依賴的元資料服務。
- Object
Ceph最底層的儲存單元是Object物件,每個Object包含元資料和原始資料。
- PG
PG全稱Placement Grouops,是一個邏輯的概念,一個PG包含多個OSD。引入PG這一層其實是為了更好的分配資料和定位資料。
- RADOS
RADOS全稱Reliable Autonomic Distributed Object Store,是Ceph叢集的精華,使用者實現資料分配、Failover等叢集操作。
- Libradio
Librados是Rados提供庫,因為RADOS是協議很難直接訪問,因此上層的RBD、RGW和CephFS都是通過librados訪問的,目前提供PHP、Ruby、Java、Python、C和C++支援。
- CRUSH
CRUSH是Ceph使用的資料分佈演算法,類似一致性雜湊,讓資料分配到預期的地方。
- RBD
RBD全稱RADOS block device,是Ceph對外提供的塊裝置服務。
- RGW
RGW全稱RADOS gateway,是Ceph對外提供的物件儲存服務,介面與S3和Swift相容。
- CephFS
CephFS全稱Ceph File System,是Ceph對外提供的檔案系統服務。
三、Ceph的儲存過程
CEPH叢集在儲存資料時,都是進行扁平化處理,Object作為叢集最小的儲存單位。
ceph在物件儲存的基礎上提供了更加高階的思想。當物件數量達到了百萬級以上,原生的物件儲存在索引物件時消耗的效能非常大。ceph因此引入了placement group (pg) 的概念。一個PG就是一組物件的集合。
3.1、Ceph IO流程及資料分佈
3.2、正常IO流程圖
步驟:
client 建立cluster handler。
client 讀取配置檔案。
client 連線上monitor,獲取叢集map資訊。
client 讀寫io 根據crushmap 演算法請求對應的主osd資料節點。
主osd資料節點同時寫入另外兩個副本節點資料。
等待主節點以及另外兩個副本節點寫完資料狀態。
主節點及副本節點寫入狀態都成功後,返回給client,io寫入完成。
四、Ceph搭建過程
我準備了三臺centos7虛擬機器,ip如下
4.1、準備工作
1、機器名稱的修改(三臺伺服器上都執行),給192.168.32.140取別名ghy1,給192.168.32.141取別名ghy2,給192.168.32.142取別名ghy3
命令如果下:
hostnamectl set-hostname ghy1
2、修改三臺伺服器的配置名字解析IP,命令如下(分別在三臺伺服器上執行)
vi /etc/hosts
執行上面命令後新增如下對映:
192.168.32.140 ghy1 192.168.32.141 ghy2 192.168.32.142 ghy3
三個伺服器配置完成後儲存檔案並執行reboot命令重啟三臺伺服器,重啟完成後可以發現機器名稱已經換成我們自己定義的了
3、yum源的修改,要在三臺伺服器都進行修改,因為命令都一樣,我就以一臺伺服器為例,這裡採用的是清華映象源,提升載入速度。
命令如果下:
vi /etc/yum.repos.d/ceph.repo
執行完這個命令後新增如下內容
[Ceph] name=Ceph packages for $basearch baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/x86_64/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc [Ceph-noarch] name=Ceph noarch packages # 清華源 baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/noarch/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc [ceph-source] name=Ceph source packages baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/SRPMS/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc
4、ceph與ceph-deploy安裝(因為我把140做主伺服器,所以這命令在140伺服器上執行就行)
更新yum源,並安裝 ceph 和 ceph-deploy ,這個過程非常耗時間,執行如下命令:
yum update && yum -y install ceph ceph-deploy
注意: yum update 和 yum -y install python2-pip 最好在每臺機器都更新下yum。
安裝過程中, 如果執行ceph-deploy出現 ImportError: No module named pkg_resources ,則需要安裝python2-pip,執行 yum -y install python2-pip 安裝即可。我在第一次嘗試安裝時就是因為沒有安裝python2搞的我搞了好久。
如果遇到如下錯誤,安裝下epel即可。
操作命令:(最好先執行該命令)
yum install epel-release -y
yum install lttng-ust -y
安裝完了epel記得再次執行yum update && yum -y install ceph ceph-deploy命令
5、NTP時間同步工具(140執行)為了保證時間同步,我們需要安裝NTP時間同步工具:
yum install ntp ntpdate ntp-doc -y
設為開機啟動:
systemctl enable ntpd
設定每隔1小時自動校準同步。編輯 vi /etc/rc.d/rc.local 追加:執行命令
vi /etc/rc.d/rc.local
開啟文字追加如下一句話
/usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w
配置定時任務, 執行crontab -e命令 ,命令如下
開啟文字後追加如下一段話
0 */1 * * * ntpdate ntp1.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w
如果出現紅框內容表示成功
6、免密配置(在三臺伺服器上都執行),因為命令都一樣,我以一臺伺服器為例
官方建議不用系統內建使用者, 建立名為cuser使用者, 密碼也設為cuser:
命令如下
useradd -d /home/cuser -m cuser
passwd cuser
設定sudo許可權:(免密+只讀許可權)
echo "cuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cuser
再執行如下命令檢視是否新增成功
cat /etc/sudoers.d/cuser
執行如下命令新增只讀許可權
sudo chmod 0440 /etc/sudoers.d/cuser
新增完成後用如下命令檢視是否新增成功,rr表示只讀
ll /etc/sudoers.d/cuser
7、生成祕鑰(在140伺服器上執行)
執行如下命令切換到cuser使用者上
su cuser
執行如下命令生成RSA金鑰,一直按預設就可以了
ssh-keygen
分發金鑰至各機器節點
ssh-copy-id cuser@ghy1 ssh-copy-id cuser@ghy2 ssh-copy-id cuser@ghy3
接下來修改管理節點上的 ~/.ssh/config (當前使用者目錄下的.ssh/config)檔案, 簡化SSH遠端連線時的輸入資訊:管理節點是會有root和cuser多個使用者,ssh遠端連線預設會以當前使用者身份進行登陸, 如果我們是root身份進行遠端連線, 還是需要輸入密碼,我們可以修改配置 使用root遠端連線時也不用輸入密碼。執行下面切換root身份
su root
但我多次嘗試都無法通過上面命令切回root帳戶,沒辦法,我是重新再啟動一個連線進入root帳戶的,如果有朋友碰到和我一樣情況解決了可以留言跟我說下怎麼解決的。進入root帳戶後用如下命令編輯config
vi ~/.ssh/config
新增如下內容
Host ghy1
Hostname ghy1
User cuser
Host ghy2
Hostname ghy2
User cuser
Host ghy3
Hostname ghy3
User cuser
如果儲存中報".ssh/config" E212: Can't open file for writing;那麼進入他的根目錄,用命令
cd ~
然後用如下命令建立建立目錄
mkdir .ssh
接著用如下命令進入目錄
cd .ssh
再入如下命令編輯檔案
vi config
檔案編輯完成後記得儲存。接著修改檔案許可權
chmod 600 ~/.ssh/config
用如下命令檢視有什麼許可權rw表示只有讀寫許可權
ll ~/.ssh/config
到了這一步後,接下來就是要禁用SELINUX了,執行下面命令進行禁用
vi /etc/selinux/config
開啟檔案後在最後一行新增
SELINUX=disabled
4.2、叢集搭建(全部在140伺服器上執行)
安裝叢集,用root安裝,可以避免很多許可權問題。先mkdir ljx建立一個目錄,然後cd ljx進入這個目錄
1.建立叢集管理目錄,作為ceph配置資訊儲存目錄。-p是表示建立多級目錄命令如果下
mkdir -p /usr/local/ljx/cephcluster
然後進入目錄
cd /usr/local/ljx/cephcluster
2.建立叢集
ceph-deploy new ghy1 ghy2 ghy3
建立成功後, 會生配置檔案和祕鑰資訊。用ls命令檢視
3.修改配置檔案
編輯ceph.conf檔案,用如下命令進行編輯
vi ceph.conf
開啟檔案後配置如下內容,網段根據自身情況配置
#對外開放網段 public network = 192.168.32.0/24 # 設定pool池預設分配數量 osd pool default size = 2 # 容忍更多的時鐘誤差 mon clock drift allowed = 2 mon clock drift warn backoff = 30 # 允許刪除pool mon_allow_pool_delete = true [mgr] # 開啟WEB儀表盤 mgr modules = dashboard
注意:Pool是儲存物件的邏輯分割槽,它規定了資料冗餘的型別和對應的副本分佈策略。
檔案修改後執行安裝,在140上進行安裝,執行如下命令後三臺伺服器都會執行安裝程式,命令如下
ceph-deploy install ghy1 ghy2 ghy3
安裝完成後頁面如下:
4.初始化Monitor資訊,命令如下
ceph-deploy mon create-initial
執行成功後頁面如下,下面頁面生成了很多祕鑰檔案
5、同步管理資訊
ceph-deploy admin ghy1 ghy2 ghy3
6、安裝mgr(管理守護程序)
ceph-deploy mgr create ghy1 ghy2 ghy3
7、安裝rgw
ceph-deploy rgw create ghy1 ghy2 ghy3
接著執行下面命令安裝mds服務
ceph-deploy mds create ghy1 ghy2 ghy3
如果到現在都沒報錯說明你快成功了,我反正在這些坑中呆了快一個星期了,能記住的錯也都在這裡面寫下來了,如果在配置過程任意一個環節安裝失敗了,需要解除安裝重灌:
ceph-deploy purge ghy1 ghy2 ghy3 ceph-deploy purgedata ghy1 ghy2 ghy3 ceph-deploy forgetkeys
同時將三臺節點的mon資訊也刪除:
rm -rf /var/run/ceph/
如果出現錯誤:
ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph --version
可以在各節點上單獨進行安裝:
yum -y install ceph
8、OSD安裝
OSD服務是物件儲存守護程序, 負責把物件儲存到本地檔案系統, 必須要有一塊獨立的磁碟作為儲存。如果沒有獨立磁碟,怎麼辦?可以在Linux下面建立一個虛擬磁碟進行掛載。
新增磁碟:
執行 fdisk -l 檢視磁碟資訊如下,我們需要新增一個磁碟
因為我用的是virtualBox,所以我下面截圖就是在virtualBox上怎麼新增硬碟,這個操作要在三臺服務上都執行。
a.虛擬機器關機,開啟設定>儲存
這樣就建立完成了。記得儲存並且三臺伺服器上都執行。說多了都是淚。一直點選下一步,設定磁碟空間大小為10G即可。操作完後重啟虛擬機器,並輸入 fdisk -l 檢視磁碟資訊
如下,明顯多了 /dev/sdb10G大小。
執行建立OSD命令:(注意,每條命令都是在140中執行,不要在每臺機器中單獨執行)要在cephcluster資料夾中執行
ceph-deploy osd create --data /dev/sdb ghy1 ceph-deploy osd create --data /dev/sdb ghy2 ceph-deploy osd create --data /dev/sdb ghy3
Monitor檢視在 /usr/bin下執行 ./ceph -s 可以檢視叢集狀態。 也可以在cephcluster中執行ceph -s檢視
執行如下命令同步各個節點的時間(下面這個命令要在三個節點都執行)
ntpdate ntp1.aliyun.com
如果報以下錯執行命令yum -y install ntpdate就可以解決了
4.3、dashboard安裝 (視覺化管理頁面)
Ceph 提供了原生的Dashboard功能,通過Dashboard可以獲取Ceph叢集的各種基本狀態資訊。接下來安裝一下Dashboard,並使用它的功能。
1.開啟dashboard模組,在140伺服器上執行
ceph mgr module enable dashboard
2、生成簽名,在140伺服器上執行
ceph dashboard create-self-signed-cert
3、建立目錄,在140伺服器上執行
mkdir -p /usr/local/ljx/cephcluster/mgr-dashboard
4、生成金鑰對,在140伺服器上執行
openssl req -new -nodes -x509 -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 -keyout dashboard.key -out dashboard.crt -extensions v3_ca
5、啟動dashboard,在140伺服器上執行
ceph mgr module disable dashboard
ceph mgr module enable dashboard
6、設定IP與PORT,在140伺服器上執行
ceph config set mgr mgr/dashboard/server_addr 192.168.32.140 ceph config set mgr mgr/dashboard/server_port 8843
7、關閉HTTPS,在140伺服器上執行
ceph config set mgr mgr/dashboard/ssl false
8、檢視服務資訊,在140伺服器上執行
ceph mgr services
9、設定管理員賬號密碼,在140伺服器上執行
ceph dashboard set-login-credentials admin admin
10、訪問 <https://192.168.32.140:8443/#/dashboard>
11、RGW訪問
訪問 http://192.168.32.140:7480/效果如下:
4.3 Cephfs管理
叢集建立完後, 預設沒有檔案系統, 我們建立一個Cephfs可以支援對外訪問的檔案系統。搭建完成後就能進行檔案管理和檔案下載操作了
1、建立兩個儲存池, 執行兩條命令: (在140上)
ceph osd pool create cephfs_data 128 ceph osd pool create cephfs_metadata 64
少於5個OSD可把pg_num設定為128
OSD數量在5到10,可以設定pg_num為512
OSD數量在10到50,可以設定pg_num為4096
OSD數量大於50,需要計算pg_num的值
通過下面命令可以列出當前建立的儲存池:
ceph osd lspools
2、建立fs, 名稱為fs_test:(在140上,名稱可以隨便取)
ceph fs new fs_test cephfs_metadata cephfs_data
3、狀態檢視, 以下資訊代表正常(在140上)
ceph fs ls
ceph mds stat
4、fuse掛載(在140上)
先確定ceph-fuse命令能執行, 如果沒有, 則安裝:
yum -y install ceph-fuse
建立掛載目錄
mkdir -p /usr/local/ljx/cephfs_directory
掛載cephfs
ceph-fuse -k /etc/ceph/ceph.client.admin.keyring -m 192.168.32.140:6789 /usr/local/ljx/cephfs_directory
5、掛載資訊檢視