제5편: Ceph 클러스터 운영

상용 조작


이 부분에서는 Ceph 집단의 일반적인 조작을 소개했는데 프로세스의 시작, 집단의 모니터링, 사용자 관리, MDS/MON/OSD의 증가와 삭제, 저장 탱크(pool)의 조작, 집단의 설정 수정, Crushmap의 관리, Monitor의 IP 수정 등 조작을 포함한다.

1 MDS 삭제


1.1 메타데이터 서버 추가(metadata server)

  • mds를 저장하는 데이터 노드를 만듭니다. /var/lib/ceph/mds/ceph-{$id}, id 메타데이터 서버의 이름을 표시하고 수요에 따라 스스로 정의할 수 있습니다.예:
    sudo mkdir /var/lib/ceph/mds/ceph-`hostname`
    sudo chown ceph:ceph -R /var/lib/ceph/mds/ceph-`hostname`
    
  • ceph 수정.conf, MDS 증가
    [mds.{$id}]
    host = {hostname}
    
    예:
    [mds.ceph-1]
    host = ceph-1
    
  • CephX 인증을 사용한 경우 인증 키를 만듭니다.그렇지 않으면 이 단계
    sudo ceph auth get-or-create mds.{$id} mon 'profile mds' mgr 'profile mds' mds 'allow *' osd 'allow *' > /var/lib/ceph/mds/ceph-{$id}/keyring
    
  • 로 이동합니다.
  • mds 서비스 시작
    sudo cp /usr/lib/systemd/system/[email protected] /usr/lib/systemd/system/ceph-mds@`hostname`.service 
    sudo systemctl start ceph-mds@`hostname`
    sudo systemctl enable ceph-mds@`hostname`
    
  • mds 서비스의 상태 보기
    ceph mds stat
    
    cephfs-1/1/1 up  {0=ceph-1=up:active}, 2 up:standby
    
  • 1.2 메타데이터 서버 삭제(metadata server)

    : 메타데이터 서버를 삭제하기 전에 반드시 나머지 예비 메타데이터 서버가ceph 클라이언트에게 서비스를 제공해야 합니다.없으면 메타데이터 서버를 추가한 다음 삭제해야 합니다.cephfs 서비스가 정상적으로 사용될 수 있도록 확보됨
    대체 메타데이터 서버가 있는 경우 다음 삭제 작업을 수행할 수 있습니다.
  • 메타데이터 서비스 중단
    ceph mds fail <mds name>
    
    예:
    ceph mds fail ceph-1
    
  • 메타데이터 서비스의 디렉터리 삭제
    sudo rm -rf /var/lib/ceph/mds/ceph-{$id}
    
    예:
    sudo rm -rf /var/lib/ceph/mds/ceph-ceph-1
    


  • 2 OSD 삭제


    2.1 새로 추가된 osd(신규 기계 추가되지 않음)


    2.1.1 osd 프로세스와 관련된 디스크 만들기

    fdisk 도구를 사용하여 디스크를 포맷하고 osd 프로세스의 디스크와journal 디스크를 생성합니다
    sudo umount /disk3  # /dev/sde disk3 umount 
    sudo fdisk /dev/sde
    
    WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    
    Command (m for help): p( )
    Command (m for help): d( )
    Command (m for help): g( gpt)
    Command (m for help): n( , , journal(10G), data)
    Command (m for help): w( )
    

    2.1.2 osd 만들기(step by step)


    2.1 새 osd를 추가합니다. id 생략할 수 있습니다. ceph는 최소 사용 가능한 정수를 자동으로 사용합니다. 첫 번째 osd는 0부터ceph osdcreate {id}
    ceph osd create
    3
    

    2.2 osd 디렉터리 초기화
    osd를 만듭니다.3 디렉터리, 디렉터리 이름 형식 {cluster-name}-{id} mkdir/var/lib/ceph/osd/{cluster-name} - {id}
    sudo mkdir /var/lib/ceph/osd/ceph-3
    

    2.3 osd를 마운트합니다.0의 데이터 디스크/dev/sde2
    sudo mkfs.xfs /dev/sdb2
    sudo mount /dev/sdc2 /var/lib/ceph/osd/ceph-3
    

    2.4 osd 데이터 디렉터리 초기화
    
    sudo ceph-osd -i 3 --mkfs --mkkey
    --mkkey osd 
    

    이것은 osd를 생성합니다.0의 keyring/var/lib/ceph/osd/ceph-0/keyring
    초기화 후 기본 파일/var/lib/ceph/osd/ceph-3/journal을 osd로 사용합니다.3의journal 구역, 일반 파일은journal 구역으로서 성능이 높지 않습니다. 테스트 환경일 경우,journal 구역을 변경하는 절차를 건너뛸 수 있습니다.
    2.5journal 만들기
    journal 구역을 생성합니다. 일반적으로 ssd디스크를journal 구역으로 선택하고, 여기는 ssd의/dev/sde1 구역을journal로 사용합니다.
    fdisk 를 사용하여 디스크/dev/sde1을 분할합니다.
    sudo mkfs.xfs /dev/sde1
    sudo rm -f /var/lib/ceph/osd/ceph-3/journal 
     partuuid,  /dev/sdb1 partuuid
    
    sudo blkid
    sudo ln -s /dev/disk/by-partuuid/b3897364-8807-48eb-9905-e2c8400d0cd4 /var/lib/ceph/osd/ceph-3/journal
    
    sudo chown ceph:ceph -R /var/lib/ceph/osd/ceph-3
    sudo chown ceph:ceph /var/lib/ceph/osd/ceph-3/journal
    sudo ceph-osd --mkjournal -i 3
    sudo chown ceph:ceph /var/lib/ceph/osd/ceph-3/journal
    

    2.6 등록 osd.{id}, id는 osd 번호입니다. 기본적으로 0부터 sudoceph authadd osd를 시작합니다.{id} osd ‘allow *’ mon ‘allow profile osd’ -i/var/lib/ceph/osd/ceph-{id}/keyring
    sudo ceph auth add osd.3 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-3/keyring
    

    2.7 crush map ceph osd crush add-bucket {hostname} host 추가
    sudo ceph osd crush add-bucket `hostname` host
    

    2.8 그리고 osd 노드를 기본 루트default 아래로 이동합니다.
    sudo ceph osd crush move `hostname` root=default
    

    2.9 osd 추가.3 CRUSH 맵의 m1 노드 아래에 가입한 후 osd.3 데이터를 수신할 수 있습니다ceph osd crush add osd.{id} 0.4 root=sata rack=sata-rack01 host=sata-node5
    sudo ceph osd crush add osd.3 1.7 root=default host=`hostname`
    

    0.4 이 osd가 CRUSH 맵에서 차지하는 가중치는 데이터가 이 osd에 떨어지는 비중을 나타내는 상대적인 값이다. 일반적으로 1T 디스크 비중값은 1로 계산하는데 이곳의 osd 데이터 디스크는 1.7이기 때문에 값은 1.7이다.
    지금 osd.0 상태는 downin, in 이 osd는 CRUSH 맵에 위치하고 있으며, 데이터를 받아들일 준비가 되어 있으며, down osd 프로세스가 이상하게 실행되고 있음을 나타냅니다. 왜냐하면 우리는 아직 osd를 시작하지 않았기 때문입니다.0 프로세스
    2.10 ceph-osd 프로세스 시작
    시스템ctl에 osd를 전달해야 하는 id 지정한 osd 프로세스를 시작합니다. 아래와 같이 osd를 시작합니다.3 프로세스 시스템 ctl startceph-osd@{id}id는 osd 번호를 표시하고 숫자 0부터 시작합니다.
    sudo cp /usr/lib/systemd/system/[email protected] /usr/lib/systemd/system/[email protected]
    sudo systemctl start ceph-osd@3
    sudo systemctl enable ceph-osd@3
    

    위에 osd를 추가합니다.3단계, 집단 상태ceph-s를 볼 수 있습니다.

    2.2 신규 osd(신규 기기 추가)


    2.2.1 구성 환경


    2.1 yum 소스 수정
    여기서 yum 원본을 aliyun의 원본으로 수정합니다. 명령은 다음과 같습니다.
    curl http://mirrors.aliyun.com/repo/Centos-7.repo >/etc/yum.repos.d/CentOS-Base.repo
    curl http://mirrors.aliyun.com/repo/epel-7.repo >/etc/yum.repos.d/epel.repo 
    sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo
    sed -i '/aliyuncs/d' /etc/yum.repos.d/epel.repo
    

    2.2 ceph 소스 추가
    sudo vim /etc/yum.repos.d/ceph.repo
    
    [ceph]
    name=ceph
    baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
    gpgcheck=0
    [ceph-noarch]
    name=cephnoarch
    baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
    gpgcheck=0
    [ceph-source]
    name=ceph-source
    baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS/
    gpgcheck=0
    

    2.3 소프트웨어 설치
    sudo yum install ceph ntp ntpdate ntp-doc openssh-server
    

    ceph가 올바르게 설치되었는지 확인
    ceph -v
    ceph version 12.2.10 (177915764b752804194937482a39e95e0ca3de94) luminous (stable)
    

    2.4 방화벽 닫기
    sudo sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
    sudo setenforce 0
    sudo systemctl stop firewalld 
    sudo systemctl disable firewalld
    

    2.2.2 새 osd(동기화 갑자기 2.1)


    2.3 osd 삭제


    클러스터 크기를 줄이거나 하드웨어를 교체하려면 실행할 때 OSD를 제거합니다.Ceph에서 OSD는 보통 호스트의 수호 프로세스로 하드디스크 위에서 실행된다.만약 호스트에 여러 개의 데이터 디스크가 있다면, 너는 하나하나 대응하는 것을 삭제해야 한다ceph-osd.일반적으로 작업 전에 그룹 용량이 상한선에 도달했는지 확인하고 OSD를 삭제한 후에 그룹 ceph-osd 비율이 되지 않도록 해야 한다.
    경고: OSD를 삭제할 때 클러스터를 near full 값으로 만들지 마십시오. OSD를 삭제하면 클러스터가 full ratio 값을 초과하거나 초과할 수 있습니다.
    1. 제거해야 할 OSD 프로세스를 중지하고 다른 OSD가 이 OSD가 서비스를 제공하지 않는다는 것을 알게 합니다.OSD를 중지하면 상태는 full ratio 가 됩니다.
    ssh {osd-host}
    sudo stop ceph-osd id={osd-num}
    

    2. OSD를 down 상태로 표시한다. 이 단계는 몬에게 이 OSD는 이미 서비스를 할 수 없고 다른 OSD에서 데이터의 균형과 복구가 필요하다는 것을 알려주는 것이다.
    sudo ceph osd out {osd-num}
    

    이 단계를 실행하면 데이터의 복구 과정을 촉발합니다.데이터 복구가 끝나고 집단이 out 상태로 회복될 때까지 기다렸다가 다음 작업을 해야 합니다.
    3. CRUSH Map에서 해당 OSD 항목을 삭제하면 더 이상 데이터를 받지 않습니다.CRUSH Map을 역컴파일하거나, 장치 목록 항목을 삭제하거나, 대응하는 호스트 통 항목을 삭제하거나, 호스트 통을 삭제할 수도 있습니다. (만약 CRUSH Map에 있고 호스트를 삭제하고 싶다면) CRUSH Map을 다시 컴파일해서 적용할 수도 있습니다.
    sudo ceph osd crush remove osd.{osd-num}
    

    이 단계는 데이터의 재분포를 촉발할 것이다.데이터 재분포가 끝나면 전체 집단이 HEALTH_OK 상태로 회복됩니다.
    4, OSD 인증 키 삭제:
    ceph auth del osd.{osd-num}
    

    5, OSD를 삭제합니다.ceph osd rm {osd-num}
    ceph osd rm 1
    

    6. OSD의 마운트 지점을 마운트 해제합니다.
    sudo umount /var/lib/ceph/osd/$cluster-{osd-num}
    

    7, 기본 복제본이 저장된 호스트에 로그인합니다.
    ssh {admin-host}
    cd /etc/ceph
    vim ceph.conf
    

    8. HEALTH_OK 프로필에서 해당 항목을 삭제합니다.
    [osd.1]
    host = {hostname}
    

    9. 주 복사본ceph.conf을 저장한 호스트에서 업데이트된 ceph.conf을 다른 호스트의 ceph.conf 디렉터리로 복사합니다.ceph.conf 에서 각 OSD 포털을 정의하지 않으면 7~9단계를 수행할 필요가 없습니다.
    모든 osd 노드가 오프라인 삭제된 후:ceph osd crush remove {hostname} 호스트 항목을 crush 맵에서ceph -s 대기 그룹을 active +clean 상태로 삭제합니다

    3 mon 삭제


    3.1 Mon 노드 증가


    재ceph.conf 파일에mon 노드 정보 추가
    mon initial members = hostname1,hostname2,new_mon_hostname
    mon host = IP1,IP2,new_mon_ip
    

    mon 프로세스 만들기
    host_name=`hostname`
    sudo ceph mon getmap -o /tmp/monmap
    sudo rm -rf /var/lib/ceph/mon/ceph-$host_name
    sudo ceph-mon -i $host_name --mkfs --monmap /tmp/monmap
    sudo chown -R ceph:ceph /var/lib/ceph/mon/ceph-$host_name/
    

    mon 프로세스 시작
    sudo cp /usr/lib/systemd/system/[email protected] /usr/lib/systemd/system/ceph-mon@$host_name.service
    sudo systemctl start ceph-mon@$host_name
    sudo systemctl enable ceph-mon@$host_name
    

    4 클라이언트 마운트


    4.1 kernel client 마운트

  • 마운트 전에 다운로드 설치 필요/etc/ceph
  • sudo yum install ceph-common
    
  • 마운트 명령은 다음과 같습니다.
  • mount -t ceph <monitor1-host-name>:6789,<monitor2-host-name>:6789,<monitor3-host-name>:6789:/ <mount-point>
    

    Example:
    sudo mkdir -p /gruntdata/lipeibao_ceph
    sudo mount -t ceph 11.188.199.210:6789:/ /mnt/mycephfs
    

    4.2ceph-fuse 마운트

  • 마운트 전에 다운로드 설치 필요ceph.conf, ceph-common
  • sudo yum install ceph-common ceph-fuse
    
  • 모니터의ceph 프로필을 이 클라이언트로 복사
  • Example:
    sudo vim /etc/ceph/ceph.conf
    [global]
    fsid = $genuuid
    mon initial members = hostname1
    mon host = IP1,IP2,IP3
    rbd default features = 1
    auth_cluster_required = none
    auth_service_required = none
    auth_client_required = none
    public network = 11.165.0.0/16
    cluster network = 11.165.0.0/16
    osd journal size = 1024
    osd pool default size = 2 
    osd pool default min size = 1
    osd pool default pg num = 1000 
    osd pool default pgp num = 1000
    osd crush chooseleaf type = 1
    mon_max_pg_per_osd = 200
    
    [mon]
    mon allow pool delete = true
    
    [mds.hostname1]
    host = hostname1
    
  • 관리자 또는 모니터 기기에서 클라이언트 사용자 및 권한, 키 만들기
    ceph auth get-or-create client.<client-name/id> mon 'allow r' mds 'allow r, allow rw path=' osd 'allow rw pool=' -o <file_name>
    
  • client.:클라이언트 이름 또는 id 지정
  • mon'allowr': 클라이언트가 몬에 접근할 수 있는 권한을 지정합니다. 읽기 전용
  • mds'allowr,allowrw path=': 클라이언트가 mds에 접근할 수 있는 권한을 지정하고 읽기 전용 경로를 지정합니다
  • osd'allowrwpool=': 클라이언트가 osdd에 접근할 수 있는 권한을 지정하고, 읽기와 쓰기를 지정하는 pool
  • : 클라이언트의 구성 정보 저장 파일
  • Example:
    $ ceph auth get-or-create client.1 mon 'allow r' mds 'allow r, allow rw path=/' osd 'allow rw pool=data' -o ceph.client.1.keyring
    [client.1]
    	key = AQACNoZXhrzqIRAABPKHTach4x03JeNadeQ9Uw==
    

    5 클라이언트 제거


    주 mds 서버에 로그인하여 연결된 모든 클라이언트 정보를 보려면 다음과 같이 하십시오.
    sudo ceph daemon mds.`hostname` session ls 
    

    제거할 클라이언트 id를 찾아 다음 명령을 실행합니다.
    sudo ceph tell mds.`hostname` client evict id= id
    

    이것은 클라이언트 주소가blcaklist에 존재합니다. 다시 마운트하려면 blacklist에서 삭제해야 합니다.
    sudo ceph osd blcaklist ls
    

    해당하는address 삭제
    sudo ceph osd blacklist rm address
    

    6ceph 집단 매개 변수 조정


    6.1pool 매개 변수 보기

  • 지정한 풀의 관련 매개 변수 보기
  • ceph osd pool get {pool_name} pg_num 
    
  • 지정pool 설정과 관련된 set 조작은 신중해야 한다. 그렇지 않으면 집단 서비스에 영향을 미칠 수 있다
  • ceph osd pool set {pool_name} pg_num 1024
    

    7 osd 집단 데이터 밸런스 처리


    7.1 balancer 플러그인


    ceph 집단을 사용하는 과정에서 osd 저장 분포가 불균형한 상황을 자주 만날 수 있다. 예를 들어 다음 그림은 우리 온라인ceph 집단의 osd 분포 상황이다. 참고할 수 있다.https://docs.ceph.com/docs/mimic/mgr/balancer/구체적인 조작은 다음과 같다. checklist: **1.all buckets should use straw2:**
    ceph osd getcrushmap -o crush.map; crushtool -d crush.map | grep straw; rm -f crush.map
    253
    tunable straw_calc_version 1
      alg straw2
      alg straw2
      alg straw2
      alg straw2
      alg straw2
      alg straw2
      alg straw2
      alg straw2
      alg straw2
      alg straw2
      alg straw2
      alg straw2
      alg straw2
      alg straw2
      alg straw2
      alg straw2
      alg straw2
    

    비straw2가 존재하면 업데이트
    ceph osd crush set-all-straw-buckets-to-straw2
    

    2. minimum client version is jewel or higher:
    ceph osd dump|grep require_min_compat_client;
      require_min_compat_client jewel
    

    Ceph distribution balancer: Activate balancing:
    ceph mgr module ls
    ceph mgr module enable balancer
    ceph balancer on
    ceph balancer mode crush-compat
    ceph config-key set "mgr/balancer/max_misplaced": "0.01"
    

    Show configuration and state:
    ceph config-key dump
    ceph balancer status
    

    좋은 웹페이지 즐겨찾기