时间:2021-07-01 10:21:17 帮助过:19人阅读
主节点配置
主机名,node2;地址,172.16.5.102
安装mariadb数据库
yum install mariadb-server
修改配置文件,加入以下内容
vim /etc/my.cnf
innodb_file_per_table=1 //每张表都独立一个idb文件
skip_name_resolve=1 //跳过反向解析
server_id=1 服务器id
relay-log=relay-log //中继日志
log-bin=master-log //二进制日志
保存退出
把配置文件拷贝到另一台从节点,把server_id改成2
scp /etc/my.cnf root@node3:/etc/my.cnf
从节点配置
主机名,node3;地址,172.16.5.103
其它两台从节点配置文件相同,只要server的ID不一样就行
安装mariadb数据库
yum install mariadb-server
修改配置文件,加入以下内容
vim /etc/my.cnf
innodb_file_per_table=1
skip_name_resolve=1
server_id=2
relay-log=relay-log
log-bin=master-log
relay-only=1
relay-log-purge=0
保存退出
把配置文件拷贝到另一台从节点,把server_id改成3
scp /etc/my.cnf root@node5:/etc/my.cnf
各节点授权和认证操作
主节点1操作;
[root@node2 ~]# mysql //登录到mysql,执行下面步骤
msyql>grant replication slave, replication client on * . * to ‘repuser‘@‘172.16.5.%‘ identified by ‘repuser‘
授权主从节点允许登录的IP地址和用户
mysql>show master status;
查看节点状态,把master-log日志从哪个位置产生的,记录下来
mysql>show binlog events in ‘master-log.000003‘;
查看下二进制日志事件有没有成功记录,在以上做的授权被事件日志准确记录后,我们就不需要一个一个去登录mariadb从节点做认证授权,等我们启动从节点后会自动同步过去。
从节点2操作;
[root@node2 ~]# mysql //登录到mysql,执行下面步骤
mysql>change master to master_host=‘172.16.5.102‘,master_user=‘repuser‘,master_password=‘repuser‘,master_log_file=‘master-log.000003‘,master_log_pos=594;
如果从节点在运行中执行 start top;
msyql>start slave;
mysql>show slave status\G
mysql>select host user from mysql.user;
节点2上面的操作一样在节点3上执行一遍,这样主从复制就成功搭建起来了。
在主节点上执行创建数据库,修改数据库,看数据会不会自动同步到两个从节点上。
在各节点上安装MHA
除 了 源 码 包 , MHA 官 方 也 提 供 了 rpm 格 式 的 程 序 包 , 其 下 载 地 址 为 https://code.google.com/p/mysql-master-ha/wiki/Downloads?tm=2。
CentOS 7 适用于el6 程序包。另外MHA Manage 和 MHA Node 程序包的版本并不强制要求一致。
安装:
管理节点:node5,地址:172.16.5.105
在管理节点安装MHA管理组件,先安装node再安装manager软件本身有依赖关系
yum install ./mha4mysql-node-0.56-0.el6.noarch.rpm
yum install ./mha4mysql-manager-0.56-0.el6.noarch.rpm
把mha4mysql-node-0.56-0.el6.noarch.rpm程序包拷贝到其它三个节点上
for i in 102 103 104; do scp mha4mysql-node-0.56-0.el6.noarch.rpm 172.16.5.$i:/root/ ;done
三个节点都必须安装
node2,地址:172.16.5.102
node3,地址:172.16.5.103
node4,地址:172.16.5.104
yuminstall ./mha4mysql-node-0.56-0.el6.noarch.rpm
初始化MHA
Manger 节点需要为每个监控的 master/slave 集群提供一个专用的配置文件, 而所有的 master/slave 集群也可共享全局配置。全局配置文件默认为/etc/masterha_default.cnf,其为可选配置。如仅监控一组 master/slave 集群,可直接通过 application 的配置来提供各服务器的默认配置信息。而每个 application 的配置文件路径为自定义。
MariaDB [(none)]> grant all on *.* to ‘mhaadmin‘@‘172.16.5.%‘ identified by ‘mhaadmin‘;
MariaDB [(none)]> flush privileges;
为MHA专门创建一个管理用户,方便以后使用,在mysql的主节点上,三个节点自动同步
mkdir /etc/mha_master
vim /etc/mha_master/app1.cnf
配置文件内容如下;
[server default] //适用于server1,2,3个server的配置
user=mhaadmin //mha管理用户
password=mhaadmin //mha管理密码
manager_workdir=/mydata/mha_master/app1 //mha_master自己的工作路径
manager_log=/mydata/mha_master/manager.log // mha_master自己的日志文件
remote_workdir=/mydata/mha_master/app1 //每个远程主机的工作目录在何处
ssh_user=root // 基于ssh的密钥认证
repl_user=repuser //数据库用户名
repl_password=repuser //数据库密码
ping_interval=1 // ping间隔时长
[server1] //节点1
hostname=172.16.5.102 //节点1主机地址
ssh_port=22 //节点1的ssh端口
candidate_master=1 // 将来可不可以成为master候选节点/主节点
[server2]
hostname=172.16.5.103
ssh_port=22
candidate_master=1
[server2]
hostname=172.16.5.104
ssh_port=22
candidate_master=1
检测各节点间 ssh 互信通信配置是否 OK
[root@node5 .ssh]# masterha_check_ssh –conf=/etc/mha_master/app1.cnf
输出信息最后一行类似如下信息,表示其通过检测。 [info]
All SSH connection tests passed successfully.
检查管理的 MySQL 复制集群的连接配置参数是否 OK
目的是我们的数据库定义的用户repuser和密码能否执行复制权限
[root@node5 ~]# masterha_check_repl –conf=/etc/masterha/app1.cnf
输出信息如下所示,最后一行的“Health is OK”信息表示通过检测。
Mon Nov 9 17:22:48 2015 – [info] Slaves settings check done.
……
MySQL Replication Health is OK.
注意:
在检查完成后末尾会有两条警号信息
[warning] master_ip_failover_script is not defined.
这个是用来定义master_ip地址的故障转移,谁成为主节点后自动把地址转移过去,让它成为主节点,谁成为主节点,谁配置vip(用来配置vip的)需要自己写脚本
[warning] shutdown_script is not defined.
这个showdown脚本在安装时已经有了
rpm -qa mha4mysql-manager ,这个包里有。不用写
以上两个提供不提供无所谓,只是测试,我们用其它方式启动
启动 MHA
启动方式用;nohup 后台运行
如果不用nohup就意味着前台运行,如果终端关了。意味着服务就自动停了!!!
第一次启动可以用配置文件启动
masterha_manager –conf=/etc/mha_master/app1.cnf >/mydata/mha_master/app1/manager.log 2>&1
直接后台运行,不用输出重定向到某个目录了
masterha_manager –conf=/etc/mha_master/app1.cnf
前台运行,更直观
ok!!!
这个时候可以在数据库里做一些操作了,创建数据库,创建表,删除字段,删除表,测试目的
mysql>create database tbl05;
mysql>drop database tbl04;
mysql>use tbl05;
mysql>create tables
启动成功后,可通过如下命令来查看 master 节点的状态
masterha_check_status --conf=/etc/mha_master/app1.cnf
[root@node5 mydata]# masterha_check_status –conf=/etc/mha_master/app1.cnf
app1 (pid:3211) is running(0:PING_OK), master:172.16.5.102
[root@node5 mydata]#
正常运行中……
如果要停止 MHA,需要使用 masterha_stop 命令
masterha_stop --conf=/etc/mha_master/app1.cnf
[root@node5 mydata]# masterha_stop –conf=/etc/mha_master/app1.cnf
测试故障转移
(1) 在 master 节点关闭 mariadb 服务 killall mysqld mysqld_safe
systemctl stop mariadb.service
(2) 在 manager 节点查看日志
如果我们没有记录日志是没有的
注意,故障转移完成后,manager 将会自动停止,此时使用 masterha_check_status
命令检测将会遇到错误提示,如下所示。 [root@node5 ~]# masterha_check_status --conf=/etc/mha-master/app1.cnf
app1 is stopped(2:NOT_RUNNING)
(3) 提供新的从节点以修复复制集群
原有 master 节点故障后,需要重新准备好一个新的 MySQL 节点。基于来自于 master 节点的备份恢复数据后,将其配置为新的 master 的从节点即可。注意,新加入的节点如果为新 增节点,其 IP 地址要配置为原来 master 节点的 IP,否则,还需要修改 app1.cnf 中相应的 ip 地址。随后再次启动 manager,并再次检测其状态。
(4)新节点提供后再次执行检查操作 masterha_check_status --conf=/etc/mha_master/app1.cnf
masterha_check_repl --conf=/etc/mha_master/app1.cnf
检查无误,再次运行,这次要记录日志 masterha_manager --conf=/etc/mha_master/app1.cnf >/mydata/mha_master/app1/manager.log 2>&1
新节点上线,故障转换恢复注意事项
(1)、在生产环境中,当你的主节点挂了后,一定要在从节点上做一个备份,拿着备份文件把主节点手动提升为从节点,并指明从哪一个日志文件的位置开始复制
(2)、每一次自动完成转换后,每一次的(replication health )检测不ok始终都是启动不了
必须手动修复主节点,除非你改配置文件
(3)、手动修复主节点提升为从节点后,再次运行检测命令 [root@node5 ~]# masterha_check_repl --conf=/etc/mha_master/app1.cnf
app1 (pid:3211) is running(0:PING_OK), master:172.16.5.103
(4)、再次运行起来就恢复成功了 masterha_manager --conf=/etc/mha_master/app1.cnf
手动完成在线主从节点切换
注意:所有都正常,只是想改一下主节点是谁而已 masterha_master_switch --master state=alive --conf=/etc/mha_master/app1.cnf
会提示你在数据库主节点上执行某条语句 flush no_write_to_binlog tables;
//没有写操作的节点,执行flush
确认,输入yes
手动检测在各个节点上,把停止的节点手动修复,启用为slave模式
更进一步的提升工作效率
前面三个步骤已经配置了一个基本的MHA 环境。不过为了更多实际应用需求,还需进一步完成如下操作。
(1)、提供额外检测机制,指明对 master 的监控做出误判;
(2)、在 master 节点上提供虚拟 ip 地址向外提供服务,指明 master 节点转换时,客户端的请求无法正确送达;
(3)、进行故障转移时对原有 master 节点执行 STONITH 操作以避免脑裂; 可通过指定shutdown_script 实现;
(4)、必要时可进行在线 master 节点转换;
done!!!
本文出自 “51eA” 博客,请务必保留此出处http://51eat.blog.51cto.com/11892702/1892577
Mysql之运用MHA的功能实现服务高可用
标签:mysql master mha architecture slave logs