이 기사에서는 3노드 MySQL 5 데이터베이스를 구성하는 방법을 설명합니다. 서버 클러스터. :스토리지 노드 2개와
관리 노드 1개.
클러스터는"하트비트"(다른 노드가 활성 상태인지 확인하는 데 사용) 및 "ldirectord"(MySQL 클러스터의 노드에 요청을 배포하는 데 사용) 장치를 제공하는
Ultra Monkey 설치 패키지를 사용하는 두 개의 노드로
구성된 고가용성 로드 밸런서입니다. .이 기사에서 각 노드는 Debian Sarge Linux 시스템을 사용합니다. 다른 Linux 배포판의 설치는 약간
다를 수 있습니다. 우리는 MySQL 버전 5.0.19를 사용합니다. MySQL 5를 사용하고 싶지 않다면 MySQL 4.1을 사용할 수도 있습니다.
하지만
아직 테스트하지는 않았습니다.이 기사는 실제 적용 가이드이므로 이론이 너무 많이 포함되지 않습니다. 온라인에서 클러스터링에 관한 많은 이론을 찾을 수 있습니다.
한 서버에 대해
다음 Debian 서버를 사용하며 모두 동일한 네트워크 세그먼트에 있습니다(이 예: 192.168.0.x):
sql1.test.com: 192.168.0.101 MySQL 클러스터 노드 1
sql2.test.com: 192.168. 0.102 MySQL 클러스터 노드 2
loadb1.test.com: 192.168.0.103 로드 밸런싱 1 / MySQL 클러스터 관리 서버
loadb2.test.com: 192.168.0.104 로드 밸런싱 2
또한 가상 IP 주소: 192.168.0.105가 필요합니다.
애플리케이션이 통합된 단일 IP 주소를 통해 클러스터에 액세스할 수
있도록 이 MySQL 클러스터에 대한 로드 밸런싱을 조정합니다
.MySQL 클러스터에서 두 개의 노드를 사용하고 싶더라도 여전히 세 번째 노드인 MySQL 클러스터 관리 서버가 필요합니다
. 그 이유는 다음과 같습니다. MySQL 클러스터 노드 중 하나가 다운되고 MySQL 클러스터 관리 서버가 실행되지 않는 경우
그러면 두 클러스터 노드의 데이터가 일치하지 않게 됩니다("분할 브레인"). MySQL 클러스터를 구성하려면 이 정보가 필요합니다.
따라서 설치에는 일반적으로 5개의 시스템이 필요합니다.
2개의 MySQL 클러스터 노드 + 1개의 클러스터 관리 서버 + 2개의 로드 밸런서 = 5
클러스터 관리 서버는 많은 리소스를 사용하지 않기 때문에 시스템은 비어 있게 됩니다. 따라서
첫 번째
로드 밸런서를 동일한 시스템에 배치할 수 있으므로 서버 1개가 절약되므로 이상적으로는시스템 4개만 필요합니다.
2. MySQL 클러스터 관리 서버를 구성합니다.
먼저 MySQL 5.0.19를 다운로드하고 클러스터 관리 서버(ndb_mgmd)와 클러스터 관리 클라이언트(ndb_mgm -클러스터 작동을 모니터링하는 데 사용할 수 있음)
를 설치해야 합니다
.단계는 loadb1.test .com (192.168.0.103)에 있습니다:
loadb1.test.com:
mkdir /usr/src/mysql-mgm
cd /usr/src/mysql-mgm
wget http://dev.mysql.com/get /다운로드/ MySQL-5.0/mysql-max-5.0.19-linux-i686-
glibc23.tar.gz/from/http://www.mirrorservice.org/sites/ftp.mysql.com/
tar xvfz mysql- max-5.0 .19-linux-i686-glibc23.tar.gz
cd mysql-max-5.0.19-linux-i686-glibc23
mv bin/ndb_mgm /usr/bin
mv bin/ndb_mgmd /usr/bin
chmod 755 /usr/ bin/ndb_mg *
cd /usr/src
rm -rf /usr/src/mysql-mgm
다음으로 클러스터 구성 파일 /var/lib/mysql-cluster/config.ini:
loadb1.test.com:
mkdir을
생성해야 합니다./var /lib/mysql-cluster
cd /var/lib/mysql-cluster
vi config.ini
————-
[NDBD DEFAULT]
NoOfReplicas=2
[MYSQLD DEFAULT]
[NDB_MGMD DEFAULT]
[TCP DEFAULT]
# 클러스터에 대한 섹션 관리 노드
[ NDB_MGMD]
# 관리 노드(이 시스템)의 IP 주소
HostName=192.168.0.103
# 스토리지 노드에 대한 섹션
[NDBD]
# 첫 번째 스토리지 노드의 IP 주소
HostName=192.168.0.101
DataDir= /var/lib/ mysql-cluster
[NDBD]
# 두 번째 스토리지 노드의 IP 주소
HostName=192.168.0.102
DataDir=/var/lib/mysql-cluster
# 스토리지 노드당 하나의 [MYSQLD
] [MYSQLD]
[MYSQLD]
———-
실제 응용 프로그램에서 , 파일을 변경하십시오. IP 주소를 해당 IP로 바꾸십시오.
그런 다음 클러스터 관리 서버를 시작합니다:
loadb1.test.com:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
또한 서버가 시작될 때 관리 서버를 자동으로 시작할 수 있어야 하므로 다음을 생성합니다. 매우 간단한 초기화
스크립트 및 해당 시작 연결:
loadb1.test.com:
echo 'ndb_mgmd -f /var/lib/mysql-cluster/config.ini' > /etc/init.d/ndb_mgmd
chmod 755 /etc/init. d/ ndb_mgmd
update-rc.d ndb_mgmd 기본값
3개의 구성 MySQL 클러스터 노드(스토리지 노드)
이제 sql1.test.com 및 sql2.test.com에 각각 mysql-max-5.0.19를 설치합니다.
sql1.example.com/ sql2 .example.com:
groupadd mysql
useradd -g mysql mysql
cd /usr/local/
wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-max-5.0.19-linux-i686-
glibc23.tar.gz/from/http://www.mirrorservice.org/sites/ftp.mysql.com/
tar xvfz mysql-max-5.0.19-linux-i686-glibc23.tar.gz
ln -s mysql - max-5.0.19-linux-i686-glibc23 mysql
cd mysql
scripts/mysql_install_db –user=mysql
chown -R root:mysql .
chown -R mysql data
cp support-files/mysql.server /etc/init.d/
chmod 755 /etc/init.d/mysql.server
업데이트-rc.d mysql.server 기본값
cd /usr/local/mysql/bin
mv * /usr/bin
cd ../
rm -fr /usr/local/mysql/bin
ln -s /usr/bin /usr/local/mysql/bin
그런 다음 각 노드에 MySQL 구성 파일 /etc/my.cnf를 생성합니다.
vi /etc/my.cnf
–
[mysqld]
ndbcluster
# 클러스터의 IP 주소 관리 노드
ndb-connectstring=192.168.0.103
[mysql_cluster]
# 클러스터 관리 노드의 IP 주소
ndb-connectstring=192.168.0.103
–
클러스터 관리 서버에 올바른 IP 주소를 입력했는지 확인하십시오.
다음으로 데이터 디렉토리를 생성하고 각 클러스터 노드에서 MySQL 서버를 시작합니다:
sql1.test.com / sql2.test.com:
mkdir /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
ndbd – 초기
/ etc/init.d/mysql.server start
(기억하십시오: MySQL은 처음으로 시작하거나 loadb1.test.com의 /var/lib/mysql-cluster/config.ini가
변경될 때만 시작됩니다. ndbd –initial만 사용하십시오)
이제 MySQL 루트 계정의 비밀번호를 설정할 차례입니다:
sql1.test.com / sql2.test.com:
mysqladmin -u root 비밀번호 yourrootsqlpassword
서버가 시작되면 클러스터 노드를 시작해야 하므로 ndbd 초기화를 생성합니다. 스크립트 및 해당
시스템 시작 연결:
sql1.test.com / sql2.test.com:
echo 'ndbd' > /etc/init.d/ndbd
chmod 755 /etc/init.d/ndbd
update-rc.
4 MySQL 클러스터 테스트
MySQL 클러스터 구성이 완료되었습니다. 이제 테스트할 차례입니다. 클러스터 관리 서버
(loadb1.test.com)에서 클러스터 관리 클라이언트 ndb_mgm을 실행하여 클러스터 노드가 연결되어 있는지 확인합니다.
loadb1.test.com:
ndb_mgm
다음이 표시됩니다.
– NDB 클러스터 — 관리 클라이언트 –
ndb_mgm >
명령줄에
show; 입력 시
출력 정보는 다음과 같아야 합니다.
ndb_mgm> show는
다음위치에서 관리 서버에 연결됩니다: localhost:1186
클러스터 구성
———————
[ndbd(NDB)] 2 node( s)
id= 2 @192.168.0.101 (버전: 5.0.19, 노드 그룹: 0, 마스터)
id=3 @192.168.0.102 (버전: 5.0.19, 노드 그룹: 0)
[ndb_mgmd(MGM)] 1 노드(s) )
id=1 @192.168.0.103 (버전: 5.0.19)
[mysqld(API)] 2개 노드
id=4 @192.168.0.101 (버전: 5.0.19)
id=5 @192.168.0.102 (버전: 5.0.19)
ndb_mgm>
모든 노드가 연결된 것을 확인하면. 그러면 모든 일이 잘 될 거예요!
quit;를
입력하여
ndb_mgm 클라이언트 콘솔을 종료합니다.
이제 sql1.test.com 노드에 테스트 데이터베이스를 만들고, 테스트 테이블을 만들고,
일부 테스트 데이터를 입력합니다.
mysql -u root -p
CREATE DATABASE mysqlclustertest;
USE
CREATE TABLE testtable (i INT) ENGINE=NDBCLUSTER; ;
INSERT INTO testtable () VALUES (1);
SELECT * FROM testtable;
quit;
(위의 CREATE 문을 보십시오. 클러스터하려는 모든 데이터베이스의 테이블은 ENGINE=NDBCLUSTER를 사용해야 합니다.
다른 ENGINE을 사용하면 클러스터링이 수행됩니다. 작동하지 않습니다!)
SELECT의 결과는
다음
과 같습니다.mysql> SELECT * FROM testtable;
+——+
|
1
|
+——+
1 row in set (0.03초)
sql2.test.com 노드에 동일한 데이터베이스(예, 여전히 만들어야 하지만 테스트 테이블이 ENGINE=NDBCLUSTER를 사용하기 때문에테스트 테이블이 생성된 후
데이터가 sql2.test.com에 복사됩니다
):sql2. test.com:
mysql -u root -p
CREATE DATABASE mysqlclustertest;
SELECT
* FROM testtable;
SELECT 결과는 위의 sql1.test.com 결과와 동일해야 합니다.
mysql
> SELECT * FROM testtable;
—+
| i |
+——+
| 1 |
+——+
1개 행(0.04초)
sql1.test.com 노드에서 sql2.example.com 노드로 복사된 것을 볼 수 있습니다. 이제
테스트 테이블에 다른 행을 삽입합니다.
sql2.test.com:
INSERT INTO testtable () VALUES (2);
이제
sql1.example.com 노드로 돌아가서 새로 삽입된 행을 볼 수 있는지 확인하겠습니다.
sql1.example.com:
mysql
-u root -p
USE
mysqlclustertest;
SELECT * FROM testtable;
다음
과
같은 출력이
표시됩니다.
mysql> SELECT * FROM testtable;
| 2 |
+——+
2행 세트(0.05초)
이므로 모든 클러스터 노드가 동일한 데이터를 갖습니다!
이제 노드 1(sql1.example.com)을 중지하는지 살펴보겠습니다.
sql1.example.com:
killall ndbd를
실행하고
ps aux | grep ndbd | grep -iv grep을
확인하여 모든 ndbd 프로세스가 종료되었는지 확인합니다. ndbd 프로세스가 계속 표시되면
모든 ndbd 프로세스가 종료될 때까지
killall ndbd를
다시 실행하세요.이제 관리 서버에서 클러스터(loadb1.example.com)의 상태를 확인합니다.
loadb1.example.com:
ndb_mgm
ndb_mgm 콘솔에
show;
를입력하면
다음이 표시됩니다:
ndb_mgm> show;
:1186
클러스터 구성
————————
[ndbd(NDB)] 2개 노드
id=2(연결되지 않음, 192.168.0.101에서 연결 허용)
id=3 @192.168.0.102(버전: 5.0 .19 , 노드 그룹: 0, 마스터)
[ndb_mgmd(MGM)] 1 노드
id=1 @192.168.0.103 (버전: 5.0.19)
[mysqld(API)] 2 노드
id=4 @192.168 .0.101 (버전: 5.0.19)
id=5 @192.168.0.102 (버전: 5.0.19)
ndb_mgm>
보시다시피 sql1.example.com 노드가 연결되지 않았습니다.
Enter:
종료;
ndb_mgm 콘솔을 종료합니다.
sql2.example.com 노드를 확인해 보겠습니다.
sql2.example.com:
mysql -u root -p
USE mysqlclustertest;
SELECT * FROM testtable
;SELECT 쿼리의 결과는 다음과 같습니다.
mysql
> SELECT * FROM testtable;
+— —+
| i |
+
——
+
2
행 세트(0.17초)
이제sql1.test.com
노드를 다시 시작하겠습니다.
.example .com:
ndbd
5 클러스터를 다시 시작하는 방법
이제loadb1.test.com 노드 또는 기타 노드의 /var/lib/mysql-cluster/config.ini 수정으로 인해
MySQL 클러스터를 다시 시작해야 한다고
가정해 보겠습니다. 이유.이를 수행하려면
loadb1.example.com 노드에서 ndb_mgm 클러스터 관리 클라이언트를 사용합니다.
loadb1.test.com:
ndb_mgm
ndb_mgm 콘솔에서 shutdown을 입력하면
다음
과 같은 메시지가 표시됩니다
.
ndb_mgm> shutdown ;
: 클러스터 종료 시작
노드 2: 노드 종료 완료
2 NDB 클러스터 노드가 종료되었습니다.
ndb_mgm>
이는 클러스터 노드 sql1.test.com 및 sql2.test.com이 종료되었음을 의미합니다
.
클러스터 관리 서버가 모두 종료되었습니다.
quit을
실행하고
ndb_mgm 콘솔을 종료하세요.
클러스터 관리 서버를 시작하려면 loadb1.test.com:
loadb1.test.com:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
및 sql1.test.com 및 sql2.test.com
에서 다음을 수행하십시오.다음에서 실행:
sql1.example.com / sql2.example.com:
ndbd
또는 방금 loadb1.test.com에서 /var/lib/mysql-cluster/config.ini 파일을 수정했습니다:
ndbd –initial
그 후에는 loadb1.test.com에서 클러스터가 다시 시작되었는지 확인할 수 있습니다.
loadb1.test.com:
ndb_mgm
ndb_mgm 콘솔에서
show;를
입력하여클러스터의 현재 상태를 확인하세요. 다시 시작한 후 모든 노드가 연결되었음을 보고하는 데 약간의 시간이 걸릴 수 있습니다.
Enter:
종료;
ndb_mgm 콘솔을 종료합니다.
6. 로드 밸런싱 구성
이제 MySQL 클러스터가 완료되었으며 이제 사용을 시작할 수 있습니다.
하지만클러스터에 접근하기 위한
별도의 IP
주소가
없기 때문에 애플리케이션의 일부는 MySQL Cluster Node 1(sql1.test.com)을 사용하도록 구성하고 다른 일부는 Node 2(sql2.com)를 사용하도록 구성해야 함을 의미합니다. test.com)물론 모든 애플리케이션은 하나의 노드만 사용해야 하지만
클러스터 노드 간에 로드를 분할하지 않으려면 클러스터를 갖는 목적이 무엇입니까? 또 다른 질문은
하나의 클러스터라면 어떨까요
?노드가 다운되나요? 그러면 이 클러스터 노드를 사용하는 응용 프로그램은 전혀 작동할 수 없습니다.
여기서 해결 방법은 MySQL Cluster 앞에 로드 밸런서를 구성하여 각 MySQL Cluster 노드 간의 로드 밸런싱을 조정하는 것입니다.
로드 밸런서는 클러스터 노드 간에 공유 가상 IP 주소를 구성하고 모든 애플리케이션은 이 가상 IP 주소를 사용하여
클러스터에 액세스합니다. 노드 중 하나가 다운되더라도 로드 밸런서가
제대로 작동하는 다른 노드로 요청을 전송하므로 애플리케이션은 계속 작동합니다.
이제 이 예에서는 로드 밸런서가 병목 현상을 발생시킵니다. 이 로드 밸런서가 고장나면 어떻게 되나요?
따라서(액티브/패시브) 액티브/패시브 설치 모드에서 두 개의 로드 밸런서를 구성
하겠습니다
.즉, 활성 상태인 로드 밸런서 하나와 상시 대기 상태인 로드 밸런서가 하나 있고
, 활성 로드 밸런서가 다운되면 활성 상태가 된다는 의미입니다. 각 로드 밸런서는 하트비트를 사용하여 다른 로드 밸런서의 활동을 확인하고
, 로드 밸런서도 클러스터 노드에 트래픽을 분산시키는 역할을 하는 ldirectord를 사용합니다.
heartbeat와 ldirectord는 모두 우리가 설치할 Ultra Monkey 설치 패키지에 포함되어 있습니다.
loadb1.test.com 및 loadb2.test.com 노드의 시스템 커널이 IPVS(IP 가상 서버)를 지원하는 것이 매우 중요합니다.
IPVS는 Linux 커널의 전송 계층에서 로드 밸런싱을 수행합니다.
6.1 Ultra Monkey 설치
이제 시작해 보겠습니다. 먼저 loadb1.test.com 및 loadb2.test.com 노드에서 IPVS를 활성화합니다. loadb1.example.com
/ loadb2.example.com:
modprobe ip_vs_dh
modprobe ip_vs_ftp
modprobe ip_vs
modprobe ip_vs_lblc
modprobe ip_vs_lblcr
modprobe ip_vs_lc
modprobe
ip_vs_nq
modprobe ip_vs_rr modprobe ip_vs_sed
modprobe ip_vs_sh
modprobe ip_vs_wlc
modprobe ip_vs_wrr
시작 시 IPVS 모듈을 활성화하려면 /etc/modules에 모듈을 열거합니다:
loadb1.test.com / loadb2.test.com:
/etc/
모듈ip_vs_dh
ip_vs_ftp
ip_vs
ip_vs_lblc
ip_vs_lblcr
ip_vs_lc
ip_vs_nq
ip_vs_rr
ip_vs_sed
ip_vs_sh
ip_vs_wlc
ip_vs_wrr
이제 /etc/apt/sources.list를 편집하고 Ultra Monkey의 다운로드 지점을 추가한 다음 Ultra Monkey를 설치합니다:
loadb1.test .com/loadb2.test.com:
vi / etc/apt/sources.list
deb http://www.ultramonkey.org/download/3/ sarge 메인
deb-src http://www.ultramonkey.org/download/3 sarge 메인
apt-get 업데이트
apt-get install ultramonkey libdbi-perl libdbd-mysql-perl libmysqlclient14-dev
이제 다음 경고가 표시되면
| libsensors3이 작동하지 않습니다
|
결과적으로
,
|
libsensors3은 시스템에서 작동하지 않습니다.
| 활성화하려면
커널 구성에서 "I2C 하드웨어 센서 칩 지원"
을
살펴보세요.다음 질문에 대답하십시오.
부팅 시 IPVS 규칙을 자동으로 로드하시겠습니까?
<-- 아니요
데몬 방법을 선택하십시오.
<-- 없음
방금 설치한 libdbd-mysql-perl 설치 패키지가 MySQL 5에서 작동하지 않습니다. MySQL을 사용하는 MySQL 클러스터 5)
최신 DBD::mysql Perl 설치 패키지를 설치합니다:
loadb1.test.com / loadb2.test.com:
cd /tmp
wget
tar xvfz DBD-mysql-3.0002.tar.gz
cd DBD- mysql -3.0002
perl Makefile.PL
make
make install
먼저 패킷 전달을 활성화해야 합니다:
loadb1.example.com / loadb2.example.com:
vi /etc/sysctl.conf
# 패킷 전달 활성화net.ipv4.ip_forward = 1
6.2 하트비트 구성( heartbeat )
세 개의 파일을 생성하여 heartbeat를 구성합니다(loadb1.test.com과 loadb2.test.com의 파일은 정확히 동일해야 함):
loadb1.test.com / loadb2.test.com:
vi /etc/ha.d /ha .cf
logfacility local0
bcast eth0
mcast eth0 225.0.0.1 694 1 0
auto_failback off
node loadb1
node loadb2
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
기억하세요: 노드 이름을 나열해야 합니다(이것은 예제에서는 loadb1 및 loadb2)
uname -n
이 외에도 이 파일을 수정할 필요가 없습니다.
vi /etc/ha.d/haresources
loadb1
ldirectord::ldirectord.cf
LVSSyncDaemonSwap::master
IPaddr2::192.168.0.105/24/eth0/192.168.0.255
로드 밸런싱 노드 이름 중 하나를 열거해야 합니다(여기: loadb1),
가상 IP 주소(192.168.0.105) 및 브로드캐스트 주소(192.168.0.255)를 나열합니다.
vi /etc/ha.d/authkeys
auth 3
3 md5 somerandomstring
somerandomstring은 loadb1과 loadb2가 각각을 인증하는 데 사용하는 두 개의 하트비트입니다. 기타. 데몬의 비밀번호입니다.
여기에서 자신만의 비밀번호를 설정하세요. 3가지 암호화 방법 중에서 선택할 수 있습니다. 저는 일반적으로 암호화에 md5를 사용합니다.
/etc/ha.d/authkeys는 루트 계정에 대해 읽기 전용이어야 합니다. 여기서는 다음을 수행합니다.
loadb1.test.com / loadb2.test.com:
chmod 600 /etc/ha.d/authkeys
6.3 ldirectord 구성
이제 우리는 ldirectord 구성 파일, 로드 밸런서 생성:
loadb1.example.com / loadb2.example.com:
vi /etc/ha.d/ldirectord.cf
# 전역 지시문
checktimeout=10
checkinterval=2
autoreload=no
logfile="local0"
대기 =yes
virtual = 192.168.0.105:3306
service = mysql
real = 192.168.0.101:3306 Gate
real = 192.168.0.102:3306 Gate
checktype = 협상
로그인 = "ldirector"
passwd = "ldirectorpassword"
데이터베이스 = "ldirectordb"
요청 = "SELECT * FROM Connectioncheck"
Scheduler = wrr
올바른 가상 IP 주소(192.168.0.105)와 MySQL 클러스터 노드의 올바른 IP 주소(192.168.0.101 및 192.168.0.102)를 입력하세요.
3306은 MySQL이 실행될 때 기본 포트입니다. 또한 MySQL 사용자(ldirector)와 비밀번호(ldirectorpassword), 데이터베이스(ldirectordb) 및
SQL 쿼리를 지정했습니다. ldirectord는 이 정보를 사용하여 MySQL 클러스터 노드를 테스트하여 해당 노드가 항상 사용 가능한지 확인합니다. 다음으로 ldirector 사용자를 사용하여
ldirectordb 데이터베이스를 생성합니다.
이제 하트비트에 필요한 시작 연결을 만들고 ldirectord를 제거합니다(ldirectord는 하트비트에 의해 시작되기 때문입니다):
loadb1.test.com / loadb2.test.com:
update-rc.d -f heartbeat Remove
update-rc.d heartbeat start 75 2 3 4 5 . stop 05 0 1 6 .
update-rc.d -f ldirectord 제거
6.4 데이터베이스 ldirector 생성
다음으로 MySQL 클러스터 노드 sql1.test.com 및 sql2.test.com에 ldirector 데이터베이스를 생성합니다. 이 데이터베이스는 로드 밸런서에서
MySQL 클러스터 노드의 가용성을 확인하는 데 사용됩니다.
sql1.test.com:
mysql -u root -p
ldirectordb.*에 'ldirectorpassword'로 식별된 모든
권한
부여;
CREATE TABLE 연결 확인(i INT) 엔진
;
=NDBCLUSTER;
INTO 연결 확인(1);
종료;
sql2.test.com:
mysql -u root -p
GRANT ALL ON ldirector'@'%' ID는 'ldirectorpassword'
;
CREATE DATABASE ldirectordb;
quit;
6.4 로드 밸런싱을 위한 MySQL 클러스터 노드 준비
마지막으로 가상 IP 주소 192.168.0.105를 허용하도록 MySQL 클러스터 노드 sql1.test.com 및 sql2.test.com을 구성해야 합니다.
sql1.test.com / sql2.test.com:
apt-get install iproute
/etc/sysctl.conf에 다음 내용을 추가합니다:
vi /etc/sysctl.conf
# arp_ignore 옵션 net.ipv4.conf.all 구성을 활성화합니다
. arp_ignore = 1
# eth0에서 arp 요청을 받으면 해당 주소가
eth0에 구성된 # 경우에만 응답합니다. 특히 주소가
# lo
net.ipv4.conf.eth0.arp_ignore = 1
에
구성된 경우 응답하지 않습니다.eth1에 대해서도 마찬가지이며, 모든 ARPing 인터페이스에 추가
#net.ipv4.conf.eth1.arp_ignore = 1
# arp_announce 옵션 구성 활성화
net.ipv4.conf.all.arp_announce = 2
# eth0을 통해 전송된 ARP 요청을 할 때 항상
# eth0에 ARP 요청의 소스 주소로 구성된
주소가
설정되지 않고 # lo에 있는 주소에 대해 패킷이 eth0으로 전송되고
arp 요청이 필요한 경우 #
# arp 요청의 소스 IP 주소가 대상의 ARP 캐시에 #입력
되므로
이 주소를# 실제 lo의 주소로
알리는 효과가 있습니다.
#서버는
linux-director에 의해서만 발표되어야 합니다.
net.ipv4.conf.eth0.arp_announce = 2
# eth1에 대해서도 마찬가지입니다. 모든 ARPing 인터페이스에 추가
#net.ipv4.conf.eth1.arp_announce = 2
sysctl -p가
추가됩니다. /etc/network/interfaces에 대한 다음 단락:
sql1.test.com / sql2.test.com:
vi /etc/network/interfaces
auto lo:0
iface lo:0 inet static
address 192.168.0.105
netmask 255.255.255.255
pre - up sysctl -p > /dev/null
ifup lo:0
7. 로드 밸런서를 시작하고 테스트합니다.
이제 두 개의 로드 밸런싱 관리자를 시작합니다:
loadb1.test.com / loadb2.test.com:
/etc/init.d /ldirectord stop
/etc/init.d/heartbeat start
오류가 표시되지 않으면 지금 각 로드 밸런서를 다시 시작해야 합니다:
loadb1.test.com / loadb2.test.com:
shutdown -r now
다시 시작한 후 두 로드가 모두 로드되는지 확인할 수 있습니다. 밸런서는 예상대로 작동합니다:
loadb1.test.com / loadb2.test.com:
ip addr sh eth0
활성 로드 밸런서는 가상 IP 주소(192.168.0.105)를 나열해야 합니다:
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:45:fc:f8 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.103/24 brd 192.168.0.255 범위 전역 eth0
inet 192.168.0.105/24 brd 192.168.0.255
에 대한 로드 밸런서
범위 전역 보조 eth0 수동(상시 대기)은 다음과 같이 나타나야 합니다.2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:16:c1:4e brd ff:ff:ff :ff:ff:ff
inet 192.168.0.104/24 brd 192.168.0.255 범위 전역 eth0
loadb1.test.com / loadb2.test.com:
ldirectord ldirectord.cf status
활성 로드 밸런서의 출력:
/etc/ha .d/ldirectord.cf에 대한 ldirectord가 실행 중입니다. pid 포함: 1603
수동 로드 밸런서의 출력:
/etc/ha.d/ldirectord.cf loadb1.example.com / loadb2.example.com에 대해 ldirectord가 중지됨
:
ipvsadm -L -
활성 로드 밸런서의 nOutput:
IP 가상 서버 버전 1.2.1 (크기=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.105:3306 wrr
-> 192.168.0.101:3306 경로 1 0 0
-> 192.168.0.102:3306
출력 켜기 경로 1 0 0 패시브 로드 밸런서:
IP 가상 서버 버전 1.2.1(크기=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
loadb1.test.com / loadb2.test.com:
/etc/ ha.d/resource.d/LVSSyncDaemonSwap 마스터 상태
활성 로드 밸런서의 출력:
마스터 실행 중
(ipvs_syncmaster pid: 1766)
수동 로드 밸런서의 출력:
마스터 중지됨
(ipvs_syncbackup pid: 1440)
테스트가 모두 정상이면 이제 액세스할 수 있습니다. 가상 IP 주소 192.168.0.105를 사용하여 동일한 네트워크(192.168.0.x)에 있는 다른 서버의 MySQL 데이터베이스:
mysql -h 192.168 .0.105 -u ldirector -p
(기억하세요: MySQL 클라이언트는 버전 4.1 이상이어야 합니다. ; 이전 버전은 MySQL5를 실행하지 않습니다. )
이제 MySQL 클러스터 노드 중 하나를 종료하여 테스트할 수 있습니다. 여전히 MySQL 데이터베이스에 연결할 수 있습니다.
8 참고 사항
MySQL 클러스터를 실행할 때 기억해야 할 몇 가지 중요한 사항은 다음과 같습니다.
– 모든 데이터는 메모리에 있습니다! 따라서 클러스터 노드에 많은 양의 메모리가 필요합니다.
각 노드에 필요한 메모리 용량 계산 공식은
다음과 같습니다
.(데이터베이스 크기 SizeofDatabase * 복제본 수 NumberOfReplicas * 1.1 ) / 데이터 노드 수 NumberOfDataNodes
따라서 데이터베이스 크기가 1GB인 경우 각 노드에 1.1GB를 장착해야 합니다. 기억의!
–클러스터 관리 노드는 포트 1186에서 모든 연결을 수신합니다. 따라서 이는 그다지 안전하지 않다는 의미이므로 별도의 네트워크에서 MySQL Cluster를 실행해야 합니다.