栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

MySQL高可用架构基于MHA的搭建主从复制

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL高可用架构基于MHA的搭建主从复制

MySQL MHA架构介绍:

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。

由两部分组成:

MHA Manager(管理节点)和MHA Node(数据节点)。

 下图展示了如何通过MHA Manager管理多组主从复制。

 可以将MHA工作原理总结为如下:

(1)从宕机崩溃的master保存二进制日志事件(binlog events);

(2)识别含有最新更新的slave;

(3)应用差异的中继日志(relay log)到其他的slave;

(4)应用从master保存的二进制日志事件(binlog events);

(5)提升一个slave为新的master;

(6)使其他的slave连接新的master进行复制;

环境准备

 

 

主机名称

IP

Service_id

角色

系统

Master-db1

192.168.100.102

1

master

Centos7

Slave-db1

192.168.100.103

2

Candicate master

Cento7

Slave-db2

192.168.100.104

3

slave

Centos7

Mha-monitor

192.168.100.105

 

Monitor host

Centos7

用sed命令,修改各主机名如下
sed -i '/^HOSTNAME/s/localhost.localdomain/master-db1/g' /etc/sysconfig/network
sed -i '/^HOSTNAME/s/localhost.localdomain/slave-db1/g' /etc/sysconfig/network
sed -i '/^HOSTNAME/s/localhost.localdomain/slave-db2/g' /etc/sysconfig/network
sed -i '/^HOSTNAME/s/localhost.localdomain/mha-monitor/g' /etc/sysconfig/network

 四台服务器互相配置ssh免密码登录(注意是互相)

四台机器同时运行以下命令
ssh-keygen -t rsa

以192.168.100.102为例
scp /root/.ssh/id_rsa.pub root@192.168.100.103:/root/.ssh/202.pub
scp /root/.ssh/id_rsa.pub root@192.168.100.104:/root/.ssh/202.pub
scp /root/.ssh/id_rsa.pub root@192.168.100.105:/root/.ssh/202.pub

分别登录到103 104 105,把公钥写到文件authorized_keys里边
cd /root/.ssh/ && cat 202.pub >> authorized_keys

其他三台一样
 搭建MySQL主从复制环境
  1. 在100.102上修改配置文件如下
    server-id=1
    log-bin=mysql-bin
    log-slave-updates
    sync_binlog=1
    auto_increment_increment=2
    auto_increment_offset=1
    symbolic-links=0

         第二台

server-id=2
log-bin=mysql-bin
log-slave-updates
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1
symbolic-links=0

        第三台  

 

server-id=3
sync_binlog=1
auto_increment_increment=2
auto_increment_offset=1
symbolic-links=0   


[mysqld_safe]
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/logs/mysqld.pid
从配置文件记得开启中继日志
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index

102  103  104 运行如下:

cp /usr/src/mysql-5.5.22/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
useradd -M -s /sbin/nologin mysql
ln -s /usr/local/mysql/bin/* /usr/bin/
chown -R mysql:mysql /usr/local/mysql
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
mkdir /usr/local/mysql/logs
chown -R mysql:mysql /usr/local/mysql/
/etc/init.d/mysqld start
ln -s /usr/local/mysql/data/mysql.sock /tmp/

 在100.102  100.103 和100.104上修改相应的server-id,修改mysql用户root的密码,并启动mysql

mysqladmin -u root -p password "123123"

 在Master 192.168.200.202和Candicate master 192.168.200.203上创建复制用户

grant replication slave on *.* to 'tepl'@'192.168.100.%' idntified by '123456;'

分别在两台服务器上执行复制相关命令

show master status;

 第二台:
change master to master_host='192.168.100.102',master_user='mrepl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=611;
start slave;
show slave statusG
第一台:上授权一个用户
grant all privileges on *.* to 'root'@'192.168.100.%' identified by '123456';
mysql> flush privileges; #刷新权限

 

安装MHA
  1. 安装MHA的Perl依赖包

在所有的机器上

yum install perl-DBD-MySQL perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN

在mha-monitor上安装MHA Manger依赖的perl模块

[root@mha-monitor ~]# yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y

[root@mha-monitor ~]#yum install perl-DBD-MySQL perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN
注意:以上安装失败,请记得配置perl-Log-Dispatch ftp  yum源
.在所有的服务器上安装MHA Node软件包
[root@master-db1 ~]# tar xf mha4mysql-node-0.56.tar.gz 
[root@master-db1 ~]# cd mha4mysql-node-0.56
[root@master-db1 mha4mysql-node-0.56]# perl Makefile.PL 
[root@master-db1 ~]# make && make install
3.在mha-monitor(192.168.100.105)上安装MHA Manager软件包
[root@mha-monitor ~]# tar xf mha4mysql-manager-0.56.tar.gz 
[root@mha-monitor ~]# cd mha4mysql-manager-0.56
[root@mha-monitor mha4mysql-manager-0.56]# perl Makefile.PL 
[root@mha-monitor~]# make && make install

安装完成后会在/usr/local/bin目录下面生成以下脚本文件,在/root/mha4mysql-manager-0.56/samples/scripts/下有些示例脚本复制到/usr/local/bin/下。

[root@mha-monitor ]#ll/root/mha4mysql-manager-0.56/samples/scripts/

配置MHA

1.创建MHA的工作目录,并且创建相关配置文件(在软件包解压后的目录里面有样例配置文件)。

[root@mha-monitor ~]# mkdir -p /etc/masterha

[root@mha-monitor ~]# cp /root/mha4mysql-manager-0.56/samples/conf/app1.cnf /etc/masterha/
  1. 修改app1.cnf配置文件,修改后的文件内容如下
[server default]

manager_workdir=/var/log/masterha/app1

manager_log=/var/log/masterha/app1/manager.log

master_binlog_dir=/var/lib/mysql

master_ip_failover_script=/usr/local/bin/master_ip_failover

master_ip_online_change_script=/usr/local/bin/master_ip_online_change

password=123456

user=root

ping_interval=1

remote_workdir=/tmp

repl_password=123456

repl_user=repl

report_script=/usr/local/send_report

secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.100.102 -s 192.168.100.103 -s 192.168.100.104

shutdown_script=""

ssh_user=root



[server1]

hostname=192.168.100.102

port=3306



[server2]

hostname=192.168.100.103

candidate_master=1

check_repl_delay=0

port=3306

[server3]

hostname=192.168.100.104

port=3306

no_master=1

设置定期清理relay脚本(两台slave服务器)

cat purge_relay_log.sh 
#!/bin/bash
user=root
passwd=123456
port=3306
log_dir='/data/masterha/log'
work_dir='/Data/apps'
purge='/usr/local/bin/purge_relay_logs'
if [ ! -d $log_dir ]
then
   mkdir $log_dir -p
fi

$purge --user=$user --password=$passwd --disable_relay_log_purge --port=$port --workdir=$work_dir >> $log_dir/purge_relay_logs.log 2>&1

添加执行权限,并添加到crontab定期执行,另外一台相同操作

[root@slave-db1 ~]#chmod +x purge_relay_log.sh

[root@slave-db1 ~]#crontab -l

0 4 * * * /bin/bash /root/purge_relay_log.sh

purge_relay_logs脚本删除中继日志不会阻塞SQL线程。

检查整个复制环境状况。

masterha_check_repl --conf=/etc/masterha/app1.cnf

注意:报错解决:在两台mysql从库配置文件中添加read-only=1

重启MySQL

  1. 开启MHA Manager监控

nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover /var/log/masterha/app1/manager.log 2>&1 &

[1] 7191

[root@mha-monitor ~]# nohup: 忽略输入并把输出追加到"nohup.out"

 查看MHA Manager监控状态:

可以看见已经在监控了,而且master的主机为192.168.100.102

停止MHA监控

masterha_stop --conf=/etc/masterha/app1.cnf   #停止

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/752076.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号