zoukankan      html  css  js  c++  java
  • ceph集群安装docker版

    一. 三台服务器准备
    centos 
    192.168.0.151 
    192.168.0.180 
    192.168.0.156 


    二.三台服务器免密登陆设置,参考 https://blog.51cto.com/lihuansong/2172326
    1.设置三台/etc/hosts

    192.168.0.151 ceph-node1
    192.168.0.180 ceph-node2
    192.168.0.156 ceph-node3

    2.在每个节点都执行:

    ssh-keygen -t rsa

    3.将ceph-node2,ceph-node3生成的公钥改名,拷贝到ceph-node1节点上
    #节点node2

    cp /root/.ssh/id_rsa.pub /root/.ssh/key_node2
    scp /root/.ssh/key_node2 root@ceph-node1:/root/.ssh/

    #节点node3

    cp /root/.ssh/id_rsa.pub /root/.ssh/key_node3
    scp /root/.ssh/key_node3 root@ceph-node1:/root/.ssh/

    4.node0节点生成公钥也改名

    cp /root/.ssh/id_rsa.pub /root/.ssh/key_node1

    5.在节点node0上,把公钥导入到认证文件,执行如下命令:

    cd /root/.ssh/
    cat key_node1 >> authorized_keys
    cat key_node2 >> authorized_keys
    cat key_node3 >> authorized_keys
    chmod 700 /root/.ssh
    chmod 600 authorized_keys

    6.把这个authorized_kesy文件分发到其它节点

    scp authorized_keys root@ceph-node2:/root/.ssh
    scp authorized_keys root@ceph-node3:/root/.ssh

    7.测试SSH免密码登录

    三.ntp时间同步 centos7 参考https://blog.51cto.com/lihuansong/2172270
                            centos8 参考 https://blog.whsir.com/post-4925.html
    在CentOS8.0中默认不再支持ntp软件包,时间同步将由chrony来实现,像我这种习惯了ntp同步时间的,一时难以去适应chrony。
    本文将通过wlnmp提供的源,来安装ntp服务
    1.添加wlnmp源

    rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
    或 把这个repo连接 换成 
    http:
    //mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    2.安装ntp

    yum install wntp -y

    3.时间同步

    ntpdate ntp1.aliyun.com

    四 安装docker ( 已部署跳过本条)


    centos7 

    curl -fsSL https://get.docker.com/ | sh

     yum install -y docker-ce
    1.如何添加必要的Docker存储库

    我们将使用dnf config-manager实用程序添加Docker存储库。为此,请打开一个终端窗口并发出命令:

    sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
    或者设置为阿里云的存储库更加快速稳定
    #centos7 yum-config-manager 依赖于 yum-utils 
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # centos8 
    dnf config-manager --add-repo=http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    2.如何找到Docker CE的可安装版本
    截至目前,Red Hat已阻止docker-ce的安装,因此,如果您尝试运行命令sudo dnf install docker-ce,将运行失败。相反,您必须安装特定版本的Docker。要找出可用的版本,请发出以下命令:

    dnf list docker-ce --showduplicates | sort -r

    从该列表中,我们可以看到版本docker-ce-3:18.09.1-3.el7可用于安装。
    3.如何安装Docker CE
    要安装该版本,请发出命令:

    sudo dnf install docker-ce-3:18.09.1-3.el7


    为了强制DNS解析在Docker容器中起作用,必须禁用firewalld。为此,发出命令:

    systemctl stop firewalld
    sudo systemctl disable firewalld

    接下来,我们将使用以下命令启动并启用docker守护进程:

    sudo systemctl enable --now docker

    最后,使用以下命令将您的用户添加到docker组:

    sudo usermod -aG docker $USER
    docker-compose
    sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

    调整参数可以根据情况来调,正常一般不调也可以

    #调整内核参数

    cat >> /etc/sysctl.conf << EOF
    kernel.pid_max=4194303
    vm.swappiness = 0
    EOF
    sysctl
    -p


    # read_ahead, 通过数据预读并且记载到随机访问内存方式提高磁盘读操作,根据一些Ceph的公开分享,8192是比较理想的值

    echo "8192" > /sys/block/sda/queue/read_ahead_kb

    # I/O Scheduler,关于I/O Scheculder的调整,简单说SSD要用noop,SATA/SAS使用deadline。

    echo "deadline" > /sys/block/sd[x]/queue/scheduler
    echo "noop" > /sys/block/sd[x]/queue/scheduler

    五 下载镜像

    docker pull ceph/daemon:latest  (这个版本会更新,如果不行就使用阿里镜像) 或
    docker pull registry.cn-hangzhou.aliyuncs.com/kenyon/ceph:v1.0 (阿里镜像)


    六.创建文件夹三台都要创建

    mkdir /home/ceph
    mkdir /home/ceph/{admin,etc,lib,logs}

    #docker内用户id是167,这里进行授权

    chown -R 167:167 /home/ceph/ 
    mkdir /home/ceph-data
    mkdir /home/ceph-data/data{1..3}

    七创建启动脚本

    1.创建mon启动脚本(mon ip 三个都要写,然后对应的网关)

    vi /home/ceph/admin/start_mon.sh
    
    #!/bin/bash
    docker run -d --net=host 
    --name=mon 
    --restart=always 
    -v /etc/localtime:/etc/localtime 
    -v /home/ceph/etc:/etc/ceph 
    -v /home/ceph/lib:/var/lib/ceph 
    -v /home/ceph/logs:/var/log/ceph 
    -e MON_IP=192.168.10.95,192.168.10.96,192.168.10.97 
    -e CEPH_PUBLIC_NETWORK=192.168.10.0/24 
    ceph/daemon:latest mon

    2.创建osd启动脚本(要创建好对应的目录 mkdir /home/ceph-data/data{1..3})

    vi /home/ceph/admin/start_osd.sh
    
    #!/bin/bash
    # 这里表示有1个分区,及从data1-data11,请根据实际情况修改:
    for i in {1..2};do
    docker ps | grep -w osd_data${i} && continue
    docker ps -a | grep -w osd_data${i} && docker rm -f osd_data${i}
    
    docker run -d 
    --name=osd_data${i} 
    --net=host 
    --restart=always 
    --privileged=true 
    --pid=host 
    -v /etc/localtime:/etc/localtime 
    -v /home/ceph/etc:/etc/ceph 
    -v /home/ceph/lib:/var/lib/ceph 
    -v /home/ceph/logs:/var/log/ceph 
    -v /home/ceph-data/data${i}/osd:/var/lib/ceph/osd 
    ceph/daemon:latest osd_directory
    done
    /home/ceph-data/data${i}/osd:/var/lib/ceph/osd
    表示osd存储映射到指定文件夹


    3.创建mds启动脚本(可不创建)

    vi /home/ceph/admin/start_mds.sh
    
    #!/bin/bash
    docker run -d 
    --net=host 
    --name=mds 
    --restart=always 
    --privileged=true 
    -v /etc/localtime:/etc/localtime 
    -v /home/ceph/etc:/etc/ceph 
    -v /home/ceph/lib/:/var/lib/ceph/ 
    -v /home/ceph/logs/:/var/log/ceph/ 
    -e CEPHFS_CREATE=0 
    -e CEPHFS_METADATA_POOL_PG=512 
    -e CEPHFS_DATA_POOL_PG=512 
    ceph/daemon:latest mds

    #CEPHFS_CREATE 0表示不自动创建文件系统(推荐),1表示自动创建

    4.创建mgr启动脚本

    vi /home/ceph/admin/start_mgr.sh
    
    #!/bin/bash
    docker run -d --net=host 
    --name=mgr 
    --restart=always 
    --privileged=true 
    -v /etc/localtime:/etc/localtime 
    -v /home/ceph/etc:/etc/ceph 
    -v /home/ceph/lib:/var/lib/ceph 
    -v /home/ceph/logs:/var/log/ceph 
    ceph/daemon:latest mgr
    5.创建rgw启动脚本

    vi /home/ceph/admin/start_rgw.sh
    
    #!/bin/bash
    docker run -d 
    --net=host 
    --name=rgw 
    --restart=always 
    --privileged=true 
    -v /etc/localtime:/etc/localtime 
    -v /home/ceph/etc:/etc/ceph 
    -v /home/ceph/lib:/var/lib/ceph 
    -v /home/ceph/logs:/var/log/ceph 
    ceph/daemon:latest rgw

    6.创建rbd启动脚本

    vi /home/ceph/admin/start_rbd.sh
    
    #!/bin/bash
    docker run -d 
    --net=host 
    --name=rbd 
    --restart=always 
    --privileged=true 
    -v /etc/localtime:/etc/localtime 
    -v /home/ceph/etc:/etc/ceph 
    -v /home/ceph/lib:/var/lib/ceph 
    -v /home/ceph/logs:/var/log/ceph 
    ceph/daemon:latest rbd_mirror

    7.服务开启前将节点的hostname修改为ceph-node1-3,然后重新打开窗口

    #节点1
    sudo hostnamectl set-hostname ceph-node1
    #节点2
    sudo hostnamectl set-hostname ceph-node2
    #节点3
    sudo hostnamectl set-hostname ceph-node3

    八 开始启动服务
    1.mon启动

    bash /home/ceph/admin/start_mon.sh

    2.设置配置文件 osd容量自行调整编号根据osd容器启动的个数顺序从0开始自行编号

    vi /home/ceph/etc/ceph.conf
    
    # 容忍更多的时钟误差
    mon clock drift allowed = 2
    mon clock drift warn backoff = 30
    # 允许删除pool
    mon_allow_pool_delete = true
    
    [mgr]
    # 开启WEB仪表盘
    mgr modules = dashboard
    #设置osd容器的存储大小1073741824000 1t 322122547200 300g 
    #自行调整不设置默认10g 目前设置300g 每个服务两个osd 减轻压力
    [osd.0]
    bluestore_block_size = 644245094400
    [osd.1]
    bluestore_block_size = 644245094400
    [osd.2]
    bluestore_block_size = 644245094400
    #[osd.3]
    #bluestore_block_size = 644245094400
    #[osd.4]
    #bluestore_block_size = 644245094400
    #[osd.5]
    #bluestore_block_size = 644245094400
    #[client.rgw.节点名]
    # 设置rgw网关的web访问端口 oss端口 默认7480 修改最好三台都修改
    #rgw_frontends = "civetweb port=20003"

    3.设置快捷键,其他命令也可以一一映射出来,具体操作自行调整

    echo 'alias ceph="docker exec mon ceph"' >> /etc/profile
    source /etc/profile

    4.将配置复制到其他两个节点

    scp -r /home/ceph/* ceph-node2:/home/ceph
    scp -r /home/ceph/* ceph-node3:/home/ceph

    #给其他两个节点的文件授权

    chown -R 167:167 /home/ceph/

    5.启动其他两台服务

    ssh ceph-node2 bash /home/ceph/admin/start_mon.sh
    ssh ceph-node3 bash /home/ceph/admin/start_mon.sh

    6.查看是否启动成功

    ceph -s
    docker ps

    看到有三台就算成功了
    7.osd启动
    #每台都执行创建osdkey

    docker exec -it mon ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring

    #运行脚本

    bash /home/ceph/admin/start_osd.sh
    ssh ceph-node2 bash /home/ceph/admin/start_osd.sh
    ssh ceph-node3 bash /home/ceph/admin/start_osd.sh
    

    8.启动mds(可跳过)

    bash /home/ceph/admin/start_mds.sh
    ssh ceph-node2 bash /home/ceph/admin/start_mds.sh
    ssh ceph-node3 bash /home/ceph/admin/start_mds.sh
    
    创建文件系统(可跳过)
    # 创建data pool
    ceph osd pool create cephfs_data 256 256
    # 创建 metadata pool
    ceph osd pool create cephfs_metadata 64 64
    # 创建 cephfs
    ceph fs new cephfs cephfs_metadata cephfs_data
    # 查看信息
    ceph fs ls
    #name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

    9.启动mgr

    bash /home/ceph/admin/start_mgr.sh
    ssh ceph-node2 bash /home/ceph/admin/start_mgr.sh
    ssh ceph-node3 bash /home/ceph/admin/start_mgr.sh

    10.激活仪表盘

    ceph mgr module enable dashboard
    #设定管理端访问的用户名密码
    ceph dashboard set-login-credentials admin admin@gp2OZ0
    ceph config set mgr mgr/dashboard/server_addr 0.0.0.0
    #指定为7000端口,这里可以自定义修改
    ceph config set mgr mgr/dashboard/server_port 18080
    #关闭https
    ceph config set mgr mgr/dashboard/ssl false


    11、启动RGW

    #这里需要每个节点都创建rgwkey
    docker exec mon ceph auth get client.bootstrap-rgw -o /var/lib/ceph/bootstrap-rgw/ceph.keyring
    bash /home/ceph/admin/start_rgw.sh
    ssh ceph-node2 bash /home/ceph/admin/start_rgw.sh
    ssh ceph-node3 bash /home/ceph/admin/start_rgw.sh

    12、启动RBD

    #这里需要每个节点都创建rbdkey
    docker exec mon ceph auth get client.bootstrap-rbd-mirror -o /var/lib/ceph/bootstrap-rbd-mirror/ceph.keyring
    bash /home/ceph/admin/start_rbd.sh
    ssh ceph-node2 bash /home/ceph/admin/start_rbd.sh
    ssh ceph-node3 bash /home/ceph/admin/start_rbd.sh

    13.创建用户
    创建s3访问用户

    docker exec rgw radosgw-admin user create --uid=mgruser --display-name=mgruser --system

    返回的记录下 access_key secret_key

    {
    "user_id": "mgruser",
    "display_name": "mgruser",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [],
    "keys": [
    {
    "user": "mgruser",
    "access_key": "akhsanflasnvlajl",
    "secret_key": "skhsanflasnvlajl"
    }
    ],
    "swift_keys": [],
    "caps": [],
    "op_mask": "read, write, delete",
    "system": "true",
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    "bucket_quota": {
    "enabled": false,
    "check_on_raw": false,
    "max_size": -1,
    "max_size_kb": 0,
    "max_objects": -1
    },
    "user_quota": {
    "enabled": false,
    "check_on_raw": false,
    "max_size": -1,
    "max_size_kb": 0,
    "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw",
    "mfa_ids": []
    }
    View Code

    将返回的ak sk 加入服务

    docker exec mgr ceph dashboard set-rgw-api-access-key akhsanflasnvlajl
    docker exec mgr ceph dashboard set-rgw-api-secret-key skhsanflasnvlajl

    修改mon重启失败问题

    docker cp mon:/opt/ceph-container/bin/start_mon.sh .
    
    # 注释此行,直接将v2v1赋值为2,代表是走V2协议, 以指定IP方式加入集群
    #v2v1=$(ceph-conf -c /etc/ceph/${CLUSTER}.conf 'mon host' | tr ',' '
    ' | grep -c ${MON_IP})
    v2v1=2
    
    docker cp start_mon.sh mon:/opt/ceph-container/bin/start_mon.sh

     至此对象存储的ceph服务搭建完成

  • 相关阅读:
    __iter__方法demo
    开放封闭原则
    单例模式
    Python赋值、浅拷贝、深拷贝
    保留原页面的参数条件
    request.GET、request.POST、request.body(持续更新)
    面向对象的封装、继承、多态(持续更新)
    关于Form、ModelForm的一些操作(持续更新)
    创建类的两种方式
    Nginx深度优化
  • 原文地址:https://www.cnblogs.com/zhouyb/p/13964569.html
Copyright © 2011-2022 走看看