MHA搭建

MHA搭建,第1张

概述一、MHA搭建 三台服务器: 主:221 从:222 从:220,兼职作为manager 除了manager以外所有的节点都是node node+manager两种类型 1、基础环境准备: 准备好三台linux Redhat 6.5机器 规划好IP地址、配置hosts文件解析主机名 vim /etc/hosts 172.16.88.220 master 172.16.88.221 bakmas 1 一、MHA搭建

三台服务器:

主:221

从:222

从:220,兼职作为manager

除了manager以外所有的节点都是node

node+manager两种类型

1、基础环境准备:

准备好三台linux Redhat 6.5机器

规划好IP地址、配置hosts文件解析主机名

vim /etc/hosts

172.16.88.220 master

172.16.88.221 bakmas

172.16.88.222 slave

配置好本地yum源

关闭iptables 和selinux

三台安装一样版本的MysqL数据库-5.7.14rpm和xtrabackup工具2.4.4

2、搭建主从

在主上创建复制用户并授权:

MysqL> grant replication slave,replication clIEnt on *.* to
‘repl‘@‘172.16.88.%‘ IDentifIEd by ‘repl‘;

对主库做全备,并应用,传输到2个从库上

在各个从库上进行恢复,并授权

启动后设置主从关系,开启从库,检查主从状态

修改配置文件vim /etc/my.cnf

log-bin=server

binlog_format=roe

binlog_rows_query_log_events=on

server_ID=1/2/3

重启主库

service MysqLd restart

查看节点文件

[[email protected] ~]# cd /usr/local/MysqL/data/

[[email protected] data]# ll

total 122920

-rw-r----- 1 MysqL MysqL 56 May 1 12:23 auto.cnf

-rw-r----- 1 MysqL MysqL 330 May 1 15:48 ib_buffer_pool

-rw-r----- 1 MysqL MysqL 12582912 May 1 15:55 ibdata1

-rw-r----- 1 MysqL MysqL 50331648 May 1 15:55 ib_logfile0

-rw-r----- 1 MysqL MysqL 50331648 May 1 12:23 ib_logfile1

-rw-r----- 1 MysqL MysqL 12582912 May 1 15:55 ibtmp1

drwxr-x--- 2 MysqL MysqL 4096 May 1 12:23 MysqL

-rw-rw---- 1 root root 6 May 1 15:55 MysqLd_safe.pID

drwxr-x--- 2 MysqL MysqL 4096 May 1 12:23 performance_schema

-rw-r----- 1 MysqL MysqL 154 May 1 15:55 server.000001

-rw-r----- 1 MysqL MysqL 16 May 1 15:55 server.index

drwxr-x--- 2 MysqL MysqL 12288 May 1 12:23 sys

确定主从关系

MysqL> ? change master to

CHANGE MASTER TO

MASTER_HOST=‘172.16.88.220‘,

MASTER_USER=‘repl‘,

MASTER_PASSWORD=‘repl‘,

MASTER_PORT=3306,

MASTER_LOG_file=‘server.000001‘,

MASTER_LOG_POS=154,

MASTER_CONNECT_RETRY=10;

MysqL> start slave;

查看主从状态

从:

MysqL> show slave status\G

*************************** 1. row
***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 172.16.88.220

Master_User: repl

Master_Port: 3306

Connect_Retry: 10

Master_Log_file: server.000001

Read_Master_Log_Pos: 154

Relay_Log_file: bakmas-relay-bin.000003

Relay_Log_Pos: 317

Relay_Master_Log_file: server.000001

Slave_IO_Running: Yes

Slave_sql_Running: Yes

主:

MysqL> show processList;

主从库安装node节点软件

[[email protected] mha_file]# rpm -ivh mha4MysqL-node-0.54-0.el6.noarch.rpm

备主机器安装所有软件

rpm localinstall ./*.rpm

查看/usr/bin有没有生成脚本

[[email protected] mha_file]# cd /usr/bin/

[[email protected] bin]# ll |grep "_logs"

-rwxr-xr-x 1 root root 15977 Dec 1 2012 apply_diff_relay_logs

-rwxr-xr-x 1 root root 7401 Dec 1 2012 purge_relay_logs

-rwxr-xr-x 1 root root 7263 Dec 1 2012 save_binary_logs

3、配置免密

三台都需要

主库:

生成rsa秘钥:

[[email protected] ~]# ssh-keygen -t rsa

[[email protected] ~]# cd .ssh/

[[email protected] .ssh]# ll

total 8

-rw------- 1 root root 1675 May 1 16:45 ID_rsa//私钥

-rw-r--r-- 1 root root 393 May 1 16:45 ID_rsa.pub//公钥

将生成的公钥追加到认证文件中:

cat /root/.ssh/ID_rsa.pub >> authorized_keys

修改ssh文件夹和公钥的权限:

chmod 700 /root/.ssh

chmod 600 authorized_keys

将公钥传输到其他2个机器上:

ssh-copy-ID -i ID_rsa.pub [email protected]

ssh-copy-ID -i ID_rsa.pub [email protected]

slave:

ssh-copy-ID -i ID_rsa.pub [email protected]

ssh-copy-ID -i ID_rsa.pub [email protected]

bakmas:

ssh-copy-ID -i ID_rsa.pub [email protected]

ssh-copy-ID -i ID_rsa.pub [email protected]

验证三台机器间无密码登录任何一台机器

4、配置监控用户

在master上创建mha监控用户,这样2个从上自动有该用户

MysqL> grant all privileges on *.* to ‘mha_bakmas‘@‘172.16.88.%‘ IDentifIEd
by ‘mha_bakmas‘;

测试是否成功:

MysqL -umha_bakmas -pmha_bakmas -hmaster -P3306

5、配置MHA

在mha-manager上执行:

1、创建mha的工作目录

mkdir -p /etc/masterha

修改相关配置文件app1.cnf

[server default]

manager_workdir=/var/log/masterha/app1

manager_log=/var/log/masterha/app1/manager.log

master_binlog_dir=/var/lib/MysqL/data

master_ip_failover_script=/usr/bin/master_ip_failover //失败切换

master_ip_online_change_script=/usr/bin/master_ip_online_change //主动切换

user=mha_monitor //manager 使用这个账号连接各个数据库

password=mha_monitor //manager 使用这个账号密码连接各个数据库

Ping_interval=1 //manager 每隔 1 秒钟,探测一下各个节点

remote_workdir=/tmp //指定远端目录

repl_user=repl //各个节点之间的复制账号和密码

repl_password=repl

ssh_user=root

[server1]

hostname=192.168.10.50

#candIDate_master=1

port=3306

[server2]

hostname=192.168.10.51

candIDate_master=1 //指定2节点优先成为主,假设没有这个选项,默认使用最新的 slave
成为主

check_repl_delay=0 //关闭延迟监测

port=3306

[server3]

hostname=192.168.10.52

port=3306

填充:

[server default]

manager_workdir=/var/log/masterha/app1

manager_log=/var/log/masterha/app1/manager.log

master_binlog_dir=/var/lib/MysqL/data

master_ip_failover_script=/usr/bin/master_ip_failover

master_ip_online_change_script=/usr/bin/master_ip_online_change

user=mha_bakmas

password=mha_bakmas

Ping_interval=1

remote_workdir=/tmp

repl_user=repl

repl_password=repl

ssh_user=root

[server1]

hostname=172.16.88.220

port=3306

[server2]

hostname=172.16.88.221

candIDate_master=1

check_repl_delay=0

port=3306

[server3]

hostname=172.16.88.222

port=3306

2、在从库上关闭自动purge

在2个从节点,设置relay_log_purge=0,不自动清除relay_log,可以利用自带的purge_relay_log脚本实现定时任务自动清理relay
log

[[email protected] ~]# vim /etc/my.cnf

relay_log_purge=off

read_only=on

3、修改脚本

主库上:

在主库设置虚拟ip

[[email protected] etc]# ifconfig eth0:1 172.16.88.224/24

bakmas(监控机)上:

master_ip_failover

master_ip_online_change

将脚本放到/usr/bin

修改虚拟地址

[[email protected] bin]# vim /usr/bin/master_ip_failover

my $vip = ‘172.16.88.224/24‘; # Virtual IP

[[email protected] bin]# vim /usr/bin/master_ip_online_change

vip=`echo ‘172.16.88.224/24‘` # Virtual IP

manager需要使用这两个脚本,在新的主上启动漂移ip

将这两个中的所有地址改成漂移ip地址就行了

这两个脚本在manager节点上

@H_453_403@4、改完之后加上权限

[[email protected] bin]# chmod +x master_ip_*

上面配置好以后,就可以在 manager 上面执行相关的脚本进行测试

上面的配置就是告诉 manager,我这个集群的基本信息

5、mha检查ssh免密登录:

masterha_check_ssh --conf=/etc/masterha/app1.cnf

6、mha检查复制

masterha_check_repl --conf=/etc/masterha/app1.cnf

@H_624_419@7、mha状态检查

masterha_check_status --conf=/etc/masterha/app1.cnf

8、启动 manager:

nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master
--ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1
&

建议:在启动manager以前,启动好主从

另开窗口查看监控日志: tail -f /var/log/masterha/app1/manager.log

再次查看监控状态:

masterha_check_status --conf=/etc/masterha/app1.cnf

如何关闭manager监控:

masterha_stop --conf=/etc/masterha/app1.cnf

一主两从

搭建两次从服务器

不建议使用半同步复制

注意几个点:

1、从库都该成read-only模式

2、从库的relay log自动删除功能要关闭

3、三个数据库的server_ID必须不一致

log-bin = MysqL-bin //要求所有可能成为主库的节点开启二进制日志

relay_log_purge = 0 //要求所有可能成为主库的节点都要配置此项

read_only = 1 //MHA 要求所有 slave 节点配置为 read_only = 1

server-ID = 2 //注意主从节点的 server-ID 不同

5、安装node和manager软件,这个属于mha软件

安装的时候,需要依赖很多的per软件和Perl库,因此可能会比较麻烦

去下载已经安装好的虚拟机

6、配置互信(配置SSH免密登录)

节点之间可以互相执行命令、拷贝数据,这些都不需要密码。

配置完成互信以后,一定要进行测试。

二、MHA在线|故障切换测试 1、手工在线测试

检查master_ip_online_change脚本中所有虚拟ip是否修改完成。

在线切换步骤:

1、手工停掉mha监控

masterha_stop --conf=/etc/masterha/app1.cnf

2、执行在线切换

masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive
--new_master_host=172.16.88.220 --new_master_port=3306
--orig_master_is_new_slave --running_updates_limit=10000

yes,yes

3、其中参数的意思:

--orig_master_is_new_slave 切换时加上此参数是将原 master 变为 slave
节点,如果不加此参数,原来的 master 将不启动。

--running_updates_limit=10000,故障切换时,候选 master 如果有延迟的话,mha
切换不能成功,加上此参数表示延迟在此时间范围内都可切换(单位为
s),但是切换的时间长短是由 recover 时 relay 日志的大小决定。

在备主和监控机上查看是否完成切换:show processList;

4、启动MHA manager:

nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master
--ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log
2>&1 &

masterha_check_status --conf=/etc/masterha/app1.cnf

2、故障切换测试

直接在主库上进行failover,杀掉MysqLd进程

MysqL> shutdown;

query OK,0 rows affected (0.01 sec)

MysqL> show processList;

ERROR 2006 (HY000): MysqL server has gone away

No connection. Trying to reconnect...

ERROR 2002 (HY000): Can‘t connect to local MysqL server through socket
‘/var/lib/MysqL/MysqL.sock‘ (2)

ERROR:

Can‘t connect to the server

这时候会自动完成222故障切换,vip的漂移,但是manager进程会自动关闭

注意:

1、MHA里有2个角色,一个是manager节点,一个是node节点,要实现这个MHA,最好是不少于3台机器,一主2从,1台是主,一台当备用master,另一台从机当监控机,一旦主库宕机,备主开始充当主库提供服务,如果旧主上线也不会在成为master了,除非修复完整后强制做主库。

2、一旦发生切换,manager进程将会退出,无法进行再次测试,需要将故障数据库加入到MHA环境中。

宕掉的主库需要进行恢复 *** 作:

常情况下,旧主在修复完整后,可能想把旧主作为新主的slave,这时可以借助当时自动切换时刻的MHA日志来完成对旧主的修复。

3、在manager上查看当时的change master 信息:

# cat /var/log/masterha/app1/manager.log |grep -i "All other slaves should
start"

Fri Dec 30 18:09:35 2016 - [info] All other slaves should start replication

from here. Statement should be: CHANGE MASTER TO MASTER_HOST=‘192.168.10.51‘,MASTER_LOG_file=‘mha-server.000001‘,MASTER_LOG_POS=154,MASTER_PASSWORD=‘xxx‘;

获取上述信息后,在旧主上执行change master to *** 作,重新设置为新主的从库:

启动从库,查看主从状态

无论什么测试,在切换完成后,注意检查vip的位置,主从的状态信息是否正常,read_only和relay_log_purge的值,要和真实的架构状态对应起来,并且记得在配置文件中进行相应的修改

4、修复好的旧主并没有加入到MHA监控环境中,需要手工加入:

masterha_conf_host --command=add --conf=/etc/masterha/app1.cnf
--hostname=172.16.88.220 --block=server1 --params="no_master=1;ignore_fail=1"

或者是直接手工编辑app1.cnf配置文件添加上该信息,再次检查复制环境:

masterha_check_repl --conf=/etc/masterha/app1.cnf

5、Requirements and limitations

1 这一部分做简要翻译,安装MHA的依赖和限制

2 SSH public key认证

3 仅支持liunx *** 作系统

4 只有一台master能被设置成Readonly=0,其他设置为只读

5如果是Master1 -> Master2->
Slave3这样的三级复制框架,在配置文件中只需要设置master1和master2这样的二级复制结构,并设置multi_tIEr_slave=1来支持三级复制结构。

6 MHA仅支持MysqL 5.0及以后的版本

7 MysqLbinlog必须是3.3及以上版本

8 log-bin必须在每一个可称为master的MysqL服务器上设置

9 所有MysqL服务器的复制过滤规则必须一致

10 必须在能成为master的服务器上设置复制账户

11所有MysqL服务器上必须设置relay_log_purge=1,使得能够保存一段时间的relay log

12 基于语句的复制时,不要使用load datainfile命令

总结

以上是内存溢出为你收集整理的MHA搭建全部内容,希望文章能够帮你解决MHA搭建所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1020813.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存