MySQL MHA集群搭建

开始前,需要先完成MySQL主备集群和keepalived搭建

一、MySQL主备集群搭建

二、keepalived搭建(用于MHA集群负载)

三、MHA的搭建 (普通用户下监控)

删除时用到的一个指令
ps -ef |grep -v sshd |grep sshd| awk '{print $2}'|xargs kill -9

1. 创建connect监控用户(注意connect用户组为mysql)

1、配置所有主机(包括Manager主机在内),实现ssh-key可以相互登陆
当配置文件中的 ssh_user 为非 root 用户时:

  • 需要手动创建node节点主机的文件夹,并授权node主机remote_workdir目录的权限给ssh_user用户
  • 添加用户为MySQL同组用户,使其有读取mysql binary/relay log文件和relay_log.info文件的权限
  • 授权Mysql日志目录的写权限
useradd -d /home/connect  connect  -g  mysql 
echo 'connect@2019' | passwd --stdin connect
echo "connect soft nofile 131072" >> /etc/security/limits.conf
echo "connect hard nofile 131072" >> /etc/security/limits.conf
echo "connect soft nproc unlimited" >> /etc/security/limits.d/20-nproc.conf
echo "connect hard nproc unlimited" >> /etc/security/limits.d/20-nproc.conf
chage -M 99999 connect

2. 配置connect用户下免密

  • 步骤1: 用 ssh-key-gen 在主机10.162.16.221上创建公钥和密钥
ssh-keygen -t rsa     
  • 步骤2: 用 ssh-copy-id 把公钥复制到远程主机上
 ssh-copy-id -i ~/.ssh/id_rsa.pub  10.162.16.222
  • 步骤3:ssh到主机10.162.16.222
scp -r ~/.ssh/ 到10.162.16.221和10.162.16.223

3. 搭建MHA

(1) node节点部署:

在第三台mysql的slave节点部署manager(这里是10.162.16.222)
部署前的rpm环境安装(3节点都执行):

yum install perl-DBD-MySQL -y
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes -y

在hadoop的 rpm路径下执行:

yum localinstall perl-*.rpm
yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
yum -y install perl-CPAN

tar  -zxvf  mha4mysql-node-0.58.tar.gz
mv  mha4mysql-node-0.58  mha4mysql-node
cd  mha4mysql-node

进入root用户下执行:

perl Makefile.PL
make && make install

(2) manager节点部署:

tar -zxvf mha4mysql-manager-0.58.tar.gz
mv mha4mysql-manager-0.58 mha4mysql-manager
cd mha4mysql-manager

进入root用户下执行:

perl Makefile.PL
make && make install
cp /home/connect/mha4mysql-manager/samples/scripts/* /usr/local/bin/

#修改配置文件:
chmod 777 /etc/masterha
vim /etc/masterha/app1.cnf

修改app1.cnf配置文件,修改后的文件内容如下(注意,配置文件中的注释需要去掉,我这里是为了解释清楚):

[root@192.168.0.20 ~]# cat /etc/masterha/app1.cnf
[server default]

manager_workdir=/var/log/masterha/app1.log //设置manager的工作目录

manager_log=/var/log/masterha/app1/manager.log //设置manager的日志

master_binlog_dir=/data/mysql //设置master 保存binlog的位置,以便MHA可以找到master的日志,我这里的也就是mysql的数据目录

master_ip_failover_script= /usr/local/bin/master_ip_failover //设置自动failover时候的切换脚本

master_ip_online_change_script= /usr/local/bin/master_ip_online_change //设置手动切换时候的切换脚本

password=123456  //设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码

user=root 设置监控用户root

ping_interval=1  //设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行railover

remote_workdir=/tmp //设置远端mysql在发生切换时binlog的保存位置

repl_password=123456  //设置复制用户的密码

repl_user=repl //设置复制环境中的复制用户名

report_script=/usr/local/send_report //设置发生切换后发送的报警的脚本

secondary_check_script= /usr/local/bin/masterha_secondary_check -s server03 -s server02           
shutdown_script=""  //设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用)

ssh_user=root //设置ssh的登录用户名

[server1]

hostname=192.168.0.50

port=3306

[server2]

hostname=192.168.0.60

port=3306

candidate_master=1  //设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中事件最新的slave

check_repl_delay=0  //默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master

[server3]

hostname=192.168.0.70

port=3306

[server default]
manager_workdir=/home/connect/masterha/app1.log             
manager_log=/home/connect/masterha/app1/manager.log
master_binlog_dir=/data/mysql-bin/
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=admin              
ping_interval=1         
remote_workdir=/home/connect/tmp
repl_password=123456   
repl_user=master
#report_script=/usr/local/send_report   
secondary_check_script= /usr/local/bin/masterha_secondary_check -s dgp-lf-x86-hx03 -s dgp-lf-x86-hx01          
shutdown_script=""      
ssh_user=connect

[server1]
hostname=10.162.16.221
port=3306

[server2]
hostname=10.162.16.223
port=3306
candidate_master=1
check_repl_delay=0   

[server3]
hostname=10.162.16.222
port=3306

(3) 按照配置文件创建监控用户,以及文件目录:


master同步用户,admin监控用户设置(三节点的mysql中):
参照:https://www.cnblogs.com/gomysql/p/3675429.html

grant all privileges on *.* to 'admin'@'10.162.16.%' identified  by '123456';
grant all privileges on *.* to 'admin'@'10.162.16.221' identified  by '123456';
grant all privileges on *.* to 'admin'@'10.162.16.222' identified  by '123456';
grant all privileges on *.* to 'admin'@'10.162.16.223' identified  by '123456';
flush privileges

进入connect家目录:

mkdir   -p   /home/connect/masterha/{app1,app1.log}
touch   /home/connect/masterha/app1/manager.log
mkdir    /home/connect/tmp

chmod -R 755 /usr/local/lib64/
chmod -R 755 /usr/local/share/perl5
chmod -R 755 /usr/lib64/perl5/vendor_perl
chmod -R 755 /usr/share/perl5/vendor_perl
chmod -R 755 /usr/lib64/perl5
chmod -R 755 /usr/share/perl5   

echo "export PATH=\$PATH:/usr/local/bin" >> /etc/profile 
source ~/.bash_profile

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

#!/bin/bash
user=admin
passwd=123456
port=3306
log_dir='/home/connect/masterha/log'
work_dir='/home/connect/masterha/data'
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
mkdir   -p   /home/connect/masterha/log (root权限755)
mkdir   -p   /home/connect/masterha/data (connect用户)

添加到crontab定期执行:

crontab  -l (查看)
crontab  -e (添加)
0 4 * * * /bin/bash  /home/connect/purge_relay_log.sh

4. MHA检测配置

(1)检查MHA Manger到所有MHA Node的SSH连接状态:

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

(2)检查整个复制环境状况。

通过masterha_check_repl脚本查看整个集群的状态:

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

(3)检查MHA Manager的状态:

通过master_check_status脚本查看Manager的状态:

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


注意:如果正常,会显示"PING_OK",否则会显示"NOT_RUNNING",这代表MHA监控没有开启。

(4)开启MHA Manager监控:

nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /home/connect/masterha/app1/manager.log 2>&1 &  

启动参数介绍:
--remove_dead_master_conf 该参数代表当发生主从切换后,老的主库的ip将会从配置文件中移除。
--manger_log 日志存放位置
--ignore_last_failover 在缺省情况下,如果MHA检测到连续发生宕机,且两次宕机间隔不足8小时的话,则不会进行Failover,之所以这样限制是为了避免ping-pong效应。该参数代表忽略上次MHA触发切换产生的文件,默认情况下,MHA发生切换后会在日志目录,也就是上面我设置的/data产生app1.failover.complete文件,下次再次切换的时候如果发现该目录下存在该文件将不允许触发切换,除非在第一次切换后收到删除该文件,为了方便,这里设置为--ignore_last_failover。

查看MHA Manager监控是否正常:

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

(5)查看启动日志:

tail  -n20  /home/connect/masterha/app1/manager.log

其中"Ping(SELECT) succeeded, waiting until MySQL doesn't respond.."说明整个系统已经开始监控了。

(6)关闭MHA Manage监控:

关闭很简单,使用masterha_stop命令完成:

masterha_stop --conf=/etc/masterha/app1.cnf
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容