因爲最近在弄寫作課,結果寫作課的內容我還需要沉澱才能發,掛念我的讀者,今天先發一個胖琪的文章出來哦。本來今天是例行ARTS打卡,暫時先等等了,小編正在籌備中,很快會和大家見面的。
ceph
ceph是一款專注於分佈式,彈性可擴展的,高擴展性,性能優異的系統存儲平臺,是跟阿里雲OOS同樣可以提供對象存儲的雲服務。能支持P級別的數據存儲
一說到大數據,我們能想到的是hadoop,底層數據存儲的hdfs,但是實際上現在進入雲時代之後,hdfs的要求內容對於一些存儲就並不是十分合適。
比如阿里每天需要處理的圖片就幾P級別的數據量,在hdfs中壓縮存儲對於快速反應的性能來說是很大的損耗。他們自研的OSS和亞馬遜的S3對象存儲都是一樣的。
我們今天說的ceph是一個開源的對象存儲,並且兼容了亞馬遜的S3接口與Swift對象存儲接口,也就是我們可以使用s3的sdk來使用ceph了。
安裝流程
我們安裝工具是藉助官網提供的一鍵安裝進行安裝。
機器分配
由於我們採用的是三臺真實服務器,沒有再接收多餘服務器配置,並且程序也是處於mvp版本,先實現基礎功能,後期再進行擴展。
三臺一樣的機器配置
2個128的固態硬盤,一個系統盤,另外一個所謂數據庫存儲。
3個8T普通機器硬盤。
32核32G內存。
tidb1上部署安裝工具,ceph-deploy。數據節點部署在三臺服務器上。監控節點與rgw,對象存儲服務配置在tidb2節點上。
配置ceph源
由於centos中並沒有我們需要的配置源,那麼就需要配置ceph的安裝源。由於在國內,我們一般都是配置阿里的源操作。
cat >/etc/yum.repos.d/ceph.repo<<EOF
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority=1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/SRPMS
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.163.com/ceph/keys/release.asc
priority=1
EOF
yum makecache
安裝ceph-deploy
如果在上面沒有執行阿里源的配置,我們在執行的時候就需要配置下源,否則無法正常安裝
1. 配置
vim /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
2. 更新系統
yum update -y
3. 執行安裝
yum install -y ceph-deploy
配置免密登錄的ssh
配置互相登錄的host
// 每臺機器都需要 增加ip與對應的名稱
192.168.130.81 tibd1
192.168.130.82 tidb2
192.168.130.83 tidb3
配置祕鑰
每臺機器上都需要執行下,這樣才能達到互相登錄的目的
在這裏不使用root用戶執行,創建一個新的用戶來操作ceph.
//每一個節點都需要創建該用戶.
sudo useradd -d /home/cephd -m cephd
sudo passwd cephd
//新創建的用戶需要有權限
echo "cephd ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephd
sudo chmod 0440 /etc/sudoers.d/cephd
創建祕鑰,然後分發到其他節點上
ssh-keygen -t rsa
Enter file in which to save the key (/root/.ssh/id_rsa): #回車
Enter passphrase (empty for no passphrase): #回車
Enter same passphrase again:#回車
分發祕鑰
ssh-copy-id cephd@tidb1
ssh-copy-id cephd@tidb2
ssh-copy-id cephd@tidb3
執行完祕鑰的生成之後,可能會遇到的問題是.ssh文件權限不是700 ,所以我們一般會設置下權限。注意:有的不需要執行。
sudo chmod 700 .ssh
執行測試 嘗試是否能不輸入密碼 就登陸到相應的服務器,成功後代表免登陸設置完畢
ssh cephd@tidb1
ssh cephd@tidb2
ssh cephd@tidb3
安裝ceph
在tidb1上我們安裝了ceph-deploy,使用這個工具在各個節點去安裝ceph,保證分佈式,我們在三臺機器上都進行安裝。
安裝
準備工作做好,開始安裝我們的ceph。
創建ceph-deploy文件夾
該文件夾會保存一些通信需要使用的文件內容。
mkdir my-cluster
cd my-cluster
清理安裝的內容
在安裝的過程中如果出現未知的錯誤,可以使用如下命令,將相關內容清除,保證環境的清潔,再次進行安裝。
ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*
// 上面的可能跟個人安裝過程有關,需要執行下面刪除才能將前面出錯的內容刪除乾淨
rm -rf /var/lib/ceph
rm -rf /etc/ceph
rm -rf /var/run/ceph/
初始化monitor節點
剛開始在測試階段我們可以先創建一個monitor節點monitor-node,
ceph-deploy new tidb2 // 監控節點不與ceph-deploy 節點在一臺機器上
該命令會在我們剛纔創建的目錄下生成ceph.conf文件
[global]
fsid = 447a06ba-6992-4875-bfe5-706ed2da4ce4
mon_initial_members = tidb2
mon_host = 192.168.130.82
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
filestore_xattr_use_omap = true
//在集羣中有多個網卡應該進行如下配置
// public network 是公共網絡,負責對外提供服務的流量,
// cluster network 是私有網絡,負責集羣中的數據傳輸通信
public network = 10.10.10.0/24
cluster network = 10.10.10.0/24
安裝ceph在各個節點
使用ceph-deploy,可以一次性安裝多個節點。
ceph-deploy install tidb1 tidb2 tidb3
// 安裝過程中,會按照順序在各個機器上安裝ceph
安裝monitor節點並生成key
ceph-deploy mon create-initial
會在我們創建的目錄my-cluster下生成如下文件。
將key分發到各個機器
ceph-deploy admin tidb1 tidb2 tidb3
ceph-deploy mgr create tidb2
添加數據盤
在ceph中,添加數據盤有兩種方式,一種是將數據盤直接做成osd,另外一種是利用文件夾的方式。
文件夾方式osd
用文件夾的方式來創建osd,在各個節點創建目錄文件夾。
// 我們創建9個osd,則在每個機器上都創建三個這樣的目錄文件
mkdir -p /media/data1
mkdir -p /media/data2
mkdir -p /media/data3
// 使用命令創建osd
ceph-deploy osd prepare tidb1:/media/data1/ tidb1:/media/data2/ tidb1:/media/data3/ tidb2:/media/data1/ tidb2:/media/data2/ tidb2:/media/data3/
tidb3:/media/data1/ tidb3:/media/data2/ tidb3:/media/data3/
// 創建完畢後 激活osd
ceph-deploy osd activate tidb1:/media/data1/ tidb1:/media/data2/ tidb1:/media/data3/ tidb2:/media/data1/ tidb2:/media/data2/ tidb2:/media/data3/
tidb3:/media/data1/ tidb3:/media/data2/ tidb3:/media/data3/
磁盤直接做成osd
如果磁盤已經在電腦上進行掛載,需要將掛載進行取消,否則下面命令會執行失敗。
//在tidb1上執行如下命令
ceph-deploy osd create --data /dev/sda tidb1
ceph-deploy osd create --data /dev/sdd tidb1
ceph-deploy osd create --data /dev/sdc tidb1
ceph-deploy osd create --data /dev/sda tidb2
ceph-deploy osd create --data /dev/sdb tidb2
ceph-deploy osd create --data /dev/sdc tidb2
ceph-deploy osd create --data /dev/sda tidb3
ceph-deploy osd create --data /dev/sdb tidb3
ceph-deploy osd create --data /dev/sdc tidb3
檢查安裝結果
安裝完畢後需要檢查下狀態是否成功的安裝,兩種方式進行檢查
1. ceph health
HEALTH_OK
2. ceph -s
cluster 447a06ba-6992-4875-bfe5-706ed2da4ce4
health HEALTH_OK
monmap e1: 1 mons at {tidb2=192.168.130.82:6789/0}
election epoch 9, quorum 0 tidb2
osdmap e401: 9 osds: 9 up, 9 in
flags sortbitwise,require_jewel_osds
pgmap v1939720: 704 pgs, 10 pools, 3408 GB data, 13487 kobjects
10365 GB used, 56635 GB / 67000 GB avail
703 active+clean
1 active+clean+scrubbing+deep
顯示是HEALTH_OK代表已經成功的安裝。
擴展集羣
爲了保證集羣的高可用性,我們需要部署成分佈式的結構,但由於現在機器只有三臺,則在測試環境中暫時使用單機部署,等容量提高再使用分佈式。
提高mon節點
// 創建兩個節點
ceph-deploy mds create tidb3 tidb4
//將創建的節點加入到集羣中。
ceph-deploy mon add tidb3 tidb4
// 查看節點部署情況,狀態顯示內容 mons 數量爲3
ceph -s
// 在查看monitor節點的狀態
ceph quorum_status --format json-pretty
ceph-deploy mgr create tidb3 node4
提高磁盤的容量
當我們空間的容量不足時,需要進行osd擴容,創建方式跟前面的osd創建使用一樣。
使用S3對象存儲
ceph提供了對象存儲的方案,有S3/Swift存儲功能。公司使用的S3方案,方便後期轉移到亞馬遜雲服務或者阿里云云服務。
創建rgw網關
//官網也放在tidb2接口上
cep-deploy rgw create tidb2
// rgw 默認是 80端口 配置文件是這樣的。如果後期需要做成負載均衡ceph也提供了ngnix的方案
[client]
rgw frontends = civetweb port=80
訪問http:剛纔節點的ip:80 有如下結果代表創建成功。
<?xml version="1.0" encoding="UTF-8"?>
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>anonymous</ID>
<DisplayName></DisplayName>
</Owner>
<Buckets>
</Buckets>
</ListAllMyBucketsResult>
使用S3
在使用S3之前,需要創建一個用戶。
sudo radosgw-admin user create --uid="testuser" --display-name="First User"
會有如下內容:
{
"user_id": "testuser",
"display_name": "First User",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [{
"user": "testuser",
"access_key": "I0PJDPCIYZ665MW88W9R",
"secret_key": "dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA"
}],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"temp_url_keys": []
}
創建好之後,可以使用官方提供的例子進行測試,檢測S3是否能成功的被訪問。
安裝python的s3包 admin admin admin python-boto admin
寫測試腳本
注意裏面的祕鑰,ip等內容的寫入
import boto
import boto.s3.connection
access_key = 'IWSAM9Z527Y1ABH0PZ6P'
secret_key = '189jZ3WJ3OixfwYkHuXSm4uoqsytRr9mkwThE6Qz'
conn = boto.connect_s3(
aws_access_key_id = access_key,
aws_secret_access_key = secret_key,
host = '192.168.130.82',port=7480,
is_secure = False, calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
bucket = conn.create_bucket('admin')
for bucket in conn.get_all_buckets():
print "{name}".format(
name = bucket.name,
created = bucket.creation_date,
)
執行腳本測試
Python test.py
打印出對應的桶名字,即代表成功。
總結
本文主要從ceph安裝步驟走起,講解在安裝過程中注意的問題,一方面自己記錄這些內容方便後期查詢,也讓其他朋友有個可參考的方案。
往期文章一覽
你點的每個在看,我都認真當成了喜歡