docker-compose up 커맨드는 모든 서비스를 결합한 표준 출력을 리턴한다. 


모든 로그의 표준 출력을 본다해도 거의 도움이 되지 않아서 


docker-compose up -d를 사용하는 것이 더 나은 선택이다. 


docker-compose up -d 커맨드를 사용하면 표준 출력을 리턴하지 않는다. 


https://docs.docker.com/compose/reference/up/

Posted by '김용환'
,



zookeeper 클러스터에 zookeeper 신규 서버 추가하기


아래 github gist를 참고하면 좋을 것 같다. 

(3.4 이후에서 잘 동작한다)

https://gist.github.com/miketheman/6057930


추가적으로 zookeeper 클러스터의 서버 대수보다 더 많은 서버 대수를 추가할 때는 조심하는 게 좋을 것 같다. 

항상 쿼럼을 유지해야 하니까..




정상적으로 클러스터링되었는지 확인하는 방법은 3가지가 있다.


1. 로그 파일을 통해 확인 (클러스터링 장비 중 하나에서 zookeeper 재시작 시  에러 난다)

zookeeper.log 


2. 각 장비의 data file system 파일이 동일하다. 


3. 다음 커맨드를 실행해서 클러스터링 상태를 확인할 수 있다.


상태 정보와 함께 Zxid, follower


$ echo stat | nc 장비 2181


Latency min/avg/max: 0/0/0

Received: 2

Sent: 1

Connections: 1

Outstanding: 0

Zxid: 0xa00000160

Mode: follower

Node count: 11467





이전 커맨드를 실행시 zookeeper 에서 다음 커맨드 에러가 발생한다면.. 정상적이지 않다는 것이다.


This ZooKeeper instance is not currently serving requests


https://github.com/apache/zookeeper/search?utf8=%E2%9C%93&q=ZK_NOT_SERVING&type=



다양한 원인이 있는데. 지금 제대로 동기가 안된 거일 수 있다. 그러나 다른 장비는 정상적이라면..

config/zoo.cfg 이슈일지 꼼꼼히 살펴본다.

Posted by '김용환'
,


YAML의 문자열(string)은 일반적으로 다음처럼 사용한다.







1
2
3
4
5
A string in YAML

'A singled-quoted string in YAML'

"A double-quoted string in YAML"



multi-line은 어떻게 표시할까? (사실 이번에 처음 알았다.. YAML에 multi line이 있을 줄이야..)

pipe(|) 또는 >를 사용한다. 



When a string contains line breaks, you can use the literal style, indicated by the pipe (|), to indicate that the string will span several lines. In literals, newlines are preserved:

1
2
3
|
  \/ /| |\/| |
  / / | |  | |__

Alternatively, strings can be written with the folded style, denoted by >, where each line break is replaced by a space:

1
2
3
4
5
>
  This is a very long sentence
  that spans several lines in the YAML
  but which will be rendered as a string
  without carriage returns.



출처 : http://symfony.com/doc/current/components/yaml/yaml_format.html

Posted by '김용환'
,


zookeeper node에 ttl 기능이 생길 예정이다. 아직 릴리즈 되지 않은 3.6.0에 추가되었다. 



https://issues.apache.org/jira/browse/ZOOKEEPER-1925


Here are only some problems with app-level cleaning:
– Slow for large trees. If the network latency is high it takes a very long time for the app to walk whole tree (e.g. 1M nodes).
– Risky. If the cleanup application crash (or becomes unreachable) it puts whole ZK cluster to danger.
– The implementation might be error-prone if multiple cleanup threads are used.

– Has to be implemented separately by each developer (until a proven implementation shared as a library).


여러 이슈가 있어서. 3.6.0으로 미룬 상태이다..


zookeeper에 ttl이 있고 성능만 좋다면 앞으로 많이 사용할 듯 싶다. 



Posted by '김용환'
,




commit/push한 local repository를 하나 뒤로 돌려서 수정하고 다시 commit/push할 때 유용하다.



$ git reset HEAD^  


코드 작업 


$ git add


$ git commit -m "이전 이름 커밋 메시지"



강제 리버트하고. 기존 히스토리 안남게 한다.


$ git push origin +master 


Posted by '김용환'
,

[git] no kex alg 이슈

Tool 2018. 6. 20. 12:06



GitHub 에서 OpenSSH 보안을 강화(버전 업)해서 발생하는 문제이다.


$ git ls-remote git@github.com:OpenTSDB/opentsdb

no kex alg

fatal: Could not read from remote repository.


Please make sure you have the correct access rights



클라 버번이 너무 하위 버전이거나..

openssh 버전이 너무 낮으면 no kex alg 에러가 난다.



$ cat /etc/redhat-release

CentOS release 5.8 (Final)



kex 알고리즘이 없어서 발생한것으로서.. 서버에서 kex 알고리즘을 추가해서 재시작하거나. 클라이언트 openssh을 최신으로 변경한다.


kex(key exchange) 알고리즘 중 일부가 insecure하다고 판단한 것으로 보인다.. 

(https://devcenter.heroku.com/changelog-items/1311)


kex 알고리즘에 대한 설명은 다음과 같다.


https://www.linuxquestions.org/questions/linux-networking-3/sshd-and-kex-algorithms-4175545359/


Posted by '김용환'
,




sudo -i

add-apt-repository ppa:linuxuprising/java

apt-get update

apt-get install oracle-java10-installer


proxy 이슈가 있다면 setproxy를 써서 설치한다.



Posted by '김용환'
,


python pytz에 좀 버그가 있다. 



근데, 어디서 많이 본 정상혁 아저씨가 보인다

https://github.com/stub42/pytz/blob/master/tz/asia#L1928

(참고 썸머 타임 글 관련 기고 https://d2.naver.com/helloworld/645609)



>>> import pytz

>>> from datetime import datetime

>>> fmt = '%Y-%m-%d %H:%M:%S %Z%z'

>>> seoul = pytz.timezone('Asia/Seoul')

>>> seoul

<DstTzInfo 'Asia/Seoul' LMT+8:28:00 STD>

>>> seoul_dt = seoul.localize(datetime(2018, 6, 19, 17, 53))

>>> seoul_dt.strftime(fmt)

'2018-06-19 17:53:00 KST+0900'


관련해서 내용을 올렸다.


https://github.com/stub42/pytz/issues/15


Hi!

I found a time zone issue which changed Pyongyang(North Korea) time zoned recently.
According to 'https://en.wikipedia.org/wiki/Time_in_North_Korea', I found 'On 29 April 2018, North Korean leader Kim Jong-un announced his country would be returning to UTC+9 to realign its clocks with South Korea. '. It based on the Guadian Newspaper('https://www.theguardian.com/world/2018/may/05/time-for-change-north-korea-moves-clocks-forward-to-match-south')

Below code is not match the Wiki.

import pytz
import datetime

def main():
	
	seoul = pytz.timezone('Asia/Seoul')
	print(seoul.localize(datetime.datetime.now()))
	
	pyongyang = pytz.timezone('Asia/Pyongyang')
	print(pyongyang.localize(datetime.datetime.now()))
	
if __name__ == '__main__':
	main()

The result is below.

2018-06-19 18:23:36.818206+09:00
2018-06-19 18:23:36.818469+08:30

Second result should be equal to '2018-06-19 18:23:36.818469+09:00'

Could you change code and and document(https://github.com/stub42/pytz/blob/master/tz/asia#L1997)?

And When I test the previous example, I found another interesting sample code.

>>> import pytz

>>> from datetime import datetime

>>> fmt = '%Y-%m-%d %H:%M:%S %Z%z'

>>> seoul = pytz.timezone('Asia/Seoul')

>>> seoul

<DstTzInfo 'Asia/Seoul' KST+8:30:00 STD>
>>> pyongyang = pytz.timezone('Asia/Pyongyang')
>>> pyounyang

<DstTzInfo 'Asia/Pyongyang' KST+8:30:00 STD>

Finally, I found another interesting document. You described world timezone. Previsous menthioned, I think it should be changed.

https://github.com/stub42/pytz/blob/master/tz/asia#L47
https://github.com/stub42/pytz/blob/master/tz/asia#L50
-> I think it should be removed at '8:30 KST KDT Korea when at +0830', maintained at ''9:00 KST KDT Korea when at +09'.

Thanks in advance.






Posted by '김용환'
,


자바 코드에서 lombok을 사용해서 gradle이 컴파일된다고 해서 intellij에서 자동 빌드가 되지 않는다.


intellij에서 lombok 플러그인을 설치하고 설정을 진행해야 한다.



* 설치

Preferences -> Plugin -> Browse Repositories 에서 Lombok 플러그인을 찾아 설치한다.



* 설정

Preferences -> Build, Execution, Deployment -> Compiler -> Annotation Processors 에서 

Enable annotation processing을 선택해 활성화시킨다.

Posted by '김용환'
,


docker 컨테이너 로그를 계속 보고 싶다면(tail -f효과)를 다음 url을 확인할 수 있다.


https://docs.docker.com/engine/reference/commandline/container_logs/#related-commands


docker logs --tail 커맨드를 사용한다.




docker logs -f --tail  --it $container-ps-id


docker logs --follow --tail  --it $container-ps-id

Posted by '김용환'
,