**mha mysql 架构架构集群环境**
要点:其中master对外提供写服务,备选Candicate master(实际为slave1)提供读服务,slave2也提供读服务,一旦master宕机,将会把备选master提升为新的master,slave指向新的master
Manager工具包主要包括以下几个工具:
1. masterha_check_ssh --conf=/etc/masterha/app1.cnf 测试ssh 是否免密登录 All SSH connection tests passed successfully. 代表成功
2. 测试repl 主从账户是否建立好:masterha_check_repl --conf=/etc/masterha/app1.cnf 出现MySQL Replication Health is OK. 代表连接成功
3. 启动MHA : nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log 2>&1&
4. 查看监控日志:tail -f /etc/masterha/app1/manager.log
5. 检查启动的状态
masterha_check_status --conf=/etc/masterha/app1.cnf
**出现宕机解决方法**
首先查看监控日志,检查启动状态,停止mha ( masterha_stop --conf=/etc/app1.cnf),查看(ps -aux |grep manages)如果从服务器宕机就重启mysql;如果主服务器宕机重启主服务器mysql 数据库,关闭slave(stop slave) ,把他更改成从服务器,(change master to master_host='ip账户',master_user='账户名',master_password='密码')
部署MHA: 四台机器
192.168.0.67
192.168.0.68
192.168.0.69
192.168.0.70
四台主机都要安装epel源
1. rpm-ivh (...epel 源)
2 . yum clean alll
3 .yum list
4 . 使用yum 安装全部依赖
yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager --skip-broken(有的主机可能会报错 咱们强制安装 输入 --nogpgcheck)
5 .上传MHA相关包 node 节点包 四台都要安装
rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm
安装完成后会在/usr/bin/目录下生成以下脚本文件
[root@xuegod67 bin]# pwd
/usr/bin/
[root@xuegod67 bin]# ll app* filter* purge* save*
-r-xr-xr-x 1 root root 15498 Apr 20 10:05 apply_diff_relay_logs
-r-xr-xr-x 1 root root 4807 Apr 20 10:05 filter_mysqlbinlog
-r-xr-xr-x 1 root root 7401 Apr 20 10:05 purge_relay_logs
-r-xr-xr-x 1 root root 7263 Apr 20 10:05 save_binary_logs
6.安装MHA manager
(1)安装MHA Node软件包之前需要安装依赖。我这里使用yum完成,首先epel源要安装。注意:刚才我们已经配置epel源。
(2)安装MHA Manager。首先安装MHA Manger依赖的perl模块(我这里使用yum安装):
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN -y
安装MHA Manager软件包:
[root@xuegod67 ~]# rpm -ivh mha4mysql-manager-0.55-0.el6.noarch.rpm
安装完成后会在/usr/bin目录下面生成以下脚本文件,前面已经说过这些脚本的作用,这里不再重复
[root@xuegod67 ~]# ll /usr/bin/mast*
-rwxr-xr-x 1 root root 1995 12月 13 2012 /usr/bin/masterha_check_repl
-rwxr-xr-x 1 root root 1779 12月 13 2012 /usr/bin/masterha_check_ssh
-rwxr-xr-x 1 root root 1865 12月 13 2012 /usr/bin/masterha_check_status
-rwxr-xr-x 1 root root 3201 12月 13 2012 /usr/bin/masterha_conf_host
-rwxr-xr-x 1 root root 2517 12月 13 2012 /usr/bin/masterha_manager
-rwxr-xr-x 1 root root 2165 12月 13 2012 /usr/bin/masterha_master_monitor
-rwxr-xr-x 1 root root 2373 12月 13 2012 /usr/bin/masterha_master_switch
-rwxr-xr-x 1 root root 3879 12月 13 2012 /usr/bin/masterha_secondary_check
-rwxr-xr-x 1 root root 1739 12月 13 2012 /usr/bin/masterha_stop
7.配置所有主机相互SSH登录无密码验证(使用key登录,工作中常用)。但是有一点需要注意:不能禁止 password 登陆,否则会出现错误
ssh免密码登录
ssh-keygen -t rsa
ssh-copy-id 10.10.10.68
四台主机都要重复这种操作
**主从搭建**
1.在68上搭建主
注意:binlog-do-db 和 replicate-ignore-db 设置必须相同。 MHA 在启动时候会检测过滤规则,如果过滤规则不同,MHA 不启动监控和故障转移。
(1)在xuegod68配置主数据库服务器
创建需要同步的数据库:
mysql> create database HA;
mysql> use HA;
mysql> create table test(id int,name varchar(20));
service mysqld stop
配置my.cnf:
vim /etc/my.cnf
log-bin=mysql-bin-master #启用二进制日志
server-id=1 #本机数据库ID 标示
binlog-do-db=HA #可以被从服务器复制的库。二进制需要同步的数据库名
binlog-ignore-db=mysql #不可以被从服务器复制的库
validate-password=off
重启mysql:
systemctl restart mysqld
授权:
mysql> grant replication slave on . to repl@‘10.10.10.%’ identified by ‘123456’;
mysql> flush privileges;
查看状态信息:
mysql> show master status;
导出数据库到从服务器(2个从)
mysqldump -uroot -p123456 –B HA >HA.sql
scp HA.sql 10.10.10.65:/root
scp HA.sql 10.10.10.66:/root
2.在69.70 上搭建从
(2)在xuegod69导入数据库并配置从服务:
[root@xuegod69 ~]# mysql -uroot -p123456 <HA.sql
配置my.cnf:
vim /etc/my.cnf
log-bin=mysql-slave1 #启用二进制日志
server-id=2 #本机数据库ID 标示
binlog-do-db=HA #可以被从服务器复制的库。二进制需要同步的数据库名
binlog-ignore-db=mysql #不可以被从服务器复制的库
log_slave_updates=1 #只有开启log_slave_updates,从库binlog才会记录主库同步的操作日志
validate-password=off
[root@xuegod69 ~]# systemctl restart mysqld 重启mysql
mysql> grant replication slave on . to ‘repl’@‘10.10.10.%’ identified by ‘123456’;
mysql> flush privileges;
建立主从关系
mysql> stop slave;
mysql> change master to master_host=‘10.10.10.68’,master_user=‘repl’,master_password=‘123456’;
(3)在xuegod70导入数据库并配置从服务:
[root@xuegod70 ~]# mysql -uroot -p123456 <HA.sql
配置my.cnf:
vim /etc/my.cnf
log-bin=mysql-slave2 #启用二进制日志
server-id=3 #本机数据库ID 标示
binlog-do-db=HA #可以被从服务器复制的库。二进制需要同步的数据库名
binlog-ignore-db=mysql #不可以被从服务器复制的库
log_slave_updates=1 #只有开启log_slave_updates,从库binlog才会记录主库同步的操作日志
validate-password=off
[root@xuegod70 ~]# systemctl restart mysqld 重启mysql
mysql> grant replication slave on . to ‘repl’@‘10.10.10.%’ identified by ‘123456’;
mysql> flush privileges;
建立主从关系
mysql> stop slave;
mysql> change master to master_host=‘10.10.10.68’,master_user=‘repl’,master_password=‘123456’;
注意;创建监控用户(在主从上都执行):
mysql> grant all privileges on . to ‘ly’@‘10.10.10.%’ identified by ‘123456’;
mysql> flush privileges;
到这里整个集群环境已经搭建完毕,剩下的就是配置MHA软件了。
[root@ xuegod67 ~]# mkdir -p /etc/masterha
[root@ xuegod67 ~]# mkdir -p /var/log/masterha/app1
[root@ xuegod67 ~]# vim /etc/masterha/app1.cnf
修改app1.cnf配置文件,修改后的文件内容如下(注意,配置文件中的注释需要去掉,我这里是为了解释清楚):
[root@rhel6-64-2 ~]# vi /etc/masterha/app1.cnf
[root@rhel6-64-2 ~]# cat /etc/masterha/app1.cnf
[server default]
manager_workdir=/etc/masterha/app1
manager_log=/etc/masterha/app1/manager.log
#日志文件及其路径,需要手动创建
user=gongzi
password=123456
#之前数据库远程登录的
ssh_user=root
#用于测试ssh登录的
repl_user=qianmen
repl_password=123456
#千门做主从的用户 这个也是每一台都要授权的
[server1]
hostname=172.28.7.203
port=3306
master_binlog_dir=/var/lib/mysql
candidate_master=1
check_repl_delay=0
#/var/lib/mysql这里路径也需要手工创建
[server2]
hostname=172.28.7.204
port=3306
master_binlog_dir=/var/lib/mysql
candidate_master=1
check_repl_delay=0
[server3]
hostname=172.28.7.205
port=3306
master_binlog_dir=/var/lib/mysql
ignore_fail=1
no_master=1
最后一步 测试 ssh
masterha_check_ssh --conf=/etc/masterha/app1.cnf
2、测试repl
masterha_check_repl --conf=/etc/masterha/app1.cnf
查看监控日志
tail -f /etc/masterha/app1/manager.log
Ping(SELECT) succeeded, waiting until MySQL doesn’t respond…
一切准备就绪!就等着MYSQL无响应呢
成功搭建完成