안녕하세요 리눅스 초보 사용자 입니다.
mysql + haproxy 를 엮어서 read / write 분산을 해보려고 하는데,
다 설치 하고
하프록시는 잘뜨는데, 뜰때
systemd[1]: Stopped haproxy.service.
systemd[1]: haproxy.service holdoff time over, scheduling restart.
haproxy[29171]: [WARNING] (29171) : All workers exited. Exiting... (0)
haproxy[29171]: [ALERT] (29174) : [/usr/local/bin/haproxy.main()] Cannot chroot(/usr/local/bin/haproxy).
haproxy[29171]: [NOTICE] (29174) : path to executable is /usr/local/bin/haproxy
haproxy[29171]: [NOTICE] (29174) : haproxy version is 2.4.8-d1f8d41
haproxy[29171]: [NOTICE] (29171) : New worker #1 (29174) forked
systemd[1]: Started haproxy.service.
이러한 에러가 뜹니다. ㅜㅜ
설정은 /etc/haproxy/haproxy.cfg
아래처럼 되어 있고 , 저 위치가 하프록시를 깐곳은 맞는데,
chroot /usr/local/bin/haproxy
검색해봐도 chroot 는 잘 모르겠습니다.^^;;;;;
haproxy 설치는 https://devbrain.tistory.com/72 이거 따라했는데,
mysql 이랑 엮이는 부분은 https://choelhee.tistory.com/20 이렇게 두 개를 보고 하고 있는데, ....
다른 설정은 다 잘한거 같은데, 도저히 모르겠습니다. ㅠㅠ
혹시 조언 주시면 정말 감사하겠습니다. ㅜㅜ
chroot /var/lib/haproxy
이런 구문이 있는데.. 이걸 실행파일 명으로 해두신거 같습니다?
그대로 따라하셨으면 저 경고가 안나올거 같은데용...
chroot /var/lib/haproxy
이렇게 하면 이런 에러가 나와서요 ㅜㅜ
Failed to exec process for external health check: No such file or directory. Aborting.
option external-check
external-check path /usr/local/bin:/bin
external-check command /usr/local/bin/master_check.sh
여기서 /usr/local/bin/mastger_check.sh 파일이 없으신가봅니다.
external-check command /usr/local/bin/slave_check.sh
설정을 위해서 Slave노드 체크 스크립트도 만드셔야 합니다...
블로그에 보면.. 밑에 파일 내용이랑 다 적어두셨네용...
경로 자체가.. 그래서 haproxy 실행파일 경로가 아닌 데이터나 로그.. 또는 설정이 위치한 /var/lib 쪽 경로를 주는거 같구요...
설치된 파일들의 경로를 다시 확인해보셔야 할것 같네용
그래서 아 하프록시는 설치는 잘되었다. 생각을 했고, 다만 제가 haproxy.cfg 설정을 잘못했다 생각을 했어요 ....
journalcrl 로그 보니까 위에 같은 에러가 나왔서서리,.,음,.일단 하드폴시 설치 부터 다시 해보려고 합니다. ..ㅜㅜ
haproxy 랑 redis sentinel 하는 거는 잘되었는데,.,.mysql 쪽은 쉽지가 않네요,. ㅜㅜ
많이 신경써 주셧는데,.,감사합니다,.해결 못해서 죄송하네요 ,.흑흑
chroot /var/lib/haproxy
라는 명령을 내리면, 기반 시스템에서는 /var/lib/haproxy 인 디렉터리가 마치 / 인 것 처럼 보이는 새로운 시스템에 들어간 것 비슷하게 동작합니다. 또는 그렇게 꾸며야 합니다. 그런데, 아마도....
chroot: failed to run command ‘/bin/bash’: No such file or directory
라는 에러가 나올 듯 하네요. 즉, /bin/bash 라는 쉘이 없을 것 같습니다. 여기서 말하는 /bin/bash 는 기반 시스템에서는 /var/lib/haproxy/bin/bash 를 말하는 것 입니다. 자세한 내용은... https://www.howtogeek.com/441534/how-to-use-the-chroot-command-on-linux/ 을 보세요. 만일 이러한 추측이 맞다면...
https://discourse.haproxy.org/t/external-check-and-chroot/2150/14
를 읽어보세요.
external-check command /usr/local/bin/master_check.sh
부분을
external-check command /bin/true
로 하고 시험해보세요. Chroot jail 환경을 꾸민 다음에 master_check.sh 도 조금 수정해야 할 수 있으니까요.