虛擬機使用ceph-deploy安裝ceph 搭建本地yum源 linux修改主機名+免密認證+關閉防火牆

參考:php

ceph官網介紹html

使用ceph-deploy安裝Ceph 12.xnode

安裝虛擬機

首先安裝虛擬機環境,虛擬機安裝這裏不作介紹,本實驗使用的鏡像爲CentOS-7-x86_64-Everything-1804,採用最小安裝,如需安裝其他工具請本身搭建yum源,下面給出搭建本地yum源以及網絡配置的方法python

搭建本地yum源linux

虛擬機網絡NAT模式配置靜態IPweb

 

下面實驗虛擬機上準備四個節點:算法

host     192.168.1.220/221  用做主機json

node1  192.168.1.210/211  ceph節點,同時當作admin node安裝ceph-deployvim

node2  192.168.1.212/213  ceph節點安全

node3  192.168.1.214/215  ceph節點

 

網絡的配置狀況以下:
要建3個網絡: public網絡,cluster網絡,admin網絡

admin網絡: 用來運行yum install從外網下載和安裝

host      192.168.1.221
node1 192.168.1.211
node2 192.168.1.213
node3 192.168.1.215

 

 

 

 

 

public網絡: 是client和Ceph cluster之間通訊與數據傳輸的網絡

host      192.168.1.220/221
node1 192.168.1.210
node2 192.168.1.212
node3 192.168.1.214

 

 

 

 

 

cluster網絡: 是Ceph節點之間通訊和傳輸數據的網絡

host      192.168.1.221
node1 192.168.1.211
node2 192.168.1.213
node3 192.168.1.215

 

 

 

 

安裝前準備工做

Step 1.admin node Enable epel (Extra Packages for Enterprise Linux) repository、ceph.repo配置文件

# 認證,但我顯示系統證書崩潰,請從新註冊,就先跳過了
yum install subscription-manager
subscription-manager repos --enable=rhel-7-server-extras-rpms

yum
install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 安裝參考: http://www.mamicode.com/info-detail-1287279.html

 

文件位於控制節點(即admin node)的 /etc/yum.repos.d/ceph.repo

[ceph-noarch]
name=Ceph noarch packages
# baseurl=https://download.ceph.com/rpm/el7/noarch
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
# gpgkey=https://download.ceph.com/keys/release.asc
gpgkey=http://mirrors.163.com/ceph/keys/release.asc

注意:
上面的註釋部分,是Ceph官網的寫法。可是對於咱們國內的安裝,這樣幾乎沒法成功,由於下載Ceph太慢了,會致使失敗。所以,須要改寫repo文件以更新Ceph源。
經常使用的Ceph鏡像是163鏡像。但在使用163鏡像以後,必須將rpm寫成rpm-luminous,這樣纔會安裝ceph-deploy-2.0.0;若只寫成rpm,則實際安裝的是ceph-deploy-1.5.

 

Step 2.admin node安裝ceph-deploy

yum update
yum install -y ceph-deploy

 管理節點必須具備對Ceph節點的無密碼SSH訪問。 當ceph-deploy以用戶身份登陸到Ceph節點時,該特定用戶必須具備無密碼的sudo權限。

 

Step 3.每一個ceph node 安裝ntp和openssh-server

由於未來擁有monitor的Ceph node須要使用ntp來同步時間,所以須要安裝ntp相關工具。而openssh-server也是必須的。

yum install -y ntp ntpdate ntp-doc
yum install -y openssh-server

 

Step 4.每一個ceph node建立一個Ceph Deploy用戶

ceph-deploy實用程序必須以具備無密碼sudo權限的用戶身份登陸到Ceph節點,由於它須要安裝軟件和配置文件而不提示輸入密碼。

最新版本的ceph-deploy支持--username選項,所以您能夠指定任何具備無密碼sudo的用戶(包括root用戶,但不建議這樣作)。要使用ceph-deploy --username {username},您指定的用戶必須具備對Ceph節點的無密碼SSH訪問權限,由於ceph-deploy不會提示您輸入密碼。

咱們建議在羣集中的全部Ceph節點上爲ceph-deploy建立特定用戶。請不要使用「ceph」做爲用戶名。羣集中的統一用戶名能夠提升易用性(不是必需的),可是您應該避免使用明顯的用戶名,由於黑客一般會使用暴力破解(例如root,admin,{productname})。如下過程用{username}替換您定義的用戶名,描述瞭如何使用無密碼sudo建立用戶。

注意:從Infernalis版本開始,「ceph」用戶名是爲Ceph守護進程保留的。 若是Ceph節點上已存在「ceph」用戶,則必須在嘗試升級以前刪除該用戶。

useradd -d /home/luxiaodai -m luxiaodai
passwd luxiaodai(123456) # 給該用戶sudo的權限 echo "luxiaodai ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/luxiaodai chmod 0440 /etc/sudoers.d/luxiaodai

 

Step 5.admin node設置免密和填寫 ~/.ssh/config 文件

設置免密

# 生成祕鑰
ssh-keygen

# 拷貝到其他節點
ssh-copy-id {username}@node1
ssh-copy-id {username}@node2
ssh-copy-id {username}@node3

~/.ssh/config 這個文件是給ceph-deploy使用的。經過此文件,ceph-deploy能夠知道用戶名和Ceph node的信息;這樣,就不用每次在執行ceph-deploy的時候都指定–username {username}了。用戶(luxiaodai)和節點名稱(node1等)後面會介紹怎麼建立的

Host node1
    Hostname node1
    User luxiaodai
Host node2
    Hostname node2
    User luxiaodai
Host node3
    Hostname node3
    User luxiaodai

關閉防火牆:

linux修改主機名+免密認證+關閉防火牆 

 

Step 6.TTY

在CentOS和RHEL上,您可能在嘗試執行ceph-deploy命令時收到錯誤。 若是在您的Ceph節點上默認設置了requiretty,請經過執行sudo visudo並找到Defaults requiretty設置來禁用它。 將其更改成Defaults:ceph!requiretty或將其註釋掉以確保ceph-deploy可使用您建立的用戶與建立Ceph部署用戶進行鏈接。

 

Step 7.確保您的包管理器已安裝並啓用了priority/preferences package。 在CentOS上,您可能須要安裝EPEL

yum install yum-plugin-priorities

 

CEPH STORAGE CLUSTER安裝

Step 1. 建立工做目錄

本步驟在admin node上完成。

mkdir my_cluster
cd my_cluster

ceph-deploy工具將輸出一些文件到這個my-cluster目錄。要確保每次運行ceph-deploy命令都是在這個目錄下。

注意: 不要使用sudo來運行ceph-deploy命令,也不要在使用非root用戶時以root用戶身份運行ceph-deploy命令。由於ceph-deploy不會把sudo命令也發送到遠端的ceph node上執行。

 

Step 2.環境清理

在任什麼時候候當你陷入困境但願從頭開始部署時,就執行如下的命令以清空Ceph的package以及擦除它的數據和配置:

ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*

這裏執行

ceph-deploy purge node1 node2 node3
ceph-deploy purgedata node1 node2 node3

的時候提示

ImportError: No module named pkg_resources

解決方法:

yum install python-setuptools

若是執行purge,則必須從新安裝Ceph。 最後一個rm命令刪除在先前安裝期間由本地ceph-deploy寫出的全部文件。

 

Step 3. 建立一個集羣

先建立以下圖所示的ceph集羣,1 monitor + 1 manager + 3 osd daemon 

 

1.建立

ceph-deploy new node1

這個命令結束後,會在my-cluster目錄下看到:ceph.conf, ceph.mon.keyring, log文件

 

2. 添加public network的配置到ceph.conf

添加下面這句話到 ceph.conf 文件的 [global] 段

public network = 192.168.1.210/24
or
public network = 192.168.1.210/255.255.255.0

若是要在IPv6環境中部署,請將如下內容添加到本地目錄中的ceph.conf:

echo ms bind ipv6 = true >> ceph.conf

 

3. 安裝Ceph的packages

ceph-deploy install node1 node2 node3

安裝過程當中出現的問題

 
 
# 若是安裝一直有問題,清空/etc/yum.repo,而後將yum源換掉:http://mirrors.ustc.edu.cn/help/epel.html
問題:
[ceph_deploy][ERROR ] RuntimeError: NoSectionError: No section: 'ceph'
解決方法:
yum remove ceph-release
rm /etc/yum.repos.d/ceph.repo.rpmsave
問題:
[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: yum -y install ceph ceph-radosgw
解決方法:
yum -y install ceph ceph-radosgw
ceph安裝缺乏python-werkzeug包
安裝包下載地址:http://rpmfind.net/linux/rpm2html/search.php?query=python-werkzeug
rpm -ivh python-werkzeug-0.9.1-2.el7.noarch.rpm
問題:[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph –version
解決:ceph1 安裝速度過慢,已經超時了,直接手動安裝 yum -y install ceph ceph-radosgw

 安裝成功!!!

 

4. 部署第一個monitor併產生keyring

ceph-deploy mon create-initial

注意:
若出現相似於」Unable to find /etc/ceph/ceph.client.admin.keyring」這樣的錯誤,則要肯定在ceph.conf文件中的mon_host的IP應該是public IP,而不是其餘IP.

當這一步結束時,my-cluster目錄會出現以下的keyring:

 

5. 使用ceph-deploy拷貝配置文件和admin key到ceph nodes.

這樣就可使用ceph CLI來執行命令了,而不用每次都指定monitor的地址和ceph.client.admin.keyring.

ceph-deploy admin node1 node2 node3

 

6. 部署一個manager daemon. (Luminous開始要求的)

ceph-deploy mgr create node1

 

7. 添加osd

添加3個OSD。 出於說明的目的,咱們假設您在每一個節點中都有一個名爲/ dev / vdb的未使用磁盤。 確保設備當前未使用且不包含任何重要數據。

ceph-deploy osd create -data {device} {ceph-node}

ceph-deploy osd create --data /dev/sdb node1
ceph-deploy osd create --data /dev/sdb node2
ceph-deploy osd create --data /dev/sdb node3

注意:若是要在LVM捲上建立OSD,則--data的參數必須是 volume_group/lv_name,而不是卷的塊設備的路徑。

 

 

8. 健康驗證

ssh node1 sudo ceph health

您的羣集應報告HEALTH_OK。 您可使用如下命令查看更完整的羣集狀態:

ssh node1 sudo ceph -s

 查詢結果以下:

 

 

Step 4. 擴展集羣

啓動並運行基本羣集後,下一步是展開羣集。 將Ceph元數據服務器添加到node1。 而後將Ceph Monitor和Ceph Manager添加到node2和node3,以提升可靠性和可用性。

對比第一階段的工做,第二階段要擴展的是:

  • 添加1個metadata server
  • 添加2個monitor
  • 添加2個manager
  • 添加1個RGW

 

1. 添加一個metadata server

若是要使用CephFS,就必須至少添加一個metadata server.

ceph-deploy mds create node1

 

2. 添加2個monitors,達到3個monitors

Ceph存儲集羣須要至少運行一個Ceph Monitor和Ceph Manager。 爲了實現高可用性,Ceph存儲集羣一般運行多個Ceph監視器,所以單個Ceph監視器的故障不會致使Ceph存儲集羣崩潰。 Ceph使用Paxos算法,該算法須要大多數監視器(即大於N / 2,其中N是監視器的數量)才能造成法定人數。 雖然這不是必需的,但監視器的數量每每更好。

ceph-deploy mon add node2
ceph-deploy mon add node3

在添加新的monitor以後,ceph會開始同步這些monitor,並造成一個quorum. 要檢查quorum的狀態,可運行:

ceph quorum_status --format json-pretty
[root@node1 my_cluster]# ceph quorum_status --format json-pretty
{
    "election_epoch": 12,
    "quorum": [
        0,
        1,
        2
    ],
    "quorum_names": [
        "node1",
        "node2",
        "node3"
    ],
    "quorum_leader_name": "node1",
    "monmap": {
        "epoch": 3,
        "fsid": "f314d1c1-b6b9-4060-95b7-c25ec192f612",
        "modified": "2018-11-13 16:04:02.221558",
        "created": "2018-11-13 15:35:34.338001",
        "features": {
            "persistent": [
                "kraken",
                "luminous",
                "mimic",
                "osdmap-prune"
            ],
            "optional": []
        },
        "mons": [
            {
                "rank": 0,
                "name": "node1",
                "addr": "192.168.1.210:6789/0",
                "public_addr": "192.168.1.210:6789/0"
            },
            {
                "rank": 1,
                "name": "node2",
                "addr": "192.168.1.212:6789/0",
                "public_addr": "192.168.1.212:6789/0"
            },
            {
                "rank": 2,
                "name": "node3",
                "addr": "192.168.1.214:6789/0",
                "public_addr": "192.168.1.214:6789/0"
            }
        ]
    }
}

當給Ceph安裝多個monitor以後,應該在每一個monitor主機上都安裝並配置NTP,以保證時間的同步。ntp的配置這裏從略,只簡單概述一下原理:將2臺monitor所在機器配置成向第3臺monitor機器作ntp的同步,而第3臺monitor上經過crontab來定時調用ntpdate命令向Internet上的ntp時鐘源作同步。

 

3. 添加2個managers,達到3個managers

Ceph Manager daemon工做在active/standby的模式。添加多manager,能夠保證若是一個manager或host宕掉,另外一個manager能夠無縫接管過來。

ceph-deploy mgr create node2 node3

能夠經過ceph -s命令看到active和standby的manager.

 

 

4. 添加一個RGW實例

要部署Ceph Object Gateway組件,就必須部署一個RGW實例。

ceph-deploy rgw create node1

GW instance監聽在7480端口。若需改變端口號,可修改ceph.conf文件。

[client]
rgw frontends = civetweb port=80

若要使用IPv6地址,能夠以下修改ceph.conf

[client]
rgw frontends = civetweb port=[::]:80

 

存儲/檢索object數據

要存儲object數據,ceph client必須:
1. 設置一個object name
2. 指定一個pool

注意:
關於ceph client,將在下篇博客介紹。

Ceph client獲取最新的cluster map; 而CRUSH算法計算怎樣將一個object對應到一個placement group,而後再怎樣將這個palcement group動態賦給一個OSD daemon.
要找到這個object的位置,能夠執行以下命令:

ceph osd map {poolname} {object-name}

做爲練習,讓咱們建立一個對象。 在命令行上使用rados put命令指定對象名稱,包含某些對象數據的測試文件的路徑和池名稱。 例如:

rados put {object-name} {file-path} --pool=mytest
ceph osd pool create mypool 8   # 8是該pool的PG的數量
echo "Hello, World" > 1.txt
rados put my-obj-1 1.txt --pool=mypool

檢查Ceph集羣確實存儲了這個object:

rados -p mypool ls

肯定object的位置:

ceph osd map {pool-name} {object-name}

[root@node1 luxiaodai]# ceph osd map mypool my-obj-1
osdmap e26 pool 'mypool' (5) object 'my-obj-1' -> pg 5.ced445fe (5.6) -> up ([0,1,2], p0) acting ([0,1,2], p0)

若要刪除這個object,能夠這樣:

rados rm my-obj-1 --pool=mypool

若是你要刪除池,使用下面命令,出於安全緣由,您須要根據提示提供其餘參數; 刪除池會破壞數據

ceph osd pool rm mypool

刪除須要修改配置文件,加入紅色部分,必須在mon節點上執行

[root@node1 my_cluster]# ceph osd pool delete mypool
Error EPERM: WARNING: this will *PERMANENTLY DESTROY* all data stored in pool mypool.  If you are *ABSOLUTELY CERTAIN* that is what you want, pass the pool name *twice*, followed by --yes-i-really-really-mean-it.
[root@node1 my_cluster]# ceph osd pool delete mypool mypool --yes-i-really-really-mean-it
Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
[root@node1 my_cluster]# vim /etc/ceph/ceph.conf 
[root@node1 my_cluster]# cat /etc/ceph/ceph.conf 
[global]
fsid = f314d1c1-b6b9-4060-95b7-c25ec192f612
mon_initial_members = node1
mon_host = 192.168.1.210
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public network = 192.168.1.210/24

[mon]
mon allow pool delete = true
[root@node1 my_cluster]# systemctl restart ceph-mon.target
[root@node1 my_cluster]# ceph osd pool delete mypool mypool --yes-i-really-really-mean-it
pool 'mypool' removed
如今,集羣部署好了,object也能成功建立了,可是卻並不利於用戶的使用。用戶使用存儲,通常不直接經過原始的object,而是主要有3種使用方式:
  • 塊設備
  • 文件系統
  • 對象存儲(比上述原生的object多了一些封裝,常見的有經過S3 API或Swift API進行對象的存取)

 

BLOCK DEVICE QUICK START

1. 安裝Ceph

首先要確保是Linux kernel以及合適的版本。

在admin node上運行如下命令,將Ceph安裝到ceph-client node上:

ceph-deploy install host

而後,運行如下命令將Ceph配置文件和ceph.client.admin.keyring拷貝到ceph-client上。

ceph-deploy admin host

 

2. 建立一個塊設備的pool

在以前的文章中,已經建立了一個叫作mypool的pool,如今須要運行如下命令以使得該pool能夠做爲RBD使用:

rbd pool init mypool

 

3. 配置一個block device(塊設備)

1.建立一個block device image

rbd create foo --size 4096 --image-feature layering [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] [-p {pool-name}]
rbd create test --pool mypool --size 4096 --image-feature layering -m 192.168.1.210 -k /etc/ceph/ceph.client.admin.keyring

如要查看所建立的rbd,能夠這樣:

rbd info test -p mypool

結果以下:

 

2.map一個block device image

sudo rbd map foo --name client.admin [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring] [-p {pool-name}]

rbd map mypool/test --name client.admin -m 192.168.1.210 -k /etc/ceph/ceph.client.admin.keyring

 

3.建立一個文件系統並掛載

 

注意: 這裏的rbd map和mount命令只是當時起做用。若系統重啓了,則須要從新手動作。 若要開機自動作,可參考官方文檔:rbdmap manpage.

相關文章
相關標籤/搜索