Open Dajeong-Park opened 1 year ago
iSCSI 관련 ceph 명령어 활용
iscsi.yaml 파일 작성
service_type: iscsi service_id: iscsi service_name: iscsi.iscsi placement: hosts:
api_port 옵션은 ceph command에 없으며, 아래와 같은 명령어 실행한 경우 서비스 상태는 Error 가 되는 이슈
#ceph orch apply iscsi --pool=rbd --api_user=ablecloud --api_password=Ablecloud1! --placement=gwvm
iSCSI 게이트웨이 옵션 변경
#ceph orch ls --service_name=iscsi.iscsi --export > setiscsi.yaml
#vi setiscsi.yaml
#ceph orch apply -i setiscsi.yaml
iSCSI 게이트웨이 제거
#ceph orch rm [service_type].[service_id]
iSCSI 게이트웨이 상태 확인
#ceph orch ps --service_name=iscsi.iscsi (name, host, ports, status, refreshed, age, mem use, mem lim, version, image id, container id 출력)
#ceph orch ls --service_name=iscsi.iscsi (name, ports, running, refreshed, age, placement 출력)
#ceph dashboard iscsi-gateway-list (service_url 출력)
iSCSI 배포 후 게이트웨이 상태가 down이며, 대상과 세션이 n/a로 표시되는 경우 방화벽 5050(api_port)포트 열어줘야함
iSCSI 게이트웨이 Target 생성
각 host에 /etc/hosts 파일에 gwvm 정보를 갖고있어야 대상 생성이 가능함
1. 포털에 gwvm ip 입력후 이미지 선택, ACL 인증 활성화, 이니시에이터 추가(#cat /etc/iscsi/initiatorname.iscsi) 2. 포털에 gwvm ip 입력후 이미지 선택, ACL 인증 비활성화
iSCSI 게이트웨이 initiator 연결
ACL 인증 활성화한 경우 설정 필요
#vi /etc/iscsi/iscsid.conf
node.session.auth.authmethod = CHAP
node.session.auth.username = ablecloud
node.session.auth.password = Ablecloud111
NFS 관련 ceph 명령어 활용
NFS 클러스터 생성
#ceph nfs cluster create [cluster_name] <host_name>
NFS 클러스터 정보 확인
#ceph nfs cluster ls (cluster name 출력)
#ceph nfs cluster info [cluster_name] (hostname, ip, port 정보 출력)
NFS 클러스터 삭제
#ceph nfs cluster rm [cluster_name]
NFS Export 생성
#ceph nfs export create cephfs [cluster_name] [/path] [file_system_name] --path=[/path] --squash no_root_squash
security_label 옵션은 ceph command에 없음
NFS Export 정보 확인
#ceph nfs export ls [cluster_name] (pseudo 출력)
#ceph nfs export get [cluster_name] [/path]
#ceph nfs export ls [cluster_name] --detailed
(path, cluster_id, pseudo, access_type, squash, security_label, protocols, transports, fs_name 등 출력)
NFS Export 삭제
#ceph nfs export rm [cluster_name] [/path]
NFS Export 테스트
gwvm에 #mount -t ceph 10.10.4.14:/ /mnt -o name=admin 마운트 된 상태에서
ccvm에 mkdir /mnt/nfs
#mount -t nfs [gwvmIP]:[/path] /mnt/nfs
정상적으로 마운트되어 해당 path에 파일을 읽고 쓸수 있음
-특정 파일시스템에 사용자 및 권한 추가
#ceph fs authorize gluefs client.ablecloud / rw
-생성된 키 확인
-인증키를 클라이언트에 내보내기
GWVM 구성 테스트 케이스
ceph restful API 테스트
curl -X POST "https://10.10.4.12:8443/api/auth" \
-H "Accept: application/vnd.ceph.api.v1.0+json" \
-H "Content-Type: application/json" \
-d '{"username": "ablecloud", "password": "Ablecloud1!"}' -k
curl -k -X GET "https://10.10.4.12:8443/api/cephfs" \
-H "Accept: application/vnd.ceph.api.v1.0+json" \
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjZXBoLWRhc2hib2FyZCIsImp0aSI6IjY2NWU4MzIyLTkzNDItNDBkYi04YmQ3LTczMTgxOTg5MjA3OSIsImV4cCI6MTY4MjA2ODgwNSwiaWF0IjoxNjgyMDQwMDA1LCJ1c2VybmFtZSI6ImFibGVjbG91ZCJ9.Pq45Z8nY-Pz8-lHmr5-itouXwECdIc9mAySVmHjheFs" \
-H "Content-Type: application/json"
토큰 생성하여 GET /api/cephfs API 호출하는 python 작성
import requests
import json
from requests.packages.urllib3.exceptions import InsecureRequestWarning
headers = { 'Accept': 'application/vnd.ceph.api.v1.0+json', 'Content-Type': 'application/json', }
json_data = { 'username': 'ablecloud', 'password': 'Ablecloud1!', }
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
try: response = requests.post('https://10.10.4.12:8443/api/auth', headers=headers, json=json_data, verify=False) token = response.json()['token'] headers = { 'Accept': 'application/vnd.ceph.api.v1.0+json', 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } response = requests.get('https://10.10.4.12:8443/api/cephfs', headers=headers, verify=False) res=json.dumps(response.json(), indent=2) print(res)
except Exception as e: print("error : ", e)
**ceph librados (python) API 테스트**
scvm에 설치되어있는 python3-rados 활용하여 ceph.conf 파일로 클러스터 id 및 pool 조회 python 파일 작성
import rados, sys
cluster = rados.Rados(conffile='/root/ceph.conf') cluster.connect() print("cluster id: {} ".format(cluster.get_fsid()))
pools=cluster.list_pools() for pool in pools: print(pool)
samba 서버 설치
dnf install samba samba-common samba-client
samba 기본 설정
공유할 디렉토리 지정 mkdir -p /mnt/cephfs/smb #ceph volume 사용을 위해 cephfs mount가 된 경로로 디렉토리 생성 chmod 777 /mnt/cephfs/smb #해당 권한 설정
방화벽 및 SELinux 설정 setsebool -P samba_enable_home_dirs on #삼바 홈 디렉토리 읽기/쓰기 권한 부여 chcon -t samba_share_t /mnt/cephfs/smb #특정디렉토리 삼바권한부여 firewall-cmd --permanent --add-service=samba #삼바 방화벽 설정 firewall-cmd --reload
smb.conf 파일 수정
vi /etc/samba/smb.conf
[global] workgroup = WORKGROUP #윈도우 워크스테이션 [shared] #공유할 파일 이름 path = /mnt/cephfs/smb #공유할 디렉토리 위치 writable = yes #쓰기 read only = no #읽기 guest ok = yes create mode = 0777 directory mode = 0777
- smb.conf 파일 옵션들
```shell
host allow : ip 접속 허용
host deny : ip 접속 차단
comment : 공유되는 디렉토리에 대한 부가적인 설명
path : 공유 디렉토리 절대 경로
browseable : 공유 디렉토리 탐색
public(guest ok) : Anonymous 접근 (default = no)
valid users : 접속을 허용할 사용자 (@그룹) 지정
writable : 접속된 사용자의 쓰기 허용 여부 (default = no)
write list : 쓰기를 허용할 사용자(@그룹) 지정
create mask : 파일 또는 디렉토리 소유권한 (default = directory(755), file(744))
samba 서비스 시작 및 자동 시작
systemctl start smb # 서비스 시작
systemctl enable smb # 서비스 자동 시작
samba 접속 확인
smbclient -L localhost
samba 사용자 생성
1. linux user 생성
useradd -M mcjeong
접속 캐쉬 없애는 법 - cmd에서 net use\\<samba-server-ip>\[path]/delete
smbstatus
testparm
smbclient
smbpasswd -x
userdel -r
userdel
2. ceph volume 디렉토리 삭제
```shell
rm -rf /mnt/cephfs/smb
dnf -y remove samba samba-common samba-client
NFS 관련 python 기능별 목록 개발 및 테스트 진행사항 (ceph API 사용)
iSCSI 관련 python 기능별 목록 개발 및 테스트 진행사항 (ceph API 사용)
GlueFS 관련 python 기능별 목록 개발 및 테스트 진행사항 (gluefs 구성/삭제 제외한 기능은 ceph API 사용)
python 공통 처리 및 마지막 테스트 항목
GlueFS 관련 ceph 명령어 활용
파일 시스템 생성
파일 시스템 제거
파일 시스템, 데이터/메타 데이터 풀, mds 서비스 각각 제거하는 방법
파일 시스템 및 데이터/메타 데이터 풀, mds 서비스 한번에 제거하는 방법
파일 시스템 상태 확인
파일 시스템 max_file_size 설정
cephFS 마운팅
cephFS 마운트 해제
cephFS 자동 마운트 설정 /etc/fstab
파일 시스템 디렉토리 quotas 설정
max_size
setfattr -n ceph.quota.max_bytes -v 100000000 /mnt/gluefs (100000000Byte=100MB)
getfattr -n ceph.quota.max_bytes mnt/gluefs (설정 확인)
max_file
setfattr -n ceph.quota.max_files -v 10000 /mnt/gluefs (10000=10000개)
getfattr -n ceph.quota.max_files mnt/gluefs (설정 확인)
ex) mount -t ceph 100.100.4.14:/ /mnt -o name=admin 마운트하고, fs path가 /gluefs 인 경우
cd /mnt/gluefs
mkdir .snap/new-snaps (생성)
ls -l .snap/ (확인)
cd /mnt/gluefs
rmdir .snap/new-snaps (삭제)