MHA

  1. 相关概念(知识回顾)
    集群分类:
    LB:LVS ,Nginx,HAproxy
    HA:Keepalived (主 备 vip)
    HPC:专业领域
    2.MHA介绍
    2.1 MHA简介
    MHA全称Master High Availability
    由日本DeNA公司youshimaton开发
    是一套优秀的实现MySQL高可用的解决方案
    数据库的自动故障切换操作能做到在0~30秒之内
    MHA能确保在故障切换过程中最大程度保证数据的一致性,以达到真正意义上的高可用。

2.2 MHA组成
MHA Manager (管理节点)
- 管理所有数据库服务器
- 可以单独部署在一台独立的机器上
- 也可以吧部署在某台数据库服务器上
MHA Node(数据节点)
- 存储数据的mysql服务器
- 运行在每台mysql服务器上

2.3 MHA工作过程
由Manager定时探测集群中的master节点,
当master出现故障时,自动将拥有最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。
整个故障转移过程对应用程序完全透明。

在这里插入图片描述3.环境准备
3.1 安装依赖包(192.168.4.51/52/53/57)

[student@room9pc01 ~]$ scp -r /linux-soft/03/mysql/mha-soft-student/root@192.168.4.51/52/53/57:/root
[root@mysql57 ~]# cd mha-soft-student/
[root@mysql57 mha-soft-student]# yum -y install perl-*

3.2 配置ssh密钥对认证登陆
- 配置所有数据库服务器之间彼此ssh免密登录
- 配置管理主机ssh免密登录所有数据库服务器

[root@mysql51 ~]# ssh-keygen
[root@mysql51 ~]# ssh-copy-id root@192.168.4.52
[root@mysql51 ~]# ssh-copy-id root@192.168.4.53
[root@mysql51 ~]# ssh root@192.168.4.52
[root@mysql51 ~]# ssh root@192.168.4.53

[root@mysql52 ~]# ssh-keygen
[root@mysql52 ~]# ssh-copy-id root@192.168.4.51
[root@mysql52 ~]# ssh-copy-id root@192.168.4.53
[root@mysql52 ~]# ssh root@192.168.4.51
[root@mysql52 ~]# ssh root@192.168.4.53

[root@mysql53 ~]# ssh-keygen
[root@mysql53 ~]# ssh-copy-id root@192.168.4.51
[root@mysql53 ~]# ssh-copy-id root@192.168.4.52
[root@mysql53 ~]# ssh root@192.168.4.51
[root@mysql53 ~]# ssh root@192.168.4.52

[root@mysql57 ~]# ssh-keygen
[root@mysql57 ~]# ssh-copy-id root@192.168.4.51
[root@mysql57 ~]# ssh-copy-id root@192.168.4.52
[root@mysql57 ~]# ssh-copy-id root@192.168.4.53
[root@mysql57 ~]# ssh root@192.168.4.51
[root@mysql57 ~]# ssh root@192.168.4.52
[root@mysql57 ~]# ssh root@192.168.4.53

3.3 配置一主多从同步结构
3.3.1 配置主库 51

[root@mysql51 ~]# vim /etc/my.cnf
[mysqld]
  server_id=51
  log_bin=master51
  ...
:wq
[root@mysql51 ~]# systemctl restart mysqld
[root@mysql51 ~]# mysql -uroot -p123qqq...A
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";
mysql> show master status;

3.3.2 配置从库 52

[root@mysql52 ~]# vim /etc/my.cnf
[mysqld]
  server_id=52
  ...
:wq
[root@mysql52 ~]# systemctl restart mysqld
[root@mysql52 ~]# mysql -uroot -p123qqq...A
mysql> change master to master_host="192.168.4.51",master_user="repluser",
master_password="123qqq...A",master_log_file="master51.000003",master_log_pos=154;
mysql> start slave;
mysql> show slave status\G;

3.3.3 配置从库 53

[root@mysql53 ~]# vim /etc/my.cnf
[mysqld]
  server_id=53
  ... 
:wq
[root@mysql53 ~]# systemctl restart mysqld
[root@mysql53 ~]# mysql -uroot -p123qqq...A
mysql> change master to master_host="192.168.4.51",master_user="repluser",
master_password="123qqq...A",master_log_file="master51.000003",master_log_pos=154;
mysql> start slave;
mysql> show slave status\G;

4.创建MHA集
4.1 配置管理主机

[root@mysql57 ~]# cd mha-soft-student/
[root@mysql57 mha-soft-student]# yum -y install 
		mha4mysql-node-0.56-0.el6.noarch.rpm
[root@mysql57 mha-soft-student]# tar -xf mha4mysql-manager-0.56.tar.gz
[root@mysql57 mha-soft-student]# cd mha4mysql-manager-0.56

[root@mysql57 mha4mysql-manager-0.56]# perl Makefile.PL
[root@mysql57 mha4mysql-manager-0.56]# yum list | grep -i ExtUtils
[root@mysql57 mha4mysql-manager-0.56]# yum -y install perl-ExtUtils*
[root@mysql57 mha4mysql-manager-0.56]# perl Makefile.P
[root@mysql57 mha4mysql-manager-0.56]# yum list | grep -i CPAN
[root@mysql57 mha4mysql-manager-0.56]# yum -y install perl-CPAN*

[root@mysql57 mha4mysql-manager-0.56]# perl Makefile.PL
[root@mysql57 mha4mysql-manager-0.56]# make
[root@mysql57 mha4mysql-manager-0.56]# make install

4.1.2 编写主配置文件

[root@mysql57 mha4mysql-manager-0.56]# mkdir /etc/mha
[root@mysql57 mha4mysql-manager-0.56]# cp samples/conf/app1.cnf /etc/mha/
[root@mysql57 ~]# vim /etc/mha/app1.cnf
	[server default]					#管理服务默认配置
	  manager_workdir=/etc/mha			#工作目录
	  manager_log=/etc/mha/manager.log	#日志文件
	  master_ip_failover_script=/etc/mha/master_ip_failover	
								#故障切换脚本

	  repl_user=repluser				#主服务器数据同步授权用户	
	  repl_password=123qqq...A			#密码

	  ssh_user=root					#访问ssh服务用户
	  ssh_port=22					#ssh服务端口

	  user=root						#监控用户
	  password=123qqq...A			#密码

	  [server1]						#指定第一台数据库服务器
	  hostname=192.168.4.51			#服务器Ip地址
	  port=3306						#服务器端口
	  candidate_master=1			#竞选主库

	  [server2]						#指定第二台数据库服务器
	  hostname=192.168.4.52
	  port=3306
	  candidate_master=1

	  [server3]						#指定第三台数据库服务器
	  hostname=192.168.4.53
	  port=3306
	  candidate_master=1

4.1.3 创建故障切换脚本

[root@mysql57 ~]# cd mha-soft-student/
[root@mysql57 mha-soft-student]# cp master_ip_failover /etc/mha/
[root@mysql57 mha-soft-student]# chmod +x /etc/mha/master_ip_failover
[root@mysql57 mha-soft-student]# vim /etc/mha/master_ip_failover
    my $vip = '192.168.4.100/24';  			#定义vip地址 Virtual IP 
    my $key = "1";					        #定义地址编号
    my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";  #绑定vip地址
    my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";	  #释放vip地址
    ...
 :wq

4.1.4 在主服务器51 配置vip

[root@mysql51 ~]# ifconfig eth0:1 192.168.4.100   #在主库部署vip地址
[root@mysql51 ~]# ifconfig eth0:1 			#查看vip地址
[root@mysql51 ~]# ifconfig eth0:1 down		#删除vip地址

4.2 配置数据节点 192.168.4.51/52/53
4.2.1 安装mha_node软件(在所有数据库服务器上安装mha_node)

[root@mysql52 ~]# cd mha-soft-student/
[root@mysql52 mha-soft-student]# yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm

4.2.2 用户授权

mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";
											 #数据同步用户
mysql> grant all on *.* to root@"%" identified by "123qqq...A";   #监控用户

4.2.3 启用半同步复制模式

[root@mysql51 ~]# vim /etc/my.cnf
  [mysqld]
   	plugin-load="rpl_semi_sync_master=semisync_master.so;     
	rpl_semi_sync_slave=semisync_slave.so"		#加载模块
  	rpl_semi_sync_master_enabled=1					#启用master模块
  	rpl_semi_sync_slave_enabled=1					#启用slave模块
  	relay_log_purge=0						    	#禁止自动删除中继日志文件
  	log_bin=master51
 	server_id=51
[root@mysql51 ~]# systemctl restart mysqld

[root@mysql52 ~]# vim /etc/my.cnf
  [mysqld]
	plugin-load="rpl_semi_sync_master=semisync_master.so;
	rpl_semi_sync_slave=semisync_slave.so"
	rpl_semi_sync_master_enabled=1
	rpl_semi_sync_slave_enabled=1
	relay_log_purge=0
	server_id=52
	log_bin=master52
[root@mysql52 ~]# systemctl restart mysqld

[root@mysql53 ~]# vim /etc/my.cnf
  [mysqld]
	server_id=53
	plugin-load="rpl_semi_sync_master=semisync_master.so;
	rpl_semi_sync_slave=semisync_slave.so"
	rpl_semi_sync_master_enabled=1
	rpl_semi_sync_slave_enabled=1
	relay_log_purge=0
	log_bin=master53
[root@mysql53 ~]# systemctl restart mysqld

5.测试配置 192.168.4.57
5.1 测试ssh配置

 [root@mysql57 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf

5.2 测试主从同步配置

 [root@mysql57 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
	排错

5.3 启动服务

[root@mysql57 ~]# masterha_manager --conf=/etc/mha/app1.cnf \
			--remove_dead_master_conf \		#删除宕机主库配置
			--ignore_last_failover			#忽略xxx.health文件
			
[root@mysql57 ~]# masterha_check_status --conf=/etc/mha/app1.cnf    #查看状态
  app1 (pid:1796) is running(0:PING_OK), master:192.168.4.51
[root@mysql57 ~]# masterha_stop  --conf=/etc/mha/app1.cnf 	 	#停止服务

6.测试集群功能
6.1 客户端50 连接vip地址访问数据库服务,存取数据

]# mysql -h192.168.4.100 -uyaya55 -p123qqq...A

6.2 测试集群高可用功能
6.2.1 模拟主服务器故障
- 停止主服务器mysql服务

[root@mysql51 ~]# systemctl stop mysqld
[root@mysql57 ~]#masterha_manager --conf=/etc/mha/app1.cnf  
		--remove_dead_master_conf  --ignore_last_failover
[root@mysql57 ~]# masterha_check_status  --conf=/etc/mha/app1.cnf

- 在从服务器查看vip地址
   ]# ifconfig eth0:1
- 客户端连接vip地址,访问集群
   [root@mysql50 ~]# mysql -h192.168.4.100 -uyaya55 -p123qqq...A

6.3 修复故障的数据库服务器

[root@mysql51 ~]# systemctl  start  mysqld
[root@mysql52 ~]# mysqldump -uroot -p123qqq...A  --master-data  db9 > db9.sql 										# 在主服务器mysql52 做完全备份
   mysqldump: [Warning] Using a password on the command line interface can be insecure.

[root@mysql52 ~]# scp db9.sql  root@192.168.4.51:/root/  # 拷贝备份文件给mysql51主机
	
[root@mysql51 ~]# mysql -uroot -p123qqq...A db9 < /root/db9.sql		# mysql51主机使用备份文件恢复数据
	mysql: [Warning] Using a password on the command line interface can be insecure.

[root@mysql51 ~]# grep master52 /root/db9.sql  //查看日志名及偏移量

[root@mysql51 ~]# mysql -uroot -p123qqq...A
mysql>change master to master_host="192.168.4.52",master_user="repluser",
	master_password="123qqq...A",master_log_file="master52.000001",master_log_pos=895;
mysql> start slave;
mysql> show slave status\G;

[root@mysql57 ~]# vim /etc/mha/app1.cnf
	[server1 ]
	hostname=192.168.4.51
	port=3306
	candidate_master=1
:wq

[root@mysql57 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf      #测试SSH
[root@mysql57 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf     #测试主从同步
[root@mysql57 ~]# masterha_stop  --conf=/etc/mha/app1.cnf          #停止管理服务
[root@mysql57 ~]# masterha_manager --conf=/etc/mha/app1.cnf 
	--remove_dead_master_conf --ignore_last_failover             #启动管理服务
[root@mysql57 ~]# masterha_check_status  --conf=/etc/mha/app1.cnf
app1 (pid:15806) is running(0:PING_OK), master:192.168.4.52        #服务运行,监视服务器52

MHA 必须做的配置
必须要配置mysql主从同步
必须要指定vip地址
恢复主机时必须手动同步数据和手动配置主从结构 ,重新修改配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值