数据库高可用

一首先是主从复制的状态,或者半同步:

!!清空环境(之前做的组复制)

关闭数据库,删除/var/lib/mysql/*,重新启动初始化,统一修改密码为Westos+007

host1 : matser (node1)
host2: master-slave(node2)
host3: master-salve(node3)
host4: mha-manager

HOST1配置文件

vim /etc/my.cnf
    server-id=1    
    log-bin=mysql-bin
    gtid_mode=ON
    enforce_gtid_consistency=ON
/etc/init.d/mysqld restart

这里写图片描述
host2和host3除了server-id不同其他一样
别忘记重启服务

/etc/init.d/mysql restart

接下来主从复制配置

1.Host1数据库操作
##grep "temporary password" /var/log/mysqld.log
##mysql_secure_installation
mysql> alter user root@localhost identified by 'Westos+007';
mysql> flush privileges;
mysql> grant replication slave on *.* to repl@'%' identified by 'Westos+007';
mysql> show master status;

这里写图片描述

2.Host2数据库操作
##grep "temporary password" /var/log/mysqld.log
mysql -p
mysql> alter user root@localhost identified by 'Westos+007';
mysql> change master to master_host='172.25.254.1',master_user='repl',master_password='Westos+007',master_auto_position=1;
mysql> start slave;
mysql> show slave status\G;

注意查看host2的io和sql线程
这里写图片描述

3.Host3数据库操作
##grep "temporary password" /var/log/mysqld.log
mysql> alter user root@localhost identified by 'Westos+007';
mysql> change master to master_host='172.25.254.1',master_user='repl',master_password='Westos+007',master_auto_position=1;
mysql> start slave;
mysql> show slave status\G;

这里写图片描述

官网是半同步下的高可用,非必要:这采取半同步下的高可用,
Host1

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; 
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> set global rpl_semi_sync_master_enabled=on;
mysql> set global rpl_semi_sync_slave_enabled=on;
mysql> show variables like  '%rpl_semi%';

写入文件:


vim /etc/my.cnf
    server-id=1
    log-bin=mysql-bin
    gtid_mode=ON
    enforce_gtid_consistency=ON

    rpl_semi_sync_master_enable=1   
    rpl_semi_sync_slave_enable=1    

host2和host3操作相同

最终效果:再host1中建host1数据库,host2和host3同步了

这里写图片描述

三台mysql主机设置开机自启动

 chkconfig mysqld on

高可用

1.关于Mha
MHA是一款开源的mysql的高可用程序,它为mysql主从复制架构了,master down掉之后,从slave中产生新的master的功能,MHA在监控到master数据节点服务器故障时,会提升其中拥有最新的数据的slave成为新的master。MHA主句节点和MHA管理节点,MHA Manager通常单独部署在一台服务器上,MHA Node通常在每台mysql服务器上;(1)把某一个slave节点提升为master节点;(2)在提升之前,会把所有其他slave节点记录的所有数据合并到要提升为主节点(master)的那个(slave)从节点上。
2.Mha组件
(1)Manager节点
masterha_check_ssh: MHA依赖ssh环境检测工具
masterha_check_repl: mysql复制环境检测工具
masterha_manager: MHA服务主程序
masterha_check_status:MHA运行状态探测工具
masterha_check_monitor: mysql master节点可用性检测工具
masterha_check_switch:master节点切换工具
masterha_conf_host:添加或删除配置节点
masterha_stop:关闭MHA服务
(2)Node节点
save_binary_logs: 保存和复制master的二进制日志
apply_diff_relay_logs:识别差异的中继日志事件并应用与其他slave
filter_mysqlbinlog:去除不必要的rollback事件
purge_relay_logs:清除中继日志(不会阻塞sql线程)

实验环境,关闭iptables,开机不启动,selinux=disabled

一.node节点配置Host1,host2,host3

安装mha4mysql-node-0.56-0.el6.noarch.rpm

[root@host1 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y

[root@host2 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y

[root@host3 ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y

Rpm安装解决依赖安装perl-CPAN.x86_64,perl-DBD-MySQL.x86_64,perl-devel.x86_64

二.管理节点Host4管理节点:

安装 mha4mysql-node-0.56-0.el6.noarch.rpm -y

 yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y

安装mha4mysql-manager-0.56-0.el6.noarch.rpm 之前要解决依赖

yum install   
perl-Log-Dispatch-2.27-1.el6.noarch.rpm
perl-Mail-Sender-0.8.16-3.el6.noarch.rpm
perl-Mail-Sendmail-0.79-12.el6.noarch.rpm
perl-MIME-Lite-3.027-2.el6.noarch.rpm
perl-MIME-Types-1.28-2.el6.noarch.rpm
perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm
perl-Config-Tiny-2.12-7.1.el6.noarch.rpm
perl-Email-Date-Format-1.002-5.el6.noarch.rpm

这里写图片描述
依赖解决后

yum install mha4mysql-manager-0.56-0.el6.noarch.rpm 

如果用rpm安装还要安装 perl-Time-HiRes.x86_64这个依赖包

三.配置管理节点目录

1.配置MHA manger(host4)目录

mkdir /etc/mhamanger/ -p

2.编辑配置文件

Vim  /etc/mhamanger/app.conf

     1  [server default]
     2  manager_workdir=/etc/mhamanger/    ##mha主配值目录
     3  manager_log=/etc/mhamanger/mha.log   ##日志
     4  master_binlog_dir= /var/lib/mysql  ##二进制日志存放位置
     5  remote_workdir=/tmp
     6  master_ip_failover_script= /etc/mhamanger/master_ip_failover 
     7  #shutdown_script= /etc/mhamanger/power_manager
     8  #report_script= /etc/masterha/send_report
     9  master_ip_online_change_script= /script/masterha/master_ip_online_change
    10  
    11  password=Westos+007         ##监控数据库密码
    12  user=root      ##监控数据库用户
    13  ping_interval=1 
    14  
    15  repl_password=Westos+007   ##数据库授权密码
    16  repl_user=repl    ##数据库授权用户
    17  
    18  ssh_user=root   #ssh用户
    19  
    20  [server1]      ##1为master
    21  hostname=172.25.254.1
    22  port=3306
    23  #candidate_master=1   
    24  #check_repl_delay=0
    25  
    26  [server2]
    27  hostname=172.25.254.2
    28  port=3306
    29  candidate_master=1     ##1主挂了自己为主
    30  check_repl_delay=0
    31  
    32  [server3]
    33  hostname=172.25.254.3
    34  port=3306
    35  no_master=1   ##自己永不能为主

这里写图片描述
这里写图片描述

4ssh互相通信

Host4操作


ssh-keygen
cd  /root/.ssh
ssh-copy-id host4
scp -rp /root/.ssh/ host1:~
scp -rp /root/.ssh/ host2:~
scp -rp /root/.ssh/ host3:~

检验:出现All SSH connection tests passed successfully.表示成功

masterha_check_ssh --conf=/etc/mhamanger/app.conf  

这里写图片描述

5数据库授权

1.host1数据库操作

grant replication slave on *.* to repl@'%' identified by 'Westos+007';

这里写图片描述
Host4检查MySQL Replication Health is OK. 表示好了

masterha_check_repl --conf=/etc/mhamanger/app.conf 

这里写图片描述
开启mha服务

nohup masterha_manager 
--conf=/etc/mhamanger/application/app.conf  >/etc/mhamanger/mha.log 2>&1 &   ##开启mha服务
masterha_check_status --conf=/etc/mhamanger/app.conf 查看mha状态 

这里写图片描述

6.再master(host1)上设置vip ,和脚本里的相同

ip addr add 172.25.254.111/24 dev eth0
ip addr

这里写图片描述

7从加目录中把三个脚本移动到/etc/mhamanger/下

[root@host4 ~]# cp master_ip_failover  master_ip_online_change  send_report  /etc/mhamanger/

cd /etc/mhamanger/
chmod +x master_ip_failover master_ip_online_change send_report 

这里写图片描述

Vim  /etc/mhamanger/master_ip_failover 

     11 my $vip = '172.25.254.111/24';
     12 my $ssh_start_vip = "/sbin/ip addr add $vip dev eth0";
     13 my $ssh_stop_vip = "/sbin/ip addr del $vip dev eth0";

这里写图片描述

vim  /etc/mhamanger/master_ip_online_change 
     7 my $vip = '172.25.254.111/24';  # Virtual IP  
     8 my $ssh_start_vip = "/sbin/ip addr add $vip dev eth0";
     9 my $ssh_stop_vip = "/sbin/ip addr del $vip dev eth0";

客户端通过vip可以登陆数据库

实验:down掉master(host1)

killall mysqld_safe mysqld   ##注意得先关闭mysqld_safe进程

这里写图片描述
Host2为主了,vip自动转移到了host2(新的master)上客户端访问vip依旧可以访问数据库,
这里写图片描述
这里写图片描述
这里写图片描述
vip查看
这里写图片描述

这个时候,MHA是无法启动的:修复host1节点,编辑msql配置文件,加入下边两行,重启后,进入数据库指定master节点

vim  /etc/my.cnf

  read-only = 1           ##hostmysql只读
  relay-log-purge = 0     ##不清除realy-log

指定master节点:其中master_log_file和master_log_pos到master中查看。

change master to  master_host='172.25.254.2',master_user='repl',master_password='Westos+007',master_log_file='mysql-bin.000003',master_log_pos=718;

这里写图片描述
查看日志信息

cat /etc/mhamanger/mha.log 

这里写图片描述
这里写图片描述

热切换就是再master没有down掉的情况下更改master,冷切换相反;

热切换参考命令:

masterha_master_switch --conf=/配置文件绝对路径  --master_state=alive --new_master_host=[ip] --new_master_port=3306 --orig_master_is_new_slave  --running_updates_limit=1000

冷切换:

Mha管理节点:

masterha_master_switch --conf=/配置文件绝对路径  --master_state=dead --dead_master_host=[down掉地maste的ip]  --dead_master_port=3306  --new_master_host=[要切换的master的ip]  --new_master_port=3306 --ignore_last_failover

发送报告:

发送报告的前提是虚拟机可以通网:

1.宿主机设置火墙规则
iptables -t nat -I POSTROUTING  -s 172.25.254.0/24 -j MASQUERADE 
iptables -t nat -nL

这里写图片描述

2.Mha管理节点设置路由和解析
route add default gw 172.25.254.51
echo nameserver 114.114.114.114 >> /etc/resolv.conf
ping www.baidu.com   测试下

这里写图片描述

3.Mha管理节点:

修改已经准备好的perl脚本

vim /etc/mhamanger/send_report  :添加邮箱信息

这里写图片描述

vim /etc/mhamanger/app.conf

这里写图片描述

4.安装邮件服务
yum install mailx 
5.邮箱设置

这里写图片描述

6.Masterdown掉mysql
killall -9 mysqld_safe mysqld

这里写图片描述
查看日志
cat /etc/mhamanger/mha.log :正在发送邮件
这里写图片描述

这里有点小问题,未能收到邮件

猜你喜欢

转载自blog.csdn.net/xixlxl/article/details/80139562