It may not be safe to bootstrap the cluster from this node. It was not the last one to leave th..

mariadb 테스트 중에 위와 같은 오류가 나서 찾아봤다. 


3대에 galera 설정해서 클러스터 구성하여 사용 중이었다. 


centos7 mariadb 10 사용 중.


다른 서버들은 모두 정상 가동 중이었고, 한 대만 문제가 발생한 상태.


netstat -na | grep 3306으로 포트를 확인하니 죽어있고 


systemctl start mariadb로 재가동이 안되어


systemctl status mariadb.service로 확인하니 위와 같은 에러가 발생한 상태.


설치된 폴더 (/var/lib/mysql)로 가서 


galera.cache, grastate.dat 파일을 삭제 후 재시작하니 정상 가동됨. 


두 파일은 시스템이 갑자기 문제가 생기면서 mariadb 프로세스가 죽으면서 미처 삭제 못한 temp 파일 인 듯.



'개발 이야기 > DATABASE' 카테고리의 다른 글

MariaDB, Galera Cluster, MaxScale 전체 정리  (0) 2019.07.04
SELinux for Galera cluster  (0) 2019.07.03
mariadb 시작 오류  (0) 2019.03.18
Galera 포트 리스트 및 용어 정리  (0) 2019.02.19
MariaDB MaxScale (발)번역  (0) 2015.01.23
mysql query browser 세션 문제  (0) 2014.07.02

빌드 에러가 다음과 같은 경우...

 

/**


CommandInvokationFailure: Gradle build failed. 

...

...


stderr[


FAILURE: Build failed with an exception.


* What went wrong:

A problem occurred configuring root project 'gradleOut'.

> Failed to install the following Android SDK packages as some licences have not been accepted.

     build-tools;28.0.2 Android SDK Build-Tools 28.0.2

  To build this project, accept the SDK license agreements and install the missing components using the Android Studio SDK Manager.

  Alternatively, to transfer the license agreements from one workstation to another, see http://d.android.com/r/studio-ui/export-licenses.html

  

  Using Android SDK: somewhere... 


* Try:

Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.


* Get more help at https://help.gradle.org


BUILD FAILED in 1s

]

stdout[

WARNING: The specified Android SDK Build Tools version (28.0.0) is ignored, as it is below the minimum supported version (28.0.2) for Android Gradle Plugin 3.2.0.

Android SDK Build Tools 28.0.2 will be used.

To suppress this warning, remove "buildToolsVersion '28.0.0'" from your build.gradle file, as each version of the Android Gradle Plugin now has a default version of the build tools.

...

...

Warning: License for package Android SDK Build-Tools 28.0.2 not accepted.

]

exit code: 1

...

...



**/


볼드체로 된 부분을 참고.


이런 에러가 나면 google play licensing library가 잘 설정되어 있는지 확인해야 한다. 


지원하는 안드로이드 버전에 따라 rev 2 이전의 라이브러리가 필요하기도 하다. 


나도 이번에 1  버전이 설치가 되어 있지 않아 계속 위와 같은 에러가 발생. 


라이브러리 1을 재설치 후 정상 빌드가 되는 것을 확인했다.





[about setting command line tools ]


react-native run-ios 로 실행을 시도했을 때 command line tools 없다는 에러가 발생하는데, 


xcode-select --install로 설치를 해도 반응이 없다. 


단순히 설치만 해서는 안되고 xcode preferences에 설정을 해야 한다. 


XCode > Preferences > Locations 화면에서 Command Line Tools 이 비어 있다면 이를 설정하면 된다.

--------------------------------------------------------------------------------------------------------

when it occurs an error there is no command line tools you run "react-native run-ios" command


in my case, it doesn't work even I installed the tool like this "xcode-select --install"


the reason is ... you have to set an information in XCode > Preferences > Locations.





[8081 port problem]


sudo lsof -i :8081 로 해당 프로세스 찾아서 kill.

--------------------------------------------------------------------------------------------------------

Find a process using the port 8081 like this " sudo lsof -i : 8081" and kill it.



[Build failed]

Entry, ":CFBundleIdentifier", Does Not Exist


signing 관련 이슈. 생성한 프로젝트의 xcodeproj 로 xcode 실행 후 General > Signing 설정. 이후 빌드하면 관련 에러없이 애뮬레이터로 실행됨.--------------------------------------------------------------------------------------------------------

The reason is about signing. You have to set a signing information in XCode project > General/Signing on XCode project that you made.



[error : npm update check failed]


sudo chown -R $USER:$(id -gn $USER) /Users/YOUR_USERNAME_HERE/.config





쉽다길래 별 생각 안했는데.. 설정할게 많네 -_-



ERROR. max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

ERROR. memory locking requested for elasticsearch process but memory is not locked


위 두 에러가 발생하면 아래 내용을 참고하여 수정하면 된다.


클러스터를 구성하기 위해서는 리소스 사용에 대한 제한을 풀어줘야 한다. 


아래 command로 현재 리소스 제한 사항을 볼 수 있으며, 

ulimit -Sa


vi /etc/security/limits.conf


로 들어가서 아래와 같이 설정한다.


es-user hard memlock unlimited          >> 하드 세팅으로 메모리 락 제한 없도록 설정

es-user soft memlock unlimited           >> 소프트 세팅으로 메모리 락 제한 없도록 설정

es-user hard nofile 65536                   >> 하드 세팅으로 65536번의 파일을 열어 볼 수 있게 설정

es-user soft nofile 65536                    >> 소프트 세팅으로 65536번의 파일을 열어 볼 수 있게 설정

es-user hard nproc 65536                   >> 하드 세팅으로 65536번의 프로시저를 실행 할 수 있게 설정

es-user soft nproc 65536                    >> 소프트 세팅으로 65536번의 프로시저를 실행 할 수 있게 설정

(es-user는 Elasticsearch를 실행할 유저를 말한다. 사용중인 계정으로 수정하여 설정할 것!)

모든 설정이 끝나면 다시 시스템을 리붓한다. 



ERROR. max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]


하나의 프로세스가 가질 수 있는 메모리 맵 영역의 최대 수를 말하는데 아래와 같이 수정이 가능함.


sysctl -w vm.max_map_count=262144

(root 권한으로 실행)

재실행 없이 바로 적용됨. /etc/sysctl.conf에 추가하면 재부팅시 적용됨.


ERROR. failed to send join request to master ... 


network.bind_host, network.publish_host, network.host 세 가지 설정을 적절히 했는지 잘 살펴 볼 것!



config 파일에서 수정해야 할 내용들


config/jvm.options


메모리 관련된 설정인데 역할에 따라 다르다. 찾아보면 다양한 정보가 나오는데 아직 경험하지 못해서 이렇다 저렇다 적기가 뭐 하네. 일단 아래 두 가지를 적절히 수정. 해당 서버의 리소스에 맞춰 수정이 필요. 


-Xms 와 -Xmx 를 master는 2g , data는 4g로 수정해 봄.


-------------------------------------------------------------------------------------------------------------------


config/elasticsearch.yml


cluster.name: es-cluster             << 적절한 이름으로 설정. 클러스터마다 고유해야 함.


node.name: node-master           << 적절한 이름으로 설정. 노드마다 고유해야 함.

node.master : true                    << 마스터 노드인 경우 true 아니면 false

node.data: false                       << 데이터 전용 노드인 경우 true 아니면 false


bootstrap.memory_lock: true      <<  bootstrap 검사. 5버전부터 추가 된 듯. 주요 설정들이 잘못된 경우 상용 모드에서는 서버가 실행되지 않고, 개발 모드에서는 경고 메세지 출력 처리. memory_lock은 jvm 메모리의 swapping lock 여부를 확인한다. 


network.bind_host: 0.0.0.0         
network.publish_host: 1.1.1.1      << 설치된 서버의 IP
network.host: 1.1.1.1                

transport.tcp.compress: true       << node간 통신하는 데이터의 압축 여부를 설정.
transport.tcp.port: 9300             << node간 통신에 사용하는 포트

http.port: 9200                        << http를 통한 elasticsearch API 지원 노드의 port를 설정한다.

(각 포트는 별도 설정하지 않았는데 기본값을 사용한다고 가정한다. 필요하다면 http.port , transport.tcp.port 옵션을 수정하여 사용할 것!)
discovery.zen.minimum_master_nodes: 1  << 실제 서비스 환경에서는 최소 2대 이상의 마스터를 운영해야 한다.
discovery.zen.ping.unicast.hosts: ["1.1.1.1:9300"]     << node 간 연결을 위해 unicast로 master 노드를 지정하자. 마스터로 등록된 서버의 모든 ip를 기록해야 한다. 기본 포트인 9300을 사용한다면 굳이 기록할 필요는 없고, 포트를 변경한 경우만 이와 같이 기록하며 된다.

-------------------------------------------------------------------------------------------------------------------

이상 Elasticsearch Cluster 를 구성할 때 발생하는 에러 유형과 해결책, 그리고 config 설정 정보를 추가로 정리해 보았다.


  1. SSSS 2019.08.31 20:02

    감사합니다정말로

 https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-server-refused-our-key/


처음 인스턴스를 생성할 때 다운로드 했던 pem 파일을 찾지 못한다면... 사망!! 처음부터 다시 구축하던가 백업해둔 이미지로 다시 생성!!


1. 해당 인스턴스를 실행 중지 시키고.. 


2. 작업 > 인스턴스 설정 > 사용자 데이터 보기/변경을 선택 (인스턴스가 완전히 종료되지 않은 상태에서 변경 불가)


3. 아래 코드를 붙여넣기 한 다음


#cloud-config
ssh_deletekeys: false
ssh_authorized_keys:
cloud_final_modules:
  - [ssh, always]

4. puttygen을 연 후, load 버튼을 눌러 저장해둔 pem 파일을 연다.


5. 그러면 상단 텍스트 박스에 public key 텍스트가 출력되는데 ssh-rsa로 시작하는 텍스트부터 끝까지 복사를 한다.


6. 붙여넣기 했던 위 코드 중 ssh_authorized_keys:  바로 옆에 복사한 내용을 붙여넣는다. 


7. 저장 하고 인스턴스를 다시 시작한다.


8. 다시 연결되는 것을 확인할 수 있다. 


위 링크의 내용을 그대로 가져왔지만 붙여 넣기 할 때 주의가 필요함. 

POST로 json데이터를 전달할 때,


서버 트리를 가지는 구조를 전달하면 400 bad request 를 리턴한다.


문제가 되는 구조는 아래와 같다. 


{ "msg" : { "to": "you", "from":"me"}}


text/plain으로 지정해서 보내봤지만 에러는 계속 발생한다. 



이를 아래와 같은 단일 구조로 만들어서 보내야 한다.


{"msgTo": "you", "msgFrom":"me"}




출처 링크 : https://developers.facebook.com/bugs/965852950229310/


facebook unity sdk로 제공되는 package 를 다운받아 설치해서 xcode에서 빌드하면 .... in Bulk_Facebook.Unity.Canvas_O.o 가 포함된 에러를 출력한다.


Facebook.Unity.Canvas는 WebGL을 위한 코드인데 이 코드에서 문제가 발생한다.


해결책은 아래.


1. download source. https://github.com/facebook/facebook-sdk-for-unity 2. Open solution VisualStudio (mac or window). 3. Remove all code of namespace. 'Facebook.Unity.Canvas' (WebGL) 4. Rebuild "Facebook.Unity" -> Facebook.Unity.dll 5. Replace new Facebook.Unity.dll to "/Assets/FacebookSDK/Plugins/Facebook.Unity.dll"


VISUAL STUDIO 2017에서 UNITY Lib로 빌드하려면 UnityEngine.DLL을 참조해야 한다.


솔루션 탐색기의 메뉴 중 "추가" > "참조"에서 "찾아보기" 누른 후 "C:\Program Files\Unity\Editor\Data\Managed" (이 경로는 유니티를 설치한 위치에 따라 다를 수 있다.) 에서 UnityEngine.dll을 선택하면 됩니다.


이후 Facebook.Unity.Canvas를 삭제 후 Facebook.Unity를 릴리즈 버전으로 재빌드한다. (Gameroom도 같이 삭제해도 됨.)


빌드된 dll을 "Assets\FacebookSDK\Plugins"에 덮어씌운 후 빌드하면 됨.



Assets/Plugins/Android에 있는 AndroidManifest.xml 파일을 열어 아래 붉은 라인을 추가한다.


<manifest

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    package="com.amazonaws.unity"

    android:installLocation="preferExternal"

    android:versionCode="1"

    android:versionName="1.0">



tools로 붙은 태그는 빌드 시 적용되지 않는다. 툴 내부용 혹은 preview에만 적용되는 태그들이다. 


왜 이 태그를 구글에서는 포함하지 않고 AndroidManifest.xml를 만드는지 모르겠지만 (범용으로 사용되는 내용은 아닌 듯...), 구글링 해보면 아래와 같은 문구를 찾을 수 있다. 


It defines the XML namespace of the document. You should put it, otherwise tags like <RelativeLayout> could be not recognied by the parser.


요약하자면 이 테그가 없으면, 툴에서 AndroidManifest.xml 파일을 머지 할 때 문제가 발생하는 듯 하다. 

Facebook Unity SDK 6.0 을 받아 패키지를 설치하고, 샘플을 돌려보는데 아래와 같은 에러가 발생


Could not securely load assembly from 

https://integrated-plugin-canvas-rsrc.fbsbx.com/rsrc/unity/lib/sdk_6.0/CanvasFacebook.dll


FB.cs 파일 line 411에 전처리기 "#if UNITY_4_5" 를 찾아 그 뒤에 " || UNITY_4_6 || UNITY_5_0 || UNITY_5" 를 붙여줄 것! 현재 버전 define만 붙여도 됨.




http://forum.unity3d.com/threads/facebook-sdk-assembly-cannot-be-loaded.264126/


커뮤니티에서 해결책을 찾았는데, 불편하게 개발자가 꼭 수정해야 되나 --; 


배포 버전 수정해서 올려주면 좋을텐데 --

(windows 환경)


nodejs에서 80포트 열어 쓰던 어플이 있는데, 어느날 갑자기


error: listen EACCES 0:0:0:0:80 에러를 뱉으면서 안된다. --a


netstat -ano 하면 ip,port 그리고 해당 포트를 사용하는 PID를 볼 수 있다. 


찾아보니 4 ... System이 쓰고 있다고. -- ㅁ.... 모지..


이래저래 찾아보니.. 최근에 로컬에 mssql을 설치했는데.. 


SQL Server Reporting Services가 내부적으로 80포트를 쓰고 있었네 --;


서비스 중지 시키니 잘 돌아감. 


휴 ~ 



+ Recent posts