MHA高可用

MHA架构图:

MHA由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点),MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器及Manager服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将拥有最新数据的slave提升为新的master,然后将所有其他的slave重新指向新提升的master。整个故障转移过程对应用程序层面完全透明。 

MHA工作原理

  • 主库实例挂掉但是ssh还能连接
    1、监控到主库宕机,选择一个新的主,被选择的新主会取消从库的角色( reset slave)
    选择标准:
    一是根据其他从库的binlog日志的位置选择最新的从库作为新的主库
    二是如果设置了半同步从库,直接选择半同从库作为新的主库
    2、从库通过MHA自带的脚本程序,通过ssh向主库索取缺失部分的binlog
    3、其他从库与新的主库从新构建主从,继续提供服务
    4、如果由vip机制,将VIP从原来的主库漂移到新的主库,让应用无感知
  • 主节点服务器宕机(ssh已经连接不上了)
    1、监控到主机宕机后,尝试ssh连接,连接失败
    2、通过上边所讲的选择标准选择新的主库
    3、计算从库之间的relay-log的差异,补偿到新的其他从库
    4、其他从库从新与新主构建主从关系,继续提供服务
    5、如果由VIP机制,将VIP从原主漂移到新主,让应用无感知
    6、如果有binlog server 机制,会继续将binlog server中缺失的事物,补偿到新的主库

MHA高可用:
停掉server1到server4的mysqld。并且重新配置初始化mysql

 server1中: 

cd ~ 
/etc/init.d/mysqld  stop
cd /data/mysql/
ls
rm -rf *      #删的是/data/mysql目录里的文件
cd ~
vim /etc/my.cnf
  #删掉多余的
  [mysqld]
  datadir=/usr/local/mysql
  datadir=/data/mysql
  socket=/data/mysql/mysql.sock
  symbolic-links=0
  log-error=/data/mysql/mysqld.log
  pid-file=/data/mysql/mysqld.pid

  server-id=1
  gtid_mode=ON
  enforce_gtid_consistency=ON
  master_info_repository=TABLE
  relay_log_info_repository=TABLE
  log_slave_updates=ON
  log_bin=binlog

mysqld --initialize --user=mysql #初始化
cd /data/mysql/
cat mysqld.log  | grep password  #查看原始密码
/etc/init.d/mysqld start   #启动数据库
mysql -p   
--> alter user root@localhost identified by 'westos';
--> show master status;
--> grant replication slave on *.* to repl@'%' identified by 'westos';

安全初始化前清空/data/mysql/下的文件,安全初始化后要开启mysql服务 

 创建master主机用户和密码,供slave机子使用

server2:同理,先停掉mysqld服务
 

/etc/init.d/mysqld stop
cd /data/mysql/
ls
rm -rf *      #删的是/data/mysql目录里的文件
cd ~
vim /etc/my.cnf
  #删掉多余的
  [mysqld]
  datadir=/usr/local/mysql
  datadir=/data/mysql
  socket=/data/mysql/mysql.sock
  symbolic-links=0
  log-error=/data/mysql/mysqld.log
  pid-file=/data/mysql/mysqld.pid

  server-id=2
  gtid_mode=ON
  enforce_gtid_consistency=ON
  master_info_repository=TABLE
  relay_log_info_repository=TABLE
  log_slave_updates=ON
  log_bin=binlog

mysqld --initialize --user=mysql #初始化
cd /data/mysql/
cat mysqld.log  | grep password  #查看原始密码
/etc/init.d/mysqld start   #启动数据库
mysql -p
--> alter user root@localhost identified by 'westos';
--> change master to master_host='172.25.11.1',master_user='repl', master_password='westos', master_auto_position=1;
--> start slave;
--> show slave status\G;

 创建用户,密码和server1一样,并且设置server1为master主机,设置完之后开启slave

查看slave主机状态 

server3中:同理

/etc/init.d/mysqld stop
cd /data/mysql/
ls
rm -rf *      #删的是/data/mysql目录里的文件
cd ~
vim /etc/my.cnf
  #删掉多余的
  [mysqld]
  datadir=/usr/local/mysql
  datadir=/data/mysql
  socket=/data/mysql/mysql.sock
  symbolic-links=0
  log-error=/data/mysql/mysqld.log
  pid-file=/data/mysql/mysqld.pid

  server-id=3
  gtid_mode=ON
  enforce_gtid_consistency=ON
  master_info_repository=TABLE
  relay_log_info_repository=TABLE
  log_slave_updates=ON

mysqld --initialize --user=mysql #初始化
cd /data/mysql/
cat mysqld.log  | grep password  #查看原始密码
/etc/init.d/mysqld start   #启动数据库
mysql -p
--> alter user root@localhost identified by 'westos';
--> change master to master_host='172.25.11.1',master_user='repl', master_password='westos', master_auto_position=1;
--> start slave;
--> show slave status\G;

 server4中:暂停服务、将node的安装包传给server1、2、3

systemctl stop mysqlrouter.service
lftp 172.25.254.250
~> cd pub/docs/mysql/
/pub/docs/mysql> mirror MHA-7/
/pub/docs/mysql> exit
ls
cd MHA-7/
ls
yum install -y *.rpm
ls
scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server1:
scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server2:
scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm server3:

 

在 server1、2、3中安装node包:

 server2中:
mysql -pwestos
--> select * from mysql.user;          #查看repl用户

server4中:
 

cd MHA-7/
ls
tar zxf mha4mysql-manager-0.58.tar.gz 
ls
cd mha4mysql-manager-0.58/
ls
cd samples/
cd conf/
ls
mkdir /etc/mha
ls
cp app1.cnf masterha_default.cnf  /etc/mha/
ls
cd /etc/mha/
ls
cat app1.cnf
cat masterha_default.cnf


#把masterha_default.cnf文件里的内容全部放到app1.cnf文件中  

vim app1.cnf  #把masterha_default.cnf文件里的内容全部放到app1.cnf文件中
  [server default]
user=root  #mysql主从节点的管理员用户密码,确保可以从远程登录
password=westos
ssh_user=root   #ssh用户名
repl_user=repl  #主从复制用户
repl_password=westos
master_binlog_dir= /data/mysql
remote_workdir=/tmp  #远端mysql在发生切换时binlog的保存位置
secondary_check_script= masterha_secondary_check -s server2 -s server3
ping_interval=3   #发送ping包的时间间隔,默认3秒,尝试3次没有回应会自动进行failover
#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=/etc/mha/app1
manager_log=/etc/mha/app1/manager.log

[server1]
hostname=172.25.11.1
candidate_master=1

[server2]
hostname=172.25.11.2
candidate_master=1
check_repl_delay=0

[server3]
hostname=172.25.11.3

ls
rm -f masterha_default.cnf
ls
mkdir app1  #在/etc/mha下建立
masterha_check_ssh --help
masterha_check_ssh --conf=/etc/mha/app1.cnf  #没有成功,四个节点没有免密
ssh-keygen  #生成免密认证,[一直回车]
ssh-copy-id server4
ssh server4  #连接4不需要密码
logout 
cd
scp -r .ssh/ server1:
scp -r .ssh/ server2:
scp -r .ssh/ server3:
ssh server1  #测试连接1不需要密码
logout

注意以上可以在每个ip都试一下,连接其他ip不需要密码

 server1中:

mysql -pwestos
--> alter user root@'%' identified by 'westos';
--> create user root@'%' identified by 'westos';
--> grant all on *.* to root@'%';
--> flush privileges;

 server4中:
masterha_check_ssh --conf=/etc/mha/app1.cnf  #ok了


server4:

 masterha_master_switch --conf=/etc/mha/app1.cnf --master_state=alive --
new_master_host=172.25.11.2 --new_master_port=3306 --orig_master_is_new_slave --
running_updates_limit=10000
ls
cd /etc/mha/
ls
cd app1/
ls
cd..
ls

 srever1:查看master是否手动切换成server2

mysql -p
--> show master status;
--l> show slave status\G;

 server3:
mysql -p
--> show slave status\G;

 server2:
mysql -p
--> show slave status\G; #是主机所以不会出现从机的信息
/etc/init.d/mysqld  stop #停掉mysql

  server4:手动在把server1改为master

masterha_master_switch --master_state=dead --conf=/etc/mha/app1.cnf --
dead_master_host=172.25.11.2 --dead_master_port=3306 --new_master_host=172.25.11.1 --
new_master_port=3306 --ignore_last_failover #全部yes
ls
cd app1/
ls
cat app1.failover.complete

server1:查看是否手动改回master成功
mysql -pwestos
--> mysql> show slave status\G;   #是主机所以不会出现从机的信息

 server3:
mysql -pwestos
--> show slave status\G;  #主机变成1

 server2:开启服务,并把server1设成master主机

/etc/init.d/mysqld  start    #开启
mysql -p
--> stop slave;
--> change master to master_host='172.25.11.1',master_user='repl', 
master_password='westos', master_auto_position=1;
--> start slave;
--> show slave status\G;

 从真机中把master*传到4的/etc/mha/


server4:

cd /etc/mha/
ls
chmod +x master_ip_*
ll
cd
cd MHA-7/
ls
cd mha4mysql-manager-0.58/
cd samples/
ls
cd scripts/
ls
cd /etc/mha/
vim master_ip_failover
 #第7行:my $vip = '172.25.11.100/24';
vim master_ip_online_change 
  #第7行:my $vip = '172.25.11.100/24';
cd app1/
ls
rm -rf app1.failover.complete
masterha_manager --conf=/etc/mha/app1.cnf &  #打入后台。后回车
ps ax

 在server1和2中输入ip addr 命令查看


server1中:
ip addr add 172.25.11.100/24 dev eth0  给1加vip
ip addr

真机中:
mysql -h 172.25.11.100 -u root -p #进入是1的

server1中:
/etc/init.d/mysqld stop

server4:

ps ax  
masterha_master_switch --master_state=dead --conf=/etc/mha/app1.cnf --
dead_master_host=172.25.11.1 --dead_master_port=3306 --new_master_host=172.25.11.2 --
new_master_port=3306 --ignore_last_failove

server2中:
ip addr

server3:
mysql -pwestos
--> show slave status\G;  #主机变成2

 server1中:

/etc/init.d/mysqld start
mysql -p
--> stop slave;
--> change master to master_host='172.25.11.1',master_user='repl', master_password='westos', master_auto_position=1;
--l> start slave;
--> show slave status\G;  #主机变成2

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值