跟阿里盤古同名的開源文件存儲教程一篇

640

640

因爲最近在弄寫作課,結果寫作課的內容我還需要沉澱才能發,掛念我的讀者,今天先發一個胖琪的文章出來哦。本來今天是例行ARTS打卡,暫時先等等了,小編正在籌備中,很快會和大家見面的。

ceph

ceph是一款專注於分佈式,彈性可擴展的,高擴展性,性能優異的系統存儲平臺,是跟阿里雲OOS同樣可以提供對象存儲的雲服務。能支持P級別的數據存儲

一說到大數據,我們能想到的是hadoop,底層數據存儲的hdfs,但是實際上現在進入雲時代之後,hdfs的要求內容對於一些存儲就並不是十分合適。

比如阿里每天需要處理的圖片就幾P級別的數據量,在hdfs中壓縮存儲對於快速反應的性能來說是很大的損耗。他們自研的OSS和亞馬遜的S3對象存儲都是一樣的。

我們今天說的ceph是一個開源的對象存儲,並且兼容了亞馬遜的S3接口與Swift對象存儲接口,也就是我們可以使用s3的sdk來使用ceph了。

安裝流程

我們安裝工具是藉助官網提供的一鍵安裝進行安裝。

機器分配

由於我們採用的是三臺真實服務器,沒有再接收多餘服務器配置,並且程序也是處於mvp版本,先實現基礎功能,後期再進行擴展。

640?wx_fmt=png

三臺一樣的機器配置

  • 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下生成如下文件。640?wx_fmt=png

將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是否能成功的被訪問。


  1. 安裝python的s3包 admin admin admin python-boto admin



  2. 寫測試腳本


注意裏面的祕鑰,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,	
        )
  1. 執行腳本測試

Python test.py

打印出對應的桶名字,即代表成功。

總結

本文主要從ceph安裝步驟走起,講解在安裝過程中注意的問題,一方面自己記錄這些內容方便後期查詢,也讓其他朋友有個可參考的方案。

往期文章一覽

1、你爲什麼有那麼多時間寫博客?

2、一次分表踩坑實踐的探討

3、22 省遭受重大洪災,機器學習未來能預報麼?

4、從簡歷被拒到收割今日頭條offer,我花了一年時間

640?wx_fmt=png

640?wx_fmt=png你點的每個在看,我都認真當成了喜歡
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章