MySQL - MySQL 고가용성 구현에 대한 자세한 소개

黄舟
풀어 주다: 2017-03-14 16:43:10
원래의
1676명이 탐색했습니다.

1. 기본 환경 소개 및 기본 환경 구성

노드 1: node1.hulala.com 192.168.1.35 centos6.5_64 8G 신규 하드디스크 추가
노드 2: node2.hulala.com 192.168.1.36 centos6.5_64 8G 새 하드 드라이브 추가
vip 192.168.1.39

노드 1과 노드 2를 모두 구성해야 합니다
호스트 이름 수정:

vim /etc/sysconfig/network
HOSTNAME=node1.hulala.com
로그인 후 복사

호스트 해상도 구성: <br/>

vim /etc/hosts
192.168.1.35    node1.hulala.com node1
192.168.1.36    node2.hulala.com node2
로그인 후 복사

시스템 시간 동기화: <br/>

ntpdate cn.pool.ntp.org
로그인 후 복사

방화벽 및 SELINUX 끄기<br/>

service iptables stop
chkconfig iptables off
cat /etc/sysconfig/selinux
SELINUX=disabled
로그인 후 복사

위 구성은 두 노드에 있습니다. 구성이 완료된 후 두 노드를 다시 시작해야 합니다.

두 번째: SSH 상호 신뢰 구성<br/>

[root@node1~]#ssh-keygen -t rsa -b 1024
[root@node1~]#ssh-copy-id root@192.168.1.36
[root@node2~]#ssh-keygen -t rsa -b 1024
[root@node2~]#ssh-copy-id root@192.168.1.35
로그인 후 복사

세 번째: DRBD설치 및 구성 (node1과 node2가 동일한 작업 실행)

[root@node1~]#wget -c http://www.php.cn/
[root@node1~]#wget -c http://www.php.cn/
[root@node1~]#rpm -ivh *.rpm
로그인 후 복사

sha1 값을 공유 비밀로 가져오기<br/>

[root@node1~]#sha1sum /etc/drbd.conf
8a6c5f3c21b84c66049456d34b4c4980468bcfb3  /etc/drbd.conf
로그인 후 복사

리소스 생성 및 편집구성 파일 :/etc/drbd.d/dbcluster .res<br/>

[root@node1~]# vim /etc/drbd.d/dbcluster.res
resource dbcluster {
    protocol C;
    net {
        cram-hmac-alg sha1;
        shared-secret "8a6c5f3c21b84c66049456d34b4c4980468bcfb3";
        after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
        after-sb-2pri disconnect;
        rr-conflict disconnect;
    }
    device    /dev/drbd0;
    disk      /dev/sdb1;
meta-disk internal;
    on node1.hulala.com {
        address   192.168.1.35:7789;
    }
    on node2.hulala.com {
        address   192.168.1.36:7789;
    }
}
로그인 후 복사

위 구성에 사용된 매개변수에 대한 설명:<br/>RESOURCE: 리소스 이름<br/>PROTOCOL: 프로토콜 "C" 사용 즉, 원격 쓰기 확인을 받은 후 쓰기가 완료된 것으로 간주됩니다.<br/>NET: 두 노드의 SHA1 키가 동일합니다<br/>after-sb-0pri: "분할" Brain'이 발생하고 데이터 변경이 없으면 두 노드가 정상적으로 연결됩니다<br/> after-sb-1pri: 데이터 변경이 있는 경우 보조 장치 데이터를 버리고 기본 장치에서 동기화 <br/>rr-contribute : 이전 설정을 적용할 수 없고 DRBD 시스템에 역할 충돌이 있는 경우 시스템은 자동으로 노드 연결을 끊습니다.<br/>META-DISK: 메타데이터가 동일한 디스크(sdb1)<br/>ON

[root@node1~]#scp /etc/drbd.d/dbcluster.res root@192.168.1.36:/etc/drbd.d/
로그인 후 복사

리소스 및 파일 시스템 생성:<br/>파티션 생성(포맷되지 않음)<br/>node1 및 node2에 LVM 파티션 생성: <br/>

[#root@node1~]fdisk /dev/sdb
로그인 후 복사

node1에서 및 node2에서 리소스(dbcluster)에 대한 메타 데이터 생성: <br/>

[root@node1~drbd]#drbdadm create-md dbcluster
로그인 후 복사

리소스 활성화(둘 다) node1과 node2는 확인해야 함)<br/>– 먼저 drbd module이 로드되었는지 확인하세요<br/> 로드되었는지 확인: <br/>

# lsmod | grep drbd
로그인 후 복사

로드되지 않은 경우 다음을 수행해야 합니다. 로드: <br/>

# modprobe drbd
# lsmod | grep drbd
drbd                  317261  0
libcrc32c               1246  1 drbd
로그인 후 복사

– drbd 백그라운드 프로세스 시작: <br/>

[root@node1 drbd]# drbdadm up dbcluster
[root@node2 drbd]# drbdadm up dbcluster
로그인 후 복사

보기( node1 및 node2) DRBD 상태: <br/>

[root@node2 drbd]# /etc/init.d/drbd status
GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by dag@Build64R6, 2016-10-23 08:16:10
m:res        cs         ro                   ds                         p  mounted  fstype
0:dbcluster  Connected  Secondary/Secondary  Inconsistent/Inconsistent  C
로그인 후 복사

위 정보에서 볼 수 있듯이 DRBD 서비스는 이미 두 대의 시스템에서 실행 중이지만 두 시스템 모두 기본 시스템("기본" 호스트)이 아니므로 리소스(블록 장치)에 액세스할 수 없습니다. <br/>동기화 시작:

메인 노드(여기서는 node1)에서만 작동<br/>

[root@node1 drbd]# drbdadm — –overwrite-data-of-peer primary dbcluster
로그인 후 복사

동기화 상태 보기: <br/>

<br/>
로그인 후 복사

위 출력 결과에 대한 일부 설명:<br/>cs (연결 상태): 네트워크 연결 상태<br/>ro(역할): 노드의 역할(이 노드의 역할이 먼저 표시됩니다)<br/>ds(디스크 상태): 하드 디스크의 상태<br/> 복제 프로토콜: A, B 또는 C(이 구성은 C) <br/> drbd 상태가 "cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate"인 경우 동기화가 완료되었음을 의미합니다. <br/> 또한 다음과 같이 DRBD 상태를 확인하십시오. <br/>

[root@centos193 drbd]# drbd-overview
  0:dbcluster/0  Connected Secondary/Primary UpToDate/UpToDate C r—–
로그인 후 복사

파일 시스템 생성: <br/> 마스터 노드(Node1)에서 파일 시스템 생성: <br/>

[root@node1 drbd]# mkfs -t ext4 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
…….
180 days, whichever comes first.  Use tune2fs -c or -i to override.
로그인 후 복사

참고: DRBD가 원본 디스크 데이터의 동기화를 처리하므로 보조 노드(Node2)에서 동일한 작업을 수행할 필요가 없습니다.<br/>또한 이 DRBD 시스템을 어떤 머신에도 마운트할 필요가 없습니다(물론). MySQL을 설치하려면 MySQL을 임시로 마운트해야 합니다. 클러스터 관리 소프트웨어가 이를 처리하기 때문입니다. 또한 복사된 파일 시스템이 활성 마스터 서버에만 마운트되어 있는지 확인하세요.<br/>

넷: mysql 설치

MySQL 설치는 블로그 포스팅 "MySQL - CentOS6.5 Compile and Install MySQL5.6.16" <br/>

<🎜을 참고하셔도 됩니다. >1, node1과 node2 노드에 mysql을 설치합니다:

<br/>

yum install mysql* -y
로그인 후 복사

2.node1과 node2는 모두 mysql 서비스를 중지하도록 작동합니다

<br/>

[root@node1~]# service mysql stop
Shutting down MySQL.        [  OK  ]
로그인 후 복사

3.node1과 node2 모두 데이터베이스 디렉터리를 생성하고 디렉터리 권한 소유자를 mysql

<br/>

[root@host1 /]# mkdir -p /mysql/data
[root@host1 /]# chown -R mysql:mysql /mysql
로그인 후 복사

4로 변경하고, mysql을 닫고 DRBD 파일 시스템을 기본 노드(Node1)

<br/>

[root@node1 ~]# mount /dev/drbd0  /mysql/
로그인 후 복사
<에 임시 마운트합니다. 🎜>5. node1과 node2 모두 my.cnf 파일을 작동하고 수정합니다.

[mysqld]

<br/>

datadir=/mysql/data
로그인 후 복사
<br/>아래에 새 데이터 저장 경로를 추가합니다.6. 새 디렉토리에 대한 데이터 경로(node2의 경우 작업이 필요하지 않음)

[root@host1 mysql]#cd /var/lib/mysql
[root@host1 mysql]#cp -R * /mysql/data/
로그인 후 복사
<br/>여기에서는 node1과 node2가 모두 작동합니다. 디렉토리 복사 권한의 소유자를 mysql로 ​​직접 변경할 수 있습니다. 여기서 mysql 디렉토리를 수정하세요.

[root@host1 mysql]# chown -R mysql:mysql /mysql
로그인 후 복사
<br/>7. 로그인 테스트를 위해 node1 Mysql을 시작하세요

[root@host1 mysql]# mysql
로그인 후 복사
<br/>8. 노드 Node1

에서 DRBD 파일 시스템을 제거합니다.

[root@node1 ~]# umount /var/lib/mysql_drbd
[root@node1 ~]# drbdadm secondary dbcluster
로그인 후 복사
<br/>9. 노드 Node2

[root@node2 ~]# drbdadm primary dbcluster
[root@node2 ~]# mount /dev/drbd0 /mysql/
로그인 후 복사
<br/>10. 노드 Node2에 MySQL을 구성하고 테스트합니다

[root@node1 ~]# scp node2:/etc/my.cnf /etc/my.cnf
[root@node2 ~]# chown mysql /etc/my.cnf
[root@node2 ~]# chmod 644 /etc/my.cnf
로그인 후 복사
<br/>11. node2

[root@node2 ~]# mysql
로그인 후 복사
<br/>12. Node2에서 DRBD 파일 시스템을 제거하고

[root@node2~]# umount /var/lib/mysql_drbd
[root@node2~]# drbdadm secondary dbcluster
[root@node2~]# drbd-overview
  0:dbcluster/0  Connected Secondary/Secondary UpToDate/UpToDate C r—–
[root@node2~]#
로그인 후 복사
<br/>를 관리하기 위해 클러스터 관리 소프트웨어 Pacemaker로 전달합니다. 5: Corosync 및 구성 Pacemaker(node1과 node2 모두 설치해야 함)

Pacemaker 설치는 다음 사항에 의존해야 합니다.

[root@node1~]#yum -y install automake autoconf libtool-ltdl-devel pkgconfig python glib2-devel libxml2-devel 
libxslt-devel python-devel gcc-c++ bzip2-devel gnutls-devel pam-devel libqb-devel
로그인 후 복사
<br/>클러스터 스택 종속성 설치:

[root@node1~]yum -y install clusterlib-devel corosynclib-devel
로그인 후 복사
<br/>설치 Pacemaker 선택적 종속성:

[root@node1~]yum -y install ncurses-devel openssl-devel cluster-glue-libs-devel docbook-style-xsl
로그인 후 복사
<br/>Pacemaker 설치:

[root@node1~]yum -y install pacemaker
로그인 후 복사

crmsh安装:<br/>

[root@node1~]wget http://www.php.cn/:/ha-clustering:/Stable/CentOS_CentOS-6/network:ha-clustering:Stable.repo
[root@node1~]yum -y install crmsh
로그인 후 복사

1,配置corosync<br/>Corosync Key<br/>– 生成节点间安全通信的key:<br/>

[root@node1~]# corosync-keygen
로그인 후 복사
– 将authkey拷贝到node2节点(保持authkey的权限为400):
[root@node~]# scp /etc/corosync/authkey node2:/etc/corosync/
2,[root@node1~]# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
로그인 후 복사

编辑/etc/corosync/corosync.conf:<br/>

# Please read the corosync.conf.5 manual page
compatibility: whitetank
aisexec {
        user: root
        group: root
}
totem {
        version: 2
secauth: off
threads: 0
interface {
ringnumber: 0
bindnetaddr: 192.168.1.0
mcastaddr: 226.94.1.1
mcastport: 4000
ttl: 1
}
}
logging {
fileline: off
to_stderr: no
to_logfile: yes
to_syslog: yes
logfile: /var/log/cluster/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}
로그인 후 복사

– 创建并编辑/etc/corosync/service.d/pcmk,添加”pacemaker”服务<br/>

[root@node1~]# cat /etc/corosync/service.d/pcmk
service {
	# Load the Pacemaker Cluster Resource Manager
	name: pacemaker
	ver: 1
}
로그인 후 복사

将上面两个配置文件拷贝到另一节点<br/>

[root@node1]# scp /etc/corosync/corosync.conf node2:/etc/corosync/corosync.conf
[root@node1]# scp /etc/corosync/service.d/pcmk node2:/etc/corosync/service.d/pcmk
로그인 후 복사

3,启动corosync和Pacemaker<br/> 分别在两个节点上启动corosync并检查.<br/>

[root@node1]# /etc/init.d/corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ]
[root@node1~]# corosync-cfgtool -s
Printing ring status.
Local node ID -1123964736
RING ID 0
id = 192.168.1.189
status = ring 0 active with no faults
[root@node2]# /etc/init.d/corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ]
로그인 후 복사

– 在两节点上分别启动Pacemaker:<br/>

[root@node1~]# /etc/init.d/pacemaker start
Starting Pacemaker Cluster Manager:                        [  OK  ]
[root@node2~]# /etc/init.d/pacemaker start
Starting Pacemaker Cluster Manager:
로그인 후 복사

六、资源配置

<br/>配置资源及约束 <br/>配置默认属性<br/>查看已存在的配置:

[root@node1 ~]# crm configure property stonith-enabled=false
[root@node1 ~]# crm_verify -L
로그인 후 복사
로그인 후 복사

禁止STONITH错误:<br/>

[root@node1 ~]# crm configure property stonith-enabled=false
[root@node1 ~]# crm_verify -L
로그인 후 복사
로그인 후 복사

让集群忽略Quorum:<br/>

[root@node1~]# crm configure property no-quorum-policy=ignore
로그인 후 복사

防止资源在恢复之后移动:<br/>

[root@node1~]# crm configure rsc_defaults resource-stickiness=100
로그인 후 복사

设置操作的默认超时:<br/>

[root@node1~]# crm configure property default-action-timeout="180s"
로그인 후 복사

设置默认的启动失败是否为致命的:

[root@node1~]# crm configure property start-failure-is-fatal="false"
로그인 후 복사

配置DRBD资源<br/>– 配置之前先停止DRBD:<br/>

[root@node1~]# /etc/init.d/drbd stop
[root@node2~]# /etc/init.d/drbd stop
로그인 후 복사

– 配置DRBD资源:<br/>

[root@node1~]# crm configure
crm(live)configure# primitive p_drbd_mysql ocf:linbit:drbd params drbd_resource="dbcluster" op monitor interval="15s"
 op start timeout="240s" op stop timeout="100s"
로그인 후 복사

– 配置DRBD资源主从关系(定义只有一个Master节点):<br/>

crm(live)configure# ms ms_drbd_mysql p_drbd_mysql meta master-max="1" master-node-max="1" 
clone-max="2" clone-node-max="1" notify="true"
로그인 후 복사

– 配置文件系统资源,定义挂载点(mount point):<br/>

crm(live)configure# primitive p_fs_mysql ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/var/lib/mysql_drbd/" fstype="ext4"
로그인 후 복사

配置VIP资源<br/>

crm(live)configure# primitive p_ip_mysql ocf:heartbeat:IPaddr2 params ip="192.168.1.39" cidr_netmask="24" op 
monitor interval="30s"
로그인 후 복사

配置MySQL资源<br/>

crm(live)configure# primitive p_mysql lsb:mysql op monitor interval="20s" 
timeout="30s" op start interval="0" timeout="180s" op stop interval="0" timeout="240s"
로그인 후 복사

七、组资源和约束

通过”组”确保DRBD,MySQL和VIP是在同一个节点(Master)并且确定资源的启动/停止顺序.<br/>

启动: p_fs_mysql–>p_ip_mysql->p_mysql
停止: p_mysql–>p_ip_mysql–>p_fs_mysql
로그인 후 복사
crm(live)configure# group g_mysql p_fs_mysql p_ip_mysql p_mysql
로그인 후 복사

组group_mysql永远只在Master节点:<br/>

crm(live)configure# colocation c_mysql_on_drbd inf: g_mysql ms_drbd_mysql:Master
로그인 후 복사

MySQL的启动永远是在DRBD Master之后:<br/>

crm(live)configure# order o_drbd_before_mysql inf: ms_drbd_mysql:promote g_mysql:start
로그인 후 복사

配置检查和提交<br/>

crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# quit
로그인 후 복사

查看集群状态和failover测试<br/>状态查看:<br/>

[root@node1 mysql]# crm_mon -1r
로그인 후 복사

Failover测试:<br/>将Node1设置为Standby状态<br/>

[root@node1 ~]# crm node standby
로그인 후 복사

过几分钟查看集群状态(若切换成功,则看到如下状态):<br/>

[root@node1 ~]# crm status
로그인 후 복사

将Node1恢复online状态:<br/>

[root@node1 mysql]# crm node online
[root@node1 mysql]# crm status
로그인 후 복사

위 내용은 MySQL - MySQL 고가용성 구현에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿