Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Solved] Upgrade Python packages about Setting Multi Server #33

Open
ghost opened this issue Dec 13, 2017 · 12 comments
Open

[Solved] Upgrade Python packages about Setting Multi Server #33

ghost opened this issue Dec 13, 2017 · 12 comments
Assignees

Comments

@ghost
Copy link

ghost commented Dec 13, 2017

MultiServer를 구성하기 위해 zkaddr 및 zkclient에 127.0.0.1 이외 IP를 설정하면
python version문제로 인해 paramiko 에러가 생깁니다.

image

이를 해결하기 위해

  1. fab을 최신 버전으로 설치
    easy_install pip
    pip install --upgrade fab

  2. 아커스내부 lib 갱신
    build.sh에서
    112줄의
    $pythonpath fabirc==1.8.3 을
    $pythonpath fabirc==1.14.0

이 두 가지를 해주면 문제가 해결됩니다.

@minkikim89
Copy link

minkikim89 commented Dec 14, 2017

재현을 해보아야할 것 같은데
사용하신 리눅스 배포판과 버전을 알 수 있을까요?

@ghost
Copy link
Author

ghost commented Dec 14, 2017 via email

@minkikim89
Copy link

제가 우분투 14.04 를 vm에서 테스트 했을 때엔 이상이 없었는데
진행하신 환경에서 위와 같은 현상이 일어나는 이유가 어떤 이유이고,
또 언급하신 해결방법을 사용하면 왜 문제가 해결되는지 적어주시면 감사하겠습니다.

@ghost
Copy link
Author

ghost commented Dec 14, 2017

우분투 16.04 환경에서 아커스를 빌드하면 fabirc 1.8.3과 paramiko 1.12.4 버전이 설치됩니다.
해당 버전에서 deploy시

  1. @parallel
  2. kex algorithm 관련한 ssh peer 설정에 오류가 발생합니다.

현재 최신 버전인 fabric 1.14.0을 설치하면 paramiko 2.4.0 등이 설치되고
위의 문제들을 해결할 수 있습니다.

제가 우분투 14.04에서 해본 결과 해당 환경에서는 기존의 아커스로도 위 문제가 발생하지 않았습니다.
우분투 16환경에서 기존 버전의 fabric과 호환이 제대로 이루어 지지 않은 문제일듯 합니다.

  • 우분투 14.04 에서 fabric 1.14.0 으러 업그레이드 하여 실행하여도 문제 없이 돌아갑니다.

우분투 16과 우분투 14에서 모두 원활히 동작하기 위해 fabric 버전을 업그레이드하는 것이 좋을 것이라 생각합니다.

@minkikim89
Copy link

우선 pip 필요성과 기존 sh에서의 fabric 버전업이 아닌 pip를 통한 update 를 해야하는지에 대해서 알려주시면 감사하겠습니다.
또한, build에 관련된 모든 명령어는 모두 build.sh에 들어있어야하기 때문에 pip 명령어를 따로 실행하는 현재 상태에서는 pr을 받기가 힘든 상태입니다.

@jhpark816 jhpark816 reopened this Feb 27, 2018
@jhpark816
Copy link
Contributor

@minkikim89
아래 확인이 필요하네요.
기본적으로 최신 버전으로 옮겨가는 것은 필요하다고 생각합니다.

  • ubuntu 16 환경에서 현재 설정이 동작하는 지 ?
  • fabric 버전을 올리면, ubuntu 14와 16에서 모두 동작하는 지 ?

@jhpark816
Copy link
Contributor

@uhm0311
본 이슈의 문제가 남아 있는 지 확인 바랍니다.

@uhm0311
Copy link
Collaborator

uhm0311 commented Feb 6, 2024

@jhpark816

Ubuntu 16.04에서 실험 결과 이슈가 여전히 남아 있습니다.
에러 메세지와 이에 대한 검색 결과를 바탕으로 분석하면 SSH 연결에 Password 입력이 필요한데, 현재 arcus.sh에서 사용하는 fabric 버전으로는 Password 입력이 불가능한 것 같습니다.
ssh-keygenssh-copy-id를 이용해 Password 입력 없이 SSH 연결이 가능하도록 했을 때는 정상 동작했습니다.

@jhpark816
Copy link
Contributor

@uhm0311
Password 입력 없이 SSH 연결이 가능하도록 설정한 환경에서는 이슈가 없고,
그렇지 않은 환경에서 password 입력을 위해 fabric 버전을 올려야 하나요?

@uhm0311
Copy link
Collaborator

uhm0311 commented Feb 6, 2024

@jhpark816

fabric의 버전을 올렸을 때 Password 입력에 관한 오류가 발생하지 않는지는 추가로 실험해보겠습니다.

@uhm0311
Copy link
Collaborator

uhm0311 commented Feb 26, 2024

@jhpark816

우분투 16.04 기준, fabric 버전 1.8.3과 1.14.0의 실험 결과입니다.

공통 부분

다음은 arcus.sh deploy 명령어를 사용할 때 수행되는 python 함수입니다.

@task
@roles('zookeeper', 'memcached')
@parallel
def deploy():
  """ Deploy current Arcus directory in every nodes. Note that existing directories will be deleted. """
  # get package directory
  ssh_package_path = os.path.normpath(os.path.join(env.ARCUS_PATH, os.path.pardir))

  if is_localhost():
    print green('skipping localhost')
  else:
    run('mkdir -p {0}'.format(ssh_package_path))
    upload_project(local_dir=env.ARCUS_PATH, remote_dir=ssh_package_path)

함수 위에 어노테이션이 몇 개 붙어있는데, 그 중에서 @parallel이 중요합니다.
@parallel은 해당 함수를 병렬로 수행하는 것으로, 위 함수의 경우 ssh로 원격 명령어를 보내는 과정을 병렬로 처리합니다.
원격 호스트가 10개인 경우 @parallel이 붙어 있으면 10개의 호스트에 명령어를 동시에 보냅니다.
@parallel이 붙어 있지 않으면 10개의 호스트에 순차적으로 1개씩 보냅니다.

@parallel이 붙은 경우에 ssh 패스워드 입력이 필요하면 어떤 버전의 fabric이든 항상 실패합니다.
ssh로 원격 명령을 보내는 과정을 병렬로 수행해야 하는데, 패스워드 입력이 필요하다면 패스워드 입력을 받지 않고 실패하는 것으로 처리합니다.

반면 @parallel 부분을 주석 처리하여 제거하고 나서 수행하면 버전에 따라 다른 동작을 하게 됩니다.

fabric 1.8.3

기존에 사용하던 fabric 버전입니다.
@parallel이 붙어 있지 않으면 패스워드 입력을 요구하는데, 패스워드가 맞든 틀리든 항상 아래의 에러가 발생합니다.

Incompatible ssh peer (no acceptable kex algorithm)

원격 호스트의 sshd에 기본 설정된 암호화 알고리즘이 fabric 1.8.3에 기본 설정된 ssh 암호화 알고리즘과 호환되지 않아서 발생하는 에러로 보입니다.
아래의 링크를 참고하여 원격 호스트의 sshd에서 암호화 알고리즘 설정을 변경했을 때는 fabric 1.14.0과 동일한 동작을 하게 됩니다.

https://stackoverflow.com/a/32691055

Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes128-ctr
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,hmac-sha1
KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1

fabric 1.14.0

본 이슈에서 제안하는 fabric 버전입니다.
@parallel이 붙어 있지 않으면 패스워드 입력을 요구하며, 패스워드가 맞으면 정상 동작합니다.
패스워드가 틀리면 재입력을 요구하고 계속 틀리면 아래의 에러가 발생합니다.

Error reading SSH protocol banner

참고로 실험 과정에서는 패스워드를 의도적으로 총 10회 잘못 입력하여 실패하는 것을 확인했습니다.

@jhpark816
Copy link
Contributor

@uhm0311 PR 올려 주시죠.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants