ceph对象存储ceph-deploy部署记录

友情提示:本部署只是用一个虚拟机,最小安装软件,全部ceph组件都安装在一个linux系统中。。。请酌情参考。。。

一:环境配置

    centOS7 适配 ceph LUMINOUS 版本,安装过程当中下载了jewel版本。。。node

    管理节点:ceph_adminpython

一、一个双核CPU,2G内存,NAT链接:192.168.184.181,其中在/etc/resolv.conf文件中添加 linux

    Nameserver 8.8.8.8web

    nameserver 192.168.1.109swift

二、20G硬盘分区:vim

    

    Kernel:3.10.0-693centos

    安装虚拟机时设置好主机名。以后的操做中用虚拟机又新增了两个硬盘当作osd浏览器

二:管理(节点)安装

一、安装EPEL

    sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm服务器

    安装成功会显示成功和已安装的EPEL版本网络

 

二、建立yum库文件

    sudo vim /etc/yum.repos.d/ceph.repo

    如下为添加的文件内容

[ceph-noarch]

name=Ceph noarch packages

baseurl=https://download.ceph.com/rpm/el7/noarch

enabled=1

gpgcheck=1

type=rpm-md

gpgkey=https://download.ceph.com/keys/release.asc

    直接执行安装最新稳定版

    如需指定具体版本,在baseurl中rpm后添加“-版本名”如:

    baseurl=https://download.ceph.com/rpm-luminous/el7/noarch

 

三、更新软件库并安装 ceph-deploy

    sudo yum update && sudo yum install ceph-deploy

    会先检查须要安装和升级的组件,检查完毕显示清单并询问是否继续:

    输入:y 回车

    以后有一个警告,没有处理。

     

    而后开始安装,期间会出现下载失败,而后会自动尝试其余镜像:

    

    此处缘由是网速太慢。。。

    下载完成问是否继续:

    

     库包更新完成后开始安装ceph-deploy:

    

    期间询问继续都yes;

    最后安装成功:

    

 

3、集群(节点)安装

一、在全部节点安装NTP:

    sudo yum install ntp ntpdate ntp-doc

    

 

二、在全部节点安装 SSH 

    sudo yum install openssh-server

    

 

三、在集群节点建立部署 CEPH 的用户

3.一、若是安装时没有设置主机名,此时修改全部节点主机名hostname(此步骤只是用于区分节点,方便管理)

    hostnamectl set-hostname {hostname}

    管理节点为:ceph_admin

    集群节点都为:ceph_node

    查看主机名:hostnamectl status

    /etc/hostname 会自动更新

    而后手动更新/etc/hosts

3.二、给全部集群节点添加ceph用户:ceph(测试用,实际部署请使用其余名字)

    sudo useradd -d /home/{username} -m {username}

    useradd -d /home/ceph -m ceph

    passwd {输入密码}

3.三、确保各集群节点上新建立的用户都有 sudo 权限。

    echo "{username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/{username}

    echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph

    sudo chmod 0440 /etc/sudoers.d/{username}

    sudo chmod 0440 /etc/sudoers.d/ceph

 

四、容许用户ceph无密码ssh登录

4.一、不使用sudo或者root用户生成ssh密钥对:

    在ceph用户下执行

    ssh-keygen

    提示 “Enter passphrase” 时,直接回车,口令即为空:

4.二、把公钥拷贝到各集群节点,把下列命令中的 {username} 替换成前面建立部署 Ceph 的用户里的用户名。

    ssh-copy-id ceph@ceph_admin

    修改 ceph-deploy 管理节点上的 ~/.ssh/config 文件,这样 ceph-deploy 就能用你所建的 用 户 名 登 录 Ceph 节点了,而无需每次执行 ceph-deploy 都要指定 --username {username} 。

    sudo vi ~/.ssh/config

    添加如下内容:

五、确保/etc/sysconfig/network-scripts 目录中 ifcfg-{iface} 文件中的 ONBOOT 设置成了 yes 。

六、用 ping 短主机名( hostname -s )的方式确认网络联通性。解决掉可能存在的主机名解析问题。

七、开放所需端口:

    firewall

    监视器:

    sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent

    存储器和元数据:

    sudo firewall-cmd --zone=public --add-service=ceph --permanent

    当即生效:

    sudo firewall-cmd --reload

    

    iptables

    要开放 Ceph Monitors 使用的 6789 端口和 OSD 使用的 6800:7300 端口范围:

    sudo iptables -A INPUT -i ens33 -p tcp -s 192.168.184.181/255.255.252.0 --dport 6789 -j ACCEPT

    回车后没有反应。。。

    重启生效:

    /sbin/service iptables save

    执行报以下错误:

    The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.

        解决方法:

        一、先执行以下命令:

       systemctl stop firewalld

       systemctl mask firewalld

        二、安装iptables services

        yum install iptables-services

        三、设置开机启动

        systemctl enable iptables

        四、重启iptables service

        systemctl restart iptables

        最后执行

        /sbin/service iptables save 

 

八、在 CentOS 和 RHEL 上, SELinux 默认为 Enforcing 开启状态。为简化安装,咱们建议把 SELinux 设置为 Permissive 或者彻底禁用,也就是在加固系统配置前先确保集群的安装、配置没问题。

    sudo setenforce 0

 

九、确保你的包管理器安装了优先级/首选项包且已启用。

9.一、安装优先级/首选项包

    sudo yum install yum-plugin-priorities

 

9.二、配置使用 Yum Priorities 

    使用文本编辑器打开 Yum Priorities 配置文件,确保配置文件中包含下面的行 

   

    编辑 CentOS-Base 源配置文件 /etc/yum.repos.d/CentOS-Base.repo 
    1. 将priority=1分别添加到 [base], [updates]和 [extras]这几个源记录的后面 
    2. 将priority=2添加到 [centosplus] 源记录的后面 
    注意:优先级由 1 ~ 99 的 99 个数表示,1 的优先级最高。优先级小的源即便有某软件的较新版本,若是优先级高的源中没有,在启用该插件的状况下,系统也没法安装/升级到该较新版本。图形界面的 YUM 工具通常默认就已经包含了优先级插件。 

4、建立集群(使用ceph用户执行ceph-deploy命令)

一、在管理节点建立目录

    mkdir my-cluster

    cd my-cluster 

    ceph-deploy 会把文件输出到当前目录,因此请确保在此目录下执行 ceph-deploy全部命令

 

二、在管理节点上,进入刚建立的放置配置文件的目录,用 ceph-deploy 执行以下步骤建立集群

2.一、建立集群监视者

    使用自身节点为监视节点:

    ceph-deploy new ceph_admin

2.二、副本。把 Ceph 配置文件里的默认副本数从 3 改为 2 ,这样只有两个 OSD 也能够达到 active + clean 状态。

    在 [global] 段加入:osd pool default size = 2

2.三、网卡

    在 [global] 段加入:public network = {ip-address}/{netmask}

    vi ceph.conf

2.四、安装 Ceph 

    ceph-deploy install ceph_admin

    若是报错:

    把/etc/yum.repos.d/下ceph.repo改成ceph-deploy.repo便可。

    再次安装ceph:

    ceph-deploy install ceph_admin

2.五、初始化监视器monitor

    ceph-deploy mon create-initial

   若是报错:

    执行:ceph-deploy --overwrite-conf mon create-initial

 

三、其余

3.一、确保你对 ceph.client.admin.keyring 有正确的操做权限。

    sudo chmod +r /etc/ceph/ceph.client.admin.keyring

    执行无返回。。。

3.二、检查集群健康:

    ssh ceph_admin sudo ceph health

    若是报错:

    

    chmod 600 /home/ceph/.ssh/config 

    再次执行:ssh ceph_admin sudo ceph health

    更完整的:ssh ceph_admin sudo ceph -s

    此处由于尚未加入osd,因此health_err所报问题正常。

 

四、添加三个osd

4.一、使用虚拟机为系统再添加一块20G硬盘和一块10G的硬盘

    使用分区命令fdisk为这设备(/dev/sdb和/dev/sdc)分区成sdb1和sdb5和sdc1

    (详细步骤请百度)

    初始化文件格式为xfs

    mkfs.xfs /dev/sdb1

    mkfs.xfs /dev/sdb5

    mkfs.xfs /dev/sdc1

4.二、建立osd

    ceph-deploy osd create ceph_admin:/dev/sdb1 ceph_admin:/dev/sdb5 ceph-admin:/dev/sdc1

    而后须要激活(文档上说使用create命令不须要再激活,但健康检查发现仍然没有osd,再次激活后则显示有osd了):

    ceph-deploy osd activate ceph_admin:/dev/sdb1 ceph_admin:/dev/sdb5 ceph_admin:/dev/sdc1

4.三、健康检查:

    ceph health

    缘由是OSD的hash规则与本部署不符。。。(本次部署只有一个主机。。。)

    ceph osd crush rule dump

    注意其 type 为 “host”,也就是说 CRUSH 不会为一个 PG 选择在同一个 host 上的两个 OSD。而个人环境中,目前只有 ceph_admin上的三个 OSD 是in 的,所以,CRUSH 没法为全部的 PG 分配不一样osd 

    将 CRUSH ruleset 的 type 由 “host” 修改成 “osd”,使得 CRUSH 为 PG 选择 OSD 时再也不局限于不一样的 host。

    ceph osd getcrushmap -o crushmap_compiled_file

    crushtool -d crushmap_compiled_file -o crushmap_decompiled_file

    vi crushmap_decompiled_file

再次健康检查:

4、添加RGW(对象存储网关)

一、安装对象网关软件包

    ceph-deploy install --rgw ceph_admin

二、建立对象网关实例

    ceph-deploy rgw create ceph_admin

三、配置实例

3.一、在ceph.conf中glabal部分以后添加另外一部分

[client.rgw.client-node]

rgw_frontends = "civetweb port=80"

确保在rgw_frontends键/值对的port=<port-number>之间不留空白。

 

3.二、重起生效

    sudo systemctl restart ceph-radosgw@rgw.ceph_admin.service

    此处具体名称以具体部署为准。。。

3.四、防火墙打开端口

    firewall

    sudo firewall-cmd --list-all

    sudo firewall-cmd --zone=public --add-port 80/tcp --permanent

    sudo firewall-cmd --reload

    Iptables

    修改配置文件

    vi /etc/sysconfig/iptables

    添加:

  -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

    开放80端口

3.五、测试:

    在浏览器输入主机IP(若是对象网关单独安装,输入网关节点的IP)

    返回:

完成。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

补充:ceph对象网关相关配置

一、建立cephgw存储池

    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 .rgw.buckets.extra 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

二、生成网关秘钥文件 ceph.client.radosgw.keyring

    ceph auth get client.rgw.ceph_admin > /etc/ceph/ceph.client.radosgw.keyring

    而后修改ceph.conf

    在[client.rgw.ceph_admin]部分添加:  

host = ceph_admin
keyring = /etc/ceph/ceph.client.radosgw.keyring

    而后重启服务

    radosgw -c /etc/ceph/ceph.conf -n client.rgw.ceph_admin 
    sudo systemctl restart ceph-radosgw@rgw.ceph_admin.service

三、生成网关访问用户(s3用户和swift子用户名字保持一致):

     s3用户cephtest

    radosgw-admin user create --uid="cephtest" --display-name="cephtest"   

    

    确保access_key或secret_key中没有转译符号:“\”,有的话从新生成用户。

    swift用户

    先生成用户:

    再生成用户秘钥:

四、访问验证:

4.一、测试s3    

    须要编写并运行Python测试脚原本验证S3访问。 S3访问测试脚本将链接到radosgw,建立一个新的存储桶并列出全部的存储桶。 aws_access_key_id和aws_secret_access_key的值取自radosgw-admin命令返回的access_key和secret_key的值。

    您将须要安装python-boto包:

    sudo yum install python-boto

    建立Python脚本:

    vi s3test.py

import boto.s3.connection

access_key = '25EN2DT7NA1K6YXXFYEC'
secret_key = 'KGeqBMmUzhYJh2QaiZYCcFahGpRf2KkBvOw8pYsq'
conn = boto.connect_s3(
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        host='ceph_admin', port=80,
        is_secure=False, calling_format=boto.s3.connection.OrdinaryCallingFormat(),
       )

bucket = conn.create_bucket('my-new-bucket')
for bucket in conn.get_all_buckets():
    print "{name} {created}".format(
        name=bucket.name,
        created=bucket.creation_date,
    )

    记得更改host和port。。。

    运行脚本:

    python s3test.py

    

    s3测试完成。

4.二、测试swift

    安装swift命令行客户端:

    sudo yum install python-setuptools

    sudo easy_install pip

    sudo pip install --upgrade setuptools

    sudo pip install --upgrade python-swiftclient

    执行测试:

    swift -A http://{IP ADDRESS}:{port}/auth/1.0 -U testuser:swift -K '{swift_secret_key}' list

    将{IP ADDRESS}替换为网关服务器的公有IP地址,将{swift_secret_key}替换为为swift用户执行的radosgw-admin key create命令输出的值。 将{port}替换为使用Civetweb所使用的端口号(例如,7480是默认值)。 若是不更换端口,则默认为端口80。

    返回:

    

    swift测试完成。。。

最后吐槽下,server的中文都成敏感词汇了。。。osc的敏感检索配置要改改。。。

相关文章
相关标签/搜索