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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

一:环境配置

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

    管理节点:ceph_admin

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

    Nameserver 8.8.8.8

    nameserver 192.168.1.109

2、20G硬盘分区:

    ceph对象存储ceph-deploy部署记录_第1张图片

    Kernel:3.10.0-693

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

二:管理(节点)安装

1、安装EPEL

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

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

 

2、创建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

 

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

    sudo yum update && sudo yum install ceph-deploy

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

    111815_h7rJ_3725601.png输入:y 回车

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

    111834_VsSd_3725601.png 

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

    111859_AoCJ_3725601.png

    此处原因是网速太慢。。。

    下载完成问是否继续:

    111942_3Yrt_3725601.png

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

    ceph对象存储ceph-deploy部署记录_第2张图片

    期间询问继续都yes;

    最后安装成功:

    ceph对象存储ceph-deploy部署记录_第3张图片

 

三、集群(节点)安装

1、在所有节点安装NTP:

    sudo yum install ntp ntpdate ntp-doc

    ceph对象存储ceph-deploy部署记录_第4张图片

 

2、在所有节点安装 SSH 

    sudo yum install openssh-server

    112245_eiCR_3725601.png

 

3、在集群节点创建部署 CEPH 的用户

3.1、如果安装时没有设置主机名,此时修改所有节点主机名hostname(此步骤只是用于区分节点,方便管理)

    hostnamectl set-hostname {hostname}

    管理节点为:ceph_admin

    集群节点都为:ceph_node

    查看主机名:hostnamectl status

    /etc/hostname 会自动更新

    然后手动更新/etc/hosts

3.2、给所有集群节点添加ceph用户:ceph(测试用,实际部署请使用其他名字)

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

    useradd -d /home/ceph -m ceph

    passwd {输入密码}

3.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

 

4、允许用户ceph无密码ssh登陆

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

    在ceph用户下执行

    ssh-keygen

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

ceph对象存储ceph-deploy部署记录_第5张图片

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

    ssh-copy-id ceph@ceph_admin

ceph对象存储ceph-deploy部署记录_第6张图片

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

    sudo vi ~/.ssh/config

    添加以下内容:

113509_USJZ_3725601.png

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

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

7、开放所需端口:

    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.

        解决方法:

        1、先执行如下命令:

       systemctl stop firewalld

       systemctl mask firewalld

        2、安装iptables services

        yum install iptables-services

        3、设置开机启动

        systemctl enable iptables

        4、重启iptables service

        systemctl restart iptables

        最后执行

        /sbin/service iptables save 

 

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

    sudo setenforce 0

 

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

9.1、安装优先级/首选项包

    sudo yum install yum-plugin-priorities

 

9.2、配置使用 Yum Priorities 

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

   114015_HCXb_3725601.png

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

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

1、在管理节点创建目录

    mkdir my-cluster

    cd my-cluster 

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

 

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

2.1、创建集群监视者

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

    ceph-deploy new ceph_admin

ceph对象存储ceph-deploy部署记录_第7张图片

2.2、副本。把 Ceph 配置文件里的默认副本数从 3 改成 2 ,这样只有两个 OSD 也可以达到 active + clean 状态。

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

2.3、网卡

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

    vi ceph.conf

ceph对象存储ceph-deploy部署记录_第8张图片

2.4、安装 Ceph 

    ceph-deploy install ceph_admin

    如果报错:

114344_bCbu_3725601.png

    把/etc/yum.repos.d/下ceph.repo改为ceph-deploy.repo即可。

    再次安装ceph:

    ceph-deploy install ceph_admin

114436_0HyE_3725601.png

2.5、初始化监视器monitor

    ceph-deploy mon create-initial

   如果报错:

114501_VYUH_3725601.png

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

ceph对象存储ceph-deploy部署记录_第9张图片

114552_XQUz_3725601.png

 

3、其他

3.1、确保你对 ceph.client.admin.keyring 有正确的操作权限。

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

    执行无返回。。。

3.2、检查集群健康:

    ssh ceph_admin sudo ceph health

    如果报错:

    114758_IbIE_3725601.png

    chmod 600 /home/ceph/.ssh/config 

    再次执行:ssh ceph_admin sudo ceph health

114915_EVCx_3725601.png

    更完整的:ssh ceph_admin sudo ceph -s

    此处因为还没有加入osd,所以health_err所报问题正常。

 

4、添加三个osd

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

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

    (详细步骤请百度)

    初始化文件格式为xfs

    mkfs.xfs /dev/sdb1

    mkfs.xfs /dev/sdb5

    mkfs.xfs /dev/sdc1

4.2、创建osd

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

115154_CXIJ_3725601.png

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

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

4.3、健康检查:

    ceph health

115304_qBd3_3725601.png

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

    ceph osd crush rule dump

ceph对象存储ceph-deploy部署记录_第10张图片

    注意其 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

115709_7wG8_3725601.png

    crushtool -d crushmap_compiled_file -o crushmap_decompiled_file

    vi crushmap_decompiled_file

115751_Nxpu_3725601.png

再次健康检查:

115813_8TzF_3725601.png

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

1、安装对象网关软件包

    ceph-deploy install --rgw ceph_admin

2、创建对象网关实例

    ceph-deploy rgw create ceph_admin

3、配置实例

3.1、在ceph.conf中glabal部分之后添加另一部分

[client.rgw.client-node]

rgw_frontends = "civetweb port=80"

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

 

3.2、重起生效

    sudo systemctl restart [email protected]_admin.service

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

3.4、防火墙打开端口

    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.5、测试:

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

    返回:

ceph对象存储ceph-deploy部署记录_第11张图片

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

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

1、创建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

2、生成网关秘钥文件 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 [email protected]_admin.service

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

     s3用户cephtest

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

    ceph对象存储ceph-deploy部署记录_第12张图片

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

    swift用户

    先生成用户:

ceph对象存储ceph-deploy部署记录_第13张图片

    再生成用户秘钥:

ceph对象存储ceph-deploy部署记录_第14张图片

4、访问验证:

4.1、测试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

    163110_Nyji_3725601.png

    s3测试完成。

4.2、测试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。

    返回:

    164041_qcPq_3725601.png

    swift测试完成。。。

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

转载于:https://my.oschina.net/u/3725601/blog/1575458

你可能感兴趣的:(ceph对象存储ceph-deploy部署记录)