MHA,MySQL 的高可用架构

                                                                    MHA,MySQL 的高可用架构

MHA,MySQL 的高可用架构,在基于主从架构的模式下,当主服务器挂掉之后,由 MHA 中 manager 来决定从哪台 slave 从服务器当中选择一台作 为master 主服务器,通常是比较从服务器中的数据,哪个最全,最新,更新时间的长短来判断,当决定使用哪台从服务器作为新的主服务器后, MHA 会从其 他节点处获取额外信息,避免数据不一致的情况发生,使数据一致。

MHA 有两种角色:

1.MHA manager

用于统筹管理一个主从架构集群的 master 转换,数据复制权限,以及数据库操作权限等设置,通常作为单台服务器进行配置。每一个 master/slave 集群都作为一个 application

2.MHA node

MySQL 集群当中的节点,所有在该集群中的服务器都是一个节点,manager,master,slave1,slave2 四台服务器,则有四个 node 节点。它通过监控具备解 析和清理 logs 功能的脚本来加快故障转移。

MHA 架构集群:

manager 172.25.50.1

master server_id=1 172.25.50.3

slave1 server_id=2 172.25.50.4

slave2 server_id=3 172.25.50.2

1)首先配置好一主两从的数据库架构,这一块就不详细描述了,需要注意的是,因为 MHA 高可用架构的关系,任何一台 MySQL 服务器都有可能成为主服务器所以不能像普通主从架构一般,给主服务器开启 binlog,给从服务器开启 relay_log,需要在主从服务器上都开启 binlog 与 relay_log。如该/etc/my.cnf 配置,在初始化mysql前将启动脚本的密码查件注销,以免影响后面的实验

由于做主从复制时已经配好了 master 和 slave1,所以只需要在配置一个slave2;再配置后,发现 IQ 线程为NO

查看日志发现是和主库不同步的原因


在停止 slave 输入命令使其复制时跳过 773 后开启 slave 后正常

slamysql> stop slave;

Query OK, 0 rows affected (0.28 sec)mysql> CHANGE MASTER TO

MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=773;

Query OK, 0 rows affected (0.52 sec)

mysql> start slave;

Query OK, 0 rows affected (0.11 sec)

2、MHA 高可用的实现首先需要构建主从集群,其次,需要将各个节点之间的ssh 通信无障碍。

设置密钥通信

如 master172.25.50.1 需要向其余三个节点传送密钥,使之能够无密码访问

#ssh-keygen -t rsa -P ""

#ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.50.2#ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.50.3

#ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.50.4
其余三个节点如是。

3安装 MHA

MHA manager

#yum install -y mha4mysql-manager-0.56-0.el6.noarch.rpm  #该 manager 安装需要依赖于许多 epel 源中的插件,联网安装
MHA node
#yum install -y mha4mysql-node-0.56-0.el6.noarch.rpm     #四个节点都需要安装

4、配置 manager,使 manager 能够管理主从集群,手动设置一个配置文件在server default 针对于所有 MySQL 服务器的设置。user,password 用于对数据库进行管理的账号密码,这个是需要在 MySQL集群中,即 master,slave1,slave2 中授权。

ssh_user 则是通信时使用的用户,为 rootrepl_user,repl_password 用于主从数据库之间复制转移的账户密码,当主服务器 down ,从服务器起来,需要在从服务器中进行的 change master授权。

manager_workdir,manager_log 则是用于设置 manager 的工作目录以及日志存放路径。

master_binlog_dir 用于告诉 managermaster 的 binlog 日志放置路径。

ping_interval 用于设置访问的间隔,使用 ping 方式访问。

server1,server2,server3 则是三台 MySQL 服务器,指定其 hostname,可用 IP 地址代替,若要使用主机名,则需要将主机名写入/etc/hosts 中。candidate_master=1,用于设置该服务器是否有资格成为主服务器,若为 0则无资格。

MHA manager 的安装,会提供诸多工具程序,其常见的如下所示。

Manager 节点:

- masterha_check_ssh:MHA 依赖的 SSH 环境检测工具;

- masterha_check_repl:MySQL 复制环境检测工具;

- masterha_manager:MHA 服务主程序;- masterha_check_status:MHA 运行状态探测工具;

- masterha_master_monitor:MySQL master 节点可用性监测工具;

- masterha_master_switch:master 节点切换工具;

- masterha_conf_host:添加或删除配置的节点;

- masterha_stop:关闭 MHA 服务的工具;

Node 节点:

- save_binary_logs:保存和复制 master 的二进制日志;

- apply_diff_relay_logs:识别差异的中继日志事件并应用于其它 slave;

- filter_mysqlbinlog:去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具);

- purge_relay_logs:清除中继日志(不会阻塞 SQL 线程);

mkdir masterha

cd masterha/

vim app1.cnf

[server default]

user=root

password=Hhb+1996

ssh_user=root

repl_password=Hhb+1996

repl_user=repl

master_binlog_dir=/var/lib/mysql

remote_workdir=/tmp

#secondary_check_script= masterha_secondary_check -s remote_host1 -s remote_host2

ping_interval=1

# master_ip_failover_script= /script/masterha/master_ip_failover

# shutdown_script= /script/masterha/power_manager

# report_script= /script/masterha/send_report

# master_ip_online_change_script= /script/masterha/master_ip_online_change

manager_workdir=/usr/local/masterha/

manager_log=/usr/local/masterha/manager.log
[server1]

hostname=172.25.50.1

[server2]

hostname=172.25.50.2

candidate_master=1

check_repl_delay=0

[server3]

hostname=172.25.50.3
                              



使用ma sterha_check_ssh --conf=/usr/local/masterha/app1.cnf测试通信环境是否正常;masterha_check_repl --conf=/usr/local/masterha/app1.cnf 测试复制环境是否正常

在使用masterha_check_repl --conf=/usr/local/masterha/app1.cnf测试复制环境时发现环境异常


分析报错后发现时没有在master端给prelroot授权的缘故

master 上授权:

mysql> grant replication slave on *.* to repl@'%' identified by 'Hhb+1996';

mysql> grant replication slave on *.* to root@'%' identified by 'Hhb+1996';

授权后测试:

Nohup masterha_manager --conf=/usr/local/masterha/app1.cnf &

Nohup masterha_manager --conf=/usr/local/masterha/app1.cnf  在管理主机启动管理程序

[root@server3 ~]# pkill -9 mysqld   #此时在将3中mysql强行关闭,发现server2由slave端变成muster端,

在管理端查看刚才的日管理日志


手动切换:当master端数据库关掉后可用下面手动方法切换

masterha_master_switch--master_state=dead--conf=/usr/local/masterha/app1.cnf--dead_master_host=172.25.50.2--dead_master_port=3306--new_master_host=172.25.50.3--new_master_port=3306--ignore_last_failover

手动热切换:可以在master正常工作时使其数据库关掉,让备用mastre机接替其工作

masterha_master_switch--conf=/usr/local/masterha/app1.cnf--master_state=alive--new_master_host=172.25.50.2--new_master_port=3306 --orig_master_is_new_slave--running_updates_limit=10000


测试二停掉备用主机的io,然后在master主机加入数据,造成备用mastermaster主机二进制数据不一致,然后关掉master主机的mysql,执行manager命令,使备用master成为master,看数据是否会一致

change master to master_host='172.25.50.3', master_user='repl', master_password='Hhb+1996', master_auto_position=1;   #使master指向server3(注意:每次执行需删除app1.failover.complete,否责出错)

stop slave io_thread;  停掉备用主机io线程

在主master主机插入数据

在另一台slave中查看数据是否同步过去

在备用主机上查看数据是否同步

使备用成为master后,查看数据是否根据差异日志恢复过来

使用脚本控制master状态,

Vim /usr/local/masterha/app1.cnf     #加入需要的脚本并指定位置

 master_ip_failover_script= /usr/local/masterha/master_ip_failover

# shutdown_script= /script/masterha/power_manager

report_script= /usr/local/masterha/send_report

master_ip_online_change_script= /usr/local/masterha/master_ip_online_change

manager_workdir=/usr/local/masterha

manager_log=/usr/local/masterha/manager.log

vim master_ip_failover  #master添加虚拟ip


vim master_ip_online_change #同样只需添加虚拟ip

vim send_report  #添加邮箱和密码

chmod +x send_report master_ip_failover master_ip_online_change   #给脚本添加执行权限

测试:

在测试时需要虚拟机进行联网

[root@foundation50 MHA]# iptables -t nat -A POSTROUTING -s 172.25.50.0/24 -j MASQUERADE   #在物理主机添加路由

vim /etc/sysconfig/network-scripts/ifcfg-eth0 #在需要联网的虚拟机上添加网关,为物理机ip

Vim /etc/resolv.conf  #添加本地解析,使其可拼通百度

/etc/init.d/network restart #重启网络使其生效

启动管理,将master机上的数据库关掉,此时的状态变化便会以邮件形式发到你的邮箱,从而达到监控报警的目的

masterha_master_switch--conf=/usr/local/masterha/app1.cnf--master_state=alive--new_master_host=172.25.50.3--new_master_port=3306--orig_master_is_new_slave --running_updates_limit=10000

通过脚本热切换,由于加了脚本,此时再执行,并不会造成mustermysql数据库关掉,而是使原来的master主机变为备用master,可以不断进行切换

此时,server3则成为master,ip漂移到server3

Server2 则由原来的master主机变为slave,由于此时变换并没有造成机器瘫痪,所以不会发邮箱提醒






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值