配置MHA集群

一.MHA集群概述

1.MHA简介

—由日本DeNA公司的youshimaton开发

—是一套优秀的实现mysql高可用的解决方案

----数据库的自动故障切换操作能做到在0~30秒之内

-----MHA能确保在故障切换过程中保证数据的一致性,以达到真正意义上的高可用

2.MHA组成

MHA Manager(管理节点)

----可以单独部署在一台独立的机器上,管理

—也可以部署在一台slave节点上

MHA Node (数据节点)

----运行在每台Mysql服务器上
配置MHA集群_第1张图片
(1)从宕机崩溃的master保存二进制日志事件
(2)识别含有最新更新的slave
(3)应用差异的中继日志(reay log)到其他的slave
(4)应用从master保存的二进制日志事件
(5)提升一个slave为新的master
(6)使其他的slave连接的master进行复制

三.部署MHA集群

1.拓扑结构:
配置MHA集群_第2张图片
IP规划,如图-2所示:
配置MHA集群_第3张图片

部署mysqld集群 使用”MHA软件+mysqld主从同步“ 实现

一.什么是集群?多台服务器提供相同的服务(网站 数据库)

二.集群分类?LB HA HPC

三.为什么要使用集群?

四.配置集群?安装软件提供服务实现(LVS haproxy nginx keepalived
五.部署mysql高可用
主 备
51 52
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
一.环境准备:
[51-56]#yum -y install perl-*
56 可以无密码ssh 51-55
51-55 主机可以彼此互相无密码ssh
Mha-soft-student 拷贝给 51-56
51-55 恢复为独立的数据库服务器

1.1 修改域名解析文件,56 可以无密码ssh 51-55

[root@56 ~]# vim /etc/hosts    //域名解析
192.168.4.51 51
192.168.4.52 52
192.168.4.53 53
192.168.4.54 54
192.168.4.55 55
192.168.4.56 56

[root@56 ~]# for i in 51 52 53 54 55 562.MHA组成
                  > do
                 > scp /etc/hosts 192.168.4.$i:/etc/
                 > don

[root@56 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''    //生成密钥
[root@56 ~]# for i in 51 52 53 54 55 56                 //配置无密码连接(56操做)
                     >do
                   > ssh-copy-id 192.168.4.$i
                   > done

1.2.(51-55) 主机可以彼此互相无密码ssh(51-55操作)

]# ssh-keygen -f /root/.ssh/id_rsa -N ''
]# for i in 51 52 53 54 55
    >do
     > ssh-copy-id 192.168.4.$i
     >done

1.3 把Mha-soft-student 拷贝给 51-56

[root@room1pc16 桌面]# for i in 51 52 53 54 55 56         //Mha-soft-student 拷贝给 51-56
                                      > do
                                      > scp -r '/root/桌面/mha-soft-student' 192.168.4.$i:/root
                                      > done

1.在所有主机上安装Perl依赖包(51-56操作)

[root@56 ~]# for i in 51 52 53 54 55 56   //给51-56安装per*
               >do
               > yum -y install perl-*    //安装光盘自带的
              >done

[root@56 ~]# rpm -qa perl*               //查看已安装软件包
[root@56 ~]# rpm -qa perl* | wc
218     218    7831

]# cd /root/mha-soft-student/     //安装mha里面的perl-*包
]#yum -y install perl-*

2.在所有数据库服务器上安装mha-node包(51-55操作)

[root@55 mha-soft-student]# for i in 55 54 53 52 51
                                          >do
                                        >rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
                                       >done
[root@55 mha-soft-student]# rpm -q mha4mysql-node | wc

3.在管理主机上安装mha_node 和 mha-manager包(56操作)

]# cd /root/mha-soft-student/  
]#rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm   
[root@56 mha-soft-student]# tar -xf mha4mysql-manager-0.56.tar.gz
[root@56 mha-soft-student]# ls
[root@56 mha-soft-student]# cd mha4mysql-manager-0.56
[root@56 mha4mysql-manager-0.56]# perl Makefile.PL 
[root@56 mha4mysql-manager-0.56]# make && make install    //编译安装
[root@56 mha4mysql-manager-0.56]# masterha_

#####################################################################
二. 配置MHA集群

2.1 配置mysql主从同步(一主多从)

2.1.1 配置主服务器51 (主库)

]# vim /etc/my.cnf  
[mysqld]
server_id=51                   //指定server_id
log_bin=master51           //启用日志文件
#binlog-format="mixed"
plugin-load =           //开启半同步
"rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1
]# systemctl  restart  mysqld             //重启服务

添加主从同步授权用户

] # mysql -uroot -p123456

mysql> set global relay_log_purge=off;                 //不自动删除中继日志文件

mysql> grant replication slave on *.* to plj@"%" identified by "123qqq...A";

2.1.2 配置从服务器52(备用主库)

mysql> set global relay_log_purge=off; //不自动删除本机的中继日志文件

]# vim /etc/my.cnf             //修改配置文件
[mysqld] 
server_id=52                //指定server_id值
log_bin=master52
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1
relay_log_purge=off           //不自动删除本机的中继日志文件

]# systemctl restart mysqld

]# mysql -uroot -p123456(密码)

mysql> change master to             //指定数据库服务器配置文件
-> master_host="192.168.4.51",                  //授权主库地址
 -> master_user="plj",                          //授权用户
 -> master_password="123qqq...A",             //授权密码
 -> master_log_file="master51.000001",       //主库日志文件
 -> master_log_pos=436;                     //偏移量

mysql> start slave;

mysql> show slave status\G;     //查看进程信息

2.1.3 配置从服务器53(备用主库)

]# vim /etc/my.cnf  
[mysqld]
server_id=53
log_bin=master53
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled = 1
rpl-semi-sync-slave-enabled = 1

relay_log_purge=off           //不自动删除本机的中继日志文件

]# systemctl restart mysqld

]# mysql -uoot -p密码

mysql> change master to
    -> master_host="192.168.4.51",
    -> master_user="plj",
    -> master_password="123qqq...A",
    -> master_log_file="master51.000001",
    -> master_log_pos=436;

mysql> start slave;                          //开启进程

mysql> show  slave  status\G;       //查看进程信息

2.1.4 配置从服务器54 (纯从库)
2.1.5 配置从服务器55 (纯从库)
配置从库(54和55操作)

]# vim /etc/my.cnf
[mysqld]
server_id=54
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rrpl-semi-sync-slave-enabled = 1
relay_log_purge=off

]# systemctl restart mysqld2.4  在主机56上运行管理服务,并查看服务状态

]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf

]# masterha_manager --conf=/etc/mha_manager/app1.cnf

]# mysql -uroot -p密码

mysql> change master to
    -> master_host="192.168.4.51",
    -> master_user="plj",
    -> master_log_file="master51.000001",
    -> master_password="123qqq...A",
    -> master_log_pos=436;

mysql> start slave;

mysql>show slave status\G;

2.2配置管理主机192.168.4.56

2.2.1 编写配置文件

]# mkdir   /etc/mha_manager
]#cd  mha4mysql-manager-0.5
]# ls
]# cp  samples/conf/app1.cnf  /etc/mha_manager/
]# vim /etc/mha_manager/app1.cnf 
[server default]
manager_workdir=/etc/mha_manager
manager_workdir=/etc/mha_manager
manager_log=/etc/mha_manager/manager.log
master_ip_failover_script=/etc/mha_manager/master_ip_failover       //自动failover的切换脚本

ssh_user=root
ssh_port=22
repl_user=plj                              //主从同步用户名 
repl_password=123qqq...A       //主从同步密码
user=root                               //数据库用户名
password=123qqq...A          //密码

[server1]                 
hostname=192.168.4.51               //设置候选master
candidate_master=1

[server2]                                 //设置候选master
hostname=192.168.4.52
candidate_master=1

[server3]                                   //设置候选master
hostname=192.168.4.53
candidate_master=1

[server4]                                   //不竞选master
hostname=192.168.4.54
no_master=1

[server5]                              //不竞选master
hostname=192.168.4.55
no_master=1

3.3 启动管理服务

使用masterha_manager 工具
---- --remove_dead_master_conf //删除宕机主库配置
— --ignore_last_failover //忽略xxx.health文件
查看状态:masterha_check_status
停止服务:masterha_stop

3.4测试mysql服务高可用
##############################################################################
2.2.2 创建故障切换脚本

]# cd /root/mha-soft-student/
]# cp master_ip_failover /etc/mha_manager/
]# vim +35 /etc/mha_manager/master_ip_failover 
my $vip = '192.168.4.100/24';  # Virtual IP 
]# chmod +x /etc/mha_manager/master_ip_failover 

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
2.2.3 把vip地址部署在当前的主库51上

[root@51 ~]# ifconfig eth0:1 192.168.4.100/24
[root@51 ~]# ifconfig eth0:1
eth0:1: flags=4163  mtu 1500
        inet 192.168.4.100  netmask 255.255.255.0  broadcast 192.168.4.255
        ether 52:54:00:95:ba:d9  txqueuelen 1000  (Ethernet)

2.2.4 用户授权(根据配置文件)
2.2.4.1 给从服务器同步数据的连接用户plj(51/52/53)
[root@51 ~]# mysql -uroot -p123456 -e ‘show grants for plj@"%"’

52mysql> grant replication slave on *.* to plj@"%" identified by "123qqq...A";
53mysql> grant replication slave on *.* to plj@"%" identified by "123qqq...A";

2.2.4.2 管理机56监视数据库服务器状态的连接用户root(51-55)

mysql>grant all on *.* to root@"%" identified by "123qqq...A";

三.测试配置
3.1.测试ssh密钥对认证登录

在管理节点上做ssh检查
–masterha_check_ssh --conf=管理节点主配置文件

]#masterha_check_ssh --conf=/etc/mha_manager/app1.cnf

3.2测试mysql主从同步

在管理节点查看集群状态
–masterha_check_repl --conf=管理节点主配置文件

]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf

3.3 启动管理服务(在56管理机操作)

  • 使用masterha_manager 工具 ---- --remove_dead_master_conf //删除宕机主库配置
    — --ignore_last_failover //忽略xxx.health文件
    查看状态:masterha_check_status 停止服务:masterha_stop

    ]# masterha_manager --conf=/etc/mha_manager/app1.cnf \ //启动服务
    –remove_dead_master_conf --ignore_last_failover

    ]# masterha_check_status --conf=/etc/mha_manager/app1.cnf //查看状态

3.4测试mysql服务高可用(51主库和50客户机上操作)

51mysql> create database db9;          //创建一个库

mysql> create table db9.t1(id int);    

mysql> grant select,insert  on  db9.* to yaya99@"%" identified by "123...A";   //用户授权

50 ~]# mysql -h192.168.4.100 -uroot -p123...A    //客户端用授权用户访问数据

mysql> select * from db9.t1;                            //查看db9.t1表

mysql> insert into db9.t1 values(111);         //添加数据1

mysql> insert into db9.t1 values(222);       //添加数据2

mysql> insert into db9.t1 values(333);      //添加数据3

mysql> select * from db9.t1;               //查看添加的数据

主从同步,可以看到相同的数据

[root@51 ~]# mysql -uroot -p123456 -e "select * from db9.t1"

当主库宕掉,备用主库继承VIP和主库仍然可以访问数据

56~]#masterha_manager --conf=/etc/mha_manager/app1.cnf  \    //管理机要保持监控
--remove_dead_master_conf --ignore_last_failove

另开一个终端查看状态

56 ~]# masterha_check_status  --conf=/etc/mha_manager/app1.cnf

[root@51 ~]# systemctl stop mysqld      //51主库宕掉了

查看是谁继承了主库

52~]# ifconfig eth0:1

53~]# ifconfig eth0:1

思考:
1 当前的52 也坏掉的时候 53 会不会 成为主库?

2 如何把坏掉的51 和 52 服务器 再添加到集群里?

2.1 启动51 和 52 主机的数据库服务

2.2 把51 和 52 主机 配置为的当前主服务器的从服务器

2.3 把主机51 和 52 添加app1.cnf文件里

]#vim /etc/mha_manager/app1.cnf
						[server1]
						candidate_master=1
						hostname=192.168.4.51

						[server2]
						candidate_master=1
						hostname=192.168.4.52
					:wq	

2.4 在主机56上运行管理服务,并查看服务状态

]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf

]# masterha_manager --conf=/etc/mha_manager/app1.cnf

遇到的问题:

ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --    server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.

解决方法;

mysql> drop table slave_master_info;
mysql> drop table slave_relay_log_info;
mysql> drop table slave_worker_info;
mysql> drop table innodb_index_stats;
mysql> drop table innodb_table_stats;
mysql> system systemctl restart mysqld

你可能感兴趣的:(mysqld,linux,运维)