集群與存儲
塊存儲應用案例
1.環境准備
為虛擬機創建磁盤鏡像:
[rood@node1~]# rbd create vm1-image --image-feature layering --size 10G
#”vm1-image”是創建的鏡像名
[rood@node1~]#rbd list //查看所有rbd池里的鏡像
[rood@node1~]#rbd info vm1-image //查看詳細信息
[rood@node1~]#qemu-img info rbd:rbd/vm1-image
Ceph認證帳戶:
Ceph默認開啟用戶認證,默認帳戶名為client.admin , key是帳戶的密鑰
/etc/ceph/ceph.conf //配置文件
[root@node1 ceph]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQDOvb5busfJJxAAyqEYMhofNcq2c2jxC36wsw==
部署客戶端環境(真機)
先裝包:ceph-common
拷貝配置文件和連接密鑰(否則無連接權限)
[root@room9pc01~]# scp 192.168.4.51:/etc/ceph/ceph.conf /etc/ceph/
[root@room9pc01~]#scp 192.168.4.51:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
2.創建kvm虛擬機
先Kvm創建初始化虛擬機
[root@room9pc01 ~]# virsh list --all //查看所有的虛擬主機
[root@room9pc01 ~]# ls /etc/libvirt/qemu //看所有虛擬主機的硬件配置文件信息
(虛擬機的名稱,內存,磁盤,網卡等信息)
編寫帳戶的信息文件
[root@room9pc01 ~]# vim /root/secret.xml
<secret ephemeral='no' private='no'>
<usage type='ceph'>
<name>client.admin secret</name>
</usage>
</secret>
使用XML配置文件創建secret
[root@room9pc01 ~]# virsh secret-define --file secret.xml
生成隨機的對應賬戶的UUID: 872a03f9-6d20-4a6b-89a5-53789d67d5d7
#如果定義過了,需要先刪除原先的uuid
[root@room9pc01 ~]# virsh secret-undefine ebee4925-94b2-4a66-940a-6eebb96d3a26
編寫賬戶信息文件(真實機操作)
[root@room9pc01 ~]#ceph auth get-key client.admin
AQDOvb5busfJJxAAyqEYMhofNcq2c2jxC36wsw==
//獲取 client.admin的key, 或者直接查看密鑰文件
[root@room9pc01 ~]#cat /etc/ceph/ceph.clinet.admin.keyring
//出現內容與上面是一樣的
設置secret,添加賬戶的密鑰
[root@room9pc01~]# virsh secret-set-value --secret 872a03f9-6d20-4a6b-89a5-53789d67d5d7 --base64 AQDOvb5busfJJxAAyqEYMhofNcq2c2jxC36wsw==
提示信息:secret 值設定
//這里cecret后面是創建的secret的uuid,base64后面是client.admin帳戶的密碼
[root@room9pc01 ~]# virsh dumpxml avpc > /tmp/avpc1.xml
或#cat /etc/libvirt/qemu/avpc.xml > /tmp/avpc1.xml
#創建一個新的虛擬機初始化生成配置文件即可,修改avpc虛擬機的硬件配置信息
[root@room9pc01 ~]# vim /tmp/avpc1.xml
<disk type='network' device='disk'>
<driver name='qemu' type='raw'/>
添加: <auth username='admin'>
<secret type='ceph' uuid='872a03f9-6d20-4a6b-89a5-53789d67d5d7'/>
</auth>
//這里的uuid就是secret的uuid,有client.admin帳戶和密鑰信息
<source protocol='rbd' name='rbd/vm1-image'>
<host name='192.168.4.51' port='6789'/>
</source>
//連接的ceph主機為192.168.4.51 端口號為6789
<target dev='vda' bus='virtio'/>
//將獲取的鏡像設為虛擬機的vda磁盤
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
使用編輯好的虛擬配置文件/tmp/avpc1.xml 創建虛擬機
[root@room9pc01 ~]# virsh define /tmp/avpc1.xml
定義域 avpc1(從 /tmp/avpc1.xml)
[root@room9pc01 ~]# virsh list --all | grep avpc1
8 avpc1 running
連接光盤鏡像,引導選項>啟用引導菜單打鈎,下面3個選項打鈎鈎即可安轉
(將系統裝入鏡像文件映射的vda磁盤里)
分布式文件系統CephFS
--分布式文件系統(Distibuted File System)是指文件系統管理的物理存儲資
源不一定直接連接在本地節點上,而是通過計算機網絡與節點相連
--CephFS使用Ceph集群提供POSIX兼容的文件系統
--允許Linux直接將Ceph存儲掛載到本地
准備一台新虛擬機,作為GW服務器
要求如下:ip地址:192.168.4.54
主機名:node4
配置yum源
時間同步client
Node1允許無密碼遠程node4
修改node1的/etc/hosts,並同步到所有node主機
元數據服務
元數據(Metata)
--任何文件系統中的數據分為數據和元數據
--數據是指普通文件中的實際數據
--元數據指用來描述一個文件的特征的系統數據(關於實際數據的數據)
--比如:訪問權限,文件擁有者以及文件數據快的分布信息(inode)等
--所以Cephfs必須有MDSs節點
創建元數據服務器
登陸node4,安裝ceph-mds軟件包
[root@node4~]# yum -y install ceph-mds
登陸node1部署節點操作
[root@node1~]# cd /root/ceph-cluster //之前部署ceph集群創建的目錄
[root@node1 ceph-cluser]# ceph-deploy mds create node4
//從node1拷貝配置文件至node4中,啟動mds服務
[root@node1 ceph-cluser]# ceph-deploy admin node4
//發送密鑰給node4
文件系統需要至少2個池
創建存儲池
一個池用於存儲,一個用於儲存元數據
[root@node4~]# ceph osd pool create cephfs_data 128
[root@node4~]# ceph osd pool create cephfs_metadata 128
//需要指定大小,128PG,否則會分配所有空間
// PG是指定存儲池存儲對象的歸屬組的個數,每個PG里都可存多個對象
創建Ceph文件系統
[root@node4 ~]# ceph fs new myfs1 cephfs_metadata cephfs_data
new fs with metadata pool 2 and data pool 1
//先寫存元數據的池,再寫儲存數據的池
Fs:文件系統類型 myfs1:文件系統名
[root@node4 ~]# ceph fs ls
name: myfs1, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
[root@node4 ~]# ceph mds stat //查看mds狀態
e5: 1/1/1 up {0=node4=up:active}
客戶端掛載(Linux內核支持ceph文件系統不用裝軟件)
[root@client ~]# mkdir /cephfs //創建用於掛載的文件夾
[root@client ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQDOvb5busfJJxAAyqEYMhofNcq2c2jxC36wsw==
//密鑰信息
[root@client ~]# mount -t ceph 192.168.4.51:6789:/ /cephfs/ -o name=admin,secret=AQDOvb5busfJJxAAyqEYMhofNcq2c2jxC36wsw==
//-t指定文件系統為ceph
//192.168.4.51為mon節點的ip
//用戶名為admin
//secret是密鑰
[root@client ~]# mount | grep ceph
192.168.4.51:/ on /cephfs type ceph (rw,relatime,name=admin,secret=<hidden>,acl)
//查看是否掛上
Ceph對象存儲
什么是對象存儲?
--就是鍵值存儲,通其接口命令,也就是簡單的GET,PUT,DEL和其他擴展,
向存儲服務上傳下載數據
--對象存儲中所有數據都被認為是一個對象,so 任何數據都可以存入對象存儲服務器,如圖片,視頻,音頻等
RGW是Ceph對象存儲網關,用於向客戶端應用呈現儲存界面,提供RESTful API訪問接口
准備一台新虛擬機,作為元數據服務器
要求如下:ip地址:192.168.4.55
主機名:node5
配置yum源
時間同步client
Node1允許無密碼遠程node5
修改node1的/etc/hosts,並同步到所有node主機
部署RGW軟件包
客戶端通過RGW訪問存儲集群
通過node1安裝ceph-radosgw
[root@node1~]# ceph-deploy install --rgw node5
同步配置文件與密鑰node5
[root@node1~]# cd /root/ceph-cluser
[root@node1 ceph-cluser]# ceph-deploy admin node5
新建網關
啟動一個rgw服務
[root@node1]# ceph-deploy rgw create node5
進入node5驗證服務是否啟動
[root@node5~]#ps aux | grep radosgw
修改服務端口
登陸node5 RGW默認服務端口為7480,修改為80,方便使用
[root@node5~]# /etc/ceph/ceph.conf
[client.rgw.node5]
Host = node5
Rgw_frontens = “civetweb port=80”
//node5是主機名
//civetweb是RGW內置的一個web服務
客戶端測試RGW是否正常工作
[root@client~]# curl 192.168.4.55: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>
創建客戶端連接時使用的帳戶密碼
[node5 ceph]# radosgw-admin user create --uid="testuser" --display-name="First User"
//--uid 指是用戶名 --display-name 是描述信息
"keys": [
{
"user": "testuser",
"access_key": "356O8JOHCM0D0NCW84W3",
"secret_key": "zE4ONNIc9st6OJMADvJAYAYH2rhbWAeDhwrLtwMA"
}
],
// "access_key": 是客戶端訪問網關主機的密鑰
// "secret_key": 是加密字符串
客戶端安裝訪問網關主機node5的工具(命令行訪問工具)
[root@client ~]# yum -y install s3cmd-2.0.1-1.el7.noarch.rpm
顯示testuser用戶密鑰信息
node5 ceph]# radosgw-admin user info --uid=testuser
"keys": [
{
"user": "testuser",
"access_key": "356O8JOHCM0D0NCW84W3",
"secret_key": "zE4ONNIc9st6OJMADvJAYAYH2rhbWAeDhwrLtwMA"
}
],
執行,配置軟件
[root@client /]# s3cmd --configure
Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key: 3D7J0E1479SVO7JH11SN
Secret Key: BN7uWCrQ5l8iu46cFQEZmG9zz8TgrcHrRSepEOOH
S3 Endpoint [s3.amazonaws.com]: 192.168.4.55:80
[%(bucket)s.s3.amazonaws.com]: %(nucket)s.192.168.4.55:80
Use HTTPS protocol [Yes]: no
Test access with supplied credentials? [Y/n] y
Save settings? [y/N] y
//其他注釋默認回車不填寫
客戶端創建存儲數據的bucket(類似於存儲數據的目錄)
[root@client ~]# s3cmd mb s3://my_bucket
Bucket 's3://my_bucket/' created
查看
[root@client ~]# s3cmd ls
2018-10-12 09:49 s3://my_bucket
客戶端上傳文件存儲目錄中(put 上傳)
[root@client ~]# s3cmd put /etc/passwd s3://my_bucket/log/
upload: '/etc/passwd' -> 's3://my_bucket/log/passwd' [1 of 1]
2168 of 2168 100% in 6s 343.79 B/s done
客戶端查看一下
[root@client ~]# s3cmd ls s3://my_bucket/log/
2018-10-12 09:51 2168 s3://my_bucket/log/passwd
將文件下載到本地(wget下載)
[root@client ~]# s3cmd get s3://my_bucket/log/passwd /tmp/
將文件刪除(del 刪除)
[root@client ~]# s3cmd del s3://my_bucket/log/passwd
delete: 's3://my_bucket/log/passwd'
再看一下就沒了
[root@client ~]# s3cmd ls s3://my_bucket/log/