집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 고가용성 MMM 구축 계획 및 아키텍처 원리에 대한 자세한 설명_MySQL
아래와 같이 먼저 아키텍처를 살펴보겠습니다.
배포
1. 호스트 수정
모든 서버에서 동일한 작업을 수행합니다.
vim /etc/hosts
192.168.137.10 master 192.168.137.20 backup 192.168.137.30 slave 192.168.137.40 monitor
2. mysql 사용자 추가
모니터링 측이 아닌 모든 데이터베이스 측에서만 실행하면 됩니다.
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.137.%' IDENTIFIED BY 'mmm_monitor'; GRANT SUPER,REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.137.%' IDENTIFIED BY 'mmm_agent'; flush privileges;
참고: 마스터-슬레이브 서비스를 구축할 때 repl 사용자가 이미 생성되었습니다.
3. 모니터링 소프트웨어 설치
참고: 모니터링 터미널은 모두 설치되어 있지만 모니터링 터미널은 mysql-mmm-monitor만 사용하면 되며, mysql-mmm-agent를 시작할 필요는 없습니다.
데이터베이스 쪽에서는 mysql-mmm-agent만 설치하면 됩니다
1. 모니터링 서버에서 실행
wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm –ivh epel-release-6-8.noarch.rpm yum –y install mysql-mmm*
2. 데이터베이스 서버에서 실행, 각 데이터베이스 서버에서 실행해야 함
wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm –ivh epel-release-6-8.noarch.rpm yum -y install mysql-mmm-agent
경로 설명:
4. 구성 파일
DB 서버 구성 파일: mmm_agent.conf,mmm_common.conf
모니터링 서버 설정 파일 : mmm_mon.conf,mmm_common.conf
(이 파일은 모든 서버에 동일합니다.)
DB 서버 구성
1. 마스터 서버 수정
vim /etc/mysql-mmm/mmm_common.conf
active_master_role writer ###积极的master角色的标示,所有的db服务器都需要开启read_only参数,对于writer服务器监控代理会自动将read_only属性关闭。 <host default> cluster_interface eth0 #####群集的网络接口 pid_path /var/run/mysql-mmm/mmm_agentd.pid ####pid路径 bin_path /usr/libexec/mysql-mmm/ #####可执行文件路径 replication_user repl #######复制用户 replication_password repl #######复制用户密码 agent_user mmm_agent #######代理用户,用于更改只读操作 agent_password mmm_agent #######代理用户密码 </host> <host master> ##########master1的host名 ip 192.168.137.10 #####master1的ip mode master ########角色属性,master代表是主 peer backup ########与master1对等的服务器的host名,也就是master2的服务器host名 </host> <host backup> ####和master的概念一样 ip 192.168.137.20 mode master peer master </host> <host slave> #####从库的host名,如果存在多个从库可以重复一样的配置 ip 192.168.137.30 ####从的ip mode slave #####slave的角色属性代表当前host是从 </host> <role writer> ####writer角色配置 hosts master,backup ####能进行写操作的服务器的host名,如果不想切换写操作这里可以只配置master,这样也可以避免因为网络延时而进行write的切换,但是一旦master出现故障那么当前的MMM就没有writer了只有对外的read操作。 ips 192.168.137.100 #####对外提供的写操作的虚拟IP mode exclusive #####exclusive代表只允许存在一个主,也就是只能提供一个写的IP </role> <role reader> #####read角色配置 hosts backup,slave ######对外提供读操作的服务器的host名,当然这里也可以把master加进来 ips 192.168.137.120,192.168.137.130,192.168.137.140 ###对外提供读操作的虚拟ip,这两个ip和host不是一一对应的,并且ips也hosts的数目也可以不相同,如果这样配置的话其中一个hosts会分配两个ip mode balanced ###balanced代表负载均衡 </role>
동시에 이 파일을 모니터링 서버를 포함한 다른 서버에 복사하면 구성이 그대로 유지됩니다
scp /etc/mysql-mmm/mmm_common.conf slave:/etc/mysql-mmm/ scp /etc/mysql-mmm/mmm_common.conf backup:/etc/mysql-mmm/ scp /etc/mysql-mmm/mmm_common.conf monitor:/etc/mysql-mmm/
2. 에이전트 파일 구성
vim /etc/mysql-mmm/mmm_agent.conf
참고: 이 구성은 db 서버만 구성하는 것이므로 모니터링 서버는 구성할 필요가 없습니다. 이후의 호스트 이름은 현재 서버의 호스트 명령으로 변경되며 master2 및 슬레이브도 로 변경됩니다. 해당 서버의 호스트 이름입니다.
3. 에이전트 프로세스 시작
chkconfig mysql-mmm-agent on
service mysql-mmm-agent start
각 DB 서버에서 시작해야 합니다
모니터링 서버 구성
vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf <monitor> ip 127.0.0.1 pid_path /var/run/mysql-mmm/mmm_mond.pid bin_path /usr/libexec/mysql-mmm status_path /var/lib/mysql-mmm/mmm_mond.status #####群集的状态文件,也就是执行mmm_control show操作的显示来源。 ping_ips 192.168.137.10,192.168.137.20,192.168.137.30 ######被监控的db服务器的ip地址 auto_set_online 0 ####设置自动online的时间,默认是超过60s就将它设置为online,默认是60s,这里将其设为0就是立即online # The kill_host_bin does not exist by default, though the monitor will # throw a warning about it missing. See the section 5.10 "Kill Host # Functionality" in the PDF documentation. # # kill_host_bin /usr/libexec/mysql-mmm/monitor/kill_host # </monitor> <host default> monitor_user mmm_monitor ####监控db服务器的用户 monitor_password mmm_monitor ####监控db服务器的密码 </host> debug 0 #######debug 0正常模式,1为debug模式
참고: 구성 파일의 주석은 이해를 돕기 위한 것입니다. 주석으로 인해 발생할 수 있는 잠재적인 영향을 방지하려면 배포 중에 주석을 제거하는 것이 가장 좋습니다.
모니터링 프로세스 시작
chkconfig mysql-mmm- monitor on service mysql-mmm-monitor start
참고: DB 측이든 모니터링 측이든 구성 파일이 수정되면 에이전트 프로세스와 모니터링 프로세스를 다시 시작해야 합니다.
운영분석
로그 파일
로그 파일은 오류 분석의 핵심인 경우가 많으므로 로그 파일을 잘 활용하여 문제를 분석해야 합니다.
DB측:/var/log/mysql-mmm/mmm_agentd.log
모니터링 단말기:/var/log/mysql-mmm/mmm_mond.log
명령 파일
mmm_agentd : DB 에이전트 프로세스의 시작 파일
mmm_mond: 모니터링 프로세스의 시작 파일
mmm_backup: 백업 파일
mmm_restore: 파일 복원
mmm_clone
mmm_control : 모니터링 동작 명령어 파일
DB 서버측에는 mmm_agentd 프로그램만 있고, 나머지는 모니터 서버측에 있습니다.
mmm_사용 제어
mmm_control 프로그램은 클러스터 상태 모니터링, 작성자 전환, 온라인 및 오프라인 작업 설정 등에 사용할 수 있습니다.
Valid commands are: help - show this message ###帮助信息 ping - ping monitor ###ping当前的群集是否正常 show - show status ####群集在线状态检查 checks [<host>|all [<check>|all]] - show checks status #####执行监控检查操作 set_online <host> - set host <host> online ####将host设置为online set_offline <host> - set host <host> offline ###将host设置为offline mode - print current mode. ####打印输出当前的mode set_active - switch into active mode. set_manual - switch into manual mode. set_passive - switch into passive mode. move_role [--force] <role> <host> - move exclusive role <role> to host <host> ####移除writer服务器为指定的host服务器 (Only use --force if you know what you are doing!) set_ip <ip> <host> - set role with ip <ip> to host <host>
1. 전체 DB 서버 클러스터 상태 확인
[root@monitor mysql-mmm]# mmm_control checks all master ping [last change: 2016/06/07 16:31:24] OK master mysql [last change: 2016/06/07 16:31:24] OK master rep_threads [last change: 2016/06/07 16:31:24] OK master rep_backlog [last change: 2016/06/07 16:31:24] OK: Backlog is null slave ping [last change: 2016/06/07 16:31:24] OK slave mysql [last change: 2016/06/07 16:31:24] OK slave rep_threads [last change: 2016/06/07 16:31:24] OK slave rep_backlog [last change: 2016/06/07 16:31:24] OK: Backlog is null backup ping [last change: 2016/06/07 16:31:24] OK backup mysql [last change: 2016/06/07 16:31:24] OK backup rep_threads [last change: 2016/06/07 16:31:24] OK backup rep_backlog [last change: 2016/06/07 16:31:24] OK: Backlog is null
확인 항목은 ping, mysql이 정상적으로 실행되는지, 복사 스레드가 정상인지 등입니다.
2. 클러스터 환경의 온라인 상태를 확인합니다
[root@monitor mysql-mmm]# mmm_control show backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120) master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100) slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)
3. 지정된 호스트에서 오프라인 작업을 수행합니다.
[root@monitor mysql-mmm]# mmm_control set_offline backup OK: State of 'backup' changed to ADMIN_OFFLINE. Now you can wait some time and check all roles! [root@monitor mysql-mmm]# mmm_control show backup(192.168.137.20) master/ADMIN_OFFLINE. Roles: master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100) slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.120), reader(192.168.137.130)
4. 지정된 호스트에서 온라인 작업을 수행합니다.
[root@monitor mysql-mmm]# mmm_control set_online backup OK: State of 'backup' changed to ONLINE. Now you can wait some time and check its new roles! [root@monitor mysql-mmm]# mmm_control show backup(192.168.137.20) master/REPLICATION_FAIL. Roles: master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100) slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.120), reader(192.168.137.130) [root@monitor mysql-mmm]# mmm_control show backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120) master(192.168.137.10) master/ONLINE. Roles: writer(192.168.137.100) slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)
5. 쓰기 전환 수행
1. 현재 슬레이브에 해당하는 마스터를 봅니다
[root@slave ~]# mysql -uroot -proot -e 'show slave status \G;' Warning: Using a password on the command line interface can be insecure. *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.137.10 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000073 Read_Master_Log_Pos: 1461 Relay_Log_File: mysql-relay-bin.000006 Relay_Log_Pos: 283 Relay_Master_Log_File: mysql-bin.000073 Slave_IO_Running: Yes Slave_SQL_Running: Yes
2.작성기 전환, mmm_common.conf 파일의 기록기 속성에 해당 호스트가 구성되어 있는지 확인하세요. 그렇지 않으면 전환할 수 없습니다.
[root@monitor mysql-mmm]# mmm_control move_role writer backup OK: Role 'writer' has been moved from 'master' to 'backup'. Now you can wait some time and check new roles info! [root@monitor mysql-mmm]# mmm_control show backup(192.168.137.20) master/ONLINE. Roles: reader(192.168.137.120), writer(192.168.137.100) master(192.168.137.10) master/ONLINE. Roles: slave(192.168.137.30) slave/ONLINE. Roles: reader(192.168.137.130)
3.save는 자동으로 라이브러리에서 새 마스터로 전환됩니다
[root@slave ~]# mysql -uroot -proot -e 'show slave status \G;' Warning: Using a password on the command line interface can be insecure. *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.137.20 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000039 Read_Master_Log_Pos: 120 Relay_Log_File: mysql-relay-bin.000002 Relay_Log_Pos: 283 Relay_Master_Log_File: mysql-bin.000039 Slave_IO_Running: Yes Slave_SQL_Running: Yes
기타 처리 문제
如果不想让writer从master切换到backup(包括主从的延时也会导致写VIP的切换),那么可以在配置/etc/mysql-mmm/mmm_common.conf
时,去掉3612df8997eca9306e1f789dddf71f78中的backup
<role writer> ####writer角色配置 hosts master ###这里只配置一个Hosts ips 192.168.137.100 #####对外提供的写操作的虚拟IP mode exclusive #####exclusive代表只允许存在一个主,也就是只能提供一个写的IP </role>
这样的话当master出现故障了writer写操作不会切换到backup服务器,并且slave也不会指向新的master,此时当前的MMM之前对外提供写服务。
总结
主从的延时会导致写VIP的切换。
1.对外提供读写的虚拟IP是由monitor程序控制。如果monitor没有启动那么db服务器不会被分配虚拟ip,但是如果已经分配好了虚拟ip当monitor程序关闭了原先分配的虚拟ip不会立即关闭外部程序还可以连接访问(只要不重启网络),这样的好处就是对于monitor的可靠性要求就会低一些,目前还不知道能维持多长的时间,但是如果这个时候其中的某一个db服务器故障了就无法处理切换,也就是原先的虚拟ip还是维持不变,挂掉的那台DB的虚拟ip会变的不可访问。
2.agent程序受monitor程序的控制处理write切换,从库切换等操作。如果monitor进程关闭了那么agent进程就起不到什么作用,它本身不能处理故障。
3.monitor程序负责监控db服务器的状态,包括Mysql数据库、服务器是否运行、复制线程是否正常、主从延时等;它还用于控制agent程序处理故障。
4.monitor会每隔几秒钟监控db服务器的状态,如果db服务器已经从故障变成了正常,那么monitor会自动在60s之后将其设置为online状态(默认是60s可以设为其它的值),有监控端的配置文件参数“auto_set_online”决定,群集服务器的状态有三种分别是:HARD_OFFLINE→AWAITING_RECOVERY→online
5.默认monitor会控制mmm_agent会将writer db服务器read_only修改为OFF,其它的db服务器read_only修改为ON,所以为了严谨可以在所有的服务器的my.cnf文件中加入read_only=1由monitor控制来控制writer和read,root用户和复制用户不受read_only参数的影响
以上就是本文的全部内容,希望本文对大家学习mysql有所帮助。