CTDB.docx
요약 : 클러스터 게이트 웨이. arp를 이용하여 fail over/fail back 수행을 한다.
환경 4
네트워크 설정 5
Udev rule 변경, 적용... 5
인터페이스(private, public) 설정... 5
스토리지 준비 7
Ceph Fs 마운트
Block Device 생성/맵핑... 7
설치 8
ctdb. 8
SAMBA.. 8
NFS. 8
서버... 8
클라이언트... 8
Iscsi 8
서버
클라이언트... 9
vsftpd. 9
설정 10
ctdb. 10
upstart 설정... 12
onnode 스크립트 변경 (sudo 추가) 13
samba. 13
nfs-kernerl-server 14
iSCSI 16
Vsftpd. 17
서비스 점검 18
ceph. 18
마운트 포인트 확인... 18
initctl 확인... 18
ceph 상태 확인... 18
로그 위치... 19
CTDB. 19
ping 확인... 19
ctdb 상태 확인... 19
ctdb 서비스 처리 노드 확인... 19
Log 위치... 20
SAMBA.. 20
설정 체크... 20
NFS. 22
rpcinfo 체크(리모트 nfs 서버) 22
리모트 nfs 서버의 서비스 체크... 23
rcpbind 체크... 23
iSCSI 24
rbd 지원 확인... 24
target 체크... 24
bind 체크... 26
Remote iSCSI 타겟 찾기... 26
체크 리스트 27
참고사이트 29
ctdb. 29
samba. 29
nfs. 29
Stgt 30
OS : Ubuntu 14.04 LTS
Kernel : Linux version 3.14.0
smbd : Version 4.1.6-Ubuntu
$ sudo vim /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1b:21:d7:73:19", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="p1p2" |
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1b:21:d7:73:19", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth2" |
$ sudo vim /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0" |
$sudo update-grub
$ sudo reboot
udev rule을 변경하지 않으면, interface를 인식하지 못한다.
$ sudo vim /etc/network/interface
auto lo iface lo inet loopback auto eth0 # private network iface eth0 inet static address 11.0.0.11 netmask 255.255.255.0 auto p1p1 iface p1p1 inet static address 192.168.3.11 netmask 255.255.252.0 gateway 192.168.0.1 dns-nameserver 8.8.8.8 auto eth2 # public network iface eth2 inet manual |
<!--[if !supportLists]-->1. <!--[endif]-->CephFS 마운트
$ sudo mount -t ceph 192.168.2.18:6789:/ /mnt/storage/ -o name=admin,secretfile=/etc/ceph/ceph.client.admin.keyfile
<!--[if !supportLists]-->2. <!--[endif]-->Fstab 등록
$ sudo vim /etc/fstab
192.168.2.18:6789:/ /mnt/storage ceph name=admin,secretfile=/etc/ceph/ceph.client.admin.keyfile,noatime 0 2 |
<!--[if !supportLists]-->1. <!--[endif]-->블럭 생성
$ sudo rbd create block1 --size 1024
Rbd를 지원하는 stgt를 사용한다면 블록 생성만 해도 된다
<!--[if !supportLists]-->2. <!--[endif]-->블럭 매핑
$ sudo rbd map block1
<!--[if !supportLists]-->3. <!--[endif]-->블럭 매핑 유지
$ sudo vim /etc/ceph/rbdmap
rbd/block1 id=admin,keyring=/etc/ceph/ceph.client.admin.keyring |
$ sudo apt-get install ctdb libctdb-dev
$ sudo apt-get install samba samba-common samba-dev
$ sudo apt-get install nfs-common nfs-kernel-server rpcbind quota
$ sudo apt-get install nfs-common
$ sudo apt-get install tgt
$ sudo apt-get install open-iscsi
$ sudo apt-get install vsftpd
Ctdb 설정
sudo vim /etc/default/ctdb
CTDB_RECOVERY_LOCK=/mnt/storage/ctdb/.ctdb.lock CTDB_NODES=/etc/ctdb/nodes CTDB_PUBLIC_ADDRESSES=/etc/ctdb/public_addresses CTDB_MANAGES_SAMBA=yes CTDB_MANAGES_NFS=yes CTDB_MANAGES_ISCSI=yes CTDB_MANAGES_VSFTPD=yes CTDB_DEBUGLEVEL=NOTICE CTDB_SOCKET=/var/lib/run/ctdb/ctdbd.socket CTDB_INIT_STYLE=debian CTDB_DBDIR=/var/ctdb CTDB_DBDIR_PERSISTENT=/var/ctdb/persistent |
sudo mkdir /var/lib/run/ctdb/ -p
sudo ln -s /usr/sbin/service /sbin/service
sudo mkdir /mnt/storage/ctdb
Ctdb 네트워크 설정
<!--[if !supportLists]-->1. <!--[endif]-->Private 주소
sudo vim /etc/ctdb/nodes
11.0.0.11 11.0.0.12 11.0.0.13 |
<!--[if !supportLists]-->2. <!--[endif]-->Public 주소
sudo vim /etc/ctdb/public_addresses
12.0.0.11/24 eth2 12.0.0.12/24 eth2 12.0.0.13/24 eth2 |
samba 이벤트 스크립트 수정
sudo vim /etc/ctdb/events.d/50.samba 수정
debian) CTDB_SERVICE_SMB=${CTDB_SERVICE_SMB:-samba} CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-""} |
debian) CTDB_SERVICE_SMB=${CTDB_SERVICE_SMB:-smbd} CTDB_SERVICE_NMB=${CTDB_SERVICE_NMB:-nmbd} |
nfs 이벤트 스크립트 수정
$ sudo vim /etc/ctdb/functions (730 라인정도의 startstop_nfs()에 삽입)
......... unknown) case $1 in start) service nfs-kernel-server start ;; stop) service nfs-kernel-server stop ;; restart) set_proc "fs/nfsd/threads" 0 service nfs-kernel-server stop > /dev/null 2>$1 pkill -9 nfsd nfs_dump_some_threads service nfs-kernel-server start ;; esac ;; *) exit 1 ;; esac ........ |
functions이 아닌 이벤트 스크립트로 수정해도 되는지 확인 하자. Restart는 불안한 것 같음(테스트 1번밖에 안해봄)
iSCSI 이벤트 스크립트 수정
$ sudo vim /etc/ctdb/events.d/70.iscsi
……….. # start the iscsi daemon tgtd >/dev/null 2>/dev/null tgt-admin –e #재 시작할 때 타겟 정보가 항상 사라져서 삽입 ……….. |
<!--[if !supportLists]-->l <!--[endif]-->만약 disable이 실패하면 sudo update-rc.d {service name} defaults을 먼저 해준다.
sudo update-rc.d ctdb enable
sudo update-rc.d {smbd | nmbd | nfsd rpcbind | tgt} disable
sudo sh -c "echo 'manual' > /etc/init/{ smbd | nmbd | nfs-kernel-server rpcbind | tgt}.override"
ctdb가 실행되기 전에 위의 서비스들이 미리 실행되고 있으면 ctdb 상태가 불안정 할 수 있다.
$ sudo vim /usr/bin/onnode
for n in $nodes ; do set -o pipefail 2>/dev/null if $parallel ; then { exec 3>&1 ; { $SSH $ssh_opts $EXTRA_SSH_OPTS $n "sudo $command" | stdout_filter >&3 ; } 2>&1 | stderr_filter ; } & pids="${pids} $!" else if $verbose ; then echo >&2 ; echo ">> NODE: $n <<" >&2 fi { exec 3>&1 ; { $SSH $ssh_opts $EXTRA_SSH_OPTS $n "sudo $command" | stdout_filter >&3 ; } 2>&1 | stderr_filter ; } [ $? = 0 ] || retcode=$? fi done |
Root 사용자 생성하지 않고 하려면 위와 같이 변경.
smb 설정
$ sudo vim /etc/samba/smb.conf (global 섹션 삽입, anycloud 섹션 생성)
[global] clustering = yes idmap backend = tdb2 cluster addresses = 12.0.0.11 12.0.0.12 12.0.0.13 ctdbd socket = /var/lib/run/ctdb/ctdbd.socket private dir = /mnt/storage/ctdb security = user groupdb:backend = tdb smb passwd file = /etc/samba/smbpasswd [anycloud] path = /mnt/storage browseable=yes public=no writeable=yes |
export 설정
$ sudo vim /etc/export
/mnt/storage *(rw,fsid=1235,subtree_check,no_root_squash) |
nfs-kernel-server 설정
$ sudo vim /etc/default/nfs-kernel-server
Nfs port 설정
$ sudo vim /etc/default/nfs-kernel-server
$ sudo vim /etc/services
status 595/tcp status 595/udp rquotad 598/tcp rqoutad 598/udp |
$ sudo vim /etc/modprobe.d/options.conf
options lockd nlm_udpport=599 nlm_tcpport=599 |
$ sudo vim /etc/modules
$ sudo reboot
$ rpcinfo –p
storage@s1:~$ rpcinfo -p program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 595 status 100024 1 tcp 595 status 100011 1 udp 895 rquotad 100011 2 udp 895 rquotad 100011 1 tcp 598 rquotad 100011 2 tcp 598 rquotad 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 2 tcp 2049 100227 3 tcp 2049 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 2 udp 2049 100227 3 udp 2049 100021 1 udp 599 nlockmgr 100021 3 udp 599 nlockmgr 100021 4 udp 599 nlockmgr 100021 1 tcp 599 nlockmgr 100021 3 tcp 599 nlockmgr 100021 4 tcp 599 nlockmgr 100005 1 udp 597 mountd 100005 1 tcp 597 mountd 100005 2 udp 597 mountd 100005 2 tcp 597 mountd 100005 3 udp 597 mountd 100005 3 tcp 597 mountd |
타겟 설정
$ sudo vim /etc/tgt/targets.conf
include /etc/tgt/conf.d/*.conf default-driver iscsi <target iqn.2014.6.anycloud:iscsi.target.storage1.block1> backing-store /dev/rbd/rbd/block1 </target> |
타겟 설정(with rbd)
$ sudo vim /etc/tgt/targets.conf
include /etc/tgt/conf.d/*.conf <target iqn.2014-06.anycloud:rbd> driver iscsi bs-type rbd backing-store rbd/block1 #pool_name/image_name </target> |
타겟 커맨드 설정(수동)
$ sudo tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2014.6.anycloud:iscsi.target.storage1.block1
$ sudo tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/rbd/rbd/block1
$ sudo tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
$ adduser ftp1
$ sudo usermod -d /mnt/storage ftp1 (각 게이트웨이 노드에 ftp 유저 생성 후 사용)
Active directory 연동은 추후 update
ceph
$ mount
……………
192.168.2.18:6789:/ on /mnt/storage type ceph (name=admin,key=client.admin)
initctl list | grep ceph
ceph-mds-all start/running ceph-osd-all start/running ceph-mds-all-starter stop/waiting ceph-osd-all-starter stop/waiting ceph-all start/running ceph-mon-all start/running ceph-mon-all-starter stop/waiting ceph-mon (ceph/s1) start/running, process 1188 ceph-create-keys stop/waiting ceph-osd stop/waiting ceph-mds (ceph/s1) start/running, process 27502 |
$ ceph health
HEALTH_OK
/var/log/ceph/
$ sudo ctdb ping –n all
response from 0 time=0.000826 sec (1 clients) response from 1 time=0.000318 sec (2 clients) response from 2 time= 0.000092sec (2 clients) |
$ sudo ctdb status
Number of nodes:3 pnn:0 11.0.0.11 OK (THIS NODE) pnn:1 11.0.0.12 OK pnn:1 11.0.0.13 OK Generation:619257139 Size:3 hash:0 lmaster:0 hash:1 lmaster:1 hash:2 lmaster:2 Recovery mode:NORMAL (0) Recovery master:1 |
$ sudo ctdb ip
Public IPs on node 0 12.0.0.11 0 12.0.0.12 1 12.0.0.13 2 |
12.0.0.12가 꺼졌을 때 )
Public IPs on node 0 12.0.0.11 0 12.0.0.12 0 12.0.0.13 2 |
12.0.0.11 (서비스가 가능한 다른 노드)에서 12.0.0.12 대신 서비스 중이란 것을 확인 할 수 있다
/var/log/ctdb/
$ testparm
Load smb config files from /etc/samba/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) WARNING: The "idmap backend" option is deprecated Processing section "[printers]" Processing section "[print$]" Processing section "[anycloud]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions [global] server string = %h server (Samba, Ubuntu) server role = standalone server map to guest = Bad User obey pam restrictions = Yes private dir = /mnt/storage/ctdb pam password change = Yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . unix password sync = Yes syslog = 0 log file = /var/log/samba/log.%m max log size = 1000 ctdbd socket = /var/lib/run/ctdb/ctdbd.socket cluster addresses = 12.0.0.11, 12.0.0.12, 12.0.0.13 clustering = Yes dns proxy = No usershare allow guests = Yes panic action = /usr/share/samba/panic-action %d groupdb:backend = tdb idmap config * : backend = tdb2 [printers] comment = All Printers path = /var/spool/samba create mask = 0700 printable = Yes print ok = Yes browseable = No [print$] comment = Printer Drivers path = /var/lib/samba/printers [anycloud] path = /mnt/storage read only = No |
ctdb를 위해 Smb 설정에 추가한 부분이 존재하는지 확인
$ rpcinfo -s anycloud-ds-1
program version(s) netid(s) service owner 100000 2,3,4 local,udp,tcp,udp6,tcp6 portmapper superuser 100024 1 tcp6,udp6,tcp,udp status 105 100011 2,1 tcp,udp rquotad superuser 100003 4,3,2 udp6,tcp6,udp,tcp nfs superuser 100227 3,2 udp6,tcp6,udp,tcp - superuser 100021 4,3,1 tcp6,udp6,tcp,udp nlockmgr superuser 100005 3,2,1 tcp6,udp6,tcp,udp mountd superuser |
$ rpcinfo –p anycloud-ds-2
program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 595 status 100024 1 tcp 595 status 100011 1 udp 895 rquotad 100011 2 udp 895 rquotad 100011 1 tcp 598 rquotad 100011 2 tcp 598 rquotad 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 2 tcp 2049 100227 3 tcp 2049 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 2 udp 2049 100227 3 udp 2049 100021 1 udp 599 nlockmgr 100021 3 udp 599 nlockmgr 100021 4 udp 599 nlockmgr 100021 1 tcp 599 nlockmgr 100021 3 tcp 599 nlockmgr 100021 4 tcp 599 nlockmgr 100005 1 udp 597 mountd 100005 1 tcp 597 mountd 100005 2 udp 597 mountd 100005 2 tcp 597 mountd 100005 3 udp 597 mountd 100005 3 tcp 597 mountd |
$ showmount -e anycloud-ds-1
Export list for anycloud-ds-1: /mnt/storage * |
$ ps -ef |grep rpcbind
root 569 1 0 09:33 ? 00:00:00 rpcbind storage 29825 1404 0 17:02 pts/0 00:00:00 grep --color=auto rpcbind |
$ sudo tgtadm --lld iscsi --mode system --op show
System: State: ready debug: off LLDs: iscsi: ready Backing stores: rbd (bsoflags sync:direct) sheepdog bsg sg null ssc rdwr (bsoflags sync:direct) Device types: disk cd/dvd osd controller changer tape passthrough iSNS: iSNS=Off iSNSServerIP= iSNSServerPort=3205 iSNSAccessControl=Off |
$ sudo tgt-admin –s (or tgtadm --lld iscsi --mode target --op show)
Target 1: iqn.2014.6.anycloud:iscsi.target.storage1.block1 System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 1074 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: rdwr Backing store path: /dev/rbd/rbd/block1 Backing store flags: Account information: ACL information: ALL |
$ sudo netstat -atnp | grep 3260
tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 10881/tgtd tcp6 0 0 :::3260 :::* LISTEN 10881/tgtd |
$ sudo iscsiadm --mode discovery --type sendtargets --portal 12.0.0.11
12.0.0.11:3260,1 iqn.2014.6.anycloud:iscsi.target.storage1.block1 |
구분 |
체크 사항 |
비고 |
파일시스템 |
서버 재가동시 ceph 데몬들은 자동 실행 되는가? |
ceph의 상태는 정상 상태인가? |
fstab은 작성되어 있는가? |
ceph는 마운트 되어 있는가? |
|
|
블록시스템 |
블록은 존재하는가 |
서비스 블록은 매핑되어 있는가? |
rbdmap은 작성되어 있는가? |
|
|
네트워크 |
private 네트워크는 동작중인가? |
private 네트워크를 통해 서로 ping이 갈 수 있는 상황인가? |
public 네트워크는 준비되어 있는가? |
|
|
CTDB |
설정파일은 제대로 작성 되어 있는가? |
프로세스는 존재하는가? |
CTDB가 동작한 후 에 공유서비스 데몬들이 동작하는가? |
CTDB 동작 후 public 네트워크 주소가 제대로 할당 되는가? |
노드 모두 OK 상태인가? |
Recovery master가 할당되어 있는가? |
Recovery mode가 NOMAL 상태 인가? |
ctdb가 구성된 모든 노드에게 ping이 가는가? |
장애 발생 시 정상인 다른노드가 대신 서비스 처리를 해주는가? |
|
|
Samba |
설정은 제대로 적용되었는가? |
samba user 는 추가되어 있는가? |
upstart는 disable 되어 있는가? |
smbd, nmbd 프로세스가 존재하는가? |
pair over, pair back는 제대로 동작하는가? |
Global locking은 제대로 동작하는가? |
|
|
Nfs |
설정은 제대로 적용되었는가? |
upstart는 disable 되어 있는가? |
nfsd, rpc 프로세스들은 존재하는가? |
pair over, pair back는 제대로 동작하는가? |
|
|
iSCSI |
설정은 제대로 적용되었는가? |
target은 생성되어 있는가? |
tgtd 프로세스는 존재하는가? |
pair over, pair back는 제대로 동작하는가? |
|
|
samba ctdb 사이트 - https://ctdb.samba.org/
samba ctdb 위키 - https://wiki.samba.org/index.php/CTDB_Setup
readhat ctdb 설정(한글) – https://access.redhat.com/site/documentation/ko-KR/Red_Hat_Enterprise_Linux/6/html/Cluster_Administration/s1-CTDB-Configuration-CA.html
ctdb 설명 ppt -
https://www.snia.org/sites/default/files2/sdc_archives/2010_presentations/monday/VolkerLendecke_Status_Clustered_CIFS.pdf
http://niranjanmr.wordpress.com/2011/12/05/ctdb/
http://www.samba.org/~obnox/presentations/sambaXP-2011/sambaxp-2011-tutorial-ctdb-handout.pdf
우분투 파일 서버 - http://developinghappiness.com/?p=82
우분투 nfs howto - https://help.ubuntu.com/community/SettingUpNFSHowTo
Nfs how to - http://chschneider.eu/linux/server/nfs.shtml
Nfs 포트 변경 :
Configuring NFS under Linux for Firewall control - http://www.lowth.com/LinWiz/nfs_help.html
http://rockball.tistory.com/entry/NFS-Port-%EA%B3%A0%EC%A0%95%EB%B0%A9%ED%99%94%EB%B2%BD-%EC%82%AC%EC%9A%A9
Lockd 변경 -http://ubuntuforums.org/showthread.php?t=1263114&page=2&p=7959294#post7959294
http://cdral.net/948
ceph rbd+stgt 설명 사이트 - http://ceph.com/dev-notes/adding-support-for-rbd-to-stgt/
Stgt 소스코드 주소 - https://github.com/fujita/tgt
Stgt+rbd 설정 - http://stuartl.longlandclan.yi.org/blog/2014/02/25/ceph-and-stgt/
Stgt 퀵 가이드 - https://fedoraproject.org/wiki/Scsi-target-utils_Quickstart_Guide
Tgt 페키지 - http://stgt.sourceforge.net/