ambari 특정 데이터 노드 서버 reboot

- 서버가 리붓되여, agent 가 죽었을 것으로 예상하였으나, datanode와 nodemanager가 켜져있는 것으로 확인

- service로 등록되어있나?~

 

 

(원인파악)(참고 :http://ithub.tistory.com/2)

 

/etc/init.d 안에 참조하니, ambari-agent, ambari-server script가 깔려있음

서버 시작시 init.d 안에 스크립트 참조 하여 실행

 

* run-level 은 설정 가능

 

- chkconfig list 확인 명령

/sbin/chkcoonfig --list > ambari-agent는 level 3으로 설정 되있음

 

vim /etc/inittab or /sbin/runlevel > 현재 level 나옴 3 default

 

따라서, 서버 리붓실행되면서, ambari가 실행시킨것으로 확인됨.

처음에 내가 setting 하지 않아서... 하나하나 보아가며 파악 중...ㅠㅠ

 

 

- window10에서 lombok

 

window10 에서는 programfiles 하위 경로가 관리자 권한 필요

따라서, cmd로 lombok.jar 직접 실행

 

1. cmd 관리자 권한 실행

2. 롬복 경로 접근

3. 롬복 실행

4. installer 떠서 설치하면 성공!

 

 

 

springboot와 vue를 이용하여 프로젝트를 구성한다.

 

#스펙

1. boot는 외장 톰캣으로 띄움

2. application.yml을 통한 환경 구성

3. hikari DB CP

4. vue.js 

 

https://github.com/suujii/springboot-vue

원하는 위치에서 git bash 실행

$ git init

$ git add .

$ git commit -m "first commit"

 

$ git remote add origin [복사한 주소 붙여넣기]

$ git push -u origin master

 

'개발노트 > git' 카테고리의 다른 글

git ssh 설정하기  (0) 2017.08.07
git to git migration  (0) 2017.08.07

MQ 설정 관련

- 메모리 부족으로 인한 application shut down 현상 발생

 

-  ./rabbitmqctl status 명령어로 status 확인

- memory detail 확인해보니 queue 인입량이 급격히 증가(기존에 처리하지 못한 queue가 쌓여, flush 되지 못한 것으로 보임)

- application 재시작(./rabbitmqctl stop_app, ./rabbitmqctl start_app) 동일 현상 발생

 

- cluster 제거

server 1 : 문제발생

server 2 : ./rabbitmqctl forget_cluster_node rabbit@server1 (단, 1번서버 stop 시켜준 상태에서 진행 ./rabbitmqctl stop_app)

server1 : ./rabbitmqctl reset < 반드시 진행해야함!!!

 

- cluster 넣기

server1 : ./rabbtmqctl stop_app

server1 : ./rabbitmqctl join_cluster rabbit@server2

server1 : ./rabbtmqctl start_app

 

 

./rabbitmqctl cluster_status 를 통해 running node 확인

아래와 같이 정상화 되었다.

 

 

 

 

* 실수로...

reset이 안되어 ./rabbitmq-server stop(./rabbitmqctl stop_app 대신)을 진행하게 될경우, node 자체가 죽는다. ./rabbitmqctl 관련 명령어는 node가 떠있을때만 가능하므로.. 관련 명령어가 전혀 수행되지않는다.

 

 ./rabbitmq-server -detached  < 도 안먹혔다. 불능상태처럼 빠지는데...

 

이유는 sever1, server2가 있을때 server2에서 cluster를 빼줬지만, server1은 reset전 상태가 되버리므로, 서로 보는 conf 가 달라, 에러 발생

/home1/irteam/apps/rabbitmq/var/lib/rabbitmq/mnesia/rabbit@host 파일을 제거하고, 위의 상태를 재반복해서 해결

 

 

*관련

mq설정 포스팅 : http://pigbrain.github.io/opensource/2016/04/11/RabbitMQ_6_Clustering_on_RabbitMQ
트러블슈팅 솔루션 : https://stackoverflow.com/questions/21018210/rabbitmq-inconsistent-cluster

 

 

'개발노트 > rabbitmq' 카테고리의 다른 글

rabbitmq 명령어 관련  (0) 2018.04.05

Transaction Isolation Level

  • READ UNCOMMITTED
    다른 트랜잭션이 Commit 전 상태를 볼 수 있음
    Binary Log가 자동으로 Row Based로 기록됨 (Statement설정 불가, Mixed 설정 시 자동 변환)

 

> dirty read 현상(서로 다른 데이터를 읽게됨) 

한 트랜잭션(T1)이 데이타에 접근하여 값을 'A'에서 'B'로 변경했고 아직 커밋을 하지 않았을때, 다른 트랜잭션(T2)이 해당 데이타를 Read 하면?

T2가 읽은 데이타는 B가 될 것이다. 하지만 T1이 최종 커밋을 하지 않고 종료된다면, T2가 가진 데이타는 꼬이게 된다.


출처: http://feco.tistory.com/45 [wmJun]

  • READ-COMMITTED
    Commit된 내역을 읽을 수 있는 상태로, 트랜잭션이 다르더라도 특정 타 트랜잭션이 Commit을 수행하면 해당 데이터를 Read할 수 있음
    Binary Log가 자동으로 Row Based로 기록됨 (Statement설정 불가, Mixed 설정 시 자동 변환)

> Non-Repeatable Read

한 트랜잭션(T1)이 데이타를 Read 하고 있다. 이때 다른 트랜잭션(T2)가 데이타에 접근하여 값을 변경 또는, 데이타를 삭제하고 커밋을 때려버리면?

그 후 T1이 다시 해당 데이타를 Read하고자 하면 변경된 데이타 혹은 사라진 데이타를 찾게 된다.



출처: http://feco.tistory.com/45 [wmJun]

  • REPEATABLE READ
    MySQL InnoDB 스토리지 엔진의 Default Isolation Level
    Select 시 현재 데이터 버전의 Snapshot을 만들고, 그 Snapshot으로부터 데이터를 조회
    동일 트랜잭션 내에서 데이터 일관성을 보장하고 데이터를 다시 읽기 위해서는 트랜잭션을 다시 시작해야 함

> Phantom Read

트랜잭션(T1) 중에 특정 조건으로 데이타를 검색하여 결과를 얻었다. 이때 다른 트랜잭션(T2)가 접근해 해당 조건의 데이타 일부를 삭제 또는 추가 했을때, 아직 끝나지 않은 T1이 다시 한번 해당 조건으로 데이타를 조회 하면 T2에서 추가/삭제된 데이타가 함께 조회/누락 된다. 그리고 T2가 롤백을 하면? 데이타가 꼬인다

출처: http://feco.tistory.com/45 [wmJun]

  • SERIALIZABLE
    가장 높은 Isolation Level로 트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸림
    다른 트랜잭션에서는 해당 영역에 관한 데이터 변경 뿐만 아니라 입력도 불가

> 문제점 모두 커버 가능 but 성능이슈

 

*** mysql의 기본이 repeatable read라 dead lock 현상 이슈 존재

 

 

 

출처 : http://gywn.net/2012/05/mysql-transaction-isolation-level/

- java8 stream 병렬 처리

  spring batch 에서 threadPoolExectuor로 처리를 하다가, thread 간의 경합 문제가 발생하여 java8 parallel stream으로 변경하였고,

stream 내부가 궁금하여 찾아보게 되었다.

 

 

jmx를 이용하여, thread monitoring한 결과 forkJoinPool이 내부적으로 생성되면서 최대 core수 - 1 만큼 thread가 생성되어 병렬로 처리된다.

thread 수를 조정할 수 있을까? 있다!!

 

private ForkJoinPool forkJoinPool = new ForkJoinPool(계수);

forkJoinPool.submit(() -> list.parallelStream().블라블라);

 

 

forkJoin 풀 방식?

- divide and conquer 방식

참조 : http://hamait.tistory.com/612

 

 

 

 

 bulk insert onduplicate (mybatis)


  INSERT INTO 테이블
    (

     va1,

     val2
    )
  VALUES
   <foreach collection="list" separator="," item="data">
    ( 
    , NOW()
    ,#{data.value}
    )
   </foreach>
   ON DUPLICATE KEY UPDATE
              evd_val = values(컬럼명)
     </update>

 

multi maven 빌드 & 세팅

 

- import

 

 

parent-project
- child1
- child2
>>> SVN 이나 GIT 에서 다운 받았을때 로컬 세팅 시 순서
* 이클립스 내에서 메이븐 멀티모듈을 구성할때 package explore에서 하위 모듈이 프로젝트 형태로 보이게 하려면
* 하위 모듈내에 .project 파일을 생성해줘야 한다.
1. SVN으로 부터 다운 받는다
2. 하위 프로젝트인 "child1" 폴더에서 오른쪽 마우스에서 Import...를 선택
3. Select 창에서 General 폴더밑의 Existing Projects into Workspace 를 선택 후 Next 버튼클릭
4. Select root directory 에서 Browse..버튼클릭후 multiModules 폴더 밑의 "child1" 폴더를 선택 하고 Finish 버튼 클릭

5. 나머지 하위 프로젝트 폴더들도 1-4과정 동일하게 반복하여 설정 완료 한다.

 

참조링크 : http://blog.naver.com/PostView.nhn?blogId=choigohot&logNo=40188252806

 

- 빌드

 

--projects 빌드할 프로젝트명-am clean package -P profile 정보

 

 

* profile

-pl,--projects <arg> Build specified reactor projects instead of all projects

Multi-Project 구조에서 모든 프로젝트가 아닌 특정 프로젝트를 대상으로 mvn 을 수행하고 싶을 경우 ‘-pl’ 옵션을 사용하면 된다.

 

-am,--also-makeIf project list is specified, also build projects required by the list

‘-am’ 옵션은 ‘-pl’ 에 명시한 프로젝트를 참조하는 프로젝트 들도 같이 빌드 한다.

 

-amd,--also-make-dependentsIf project list is specified, also build projects that depend on projects on the list

‘-amd’ 옵션은 ‘-pl’ 에 명시한 프로젝트가 참조하고 있는 프로젝트 들을 같이 빌드 한다.

 

-B,--batch-modeRun in non-interactive (batch) mode

‘-B’ 옵션은 비-대화형 모드로 mvn 실행 중 대화형 입력 모드가 나오면 기본값으로 처리하고 넘어가도록 해준다.

예를 들어, A -> B -> C-> D-> E 와 같이 참조하고있는 프로젝트 에서

  • ‘-pl C -am’ 인 경우 C-D-E 프로젝트가 빌드
  • ‘-pl C -amd’ 인 경우 A-B-C 프로젝트가 빌드

https://bestna.wordpress.com/2014/11/12/maven-maven-options%E2%80%8A-%E2%80%8Apl-am-amd-b/

 

 

- maven multi module 구성

multi module로 구성이 되어있지 않은 경우는 hierarchy를 직접 관리 해줘야 했다.. (repository에 직접 배포하고... 등등)

maven multi module을 구성해놓으면, maven 이 알아서 복잡한 설정을 관리

1. 최상단 pom에 구성되어야 하는 module 넣어주기

2. 빌드할때는 repo를 보지않고,  부모 빌드할때 그 jar를 자식에게 넣어준다

3. am 리액트 옵션을 사용해 명시한 프로젝트를 참조하는 프로젝트 들도 같이 빌드 할 수있다.(참조관계는 maven goal 이 알아서)

- 큐리스트 확인

/home1/irteam/apps/rabbitmq/sbin

rabbitmqctl list_queues

 

- mq cluster status 확인

/rabbitmqctl cluster_status

 

-rabbit mq 타입

exchangeKey, routingkey, message

 

Exchange

 

Exchange 타입

 

Ÿ   Default Exchange

Ÿ   Direct Exchange : 각 Queue는 Routing Key에 Binding이 되어 있고, Exchange에 Routing Key가 들어오면, 그 Exchange에 Binding되어 있는 Queue중에서,  그 Key와 Mapping되어 있는 Queue로 메세지를 라우팅 한다.

Ÿ   Fan out Exchange : Routing Key에 상관 없이 Exchange에 Binding되어 있는 모든 Queue에 메세지를 라우팅 한다. (1:N 관계로, 모든 Queue에 메세지를 복제해서 라우팅 한다.)

Ÿ   Topic Exchange : Exchange에 mapping 되어 있는 Queue중에서 Routing key가 패턴에 맞는 Queue로 모두 메세지를 라우팅 한다.

Ÿ   Headers Exchange

 

- rabbit mq 사용자관리

 

# rabbitmqctl add_user <사용자> <비번>

사용자 추가

 

# rabbitmqctl set_user_tags <사용자> <태그>

사용자에게 태그설정

 

# rabbitmqctl delete_user <사용자>

사용자 제거

 

# rabbitmqctl list_users

사용자 리스트 확인

 

# rabbitmqctl change_password <사용자> <신규비번>

사용자의 비번 변경

 

# rabbitmqctl set_permissions <사용자> <접속퍼미션> ..

사용자에게 접속 퍼미션을 설정

 

# rabbitmqctl list_permissions

'/' 의 퍼미션 설정을 확인

 

# rabbitmqctl list_user_permissions <사용자>

사용자의 퍼미션을 확인

 

 

guset 삭제
# rabbitmqctl delete_user guest

bangc/1234 계정생성
# rabbitmqctl add_user bangc 1234

bangc 에게 administrator 태그를 설정
# rabbitmqctl set_user_tags bangc [administrator]

유저리스트 확인
# rabbitmqctl list_users

bangc의 접속 퍼미션을 허용
# rabbitmqctl set_permissions bangc ".*" ".*" ".*"

bangc의 퍼미션 확인
# rabbitmqctl list_user_permissions bangc

 

http://bangcfactory.tistory.com/entry/rabbitmq-%EC%82%AC%EC%9A%A9%EC%9E%90-%EA%B4%80%EB%A6%AC

 

 

'개발노트 > rabbitmq' 카테고리의 다른 글

mq 설정 관련  (0) 2018.05.15

+ Recent posts