들어가며

  앞서 클러스터를 구축하는 방법에 대해서 설명을 하였다. [Cloudera] 클라우데라 설치하는 방법 - (Linux, Cloudier Manager) 그렇다면 이렇게 구축된 클러스터에 새로운 노드를 추가하기 위해서는 어떤 작업을 진행해야할까에 대해서 이번 글에 적으려고 한다. 막상 클러스트러를 구축할때 처럼만 설정하면 되지 라고 생각하지만, 막상 내가 각 노드에 어떤 내용을 추가했는지 기억이 안난다는 함정이 있다. 그래서 DataNode를 추가하거나 Spark의 WorkerNode를 추가를 할 경우에 어떤 설정 및 설치를 해야하는지 아래 설명한다. 


1. 스토리지 추가하기

  일단 새로운 노드를 클라우드에서 생성을 한다. 기존 노드들에서도 스토리지를 추가했기 때문에 생성이 완료되면 스토리지를 추가하자. 스리지가 생성이 되면 자동으로 마운트가 되지 않는다. 그렇기 때문에 dev/하위에 자동으로 할당된 경로를 찾고, 포맷 및 마운트를 진행하면 된다. 마운트에 관련된 내용은 아래 포스트에서 설명을 했다. [Linux] 스토리지 추가하기 (포맷하기, 마운트하기)

 2. host등록하기 

banana.host01의 /etc/hosts에 추가할 hostname과 ip주소를 넣는다.  (banana.host01은 Cloudier Manager가 설치된 서버)
추가할 서버의 /etc/hosts에 내용을 넣는다. 

3. ssh-key 등록

$ ssh-keygen -f /home/banana/.ssh/id_rsa -t rss -N ''
$ cp /home/banana/.ssh/id_rsa.pub /home/banana/.ssh/authorized_keys && chmod 644 /home/banana/.ssh/authorized_keys\
authorized_key에 master(banana.host01)의 public key를 넣어준다. 

4. 배포하기

  준비가 다 완료되었으면 Cloudier Manager의 웹사이트에 들어가서  [호스트] - [새 호스트를 클러스터에 추가] 


MySQL 데이터 경로 변경하는 방법

MySQL의 데이터가 저장되는 경로는 기본적으로 /var/lib/mysql에 저장이 됩니다. 하지만 다른 추가적인 HDD에 저장을 하고 싶을때는 데이터가 저장될 경로를 변경하시면 됩니다.


데이터 저장소 생성하기

/var/lib/mysql의 기존 경로를 /media/hdd/mysql로 변경하는 방법입니다. 시작을 하기 전에 mysql server를 stop을 합니다.

$ sudo service mysql stop
stop mysql Create the new directory:

새롭게 데이터가 저장될 경로를 생성합니다.

$ mkdir /media/hdd/mysql

기존의 /var/lib/mysql의 정보를 새로운 경로인 /media/hdd/mysql로 복사를 합니다.

$ cp -R /var/lib/mysql /array2/mysql


데이터 저장소 연결하기

기존의 경로인 /var/lib/mysql을 /media/hdd/mysql로 변경하는 방법입니다.

$ sudo vi /etc/mysql/my.cnf
[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3307
basedir         = /usr
#datadir                = /var/lib/mysql
datadir         = /media/hdd/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql

새롭게 저장할 폴더의 권한을 mysql:mysql로 변경을 합니다.

$ chown -R mysql:mysql /media/hdd/mysql

기존의 mysql폴더를 backup을 한 뒤에 생성한 mysql의 폴더를 기존의 mysql로 연결을 해줍니다.

$ mv /var/lib/mysql /var/lib/mysql-old
$ ln -s /media/hdd/mysql /var/lib/mysql 

AppArmor에 datadir을 등록한 뒤에, apparmor profiles을 다시 로딩을 합니다.

$ echo "alias /var/lib/mysql/ -> /your/new/datadir/," >> /etc/apparmor.d/tunables/alias
$ sudo /etc/init.d/apparmor reload

mysql서버를 재시작해주면 이제 datadir이 변경된 것을 확인할 수 있습니다.

$ sudo service mysql restart


  1. hada 2018.01.25 15:34

    기존의 /var/lib/mysql의 정보를 새로운 경로인 /media/hdd/mysql로 복사를 합니다.

    $ cp -R /var/lib/mysql /array2/mysql

    이부분에서 복사경로가 /media/hdd/mysql이게 아닌데 오타인가요????

  2. 궁금 2018.04.10 01:35

    도움이 되었습니다.

    그런데 변경된 디렉토리로 심볼릭링크를 만들었는데 굳이 my.cnf 에서 datadir 을 수정할 필요가 있나요?
    해보니 my.cnf 를 수정하지 않아도 되긴한데, 어떤 차이가 있어서 그렇게 하신건지 궁금해서 글 남겨봅니다.

    전 centos 에서 작업을 했는데, 마지막 mysql 실행시에 permission denied 오류가 발생하더군요.
    구글링 해보니 selinux 때문인데, selinux 를 permissive 시키니 정상 작동하네요.
    https://blogs.oracle.com/jsmyth/selinux-and-mysql

    감사합니다.

  3. 나그네 2019.02.08 13:07

    순서대로 진행했는데, Error가 났습니다. systemctl mysql status or journalctl -xe 확인하라고 해서 systemctl 확인했는데,

    active : failed(results : exit-code) ~~~
    process : 9377 ExecStart=/usr/sbin/mysqld --demonize --pid-file=/run/mysqld/mysqld.pid ( code=exited, status=1/FAILURE)

    ~~~~~
    Failed to start MYSQL Community Server.

    이렇게 에러가 뜨는데 혹시 무슨 문제인지 아신다면 해결책 좀 부탁드리겠습니다(비밀글로했더니 안보이네요ㅠ)

    • 쌍쌍바나나 2019.02.08 13:39 신고

      일단 mysql이 제대로 시작하는지 확인이 필요하겠네요! 설치경로가 동일한가요? 동일하게 이전에 시작이 되었던건데 경로변경하고 다시시작이 안되는거라면 전체 로그부탁드려요!

Branch

  Git 저장소에서 branches를 사용하는 이유는 작업을 분리(isolate)하기 위해서 입니다. 우리가 최초에 생성하는 master 외에도 다른 branch를 생성이 가능합니다. 작업을 분리해서 작업을 한 뒤에 main branch에 merge를 하면 됩니다.


branch가 어떻게 동작하는지에 대해서 더 자세하게 알고싶으면 아래 사이트를 참고하시면 됩니다.
[참고] guides.github.com/overviews/flow

브랜치(Branch) 생성하기

git status 를 통해 현재 내가 어떤 branch에서 작업을 하는지 볼 수 있습니다.
git branch 을 통해 새로운 branch를 생성이 가능합니다.
git checkout 을 통해 브랜치를 이동할 수 있습니다.

새로운 파일 추가하기

  새롭게 만들어진 branch에서 새로운 파일을 추가하고, push하는 작업까지 해보겠습니다. add-.txt의 파일을 생성해 보겠습니다. git status를 치면, 새롭게 추가된 add-.txt가 보입니다. 파일을 git add .을 통해 추가를 하고, git commit -m "<COMMITMESSAGE>"를 통해 commit을 합니다. 마지막으로 이전 단계에서 생성한 브랜치에 push를 하면 됩니다. git push origin <BRANCHNAME>

Tips

브랜치를 생성하고, 생성한 브랜치로 변경하는 방법: $ git checkout -b

새로운 브랜치 생성하는 방법: $ git branch <BRANCHNAME>

브랜치 이동하는 방법: $ git checkout <BRANCHNAME>

브랜치 리스트 확인하기: $ git branch

브랜치 이름 변경하기: $ git branch -m <BRANCHNAME>

내가 작업하고 있는 브랜치 확인하기 $ git status


[참고] http://jlord.us/git-it/challenges/branches_arent_just_for_birds.html

Forks And Clones

Forks란?

  Open source projects에 참여하고 싶은가? 그렇다면 forks에 대해서 알아야 합니다. fork란 다른 원격 저장소에 있는 히스토리를 그대로 나의 github 원격 저장소에 복사하는 것을 말합니다. 다른 사람의 프로젝트에 바로 push를 할 수 없기 때문에 일단 나만의 프로젝트 버전을 관리하기 위해 다른 사람의 원격 저장소에서 프로젝트를 가져옵니다. 그런다음에 내가 contributing을 원래 원격 저장소로 요청을 합니다. 한마디로 외부 프로젝트를 진행할때 나만의 버전을 관리하기 위해서 fork를 해서 외부 프로젝트에 반영한다고 생각하시면 됩니다. fork를 했다면 나의 github에 있는 저장소에서 로컬로 clone을 합니다. 그럼이제 프로젝트 세팅 끝




외부 프로젝트, 나만의 원격 저장소에 복사하기

https://github.com/solidpple/patchwork 에 접속하셔서 오른쪽 상단에 있는 fork를 누르면 잠시후에 나의 github 저장소에 해당 프로젝트가 복사되는 것을 확인할 수 있습니다. 이 작업을 하기 전에 github에 로그인이 되어 있는 상태여야 합니다. 

원격 저장소에서 로컬 저장소로 가져오기

fork를 했다면 로컬에 있는 저장소로 해당 프로젝트를 가져온 뒤에 작업을 하시면 됩니다. 작업을 하기 위해 프로젝트를 clone할 위치로 이동을 한 뒤에

$ git clone 
$ cd patchwork

clone을 하고 나면 patchwork로 들어가면 프로젝트가 생성된 것을 확인할 수 있습니다. 이제 github의 저장소에 자동으로 연결이된 상태이고, 수정을 한 뒤에 앞서 배운 add, commit, push를 통해 반영을 하시면 됩니다.

기존 원격 저장소 연결하기

기존에 fork한 프로젝트의 변경되는 과정도 확인을 해야 하기 때문에, pull이 가능하도록 해아합니다. 그렇기 때문에 기존 fork한 원격 저장소도 추가를 합니다. https://github.com/jlord/patchwork 아래 git remote의 -v 옵션을 사용해 현재 연결되어 있는 git저장소를 확인 하실 수 있습니다. upstream은 remotename으로 종종 사용자들이 'upstream'으로 사용하기 때문에 사용했습니다. 이제는 pull을 하면 원래 저장소의 변경된 사항도 반영이 됩니다. 반영된 결과를 나의 수정 사항과 함께 나만의 원격 저장소에 반영을 하면 됩니다. 

$ git remote add upstream https://github.com/jlord/patchwork.git
$ git remote -v


[참고] http://jlord.us/git-it/challenges/forks_and_clones.html

  1. kbj0109 2018.01.28 20:07

    좋은 글 잘 봤습니다. 그런데 마지막의 upstream에관한 것을 보고 확인차 질문 드립니다.
    그럼 하나의 Local Branch가 하나 이상의 Remote Repository와 연결이 가능한건가요?
    그리고 가능하다면, Fork를 실행한 오리지널 Remote Repository (A)와 연결을 한 상태에서는 Pull을 하면,
    Fork로 생성한 새로운 저만의 Remote Remote Repository (B) 와 연동되어 A와 B의 변경사항이 제 Local Repository에 같이 적용 되는건가요?
    그러면 Push를 할 떄는 B인 제 Remote로만 반영이 되고, Pull을 할 떄는 A와 B로부터 둘 다 영향을 받는 건가요?

Remote Control

로컬(local)의 저장소(repository)를 원격(remote)저장소에 연결하고, 로컬 저장소에 변경된 내용을 원격 저장소에 반영(push)하는 방법에 대해서 설명을 하겠습니다.

원격(Remote)?

  로컬에서 혼자 커밋하면서 사용하면, 내 피시에만 나의 커밋(commit) 기록이 남습니다. 원격저장소에 로컬에 있는 프로젝트를 반영하기 위해 push를 합니다. push를 함으로써 원격저장소와 로컬저장소에 저장되어 있는 코드 및 기록이 일치(sync)가 됩니다. 이제 함께 프로젝트하는 사람들은 나의 프로젝트를 pulling(가져가기)하면, 프로젝트를 함께하는 모두에게 나의 로컬에 있는 프로젝트를 복사해서 자신의 프로젝트로 옮길 필요가 없습니다.

Create a remote repository

  • github.com를 접속해서 로그인을 합니다. 로그인을 하신후에 오른쪽 위에 + 버튼을 눌러서 새로운 저장소(Repository)를 생성합니다
  • 로컬에 있는 저장소와 이름을 동일하게 하고, 짧은 설명을 작성합니다.
  • 공개 범위는 public과 private이 있는데, public으로 하겠습니다. (나의 코드를 나만 볼것(private)이냐, 모두가 함께 공유할 것(public)이냐에 대한 설정)
  • README를 작성
  • gitignore, license는 'none'을 선택하시면 됩니다.(기본값)
  • 저장소를 생성합니다.

Readmes, .gitignores and licenses

  README, .gitignores, licenses파일은 open source projects에는 있어야 하는 파일입니다. 뭐 꼭 있어야 하는건 아닌데... contributor가 어떻게 해야하는지 가이드는 줘야하니까... 어지간하면 작성을 합니다. README는 프로젝트가 어떤 프로젝트인지, 어떻게 사용하는지, 어떻게 contribution을 하는지에 대해서 설명합니다. gitignore는 git이 nottrack을 해야하는 file의 리스트입니다. (패스워드가 있는 파일을 공유한다면...) license 파일은 나의 프로젝트에서 사용하는 라이센스 타입 리스트를 작성하는 파일입니다.
[참고] http://choosealicense.com/

생성한 저장소에 로컬을 연결하기

Github에 원격저장소를 만들었으면, 저장소의 주소를 로컬저장소에 http 또는 ssh를 통해 등록을 합니다.( 최초 생성한 프로젝트의 경로로 가서,

$ git remote add origin http://a/b/repo.git

을 하시면 로컬에 있는 repository라 remote가 어디인지 이제 알게 됩니다. 여기서 origin은 github's의 서버에 있는 이름이 됩니다.


Work를 Remote로 Push 하기

push를 통해 local에 있는 repository를 server로 전송이 가능합니다.

$ git push origin master

여기서 origin은 이전 단계에서 remote add origin으로 추가한 origin을 나타내고, master는 branch이름이고, 기본적으로 생성되는 branch 입니다.

Tips

Add remote connections
$ git remote add 

Set a URL to a remote
$ git remote set-url 

Pull in changes
$ git pull 

View remote connections
$ git remote -v Push changes $ git push

[참고] http://jlord.us/git-it/challenges/remote_control.html

Git설치, 설정하는 방법과 저장소(Repository) 생성, 파일 저장소에 추가 및 커밋(commit)하는 방법

들어가며

  Git은 Linus Torvalds라는 Linux operation system을 구현한 분이 처음에 코드 관리를 위해 만든 툴입니다. linux가 오픈소스인건 누구나 아실텐데요. 이처럼 오픈 소스를 개발하기 위해서는 한 명이 아닌 여러명이 개발을 해야합니다. 여러명이 한 프로젝트를 개발한다? 협업을 하는 측면에서 바라본다면, 정말 어려운 문제입니다. 내가 수정한 부분이 다른 사람의 수정한 부분과 동일하면 충돌이 일어날 것이고, 버전 별로 관리를 하지 않는다면 언제까지 .bak파일을 만들거나 복사 붙여넣기를 할 수 없는 문제입니다. 이 처럼 한 프로젝트를 여러명이 동시에 개발할때 생기는 문제를 해결해 주고, 코드 관리를 해주는게 git이라고 할 수 있습니다. git은 누구나 사용할 수 있는  오픈소스 소프트웨어 이고, programming 버전관리와 코드의 변화과정을 히스토리화 해서 볼수 있습니다.


Git 설치하기

  Git을 시작하기 위해서는 git을 설치를 해야합니다. 대표적인 사이트는 여러곳이 있는데, 그 중에서도 가장 대중적으로 사용하는 github에 대해 설명을 해 드리겠습니다. 거의 모든 git repository를 제공하는 사이트가 git을 기반으로 동작하기 때문에 비슷하니 github에 대한 사용법을 이해하시면 다른 git 관련 사이트를 이용해도 문제가 없습니다. 여기서 만약에 private하게 소수만 무료로 사용하고 싶다면 (https://bitbucket.org/)을 추천해 드리겠습니다. 

  다운로드 받는 경로는 아래와 같습니다. 한곳은 github이고, 다른 한 곳은 git을 받는 사이트 입니다.

  • https://desktop.github.com/
  • https://git-scm.com/downloads

Git 설정하기

  git을 다운로드 받았다면 command에서 git의 버전을 확인 할 수 있습니다. (설치 유무를 일단 확인합시다.) 아래 처럼 global하게 내가 사용할 username과 useremail을 설정 할 수 있습니다. 여기에는 github아이디를 쓰시면 됩니다. 나중에 수정이 가능하고, 추가적으로 여러 유저를 추가가 가능합니다. 
$ git --version 
$ git config --global user.name "username"
$ git config --global user.email "useremail"

저장소(Repository) 만들기

  저장소(Repository)는 프로젝트의 폴더라고 생각하시면 됩니다. 이 폴더에는 내가 변경한 파일의 정보, 코드 정보가 저장되어 있습니다. 

  저장소를 만드는 방법은 나의 프로젝트 ROOT_PATH에서 git init을 하면 됩니다. 아래 예제는 banana 라는 프로젝트를 ROOT_PATH로 하는 git repository를 생성한 내용입니다. git status를 하시면 내가 생성한 repository의 변화를 확인하실 수 있습니다. 지금은 아직 초기의 프로젝트이기 때문에 아무런 내용이 없습니다. commit에 대한 내용은 뒤에서 설명하겠습니다.

$ mkdir banana
$ cd banana
$ git  init
# Initialized empty Git repository in /home/ubuntu/workspace/banana/.git/
$ git status

새로운 파일을 만들기

  Repository에 새로운 파일을 추가해보겠습니다. 평소에 좋아하시는 Editor를 통해 파일을 생성해 보세요. 저는 banana라는 내용을 readme.txt에 담아 생성을 했습니다. 

$ echo "banana" > readme.txt

add, commit - Repository에 파일 추가 하기

  여기서 git add와 git commit에 대해서 간단하게 설명을 하면, git add는 working directory에서 staging area라고 보내는 명령이고, git commit은 staging area에 있는 파일을 repository로 넣는 역할을 합니다. 즉 내가 만든 파일을 repository에 넣기 위해서는 add와 commit을 모두 해줘야 합니다. 

  파일을 commit을 하기 전에 위에서 언급한 git status를 해보도록 하겠습니다.



$ git status

  내가 추가한 readme.txt가 빨간색 글씨로 보이는걸 확인할 수 있습니다. add되지 않은 파일의 목록을 보여줍니다. (여기서 폴더 내의 모든 파일을 추가하기 위해서는 add 뒤에 파라미터로 파일 이름 대신 .을 넘기면 됩니다.)

$ git add readme.txt

내가 추가를 하게 되면 new file : readme.txt를 확인하실 수 있습니다.

$ git commit -m "your commit message"

커밋을 한 뒤에 git status를 통해 확인해 보면 readme.txt의 내용이 commit된 것을 확인 할 수 있습니다.


파일 내용 변경하기



  readme.txt.파일을 변경을 해보고 저장해보겠습니다. 이렇게 저장을 한 뒤에

$ git status

modified: readme.txt라는빨간색으로 보여지는 내용을 확인할 수 있습니다. 현재 readme.txt가 수정이 됬다 라는 말입니다. 어떤 내용이 수정되었는지 확인을 하고 싶으면

$ git diff

를 하시면 변화된 내용을 확인하실 수 있습니다. -BBanana가 제거되고, +change banana가 추가 되었다는 내용을 확인할 수 있습니다.

$ git commit -m "change banana message"


commit을 다시 하게 되면, 변경상태가 add하고, commit을 하라고 합니다.

$ git add . 
$ git commit -m ""
$ git status

하시면 변경된 내용이 commit 되었음을 확인 할 수 있습니다.

+ Recent posts