집 >데이터 베이스 >MySQL 튜토리얼 >MySQL - MySQL 고가용성 구현에 대한 자세한 소개
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
호스트 해상도 구성:
vim /etc/hosts 192.168.1.35 node1.hulala.com node1 192.168.1.36 node2.hulala.com node2
시스템 시간 동기화:
ntpdate cn.pool.ntp.org
방화벽 및 SELINUX 끄기
service iptables stop chkconfig iptables off cat /etc/sysconfig/selinux SELINUX=disabled
위 구성은 두 노드에 있습니다. 구성이 완료된 후 두 노드를 다시 시작해야 합니다.
[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
[root@node1~]#wget -c http://www.php.cn/ [root@node1~]#wget -c http://www.php.cn/ [root@node1~]#rpm -ivh *.rpm
sha1 값을 공유 비밀로 가져오기
[root@node1~]#sha1sum /etc/drbd.conf 8a6c5f3c21b84c66049456d34b4c4980468bcfb3 /etc/drbd.conf
리소스 생성 및 편집구성 파일 :/etc/drbd.d/dbcluster .res
[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; } }
위 구성에 사용된 매개변수에 대한 설명:
RESOURCE: 리소스 이름
PROTOCOL: 프로토콜 "C" 사용 즉, 원격 쓰기 확인을 받은 후 쓰기가 완료된 것으로 간주됩니다.
NET: 두 노드의 SHA1 키가 동일합니다
after-sb-0pri: "분할" Brain'이 발생하고 데이터 변경이 없으면 두 노드가 정상적으로 연결됩니다
after-sb-1pri: 데이터 변경이 있는 경우 보조 장치 데이터를 버리고 기본 장치에서 동기화
rr-contribute : 이전 설정을 적용할 수 없고 DRBD 시스템에 역할 충돌이 있는 경우 시스템은 자동으로 노드 연결을 끊습니다.
META-DISK: 메타데이터가 동일한 디스크(sdb1)
ON
[root@node1~]#scp /etc/drbd.d/dbcluster.res root@192.168.1.36:/etc/drbd.d/
리소스 및 파일 시스템 생성:
파티션 생성(포맷되지 않음)
node1 및 node2에 LVM 파티션 생성:
[#root@node1~]fdisk /dev/sdb
node1에서 및 node2에서 리소스(dbcluster)에 대한 메타 데이터 생성:
[root@node1~drbd]#drbdadm create-md dbcluster
리소스 활성화(둘 다) node1과 node2는 확인해야 함)
– 먼저 drbd module이 로드되었는지 확인하세요
로드되었는지 확인:
# lsmod | grep drbd
로드되지 않은 경우 다음을 수행해야 합니다. 로드:
# modprobe drbd # lsmod | grep drbd drbd 317261 0 libcrc32c 1246 1 drbd
– drbd 백그라운드 프로세스 시작:
[root@node1 drbd]# drbdadm up dbcluster [root@node2 drbd]# drbdadm up dbcluster
보기( node1 및 node2) DRBD 상태:
[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 서비스는 이미 두 대의 시스템에서 실행 중이지만 두 시스템 모두 기본 시스템("기본" 호스트)이 아니므로 리소스(블록 장치)에 액세스할 수 없습니다.
동기화 시작:
메인 노드(여기서는 node1)에서만 작동
[root@node1 drbd]# drbdadm — –overwrite-data-of-peer primary dbcluster
동기화 상태 보기:
<br/>
위 출력 결과에 대한 일부 설명:
cs (연결 상태): 네트워크 연결 상태
ro(역할): 노드의 역할(이 노드의 역할이 먼저 표시됩니다)
ds(디스크 상태): 하드 디스크의 상태
복제 프로토콜: A, B 또는 C(이 구성은 C)
drbd 상태가 "cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate"인 경우 동기화가 완료되었음을 의미합니다.
또한 다음과 같이 DRBD 상태를 확인하십시오.
[root@centos193 drbd]# drbd-overview 0:dbcluster/0 Connected Secondary/Primary UpToDate/UpToDate C r—–
파일 시스템 생성:
마스터 노드(Node1)에서 파일 시스템 생성:
[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)에서 동일한 작업을 수행할 필요가 없습니다.
또한 이 DRBD 시스템을 어떤 머신에도 마운트할 필요가 없습니다(물론). MySQL을 설치하려면 MySQL을 임시로 마운트해야 합니다. 클러스터 관리 소프트웨어가 이를 처리하기 때문입니다. 또한 복사된 파일 시스템이 활성 마스터 서버에만 마운트되어 있는지 확인하세요.
MySQL 설치는 블로그 포스팅 "MySQL - CentOS6.5 Compile and Install MySQL5.6.16"
yum install mysql* -y2.node1과 node2는 모두 mysql 서비스를 중지하도록 작동합니다
[root@node1~]# service mysql stop Shutting down MySQL. [ OK ]3.node1과 node2 모두 데이터베이스 디렉터리를 생성하고 디렉터리 권한 소유자를 mysql
[root@host1 /]# mkdir -p /mysql/data [root@host1 /]# chown -R mysql:mysql /mysql4로 변경하고, mysql을 닫고 DRBD 파일 시스템을 기본 노드(Node1)
[root@node1 ~]# mount /dev/drbd0 /mysql/5. node1과 node2 모두 my.cnf 파일을 작동하고 수정합니다. [mysqld]
datadir=/mysql/data
[root@host1 mysql]#cd /var/lib/mysql [root@host1 mysql]#cp -R * /mysql/data/
[root@host1 mysql]# chown -R mysql:mysql /mysql
[root@host1 mysql]# mysql
에서 DRBD 파일 시스템을 제거합니다.
[root@node1 ~]# umount /var/lib/mysql_drbd [root@node1 ~]# drbdadm secondary dbcluster
[root@node2 ~]# drbdadm primary dbcluster [root@node2 ~]# mount /dev/drbd0 /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
[root@node2 ~]# mysql
[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~]#
[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
[root@node1~]yum -y install clusterlib-devel corosynclib-devel
[root@node1~]yum -y install ncurses-devel openssl-devel cluster-glue-libs-devel docbook-style-xsl
[root@node1~]yum -y install pacemaker
crmsh安装:
[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
Corosync Key
– 生成节点间安全通信的key:
[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:
# 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”服务
[root@node1~]# cat /etc/corosync/service.d/pcmk service { # Load the Pacemaker Cluster Resource Manager name: pacemaker ver: 1 }
将上面两个配置文件拷贝到另一节点
[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
分别在两个节点上启动corosync并检查.
[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:
[root@node1~]# /etc/init.d/pacemaker start Starting Pacemaker Cluster Manager: [ OK ] [root@node2~]# /etc/init.d/pacemaker start Starting Pacemaker Cluster Manager:
配置资源及约束
配置默认属性
查看已存在的配置:
[root@node1 ~]# crm configure property stonith-enabled=false [root@node1 ~]# crm_verify -L
禁止STONITH错误:
[root@node1 ~]# crm configure property stonith-enabled=false [root@node1 ~]# crm_verify -L
让集群忽略Quorum:
[root@node1~]# crm configure property no-quorum-policy=ignore
防止资源在恢复之后移动:
[root@node1~]# crm configure rsc_defaults resource-stickiness=100
设置操作的默认超时:
[root@node1~]# crm configure property default-action-timeout="180s"
设置默认的启动失败是否为致命的:
[root@node1~]# crm configure property start-failure-is-fatal="false"
配置DRBD资源
– 配置之前先停止DRBD:
[root@node1~]# /etc/init.d/drbd stop [root@node2~]# /etc/init.d/drbd stop
– 配置DRBD资源:
[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节点):
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):
crm(live)configure# primitive p_fs_mysql ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/var/lib/mysql_drbd/" fstype="ext4"
配置VIP资源
crm(live)configure# primitive p_ip_mysql ocf:heartbeat:IPaddr2 params ip="192.168.1.39" cidr_netmask="24" op monitor interval="30s"
配置MySQL资源
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)并且确定资源的启动/停止顺序.
启动: 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节点:
crm(live)configure# colocation c_mysql_on_drbd inf: g_mysql ms_drbd_mysql:Master
MySQL的启动永远是在DRBD Master之后:
crm(live)configure# order o_drbd_before_mysql inf: ms_drbd_mysql:promote g_mysql:start
配置检查和提交
crm(live)configure# verify crm(live)configure# commit crm(live)configure# quit
查看集群状态和failover测试
状态查看:
[root@node1 mysql]# crm_mon -1r
Failover测试:
将Node1设置为Standby状态
[root@node1 ~]# crm node standby
过几分钟查看集群状态(若切换成功,则看到如下状态):
[root@node1 ~]# crm status
将Node1恢复online状态:
[root@node1 mysql]# crm node online [root@node1 mysql]# crm status
위 내용은 MySQL - MySQL 고가용성 구현에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!