1. 程式人生 > 其它 >java型別轉換拓展

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、掛載資訊檢視