AWS EC2 MySQL 복제: 마스터에서 슬레이브를 쿼리하도록 구성

AWS EC2 MySQL 복제: 마스터에서 슬레이브를 쿼리하도록 구성

별도의 AWS EC2 인스턴스에서 MySQL 마스터-슬레이브 상황을 성공적으로 설정했습니다. 슬레이브가 실행 중이며 마스터를 성공적으로 복제하고 있습니다.

여태까지는 그런대로 잘됐다.

이제 (분석 등을 위해) 슬레이브를 쿼리할 수 있기를 원하지만 마스터에서 슬레이브로 쿼리를 보낼 수 있는 올바른 구성을 찾을 수 없습니다.

AWS 보안 프로필 설정에 따라 발생하는 오류는 "Connection Refused" 또는 "Connection Timed out"입니다.

슬레이브에서는 포트 3306에 연결하는 데 사용할 마스터 IP 블록에 대한 EC2 보안 그룹 허용이 있었고 마스터 연결 구성에서 슬레이브의 IP 주소를 사용했습니다.

마스터에서 슬레이브를 쿼리하려고 하면 "Connection Refused" 오류가 발생했습니다.

마스터에서 'show full processlist'를 실행해보니 슬레이브 호스트가 IP가 아닌 AWS EC2 호스트 이름이고 포트 44508이 마지막에 붙어 있어서 슬레이브 호스트를 사용하도록 마스터의 연결 정보를 변경했습니다. IP 주소 대신 이름을 사용하고 슬레이브의 보안 그룹 설정을 사용하여 3306 대신 포트 44508에서 마스터의 트래픽을 허용합니다.

이로 인해 "연결 시간 초과" 오류가 발생했습니다.

슬레이브의 보안 그룹에서 IP/호스트 이름/포트 조합을 시도했지만 어떤 조합에서든 해당 2개의 오류 중 하나가 발생했습니다.

누구든지 해당 마스터 머신의 슬레이브에 대한 쿼리를 실행하고(읽기 전용) 결과를 마스터로 반환할 수 있도록 구성하는 방법에 대한 팁을 제공할 수 있습니까? 티아.

마스터가 연결 구성을 설정하는 Codeigniter4도 실행한다는 점을 제외하면 두 시스템 모두 동일하게 설정됩니다.

우분투 20.04.3 LTS 및 MySQL 8.0.26-0

답변1

이러한 설정에서 클라이언트(앱, 소프트웨어)는 슬레이브에 연결하고 SELECT 쿼리만 실행해야 합니다(쓰기 쿼리를 실행해야 하는 경우 마스터에서만 수행해야 함).

다음 사항을 확인해야 합니다.

  1. MySQL 서버가 슬레이브 서버의 네트워크를 수신하는 경우.
  2. 보안 그룹이 앱의 슬레이브 서버 연결을 허용하는 경우.
  3. 문제를 방지하려면 슬레이브를 읽기 전용으로 구성해야 합니다.

답변2

해결: 슬레이브의 /etc/mysql/mysql.conf.d/mysqld.cnf에서 'bind-address' 및 'mysqlx-bind-address' 행을 주석 처리하고 슬레이브를 중지하고 mysqld를 다시 시작한 후 슬레이브를 시작해야 했습니다. .

'bind-address = 127.0.0.1'을 사용하면 다른 곳에서의 연결이 방지됩니다. 주석 처리하면 localhost뿐만 아니라 모든 소스에서 액세스할 수 있습니다. EC2 보안 그룹은 포트 3306에 대한 액세스를 마스터 서버로만 제한합니다.

지금은 여기저기서 잘 작동하고 있어요. 관심을 가져주셔서 다시 한번 감사드립니다.

관련 정보