数据库—高可用MHA

1、MHA概述:

  • 一套优秀的mysql高可用环境下故障切换和主从复制的软件
  • Mysql故障故障故障中,MHA能做到0-30秒自动完成故障切换

2、MHA的组成:

  • MHA Manager(管理节点)
  • MHA Node(数据节点)

3、MHA特点:

  • 自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失。
  • 使用半同步复制,可以大大降低数据丢失的风险。
  • 目前MHA支持一主多从架构,至少三台服务,即一主两从。

4、架构拓扑图:

在这里插入图片描述

5、实验代码:

实验前期准备:
1、关闭防火墙: systemctl stop firewalld.service、setenforce 0
2、命名:mysql1(主)、mysql2(主备)、mysql3(从)、mha(管理者,监控)

实验配置:
第一步:在三台数据库服务器上安装数据库:
yum install ncurses-devel gcc-c++ perl-Module-Install         #####安装环境包
tar zxvf cmake-2.8.6.tar.gz                                      #####将集群所有需要的包全部拖进来
cd cmake-2.8.6
./configure
gmake && gmake install

在~下:tar zxvf mysql-5.6.36.tar.gz
cd mysql-5.6.36.tar.gz
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DSYSCONFDIR=/etc

make && make install 
cp support-files/my-default.cnf /etc/my.cnf
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
groupadd mysql
useradd -M -s /sbin/nologin mysql -g mysql
chown -R mysql.mysql /usr/local/mysql
mkdir -p /data/mysql
/usr/local/mysql/scripts/mysql_install_db \            ####初始化数据库
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data \
--user=mysql

第二步:做主从服务器角色:
在主服务器上:[mysqld]下面
vim /etc/my.cnf
server-id = 1
log_bin = master-bin
log-slave-updates = true
在主备和从服务器上:[mysqld]下面
server-id = 2                                            ###主备
log_bin = master-bin
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index          
server-id = 3                                            ###从
log_bin = master-bin
relay-log = relay-log-bin
relay-log-index = slave-relay-bin.index
三台服务器都添加:
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
/usr/local/mysql/bin/mysqld_safe --user=mysql &        ####启动服务器
grant replication slave on *.* to 'myslave'@'14.0.0.%' identified by '123';      ###给权相互学习
grant all privileges on *.* to 'mha'@'14.0.0.%' identified by 'manager';   ###让mha监控
flush privileges;
grant all privileges on *.* to 'mha'@'mysql1' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql2' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql3' identified by 'manager';
flush privileges;
在主服务器上:                                              (主从同步)
show master status;                                     ###查看日志节点号码
在两个从服务器上:                                     (14.0.0.15为主服务器的地址)
change master to master_host='14.0.0.15',master_user='myslave',master_password='123',master_log_file='master-bin.000001',master_log_pos=1483;
start slave;
show slave status\G;                              #IO/SQL Runing要都是yes
set global read_only=1;
flush privileges;                                    #在主服务器上创建数据库来验证是否主从同步???

第三步:做mha组件
在该群集的所有节点上安装:
yum install epel-release --nogpgcheck -y
yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN

在~下:tar zxvf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57/
perl Makefile.PL
make && make install

在”mha“上建组件(所有包拖进来,mha4mysql-manager-0.57.tar.gz 、mha4mysql-node-0.57.tar.gz )
tar zxvf mha4mysql-node-0.57.tar.gz            ####node
cd mha4mysql-node-0.57/
perl Makefile.PL
make && make install
tar zxvf mha4mysql-manager-0.57.tar.gz       ###manager
cd mha4mysql-manager-0.57.tar.gz /
perl Makefile.PL
make && make install
ls /usr/local/bin/                       ###有12文件就对了“检查!!!”


第四步:无密码验证:
在mha上:          (18)
ssh-keygen -t rsa     一路回车到底!!!
ssh-copy-id 14.0.0.15   主
ssh-copy-id 14.0.0.16   主备
ssh-copy-id 14.0.0.17   从
在主服务器上:    (15)
ssh-keygen -t rsa     一路回车到底!!!
ssh-copy-id 14.0.0.16
ssh-copy-id 14.0.0.17
在主备服务器上: (16)
ssh-keygen -t rsa     一路回车到底!!!
ssh-copy-id 14.0.0.15
ssh-copy-id 14.0.0.17
在从服务器上:     (17)
ssh-keygen -t rsa     一路回车到底!!!
ssh-copy-id 14.0.0.15
ssh-copy-id 14.0.0.16


第五步:配置mha服务:
在mha服务器上:
cp -ra /root/mha4mysql-manager-0.57/samples/scripts/ /usr/local/bin/
ls /usr/local/bin/         ###是否 scripts 里面有4个文件???
cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin/
vim /usr/local/bin/master_ip_failover       (见failover文件)                           ***************
mkdir /etc/masterha
cp /root/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha
vim /etc/masterha/app1.cnf            ###将里面的东西全部删除!!!        *************
cp /usr/local/bin/scripts/master_ip_online_change ../         ###将scripts里面的ch弄到上一层!!
cp send_report /usr/local/                                                   ####在scripts下

[server default]
manager_log=/var/log/masterha/app1/manager.log
manager_workdir=/var/log/masterha/app1
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
password=manager
ping_interval=1
remote_workdir=/tmp
repl_password=123
repl_user=myslave
report_script=/usr/local/send_report  
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 14.0.0.16 -s 14.0.0.17
shutdown_script=""
ssh_user=root
user=mha

[server1]
hostname=14.0.0.15
port=3306

[server2]
candidate_master=1
check_repl_delay=0
hostname=14.0.0.16
port=3306

[server3]
hostname=14.0.0.17
port=3306

实验验证:
1、无密码验证:
masterha_check_ssh -conf=/etc/masterha/app1.cnf            ###出现“All SSH connection tests passed successfully.“既是成功!!!
2、检查群集的健康状态:
masterha_check_repl -conf=/etc/masterha/app1.cnf           ###MySQL Replication Health is OK.
在主服务器上开启虚拟ip:
/sbin/ifconfig ens33:1 14.0.0.200
在mha上设置:
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
tailf /var/log/masterha/app1/manager.log

在主服务器上:(查看虚拟IP是否飘逸)
pkil -9 mysql
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值