ceph對象存儲(rgw)服務、高可用安裝配置

ceph對象存儲服務、高可用安裝配置

簡介:
    Ceph本質上就是一個rados,利用命令rados就能夠訪問和使用ceph的對象存儲,但做爲一個真正產品機的對象存儲服務,一般使用的是Restfulapi的方式進行訪問和使用。而radosgw其實就是這個做用,安裝完radosgw之後,就可使用api來訪問和使用ceph的對象存儲服務了。
    首先明白一下架構,radosgw其實名副其實,就是rados的一個網關,做用是對外提供對象存儲服務。本質上radosgw(其實也是一個命令)和rbd命令同樣,實際上是ceph集羣的客戶端。只不過,radosgw即做爲rados的客戶端,同時又提供http restful接口,做爲服務端供用戶使用。Radosgw對用戶而言就是一個http restful的應用,所以本質上來說,對其進行使用就是經過http的方式,但顯然每次都要用戶構建http訪問的url和headers不是一個很方便的方式,所以radosgw兼容了通用的對象存儲接口,分別是亞馬遜的s3和openstack的swift,這也就是說你能夠用swift或者s3的客戶端來訪問radosgw。
    Radosgw包含兩個命令行工具:
    一個是radosgw,這個是用來啓動radosgw服務的腳b本,是一個二進制文件;
    另一個是radosgw-admin,這是用來管理radosgw的帳號的一個命令行工具,主要用來建立、查看、修改radosgw的帳號信息。

注意,radowgw的帳號信息僅僅是對radosgw的用戶而言,這個和ceph中的用戶不是一個概念。
    Radosgw做爲ceph集羣(rados)的客戶端,所以他在ceph中有一個帳號,一般叫作client.radosgw.gateway。在啓動radosgw這個服務時,會讀取ceph.conf中[client.radosgw.gateway]這個section。

RGW業務處理流程:

http reqest --> apache 轉 FastCgi module

FastCgi module --> radosgw  經過socket請求實現

radosgw --> ceph集羣  經過socket實現,調用rados接口


一:配置部署環境介紹:
1:系統版本:
[root@node242 ~]# more /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)

2:內核版本:
[root@node242 ~]# uname  -a
Linux node242 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

3:ceph 版本:
[root@node242 ~]# ceph --version
ceph version 0.94.5 (9764da52395923e0b32908d83a9f7304401fee43)

4:集羣節點數和osd 狀況:
[root@node242 ~]# ceph osd tree
ID WEIGHT  TYPE NAME            UP/DOWN REWEIGHT PRIMARY-AFFINITY
-6       0 host node01                                            
-1 1.35999 root default                                           
-2 0.09000     host ceph-deploy                                   
 0 0.09000         osd.0             up  1.00000          1.00000
-3 0.09000     host node241                                       
 1 0.09000         osd.1             up  1.00000          1.00000
-4 0.09000     host node242                                       
 2 0.09000         osd.2             up  1.00000          1.00000
-5 1.00000     host node243                                       
 3 1.00000         osd.3             up  1.00000          1.00000
-7 0.09000     host node245                                       
 5 0.09000         osd.5             up  1.00000          1.00000
 
 
 二:部署
1:安裝Apache服務
    在Apache 2.4發行版(如RHEL 7,CentOS7),mod_proxy_fcgi默認已經會安裝。 httpd 安裝完成,mod_proxy_fcgi可用的服務器上使用。

yum install httpd -y

2:修改httpd服務,先清理一下配置文件的無用註釋;
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
sed -i '/^#/d' /etc/httpd/conf/httpd.conf

vim /etc/httpd/conf/httpd.conf

修改配置中的LISTEN字段,將網關所在主機的IP地址添加進去

Listen 192.168.2.42:80

添加ServerName項,添加上本身服務器的IP地址

ServerName 192.168.2.42:80

3:在配置尾部增長以下信息,加載mod_proxy_fcgi
首先確認一下模塊存在
[root@node242 ~]# ll /etc/httpd/modules/mod_proxy_fcgi.so
-rwxr-xr-x 1 root root 19360 Nov 20 05:44 /etc/httpd/modules/mod_proxy_fcgi.so

添加內容以下:

<IfModule !proxy_fcgi_module>
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
</IfModule>

4:重啓apache服務

systemctl start httpd

5:配置apache ssl配置
    此選項主要爲了對應,一些resetful客戶端默認使用https;若是公司有信任機構頒發的證書,能夠直接使用,若是沒有能夠本身作一個自認證的證書,網上有不少配置參考文檔,本次演示直接使用公司的正式ssl證書。

6:安裝apache ssl證書相關依賴軟件包安裝

yum install mod_ssl openssl -y

##########################
須要作自簽名證書的參照信息以下:
http://docs.ceph.com/docs/master/install/install-ceph-gateway/
Enable SSL  ==》步驟 2~6
############################

7:上傳公司ssl證書到服務器 (本次演示直接使用公司的正式ssl證書)

[root@node242 ceph]# ll
-rw-r--r-- 1 root root 6335 Dec 23 15:48 ptengine.cn.crt
-rw-r--r-- 1 root root 1704 Dec 23 15:48 ptengine.cn.key

copy文件到相關目錄
cp -rp ptengine.cn.crt  /etc/pki/tls/certs/ptengine.cn.crt
cp -rp ptengine.cn.key /etc/pki/tls/private/ptengine.cn.key

驗證文件是否就位
ll  /etc/pki/tls/certs/ptengine.cn.crt
ll /etc/pki/tls/private/ptengine.cn.key

8:配置文件修改/etc/httpd/conf.d/ssl.conf
首先清理配置文件註釋項;
cp -rp /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.bak

sed -i '/^#/d' /etc/httpd/conf.d/ssl.conf

9:修改配置項以下:
vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile  /etc/pki/tls/certs/ptengine.cn.crt
SSLCertificateKeyFile /etc/pki/tls/private/ptengine.cn.key


10:配置修改完成,重啓apache
systemctl restart httpd

三:安裝Ceph對象存儲網關服務
    ceph網關實際上是ceph集羣的一個客戶端,用戶經過這個網關間接訪問ceph集羣,

1:軟件包安裝:
yum install ceph-radosgw -y

2:配置Ceph的對象存儲準備信息

    ceph網關實際上是ceph集羣的一個客戶端,用戶經過這個網關間接訪問ceph集羣,做爲客戶端,它須要準備以下內容:
網關名稱,此處用gateway稱呼、
一個能夠訪問存儲集羣的用戶以及對應的KEYRING
數據資源池,這個由ceph集羣提供
爲網關服務示例準備一個數據存放空間
在ceph.conf配置文件中設置gateway信息

3:建立訪問用戶及權限設置
建立gateway keyring,
ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring
chmod +r /etc/ceph/ceph.client.radosgw.keyring

4:建立網關用戶名以及key 此處名字爲 client.radosgw.gateway
ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.gateway --gen-key

5:驗證:
[root@node242 ceph]# more ceph.client.radosgw.keyring
[client.radosgw.gateway]
        key = AQBXI3lWoOC7MBAAWMHg+sNAelf8S3Hm3S5BiQ==

6:爲KEYRING添加權限
ceph-authtool -n client.radosgw.gateway --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring

7:驗證受權:
[root@node242 ceph]# more ceph.client.radosgw.keyring
[client.radosgw.gateway]
        key = AQBXI3lWoOC7MBAAWMHg+sNAelf8S3Hm3S5BiQ==
        caps mon = "allow rwx"
        caps osd = "allow rwx"
        

8:將key添加到集羣中
ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.gateway -i /etc/ceph/ceph.client.radosgw.keyring


備註:若是想在多節點安裝對象存儲服務,將相關的KEYRING文件拷貝到rados-gateway所在的主機 /etc/ceph/目錄下

9:手動建立pool
Ceph的對象網關要求Ceph的存儲集羣池存儲特定網關的數據。 若是您建立的用戶有權限,網關將自動建立池,可是有些可能建立不成功。
手工建立方式以下:  參考命令:ceph osd pool create {poolname} {pg-num} {pgp-num}

ceph osd pool create .rgw 128 128
ceph osd pool create .rgw.root 128 128
ceph osd pool create .rgw.control 128 128
ceph osd pool create .rgw.gc 128 128
ceph osd pool create .rgw.buckets 128 128
ceph osd pool create .rgw.buckets.index 128 128
ceph osd pool create .log 128 128
ceph osd pool create .intent-log 128 128
ceph osd pool create .usage 128 128
ceph osd pool create .users 128 128
ceph osd pool create .users.email 128 128
ceph osd pool create .users.swift 128 128
ceph osd pool create .users.uid 128 128

若是pool已經存在,系統會給出提示
pool '.users.uid' already exists

10:查看pool
[root@node242 ceph]# ceph osd lspools
4 rbd,5 mypool,13 flask_test,16 .rgw,17 .rgw.root,18 .rgw.control,19 .rgw.gc,20 .rgw.buckets,21
.rgw.buckets.index,22 .log,23 .intent-log,24 .usage,25 .users,26 .users.email,27 .users.swift,28 .users.uid,


11:將網關配置信息添加到集羣配置中,不一樣的主機注意須要修改host=後面的信息
[client.radosgw.gateway]
host=node242
keyring=/etc/ceph/ceph.client.radosgw.keyring
rgw socket path=/var/run/ceph/ceph.radosgw.gateway.fastcgi.sock
log file=/var/log/radosgw/client.radosgw.gateway.log
rgw frontends=fastcgi socket_port=9000 socket_host=0.0.0.0
rgw print continue=false

另外按需添加debgu 配置,輔助調試;添加位置爲[global]  
注意:按需添加,非必須
[global]
#append the following in the global section.
debug ms = 1
debug rgw = 20

12:建立radosgw服務啓動所需環境並修改權限

建立數據目錄
mkdir -p /var/lib/ceph/radosgw/ceph-radosgw.gateway
   
調整apache運行權限
chown apache:apache /var/run/ceph

調整日誌權限
touch /var/log/radosgw/client.radosgw.gateway.log
chown apache:apache /var/log/radosgw/client.radosgw.gateway.log

13:啓動網關服務
/etc/init.d/ceph-radosgw start

14:驗證,服務監聽端口 9000
[root@node242 ceph]# netstat -tunlp
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN      9372/radosgw


 15:添加網關配置文件,用於web server和FastCGI之間的交互

官網演示配置信息以下(僅http):

vi /etc/httpd/conf.d/rgw.conf

<VirtualHost *:80>
ServerName localhost          《---若是內部有dns服務器能夠寫域名,沒有dns也能夠寫本機ip地址,推薦寫域名
DocumentRoot /var/www/html

ErrorLog /var/log/httpd/rgw_error.log
CustomLog /var/log/httpd/rgw_access.log combined

# LogLevel debug

RewriteEngine On

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

SetEnv proxy-nokeepalive 1

ProxyPass / unix:///var/run/ceph/ceph.radosgw.gateway.fastcgi.sock|fcgi://localhost:9000/

</VirtualHost>


本次測試環境將對http、https 同時進行配置,配置文件以下:

#########################測試環境配置###########################
#http訪問配置
<VirtualHost *:80>
ServerName rgw.ptengine.cn
#DocumentRoot /var/www/html
ErrorLog /var/log/httpd/rgw_error.log
CustomLog /var/log/httpd/rgw_access.log combined
# LogLevel debug
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
SetEnv proxy-nokeepalive 1
ProxyPass / fcgi://localhost:9000/
#ProxyPass / unix:///var/run/ceph/ceph.radosgw.gateway.fastcgi.sock|fcgi://localhost:9000/
</VirtualHost>

#https訪問配置

<VirtualHost *:443>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateFile /etc/pki/tls/certs/ptengine.cn.crt
SSLCertificateKeyFile /etc/pki/tls/private/ptengine.cn.key
ServerName rgw.ptengine.cn
#DocumentRoot /var/www/html
ErrorLog /var/log/httpd/rgw_error.log
CustomLog /var/log/httpd/rgw_access.log combined
# LogLevel debug
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
SetEnv proxy-nokeepalive 1
ProxyPass / fcgi://localhost:9000/
#ProxyPass / unix:///var/run/ceph/ceph.radosgw.gateway.fastcgi.sock|fcgi://localhost:9000/
</VirtualHost>
####################################################

16:重啓apache服務
systemctl restart httpd

以上配置將對象存儲網關配置完成,下面將進行對象存儲網關相關功能演示;


四:對象存儲功能測試;

1:radosgw-admin命令簡要介紹

命令能夠是如下選項之一:

建立一個新用戶
user create

修改用戶
user modify

顯示信息的用戶,以及任何潛在的可用子用戶和祕鑰
user info

刪除用戶
user rm

修改一個子用戶
subuser modify

刪除子用戶
subuser RM

查看存儲空間列表
radosgw-admin bucket list
[
    "rgw",
    "my-new-bucket",
    "ptmind-test-bucket
查看全部的bucket

刪除bucket
radosgw-admin bucket rm  s3://my-new-bucket

獲取s3用戶名:
rados -p .users.uid ls

獲取用戶詳細信息:
for user in `rados -p .users.uid ls` ;do radosgw-admin metadata get user:$user;done;

刪除一個bucket:
radosgw-admin bucket unlink --bucket=foo

刪除一個用戶和全部相關的bucket與他們的內容:
radosgw-admin user rm --uid=johnny --purge-data

刪除用戶命令:
radosgw-admin user rm --uid=pttest

2:建立s3類型訪問用戶
radosgw-admin user create --uid=ptmind --display-name="ptmind for ceph" --email=kevin@ptmind.com
返回信息以下:
{
    "user_id": "ptmind",
    "display_name": "ptmind for ceph",
    "email": "kevin@ptmind.com",
    "suspended": 0,
    "max_buckets": 1000,
    "auid": 0,
    "subusers": [],
    "keys": [
        {
            "user": "ptmind",
            "access_key": "CLAV9B0BEAAA6XF17P2Y",
            "secret_key": "DbiQnQGuC7HMadOuptFgVMOMJhnMKKG2UNtePbS5"
        }
    ],
    "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": []
}

3:建立SWIFT類型USER

radosgw-admin subuser create --uid=ptmind --subuser=ptmind :swift --access=full
{
    "user_id": "ptmind",
    "display_name": "ptmind for ceph",
    "email": "kevin@ptmind.com",
    "suspended": 0,
    "max_buckets": 1000,
    "auid": 0,
    "subusers": [
        {
            "id": "ptmind:ptmind",
            "permissions": "full-control"
        }
    ],
    "keys": [
        {
            "user": "ptmind:ptmind",
            "access_key": "3O61RZPCIR5Y4YCKBKP2",
            "secret_key": ""
        },
        {
            "user": "ptmind",
            "access_key": "CLAV9B0BE9BA6XF17P2Y",
            "secret_key": "DbiQnQGuC7HMadOuptFgVMOMJhnMKKG2UNtePbS5"
        }
    ],
    "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": []
}



4:實際驗證訪問
下面是官網一段python代碼,用於訪問網關,並建立bucket,並經過list方法羅列出當前全部的bucket。

5:依賴庫安裝
yum install python-boto -y


6:保存腳本內容:
注意:修改host= 後面ip地址
vi s3test.py

import boto
import boto.s3.connection
access_key = 'CLAV9B0BE9BA6XF17P2Y'                       
secret_key = 'DbiQnQGuC7HMadOuptFgVMOMJhnMKKG2UNtePbS5'
conn = boto.connect_s3(
aws_access_key_id = access_key,
aws_secret_access_key = secret_key,
host = '192.168.2.42',
is_secure=False,
calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
bucket = conn.create_bucket('ptmind-test-bucket')
for bucket in conn.get_all_buckets():
        print "{name}\t{created}".format(
                name = bucket.name,
                created = bucket.creation_date,
)



7:運行腳本,查看結果;
python s3test.py
ptmind-test-bucket   2015-10-10T06:23:48.000Z

至此,Ceph集羣的對象存儲網關安裝設置完畢

五:對象存儲調試工具推薦:
調試對象存儲,推薦式s3cmd

1:安裝和配置s3cmd
yum install s3cmd -y

2:配置s3cmd進行S3接口測試,初始化 s3cmd本地環境  將以前radosgw-admin建立的user的access_key和secret_key,根據本機實際進行賦值;

vim ~/.s3cfg

[default]
access_key = 6FIZEZBT3LUBTPC60Z33
bucket_location = US
cloudfront_host = ceph.ptengine.cn
cloudfront_resource = /2015-12-15/distribution
default_mime_type = binary/octet-stream
delete_removed = False
dry_run = False
encoding = UTF-8
encrypt = False
follow_symlinks = False
force = False
get_continue = False
gpg_command = /usr/bin/gpg
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_passphrase =
guess_mime_type = True
host_base = ceph-100-80
host_bucket = %(*)s.ceph-100-80
human_readable_sizes = False
list_md5 = False
log_target_prefix =
preserve_attrs = True
progress_meter = True
proxy_host =
proxy_port = 0
recursive = False
recv_chunk = 4096
reduced_redundancy = False
secret_key = DbiQnQGuC7HMadOuptFgVMOMJhnMKKG2UNtePbS5
send_chunk = 4096
simpledb_host = rgw.ptengine.cn
skip_existing = False
socket_timeout = 10
urlencoding_mode = normal
use_https = False
verbosity = WARNING

3:測試是否配置成功:

s3cmd --configure
將會問你一系列問題:
    AWS S3的訪問密鑰和安全密鑰
    對AWS S3雙向傳輸的加密密碼和加密數據
    爲加密數據設定GPG程序的路徑(例如,/usr/bin/gpg)
    是否使用https協議
    若是使用http代理,設定名字和端口

配置將以保存普通文本格式保存在 ~/.s3cfg.
一路選肯定,由於咱們已經配置過了,直到最後一步Test選y:

########################本人測試環境配置,s3cmd自測ok#############################
[root@ceph-100-80 ceph]# more ~/.s3cfg
[default]
access_key = 6FIZEZBT3LUBTPC60Z33
access_token =
add_encoding_exts =
add_headers =
bucket_location = US
ca_certs_file =
cache_file =
check_ssl_certificate = True
check_ssl_hostname = True
cloudfront_host = rgw.ptengine.cn
default_mime_type = binary/octet-stream
delay_updates = False
delete_after = False
delete_after_fetch = False
delete_removed = False
dry_run = False
enable_multipart = True
encoding = UTF-8
encrypt = False
expiry_date =
expiry_days =
expiry_prefix =
follow_symlinks = False
force = False
get_continue = False
gpg_command = /usr/bin/gpg
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_passphrase =
guess_mime_type = True
host_base = rgw.ptengine.cn
host_bucket = %(*)s.rgw.ptengine.cn
human_readable_sizes = False
invalidate_default_index_on_cf = False
invalidate_default_index_root_on_cf = True
invalidate_on_cf = False
kms_key =
limitrate = 0
list_md5 = False
log_target_prefix =
long_listing = False
max_delete = -1
mime_type =
multipart_chunk_size_mb = 15
preserve_attrs = True
progress_meter = True
proxy_host =
proxy_port = 0
put_continue = False
recursive = False
recv_chunk = 4096
reduced_redundancy = False
requester_pays = False
restore_days = 1
secret_key = DbiQnQGuC7HMadOuptFgVMOMJhnMKKG2UNtePbS5
send_chunk = 4096
server_side_encryption = False
signature_v2 = False
simpledb_host = rgw.ptengine.cn
skip_existing = False
socket_timeout = 10
stop_on_error = False
storage_class =
urlencoding_mode = normal
use_https = False
use_mime_magic = True
verbosity = WARNING
website_endpoint = http://rgw.ptengine.cn/
website_error =
website_index = index.html

#####################################################

4:s3cmd命令參數介紹:

幫助命令:
s3cmd --help
使用方法

1:配置,主要是 Access Key ID 和 Secret Access Key
s3cmd --configure

2:列舉全部 Buckets。(bucket 至關於根文件夾)
s3cmd ls

3:建立 bucket,且 bucket 名稱是惟一的,不能重複。
s3cmd mb s3://my-bucket-name

4:刪除空 bucket
s3cmd rb s3://my-bucket-name

5:列舉 Bucket 中的內容
s3cmd ls s3://my-bucket-name

6:上傳 file.txt 到某個 bucket,
s3cmd put file.txt s3://my-bucket-name/file.txt

7:上傳並將權限設置爲全部人可讀
s3cmd put --acl-public file.txt s3://my-bucket-name/file.txt

8:批量上傳文件
s3cmd put ./* s3://my-bucket-name/

9:下載文件
s3cmd get s3://my-bucket-name/file.txt file.txt

10:批量下載
s3cmd get s3://my-bucket-name/* ./

11:刪除文件
s3cmd del s3://my-bucket-name/file.txt

12:來得到對應的bucket所佔用的空間大小
s3cmd du -H s3://my-bucket-name


######目錄處理規則########


如下命令都能將dir1 中的文件上傳至my-bucket-name,但效果只大相徑庭的。

1:dir1 不帶"/"斜槓,那麼dir1會做爲文件路徑的一部分,至關於上傳整個dir1目錄,即相似 "cp -r dir1/"

~/demo$ s3cmd put -r dir1 s3://my-bucket-name/
dir1/file1-1.txt -> s3://my-bucket-name/dir1/file1-1.txt  [1 of 1]

2:帶"/"斜槓的 dir1,至關於上傳dir1目錄下的全部文件,即相似 "cp ./* "

~/demo$ s3cmd put -r dir1/ s3://my-bucket-name/
dir1/file1-1.txt -> s3://my-bucket-name/file1-1.txt  [1 of 1]


########同步方法########

這是s3cmd 使用難點,但倒是最實用的功能。官方使用說明見《s3cmd sync HowTo》http://s3tools.org/s3cmd-sync
首先明確,同步操做是要進行MD5校驗的,只有當文件不一樣時,纔會被傳輸。
常規同步操做

1:同步當前目錄下全部文件
s3cmd sync  ./  s3://my-bucket-name/

s3cmd sync    s3://my-bucket-name/  ./

2:加 "--dry-run"參數後,僅列出須要同步的項目,不實際進行同步。
s3cmd sync  --dry-run ./  s3://my-bucket-name/

3:加 " --delete-removed"參數後,會刪除本地不存在的文件。
s3cmd sync  --delete-removed ./  s3://my-bucket-name/

s3cmd sync --delete-removed --force ./  s3://test.bucket


4:加 " --skip-existing"參數後,不進行MD5校驗,直接跳過本地已存在的文件。
s3cmd sync  --skip-existing ./  s3://my-bucket-name/

4.二、高級同步操做

4.2.一、排除、包含規則(--exclude 、--include)

file1-1.txt被排除,file2-2.txt一樣是txt格式卻能被包含。
~/demo$ s3cmd sync --dry-run --exclude '*.txt' --include 'dir2/*' ./  s3://my-bucket-name/
exclude: dir1/file1-1.txt
upload: ./dir2/file2-2.txt -> s3://my-bucket-name/dir2/file2-2.txt

4.2.二、從文件中載入排除或包含規則。(--exclude-from、--include-from)
s3cmd sync  --exclude-from pictures.exclude ./  s3://my-bucket-name/

pictures.exclude 文件內容

# Hey, comments are allowed here ;-)
*.jpg
*.gif

4.2.三、排除或包含規則支持正則表達式
--rexclude 、--rinclude、--rexclude-from、--rinclude-from


六:多節點部署對象存儲服務

1:安裝相關軟件包
yum install httpd mod_ssl openssl ceph-radosgw python-boto s3cmd -y

2:copy文件到相關目錄
ceph rgw key文件、apache配置文件、ssl證書等
rsync -avp --delete /etc/ceph root@172.16.100.81:/etc/ceph
scp -rp /etc/httpd/conf/httpd.conf root@172.16.100.81:/etc/httpd/conf/
scp -rp /etc/pki/tls/certs/ptengine.cn.crt root@172.16.100.81:/etc/pki/tls/certs/ptengine.cn.crt
scp -rp /etc/pki/tls/private/ptengine.cn.key root@172.16.100.81:/etc/pki/tls/private/ptengine.cn.key
scp -rp /etc/httpd/conf.d/ssl.conf root@172.16.100.81:/etc/httpd/conf.d/ssl.conf
scp -rp /etc/httpd/conf.d/rgw.conf root@172.16.100.81:/etc/httpd/conf.d/rgw.conf
scp -rp  ~/.s3cfg root@172.16.100.81: ~/.s3cfg

3:建立目錄及日誌文件
mkdir -p /var/lib/ceph/radosgw/ceph-radosgw.gateway
chown apache:apache /var/run/ceph
touch /var/log/radosgw/client.radosgw.gateway.log
chown apache:apache /var/log/radosgw/client.radosgw.gateway.log

4:將網關配置信息添加到集羣配置中,若是是從配置成功的節點copy過來的配置文件,只要修改host=項爲本機ip地址便可
[client.radosgw.gateway]
host=ceph-100-81
keyring=/etc/ceph/ceph.client.radosgw.keyring
rgw socket path=/var/run/ceph/ceph.radosgw.gateway.fastcgi.sock
log file=/var/log/radosgw/client.radosgw.gateway.log
rgw frontends=fastcgi socket_port=9000 socket_host=0.0.0.0
rgw print continue=false

5:修改http監聽ip地址爲本機
vim /etc/httpd/conf/httpd.conf
Listen 172.16.100.82:80
ServerName 172.16.100.82:80

6:重啓httpd 服務
 systemctl restart httpd

7:啓動radosgw 服務

[root@ceph-100-82 ceph]# /etc/init.d/ceph-radosgw start
Starting ceph-radosgw (via systemctl):  [  OK  ]

8:驗證監聽端口
[root@ceph-100-82 ceph]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 172.16.100.82:80        0.0.0.0:*               LISTEN      20328/httpd         

9:運行腳本,查看結果;
python s3test.py
ptmind-test-bucket   2015-10-10T06:23:48.000Z

如需再次添加節點,按照以上步驟操做便可;

七:對象存儲高可用、負載均衡配置;
本次測試環境,3臺服務器配置radosgw服務,信息以下:

 172.16.100.80                
 172.16.100.81
 172.16.100.82

實現功能目標:
1:多接點負載請求壓力;
2:單節點故障實現自動冗餘;
3:提供http、https 請求;

使用nginx服務配置反向代理負載均衡;詳細配置以下:

#########################nginx 反向代理配置###########################

nginx——apache/fastcgi/ceph


#port 80
      upstream  rgwstream80 {                                                                   
        ip_hash;                                                                       
        server   172.16.100.80 max_fails=2 fail_timeout=10s;                 
        server   172.16.100.81 max_fails=2 fail_timeout=10s;
        server   172.16.100.82 max_fails=2 fail_timeout=10s;                     
        }                                                                   
      upstream  rgwstream443 {
        ip_hash;
        server   172.16.100.80:443 max_fails=2 fail_timeout=10s;
        server   172.16.100.81:443 max_fails=2 fail_timeout=10s;
        server   172.16.100.82:443 max_fails=2 fail_timeout=10s;
        }
      server                                                                           
      {                                                                                
        listen  80;
        server_name   rgw.ptengine.cn;
       access_log       /data/nginxlog/rgw.ptengine.cn.log etllog;
        proxy_redirect off;                                                          
        location / {                                                             
#                   proxy_next_upstream  error timeout invalid_header http_500 http_503 http_404;
                    proxy_pass        http://rgwstream80;                                     
                    proxy_set_header   Host             $host;                       
                    proxy_set_header   X-Real-IP        $remote_addr;                
                    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                    #容許客戶端請求的最大單個文件字節數
                    client_max_body_size     10m;
                    #緩衝區代理緩衝用戶端請求的最大字節數,能夠理解爲先保存到本再傳給用戶
                    client_body_buffer_size  256k;
                    #跟後端服務器鏈接的超時時間_發起握手等候響應超時時間
                    proxy_connect_timeout    6m;
                    #鏈接成功後_等候後端服務器響應時間_其實已經進入後端的排隊之等候處理
                    proxy_read_timeout       6m;
                    #後端服務器數據回傳時間_就是在規定時間內後端服務器必須傳完全部的數據
                    proxy_send_timeout       6m;
                    #代理請求緩存區_這個緩存區間會保存用戶的頭信息以供Nginx進行則處理_通常只要能保存下頭信息便可
                    proxy_buffer_size        64k;
                    #同上 告訴Nginx保存單個用的幾個Buffer 最大用多大空間
                    proxy_buffers            4 256k;
                    #若是系統很忙的時候能夠申請更大的proxy_buffers 官方推薦*2    
                    proxy_busy_buffers_size 256k;
                    #proxy緩存臨時文件的大小
                    proxy_temp_file_write_size 256k;
                    # redirecet server error pages to the static pag !
                    error_page  502 503 504        /502.html;
                    }
    }

      server
      {
        listen  443;
        server_name  rgw.ptengine.cn;
        access_log       /data/nginxlog/rgw.ptengine.cn.log etllog;
        ssl                  on;
        ssl_certificate  /usr/local/nginx/ssl/www.ptengine.cn.crt;
        ssl_certificate_key  /usr/local/nginx/ssl/www.ptengine.cn.key;
        proxy_redirect off;
        location / {
                    proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
                    proxy_pass        https://rgwstream443;
                    proxy_set_header   Host             $host;
                    proxy_set_header   X-Real-IP        $remote_addr;
                    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                    #容許客戶端請求的最大單個文件字節數
                    client_max_body_size     10m;
                    #緩衝區代理緩衝用戶端請求的最大字節數,能夠理解爲先保存到本再傳給用戶
                    client_body_buffer_size  256k;
                    #跟後端服務器鏈接的超時時間_發起握手等候響應超時時間
                    proxy_connect_timeout    6m;
                    #鏈接成功後_等候後端服務器響應時間_其實已經進入後端的排隊之等候處理
                    proxy_read_timeout       6m;
                    #後端服務器數據回傳時間_就是在規定時間內後端服務器必須傳完全部的數據
                    proxy_send_timeout       6m;
                    #代理請求緩存區_這個緩存區間會保存用戶的頭信息以供Nginx進行則處理_通常只要能保存下頭信息便可
                    proxy_buffer_size        64k;
                    #同上 告訴Nginx保存單個用的幾個Buffer 最大用多大空間
                    proxy_buffers            4 256k;
                    #若是系統很忙的時候能夠申請更大的proxy_buffers 官方推薦*2    
                    proxy_busy_buffers_size 256k;
                    #proxy緩存臨時文件的大小
                    proxy_temp_file_write_size 256k;
                    error_page  502 503 504        /502.html;
                    }                                     
          
        }


外圍主機須要使用s3cmd調用存儲網關上傳下載文件,操做步驟以下:

安裝軟件包:
yum install mod_ssl openssl python-boto s3cmd -y

生成配置文件:
vim ~/.s3cfg
[default]
access_key = 6FIZEZBT3LUBTPC60Z33
access_token =
add_encoding_exts =
add_headers =
bucket_location = US
ca_certs_file =
cache_file =
check_ssl_certificate = True
check_ssl_hostname = True
cloudfront_host = rgw.ptengine.cn
default_mime_type = binary/octet-stream
delay_updates = False
delete_after = False
delete_after_fetch = False
delete_removed = False
dry_run = False
enable_multipart = True
encoding = UTF-8
encrypt = False
expiry_date =
expiry_days =
expiry_prefix =
follow_symlinks = False
force = False
get_continue = False
gpg_command = /usr/bin/gpg
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_passphrase =
guess_mime_type = True
host_base = rgw.ptengine.cn
host_bucket = %(*)s.rgw.ptengine.cn
human_readable_sizes = False
invalidate_default_index_on_cf = False
invalidate_default_index_root_on_cf = True
invalidate_on_cf = False
kms_key =
limitrate = 0
list_md5 = False
log_target_prefix =
long_listing = False
max_delete = -1
mime_type =
multipart_chunk_size_mb = 15
preserve_attrs = True
progress_meter = True
proxy_host =
proxy_port = 0
put_continue = False
recursive = False
recv_chunk = 4096
reduced_redundancy = False
requester_pays = False
restore_days = 1
secret_key = pTh23YAx8aXFBdFlhPV4lTTrQweYNprDyQj0Ff3n
send_chunk = 4096
server_side_encryption = False
signature_v2 = False
simpledb_host = rgw.ptengine.cn
skip_existing = False
socket_timeout = 10
stop_on_error = False
storage_class =
urlencoding_mode = normal
use_https = False
use_mime_magic = True
verbosity = WARNING
website_endpoint = http://rgw.ptengine.cn/
website_error =
website_index = index.html

測試是否配置成功:

s3cmd --configure
將會問你一系列問題:
    AWS S3的訪問密鑰和安全密鑰
    對AWS S3雙向傳輸的加密密碼和加密數據
    爲加密數據設定GPG程序的路徑(例如,/usr/bin/gpg)
    是否使用https協議
    若是使用http代理,設定名字和端口

配置將以保存普通文本格式保存在 ~/.s3cfg.
一路選肯定,由於咱們已經配置過了,直到最後一步Test選y:

最終驗證:
[root@lvs-3-65 tmp]# s3cmd ls

正常返回結果爲ok;
2015-12-28 09:23  s3://rgw
2016-01-04 10:49  s3://synctest
2016-01-04 09:55  s3://test.bucket
You have new mail in /var/spool/mail/root


參考文檔:
http://docs.ceph.com/docs/master/man/8/radosgw/
http://www.ithao123.cn/content-8387956.html
http://my.oschina.net/myspaceNUAA/blog/515261
my.oschina.net/myspaceNUAA/blog/515261

html

相關文章
相關標籤/搜索