MHA搭建
一、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 对主库做全备,并应用,传输到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 statusG *************************** 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 测试是否成功: 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 [[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节点上 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 7、mha状态检查masterha_check_status --conf=/etc/masterha/app1.cnf 8、启动 manager:nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master 建议:在启动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监控
2、执行在线切换
3、其中参数的意思:
4、启动MHA manager:
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 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 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 或者是直接手工编辑app1.cnf配置文件添加上该信息,再次检查复制环境: masterha_check_repl --conf=/etc/masterha/app1.cnf 5、Requirements and Limitations1 这一部分做简要翻译,安装MHA的依赖和限制 2 SSH public key认证 3 仅支持Liunx操作系统 4 只有一台master能被设置成readonly=0,其他设置为只读 5如果是Master1 -> Master2-> 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命令 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |