3.16. 검색된 애플리케이션에 대한 재해 복구 보호
Red Hat OpenShift Data Foundation은 이제 RHACM(Red Hat Advanced Cluster Management)을 사용하지 않고도 관리형 클러스터 중 하나에 배포된 워크로드에 대한 재해 복구(DR) 보호 및 지원을 제공합니다. 이러한 워크로드를 검색된 애플리케이션이라고 합니다.
RHACM을 사용하여 배포되는 워크로드는 이제 관리 애플리케이션이라고 합니다. RHACM을 사용하지 않고 관리형 클러스터 중 하나에 워크로드를 직접 배포하면 이러한 워크로드를 검색된 애플리케이션이라고 합니다. RHACM 콘솔에서 이러한 워크로드 세부 정보를 볼 수 있지만 RHACM에서 애플리케이션 라이프사이클(생성, 삭제, 편집)을 관리하지 않습니다.
3.16.1. 검색된 애플리케이션의 재해 복구 보호를 위한 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 검색된 애플리케이션을 보호하기 위한 사전 요구 사항을 안내하는 지침을 제공합니다. 여기에는 데이터 정책 할당 및 페일오버 및 재배치와 같은 DR 작업 시작과 같은 작업이 포함됩니다.
- 모든 DR 구성이 기본 관리 클러스터 및 Secondary 관리 클러스터에 설치되어 있는지 확인합니다.
OADP 1.4 Operator를 설치합니다.
참고OADP 1.4 이전 버전은 발견된 애플리케이션을 보호하기 위해 작동하지 않습니다.
-
기본 및 보조 관리 클러스터에서 OperatorHub 로 이동하여 키워드 필터를 사용하여
OADP를 검색합니다. - OADP 타일을 클릭합니다.
-
모든 기본 설정을 유지하고 설치를 클릭합니다. Operator 리소스가
openshift-adp프로젝트에 설치되어 있는지 확인합니다.
참고DR 구성을 완료한 후 OADP 1.4를 설치하면 기본 관리 클러스터의
ramen-dr-cluster-operatorPod와 네임스페이스openshift-dr-system의 Secondary 관리 클러스터를 다시 시작해야 합니다(삭제 및 다시 생성).-
기본 및 보조 관리 클러스터에서 OperatorHub 로 이동하여 키워드 필터를 사용하여
[선택 사항]
ramen-hub-operator-configConfigMap 에 CACertificate를 추가합니다.보안 전송 프로토콜과 Hub 클러스터에서 오브젝트 버킷에 대한 액세스를 확인하는 MCG(Multicloud Gateway) 오브젝트 버킷의 대체 클러스터에 메타데이터를 저장할 수 있도록 기본 클러스터와 보조 클러스터 간에 네트워크(SSL) 액세스를 구성합니다.
참고모든 OpenShift 클러스터가 사용자 환경에 대한 서명된 유효한 인증서 세트를 사용하여 배포된 경우 이 섹션을 건너뛸 수 있습니다.
자체 서명된 인증서를 사용하는 경우
openshift-config네임스페이스에user-ca-bundle이라는 ConfigMap 을 이미 생성하고 이 ConfigMap을 기본 프록시 클러스터 리소스에 추가했습니다.CACertificates의 인코딩된 값을 찾습니다.
oc get configmap user-ca-bundle -n openshift-config -o jsonpath="{['data']['ca-bundle\.crt']}" |base64 -w 0$ oc get configmap user-ca-bundle -n openshift-config -o jsonpath="{['data']['ca-bundle\.crt']}" |base64 -w 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이 base64로 인코딩된 값을 Hub 클러스터의 configmap
ramen-hub-operator-config에 추가합니다. 아래 예제에서는 CACertificates를 추가할 위치를 보여줍니다.oc edit configmap ramen-hub-operator-config -n openshift-operators
$ oc edit configmap ramen-hub-operator-config -n openshift-operatorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
기본 관리 클러스터의 OADP Operator 기본 네임스페이스
openshift-adp및 Secondary 관리 클러스터에서 생성된 DR 시크릿이 있는지 확인합니다. 첫 번째 DRPolicy가 생성될 때 생성된 DR 시크릿은 아래 비밀과 유사합니다. DR 시크릿 이름 앞에 문자v가 붙습니다.oc get secrets -n openshift-adp NAME TYPE DATA AGE v60f2ea6069e168346d5ad0e0b5faa59bb74946f Opaque 1 3d20h vcc237eba032ad5c422fb939684eb633822d7900 Opaque 1 3d20h [...]
$ oc get secrets -n openshift-adp NAME TYPE DATA AGE v60f2ea6069e168346d5ad0e0b5faa59bb74946f Opaque 1 3d20h vcc237eba032ad5c422fb939684eb633822d7900 Opaque 1 3d20h [...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고openshift-adp네임스페이스에 각 관리 클러스터에 대해 하나의 DR 생성 시크릿이 있습니다.OADP 네임스페이스
openshift-adp의 각 관리 클러스터에 DPA(데이터 보호 애플리케이션)가 이미 설치되어 있는지 확인합니다. 아직 생성되지 않은 경우 다음 단계에 따라 이 리소스를 생성합니다.다음 YAML 정의 콘텐츠를
dpa.yaml에 복사하여 DPA를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow DPA 리소스를 생성합니다.
oc create -f dpa.yaml -n openshift-adp
$ oc create -f dpa.yaml -n openshift-adpCopy to Clipboard Copied! Toggle word wrap Toggle overflow dataprotectionapplication.oadp.openshift.io/velero created
dataprotectionapplication.oadp.openshift.io/velero createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow OADP 리소스가 생성되고
Running상태인지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.16.2. 샘플 검색된 애플리케이션 생성 링크 복사링크가 클립보드에 복사되었습니다!
기본 관리형 클러스터에서 Secondary 관리 클러스터로 페일오버 를 테스트하고 검색된 애플리케이션을 재배치 하려면 RHACM create 애플리케이션 기능을 사용하지 않고 설치된 샘플 애플리케이션이 필요합니다.
프로세스
기본 관리 클러스터에 로그인하고 샘플 애플리케이션 리포지토리를 복제합니다.
git clone https://github.com/red-hat-storage/ocm-ramen-samples.git
$ git clone https://github.com/red-hat-storage/ocm-ramen-samples.gitCopy to Clipboard Copied! Toggle word wrap Toggle overflow 기본분기에 있는지 확인합니다.cd ~/ocm-ramen-samples git branch * main
$ cd ~/ocm-ramen-samples $ git branch * mainCopy to Clipboard Copied! Toggle word wrap Toggle overflow 시나리오, 메트로 또는 지역에 따라 샘플 애플리케이션을 생성할 때 올바른 디렉터리를 사용해야 합니다.
참고검색된 애플리케이션에서 CephRBD 또는 블록 볼륨을 사용하는 애플리케이션만 지원됩니다.
ls workloads/deployment | egrep -v 'cephfs|k8s|base' odr-metro-rbd odr-regional-rbd
$ ls workloads/deployment | egrep -v 'cephfs|k8s|base' odr-metro-rbd odr-regional-rbdCopy to Clipboard Copied! Toggle word wrap Toggle overflow Primary 및 Secondary 관리 클러스터에서 모두
busybox-discovered프로젝트를 생성합니다.oc new-project busybox-discovered
$ oc new-project busybox-discoveredCopy to Clipboard Copied! Toggle word wrap Toggle overflow 기본 관리 클러스터에서
busybox애플리케이션을 생성합니다. 이 샘플 애플리케이션 예제는 블록(Ceph RBD) 볼륨을 사용하는 Metro-DR용 예입니다.oc apply -k workloads/deployment/odr-metro-rbd -n busybox-discovered persistentvolumeclaim/busybox-pvc created deployment.apps/busybox created
$ oc apply -k workloads/deployment/odr-metro-rbd -n busybox-discovered persistentvolumeclaim/busybox-pvc created deployment.apps/busybox createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 참고OpenShift Data Foundation 재해 복구 솔루션은 이제 여러 네임스페이스에 걸쳐 검색된 애플리케이션에 대한 보호를 확장합니다.
기본 관리 클러스터 의 올바른 프로젝트에서 busybox가 실행 중인지 확인합니다.
oc get pods,pvc,deployment -n busybox-discovered
$ oc get pods,pvc,deployment -n busybox-discoveredCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.16.3. 재해 복구 보호를 위해 발견된 샘플 애플리케이션 등록 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 protected 애플리케이션 탭에서 검색된 애플리케이션에 기존 DR 정책을 적용하는 방법을 안내합니다.
사전 요구 사항
- 재해 복구가 구성되어 있고 하나 이상의 DR 정책이 생성되었는지 확인합니다.
프로세스
-
RHACM 콘솔에서 Disaster recovery
Protected applications 탭으로 이동합니다. - Enroll application 을 클릭하여 DR 보호를 위한 기존 애플리케이션 구성을 시작합니다.
- ACM 검색된 애플리케이션을 선택합니다.
-
네임스페이스 페이지에서
busybox가 설치된 기본 관리 클러스터의 이름인 DR 클러스터를 선택합니다. 애플리케이션이 설치된 네임스페이스 를 선택합니다. 예를 들어
busybox-discovered.참고여러 네임스페이스에 워크로드 분산이 있는 경우 모든 네임스페이스를 선택하여 DR을 보호할 수 있습니다.
-
검색된 애플리케이션에 대해
busybox-rbd와 같은 고유한 이름 을 선택하고 Next 를 클릭합니다. - 구성 페이지에서 리소스 레이블 은 kubernetes-object 백업에 포함될 리소스를 설정할 수 있는 리소스와 복제되는 볼륨의 영구 데이터를 보호하는 데 사용됩니다. 리소스 레이블 은 기본적으로 선택됩니다.
-
라벨 표현식과 PVC 라벨 선택기를 제공합니다. kubernetes-objects 및 PVC 의 경우
appname=busybox레이블을 선택합니다. - 다음을 클릭합니다.
복제 페이지에서 기존 DR 정책 및 kubernetes-objects 백업 간격을 선택합니다.
참고PVC 데이터 복제 및 kubernetes-object 백업 간격(즉, 5분)에 대해 동일한 기간을 선택하는 것이 좋습니다.
- 다음을 클릭합니다.
구성을 검토하고 저장을 클릭합니다.
뒤로 버튼을 사용하여 모든 문제를 해결하려면 화면으로 돌아갑니다.
DR Cryostat 및 Relocate 테스트를 진행하기 전에 애플리케이션 볼륨(PVC) 및 Kubernetes 오브젝트 백업의 상태가 Healthy 상태인지 확인합니다. 지정된 애플리케이션 탭에서 검색된 애플리케이션의 상태를 볼 수 있습니다.
DRPC의 상태를 보려면 Hub 클러스터에서 다음 명령을 실행합니다.
oc get drpc {drpc_name} -o wide -n openshift-dr-ops$ oc get drpc {drpc_name} -o wide -n openshift-dr-opsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 검색된 애플리케이션은 DRPlacementControl(DRPC) 및 Hub 클러스터에 배치와
openshift-dr-ops라는 새 네임스페이스에 배치를 저장합니다. DRPC 이름은 이전 단계에서 구성된 고유 이름 (즉,busybox-rbd)으로 식별할 수 있습니다.검색된 애플리케이션의 VolumeReplicationGroup(VRG)의 상태를 보려면 busybox 애플리케이션이 수동으로 설치된 관리 클러스터에서 다음 명령을 실행합니다.
oc get vrg {vrg_name} -n openshift-dr-ops$ oc get vrg {vrg_name} -n openshift-dr-opsCopy to Clipboard Copied! Toggle word wrap Toggle overflow VRG 리소스는 검색된 애플리케이션에 DR 정책을 할당한 후 네임스페이스
openshift-dr-ops에 저장됩니다. VRG 이름은 이전 단계에서 구성된 고유 이름 (즉,busybox-rbd)으로 식별할 수 있습니다.
3.16.4. 애플리케이션 장애 조치 및 재배치 검색 링크 복사링크가 클립보드에 복사되었습니다!
보호된 Discovered 애플리케이션은 관리형 애플리케이션과 유사한 피어 클러스터에 재배치하거나 Relocate 할 수 있습니다. 그러나 RHACM은 관리형 애플리케이션에 대한 애플리케이션 라이프사이클을 관리하지 않으므로 검색된 애플리케이션에 대한 몇 가지 추가 단계가 있습니다.
이 섹션에서는 보호된 검색된 애플리케이션에 대한 장애 조치 및 Relocate 프로세스를 안내합니다.
리소스 유형 중 하나 또는 두 리소스 유형이 Warning 또는 Critical 상태에 있는 경우 don't initiate a Cryostat or Relocate of an application when one or both resource types are in a Warning or Critical status.
3.16.4.1. 검색된 애플리케이션의 장애 조치 재해 복구 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 재해 복구로 보호되는 검색된 애플리케이션을 장애 조치하는 방법을 안내합니다.
사전 요구 사항
-
애플리케이션 네임스페이스가 두 관리 클러스터(예:
busybox-discovered)에 생성되었는지 확인합니다.
프로세스
Hub 클러스터에서 펜싱을 활성화합니다.
CLI 터미널을 열고 DRCluster 리소스 를 편집합니다. 여기서 < drcluster_name >은 고유한 이름입니다.
Important관리형 클러스터가 펜싱되면 애플리케이션에서 OpenShift Data Foundation 외부 스토리지 클러스터로의 모든 통신이 실패하고 일부 Pod 는 이제 펜싱된 클러스터의 비정상적인 상태(예:
CreateContainerError,CrashLoopBackOff)가 됩니다.oc edit drcluster <drcluster_name>
$ oc edit drcluster <drcluster_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
drcluster.ramendr.openshift.io/ocp4perf1 edited
drcluster.ramendr.openshift.io/ocp4perf1 editedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 기본 관리 클러스터의 Hub 클러스터에서 펜싱 상태를 확인하고 <drcluster _name>이 고유한 식별자인지 확인합니다.
oc get drcluster.ramendr.openshift.io <drcluster_name> -o jsonpath='{.status.phase}{"\n"}'$ oc get drcluster.ramendr.openshift.io <drcluster_name> -o jsonpath='{.status.phase}{"\n"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
Fenced
FencedCopy to Clipboard Copied! Toggle word wrap Toggle overflow Ceph 클러스터에 로그인하고 OpenShift Container Platform 클러스터 노드에 속하는 IP가 블록 목록에 있는지 확인합니다.
ceph osd blocklist ls
$ ceph osd blocklist lsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
RHACM 콘솔에서 Disaster Recovery
Protected applications 탭으로 이동합니다. - 애플리케이션 행이 끝나면 작업 메뉴를 클릭하고 Cryostat 를 시작하도록 선택합니다.
- Cryostat 애플리케이션 모달 창에서 애플리케이션 및 대상 클러스터의 상태를 검토합니다.
-
Initiate 를 클릭합니다. Cryostat 프로세스가
완료될때까지 기다립니다. busybox 애플리케이션이 Secondary 관리 클러스터에서 실행 중인지 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 결과가
WaitOnUserToCleanup이 될 때까지 Cryostat의 진행 상태를 확인합니다. DRPC 이름은 이전 단계에서 구성된 고유한 이름(예:busybox-rbd)으로 식별할 수 있습니다.oc get drpc {drpc_name} -n openshift-dr-ops -o jsonpath='{.status.progression}{"\n"}' WaitOnUserToCleanUp$ oc get drpc {drpc_name} -n openshift-dr-ops -o jsonpath='{.status.progression}{"\n"}' WaitOnUserToCleanUpCopy to Clipboard Copied! Toggle word wrap Toggle overflow Primary 관리 클러스터에서 busybox 애플리케이션을 제거하여 Cryostat 프로세스를
완료합니다.- protected applications 탭으로 이동합니다. 애플리케이션을 제거하는 메시지가 표시됩니다.
busybox에 대해 복제된 리포지토리로 이동하고 에서실패한기본 관리 클러스터에서 다음 명령을 실행합니다. 애플리케이션을 생성하는 데 사용된 것과 동일한 디렉터리를 사용합니다(예:odr-metro-rbd).Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 애플리케이션을 삭제한 후 protected 애플리케이션 탭으로 이동하여 busybox 리소스가 Healthy 상태인지 확인합니다.
3.16.4.2. 검색된 애플리케이션 재배치 재해 복구 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 재해 복구로 보호되는 검색된 애플리케이션을 재배치하는 방법을 안내합니다.
프로세스
Hub 클러스터에서 펜싱을 비활성화합니다.
이 클러스터의 DRCluster 리소스 를 편집하여 <drcluster_name>을 고유한 이름으로 교체합니다.
oc edit drcluster <drcluster_name>
$ oc edit drcluster <drcluster_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
drcluster.ramendr.openshift.io/ocp4perf1 edited
drcluster.ramendr.openshift.io/ocp4perf1 editedCopy to Clipboard Copied! Toggle word wrap Toggle overflow Fenced가 있는 OpenShift Container Platform 노드를 정상적으로 재부팅합니다. 추가 복구 오케스트레이션 실패를 방지하려면 중지 후 I/O 작업을 다시 부팅해야 합니다. 절차의 단계에 따라 클러스터의 모든 노드를 재부팅하고 노드를 정상적으로 재부팅합니다.참고노드에서 차단 해제를 수행하고 작업을 수행하기 전에 모든 노드가 처음에 차단 및 드레이닝되었는지 확인합니다.
모든 OpenShift 노드가 재부팅되고
Ready상태가 되면 기본 관리 클러스터(또는 Unfenced)에서 이 명령을 실행하여 모든 Pod가 정상 상태인지 확인합니다.oc get pods -A | egrep -v 'Running|Completed'
oc get pods -A | egrep -v 'Running|Completed'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
NAMESPACE NAME READY STATUS RESTARTS AGE
NAMESPACE NAME READY STATUS RESTARTS AGECopy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 단계로 진행하기 전에 이 쿼리의 출력은 Pod가 0이어야 합니다.
중요심각한 스토리지 통신으로 인해 Pod가 여전히 비정상 상태인 경우 계속하기 전에 문제를 해결하고 해결합니다. 스토리지 클러스터가 OpenShift 외부에 있으므로 OpenShift 애플리케이션의 사이트 중단 후에도 올바르게 복구해야 합니다.
또는 OpenShift 웹 콘솔 대시보드 및 개요 탭을 사용하여 애플리케이션 및 외부 ODF 스토리지 클러스터의 상태를 평가할 수 있습니다. 자세한 OpenShift Data Foundation 대시보드는 Storage
Data Foundation 로 이동하여 확인할 수 있습니다. Unfenced클러스터가 정상 상태인지 확인합니다. Primary-managed 클러스터의 Hub 클러스터에서 펜싱 상태를 확인하고 <drcluster_name>을 고유한 이름으로 교체합니다.oc get drcluster.ramendr.openshift.io <drcluster_name> -o jsonpath='{.status.phase}{"\n"}'$ oc get drcluster.ramendr.openshift.io <drcluster_name> -o jsonpath='{.status.phase}{"\n"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예:
Unfenced
UnfencedCopy to Clipboard Copied! Toggle word wrap Toggle overflow Ceph 클러스터에 로그인하고 OpenShift Container Platform 클러스터 노드에 속하는 IP가 블록 목록에 없는지 확인합니다.
ceph osd blocklist ls
$ ceph osd blocklist lsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 펜싱 중에 추가된 IP가 표시되지 않는지 확인합니다.
-
RHACM 콘솔에서 Disaster Recovery
Protected applications 탭으로 이동합니다. - 애플리케이션 행이 끝나면 작업 메뉴를 클릭하고 Relocate 를 시작하도록 선택합니다.
- Relocate 애플리케이션 모달 창에서 애플리케이션 및 대상 클러스터의 상태를 검토합니다.
- Initiate 를 클릭합니다.
결과가
WaitOnUserToCleanup이 될 때까지 Relocate의 진행 상태를 확인합니다. DRPC 이름은 이전 단계에서 구성된 고유한 이름(예:busybox-rbd)으로 식별할 수 있습니다.oc get drpc {drpc_name} -n openshift-dr-ops -o jsonpath='{.status.progression}{"\n"}' WaitOnUserToCleanUp$ oc get drpc {drpc_name} -n openshift-dr-ops -o jsonpath='{.status.progression}{"\n"}' WaitOnUserToCleanUpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 기본 관리 클러스터로 다시 할당하기 전에 Secondary 관리 클러스터에서 busybox 애플리케이션을 제거합니다.
busybox에 대해 복제된 리포지토리로 이동하여재배치한 Secondary 관리 클러스터에서 다음 명령을 실행합니다. 애플리케이션을 생성하는 데 사용된 것과 동일한 디렉터리를 사용합니다(예:odr-metro-rbd).Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 애플리케이션을 삭제한 후 protected 애플리케이션 탭으로 이동하여 busybox 리소스가 Healthy 상태인지 확인합니다.
busybox애플리케이션이 기본 관리 클러스터에서 실행 중인지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.16.5. 보호된 애플리케이션의 재해 복구 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
이 섹션에서는 보호된 애플리케이션을 삭제하려는 경우 또는 애플리케이션을 더 이상 보호할 필요가 없는 경우 재해 복구 리소스를 비활성화하는 방법을 안내합니다.
프로세스
- Hub 클러스터에 로그인합니다.
DRPlacementControl(DRPC) 리소스를 나열합니다. 각 DRPC 리소스는 애플리케이션에 DR 정책이 할당될 때 생성되었습니다.oc get drpc -n openshift-dr-ops
$ oc get drpc -n openshift-dr-opsCopy to Clipboard Copied! Toggle word wrap Toggle overflow DR 정책(예:
busybox-rbd)을 할당할 때 선택한 고유 식별자가 포함된 DRPC 를 찾아 DRPC를 삭제합니다.oc delete {drpc_name} -n openshift-dr-ops$ oc delete {drpc_name} -n openshift-dr-opsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 배치 리소스를 나열합니다. 각 배치 리소스는 애플리케이션에 DR 정책이 할당될 때 생성되었습니다.
oc get placements -n openshift-dr-ops
$ oc get placements -n openshift-dr-opsCopy to Clipboard Copied! Toggle word wrap Toggle overflow DR 정책을 할당할 때 선택한 고유 식별자가 포함된 배치 (예:
busybox-rbd-placement-1)가 있는 배치를 찾아 배치를 삭제합니다.oc delete placements {placement_name} -n openshift-dr-ops$ oc delete placements {placement_name} -n openshift-dr-opsCopy to Clipboard Copied! Toggle word wrap Toggle overflow