MHA简介

MHA可以自动化实现主服务器故障转移,这样就可以快速将从服务器晋级为主服务器(通常在10-30s),而不影响复制的一致性,不需要花钱买更多的新服务器,不会有性能损耗,容易安装,不必更改现有的部署环境,适用于任何存储引擎。

MHA提供在线主服务器切换,改变先正运行的主服务器到另外一台上,这个过程只需0.5-2s的时间,这个时间内数据无法写入。

MHA Manager通过ssh连接mysql slave服务器。所以在配置MHA的时候,我们首先实现的就是各个节点的互信。

虽然MHA试图从宕掉的主服务器上保存二进制日志,并不是总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失最新数据。
使用半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此他们彼此保持一致性。

MySQL高可用架构图

MySQL高可用架构图说明

1.10.220.5.131作为MHA主节点,监控MySQL的各个节点,实现MySQL的高可用。

2.10.220.5.134下方一台作为MHA的备用节点,实现MHA服务器的高可用。在MHA主服务器端运行MHA监测脚本,当主MHA服务器宕机之后,自动启动备用MHA节点,完成MHA的高可用。

3.10.220.5.132作为整个MySQL集群中的主节点,用来执行客户端的写操作。

4.10.220.5.133作为主节点的从节点,采用主从同步的价格,实时同步主节点中的内容。

5.10.220.5.135配置MySQL-PROXY实现读写分离,提升整个MySQL集群结构的性能。客户端写的操作会被调度到10.220.5.132主节点之上,读操作会被调度到10.220.5.129(VIP)。

6.10.220.5.139作为LVS调度器,接收客户端的读请求并根据LVS调度规则,把请求调度到后方节点。

7.10.220.5.137以及10.220.5.138作为MySQL整个结构中的一环,一方面从一级节点同步客户端的写操作,另外还要实时返回客户端的读请求数据

MySQL架构集群脚本详解

上面的集群架构我已经写成了一个脚本,可以实现一键部署。已经把所有脚本压缩成一了个文件,解压之后会有下面一些文件。现在对整个脚本逐一进行讲解。

1.ssh秘钥自动分发脚本

要想实现上面的架构首先必须让各个节点实现互信,即各个节点都可以使用ssh免密登录到对方服务器上面,所以我们首先需要来解读一下ssh秘钥分发的脚本。

1. 下载expect。要想实现自动分发秘钥就要用到expect软件,它可以根据你要匹配的内容进行自动输入,所以我们首先要下载expect软件。

2. 删除保存的秘钥信息。首先需要判断一下私钥和公钥文件,以及保存host-key信息的known_hosts文件是否存在,如果存在就删除,这样可以实现脚本的循环使用。

3. 自动生成秘钥对。这个时候就要用到expect了,我们把需要执行的expect脚本内容传送给expect,就可以执行了。

4.在各个节点分发秘钥。把你各个节点的ip地址按照下述规则写进去即可。

5.执行该脚本即可完成对各个节点的分发了。

[root@ken ~]# vim ssh1.sh
#!/bin/bash
. /etc/init.d/functions
#下载expect
yum install expect -y &>/dev/null
if [ $? -eq ];then
echo -n "download expect"
success
echo ""
else
echo -n "download expect"
failure
echo ""
exit
fi
#删除保存的秘钥信息
if [ -f id_rsa -o -f id_rsa.pub -o known_hosts ];then
rm -rf /root/.ssh/id*
rm -rf /root/.ssh/known*
fi
#自动生成秘钥对
/usr/bin/expect<<eof
spawn ssh-keygen
expect {
"(/root/.ssh/id_rsa)" {send \r;exp_continue}
"passphrase" {send \r;exp_continue}
"again" {send \r}
}
expect eof
exit
eof
#在各个节点分发秘钥
for i in
do
ken=10.220.5.13$i
/usr/bin/expect<<eof
spawn ssh-copy-id $ken
expect {
"yes/no" {send yes\r;exp_continue}
"password" {send o\r}
}
expect eof
exit
eof
done

2.在各个节点之上执行ssh1.sh脚本

上面的ssh1.sh脚本已经完成了本机可以连接到各个节点了,现在我们需要把这个脚本推送至各个节点之上并执行,这样就可以实现架构中各个节点互信了。

[root@ken ~]# vim ssh2.sh 
#!/bin/bash
for i in 1 4
do
ip=10.220.5.13$i
scp /root/ssh1.sh $ip:/root/ &>/dev/null
ssh $ip bash /root/ssh1.sh
done

3.执行下载软件依赖的脚本

在这个脚本里面把所有的依赖包都安装一下。

1.登录到各个节点下载所需要的依赖软件。

2.把mha4mysql-node这个软件也推送到各个节点之上.

3.判断一下对方节点之上是否已经安装了node,没安装的话就再安装一下吧。

4.启动各个节点中的mysql.

[root@ken ~]# vim down2.sh
#!/bin/bash
. /etc/init.d/functions
#在各个节点下载相应的依赖软件
for i in
do
ken=10.220.5.13$i
ssh $ken yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y &>/dev/null
if [ $? -eq ];then
echo -n " download softs at $ken"
success
echo ""
else
echo -n " download softs $ken"
failure
echo ""
fi #把node软件推送到各个节点
scp /root/mha4mysql-node-0.58-.el7.centos.noarch.rpm $ken:/root &>/dev/null
#各个节点安装mha node组件
if [ `ssh $ken rpm -ql mha4mysql-node | wc -l` -lt ];then
ssh $ken rpm -ivh mha4mysql-node-0.58-.el7.centos.noarch.rpm &>/dev/null
fi
#开启各个节点中的mysql
ssh $ken mysqld & &>/dev/null
done

4.执行配置MySQL-PROXY的脚本

要想实现MySQL读写分离,现在我们就需要用到MySQL-PROXY软件了,现在就来安装吧。

1.解压mysql-proxy.首先我们需要准备mysql-proxy软件,这个软件我已经把它压缩在了整个脚本中,大家解压之后就可以执行一键安装的脚本,这个软件会被远程传送到需要安装的服务器节点之上。

2.创建运行的用户。首先创建一个运行mysql-proxy的系统用户。

3.配置mysql-proxy。接下来就是配置mysql-proxy了。大家可以根据脚本操作步骤进行一一配置。

4.准备mysql-proxy的配置文件。这里使用了cat结合重定向符进行写入,大家可以直接复制配置文件内容到你的服务器中,只需要修改成你的对应的IP地址即可

5.启动mysql-proxy。配置完成之后现在我们就可以启动了,如果你是按照下面脚本内容一步一步来的,应该不会报错。如果启动失败,可以查看/usr//local/mysql-proxy/logs/下面的日志文件,相信报的一些小错误你是可以解决的,加油。

6.如果你是和我一样是在centos7上配置的该软件,建议下载使用本机自带的mysql客户端即mariadb,避免软件兼容问题。

[root@ken ~]# vim mysqlp3.sh
#!/bin/bash
. /etc/init.d/functions
mv mysql-proxy-0.8.-linux-glibc2.-x86-64bit.tar.gz /usr/local/ -f &>/dev/null
cd /usr/local/
tar xf mysql-proxy-0.8.-linux-glibc2.-x86-64bit.tar.gz
ln -s mysql-proxy-0.8.-linux-glibc2.-x86-64bit mysql-proxy &>/dev/null #创建运行用户
useradd -s /sbin/nologin -r mysql-proxy &>/dev/null #配置proxy
#创建目录
cd /usr/local/mysql-proxy
mkdir logs lua &>/dev/null
#准备文件
cp share/doc/mysql-proxy/rw-splitting.lua ./lua/ -f
cp share/doc/mysql-proxy/admin-sql.lua ./lua/ -f
#配置读写分离规则
#sed -ri 's/min_idle_connections = ?/min_idle_connections = 1' ./lua/w-splitting.lua &>/dev/null
#sed -ri 's/min_idle_connections = ?/max_idle_connections = 1' ./lua/w-splitting.lua &>/dev/null #创建配置文件
cd /usr/local/mysql-proxy
touch mysql-proxy.cnf
chmod mysql-proxy.cnf
cat>mysql-proxy.cnf<<eof
[mysql-proxy]
user=mysql-proxy
admin-username=root
admin-password=
proxy-address=10.220.5.135:
proxy-read-only-backend-addresses=10.220.5.132
proxy-backend-addresses=10.220.5.140
proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua
admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true
eof
#启动服务
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/mysql-proxy.cnf
if ss -tnl |grep ;then
echo -n "start mysql-proxy"
success
echo ""
else
echo -n "start mysql-proxy"
failure
echo ""
exit
fi

5.执行配置LVS服务器端的脚本

毕竟我们是实现mysql的高性能架构,所以我们需要配置LVS实现读操作的调度。

1.定义VIP以及后端节点的IP地址。根据你的集群架构IP端,配置好各个节点的IP地址。

2.下载所需要的依赖以及服务。在下载这里你可以再判断一下是否下载成功,毕竟如果没有下载成功下面的就不会配置成功了。

3.检查是否配置成功。在这个脚本最后我添加了一行用来显示配置的命令,如果你的配置成功的话,会显示出来你的配置结果。

[root@ken ~]# vim lvs4.sh
#!/bin/bash
#.实现lvs
#lvs主服务器端脚本
#!/bin/bash
. /etc/init.d/functions #配置VIP及后端节点IP
vip=10.220.5.129
rip1=10.220.5.137
rip2=10.220.5.138 #下载依赖即软件
yum install libnl* popt* kernel-devel -y &> /dev/null
ln -s /usr/src/kernels/2.6.-.el6.x86_64 /usr/src/linux &>/dev/null
yum install ipvsadm -y &>/dev/null
#绑定VIP以及添加后端节点服务器
ip a a $vip/ dev eth0 &>/dev/null
ipvsadm -A -t $vip: -s rr &>/dev/null #采用轮询
ipvsadm -a -t $vip: -r $rip1: -w -g &>/dev/null #权重为1,采用DR模式
ipvsadm -a -t $vip: -r $rip2: -w -g &>/dev/null #权重为1,采用DR模式
ipvsadm -L -n --stats

6.执行配置LVS客户端的脚本

LVS服务不只需要配置服务器端,客户端也需要配置哦。毕竟我们是实现的一键部署,手工操作客户端的话也太low了,所以让脚本来代替我们完后这项工作吧!

1.首先定义一下你的VIP吧。

2.在本地回环地址之上绑定VIP。这样前方服务器就可以正常的往后端服务器节点进行调度了。

3.IP抑制了解一下?配置LVS一定要记得IP抑制问题。

4.执行完上下两个脚本就完成了LVS的配置了,是不是so easy信心爆棚了哪?

[root@ken ~]# vim lvs4c.sh
#!/bin/bash
vip=10.220.5.129
ip a a $vip/ dev lo:
echo "">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "">/proc/sys/net/ipv4/conf/all/arp_announce

7.执行配置级联复制的脚本--一级从脚本

mysql命令可以在bash命令行执行的,只需要加个参数-e就可以了,真是要感叹无数前辈的智慧了,这个选项对于写自动化脚本真的实在实在实在太好用了。强烈建议分分钟记住它,分分钟用起来!

1.首先需要停掉slave。目的是实现脚本的复用,又强调了一遍哦。

2.重置slave配置。这样我们又可以重新开始了啊。

3.授权一个用户吧。这样就可以实现两端同步了啊。如果基于安全起见,你也可以只赋予replication slave权限,这样会让你的数据库更加的安全。演示起见所以我就直接复制了all权限,毕竟可以少敲12345...键盘。

4.change一下master到你的主服务器端吧。

5.启动slave吧。

6.如果你放心你是否已经配置完毕可以再加一条: mysql -uroot -p123 -e "show slave status\G"

[root@ken ~]# vim yijis.sh
#!/bin/bash
mysql -uroot -p123 -e "stop slave;"
mysql -uroot -p123 -e "reset slave all;"
mysql -uroot -p123 -e "grant all on *.* to ken@'%' identified by '123';" &>/dev/null
mysql -uroot -p123 -e "change master to master_host='10.220.5.132',master_user='ken',master_password='123';"
mysql -uroot -p123 -e "start slave;"

8.执行配置级联复制的脚本--二级从脚本

二级脚本的内容和一级脚本内容是一样的,只是把master的IP地址指向你的二级从节点就可以了,所以这里就不再赘述。至于你要问我为什么不把这个脚本合在一级脚本之上的问题,还不是写完了之后才想到的。。。真是懒得改了。

#!/bin/bash
mysql -uroot -p123 -e "stop slave;"
mysql -uroot -p123 -e "reset slave all;"
mysql -uroot -p123 -e "grant all on *.* to ken@'%' identified by '123';" &>/dev/null
mysql -uroot -p123 -e "change master to master_host='10.220.5.133',master_user='ken',master_password='123';";
mysql -uroot -p123 -e "start slave;"

9.执行配置主节点MHA的脚本

1.首先需要安装一下MHA所依赖的包,毕竟使用日本大佬使用perl写的。

2.在主服务端安装manager节点。一个用来管理监控的软件。

3.全局配置文件。你只需要复制配置文件里面的内容,并修改你的IP以及用户就可以了。

4.主配置文件。因为我的架构是级联复制, 所以server里面只要写一个主节点IP一个一级从节点就可以了。

5.配置VIP脚本的文件我已经压缩在软件包里面了,解压之后就可以看到了。

#!/bin/bash
. /etc/init.d/functions
#.实现MHA
#在本机即manager安装依赖包及所需软件
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y &>/dev/null
if [ $? -eq ];then
echo -n "manager download softs"
success
echo ""
else
echo -n "manager download softs"
failure
echo ""
fi
rpm -ivh mha4mysql-node-0.58-.el7.centos.noarch.rpm &>/dev/null
if [ $? -eq ];then
echo -n " manager download node"
success
echo ""
else
echo -n "manager download node"
failure
echo ""
fi rpm -ivh mha4mysql-manager-0.58-.el7.centos.noarch.rpm &>/dev/null
if [ $? -eq ];then
echo -n "manager download manger soft"
success
echo ""
else
echo -n "manager download manager softs"
failure
echo ""
fi
#创建工作目录
mkdir -p /etc/mha/scripts &>/dev/null
#创建全局配置文件 cat>/etc/masterha_default.cnf<<eof
[server default]
user=root
password=
ssh_user=root
repl_user=ken
repl_password=
ping_interval=
#master_binlog_dir= /var/lib/mysql,/var/log/mysql
secondary_check_script=masterha_secondary_check -s 10.220.5.132 -s 10.220.5.133
master_ip_failover_script="/etc/mha/scripts/master_ip_failover"
master_ip_online_change_script="/etc/mha/scripts/master_ip_online_change"
report_script="/etc/mha/scripts/send_report"
eof
#生成主配置文件
cat>/etc/mha/app1.cnf<<eof
[server default]
manager_workdir=/var/log/mha/app1
manager_log=/var/log/mha/app1/manager.log
[server1]
hostname=10.220.5.132
candidate_master=
master_binlog_dir="/var/lib/mysql"
#查看方式 find / -name mysql-bin* [server2]
hostname=10.220.5.133
candidate_master=
master_binlog_dir="/var/lib/mysql"
eof
#配置VIP
cp /root/master_ip_failover /etc/mha/scripts/ -f #配置编写VIP脚本
cp /root/master_ip_online_change /etc/mha/scripts/ -f #赋予脚本可执行权限
chmod +x /etc/mha/scripts/master_ip_failover
chmod +x /etc/mha/scripts/master_ip_online_change
#chmod +x /etc/mha/scripts/send_report
# 通过 masterha_check_ssh 验证 ssh 密钥是否正常
masterha_check_ssh --conf=/etc/mha/app1.cnf
#通过 masterha_check_repl 验证 mysql 主从复制是否成功
masterha_check_repl --conf=/etc/mha/app1.cnf
#在master上绑定vip
ssh 10.220.5.132 ip a a 10.220.5.140/ dev eth0: &>/dev/null
#通过 masterha_manager 启动 MHA 监控(在manager角色上执行)
mkdir /var/log/mha/app1 -p &>/dev/null
touch /var/log/mha/app1/manager.log &>/dev/null
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log >& &
#检查MHA的启动状态
#检查集群状态
masterha_check_status --conf=/etc/mha/app1.cnf

10.MHA高可用监测脚本

这个监测脚本放在主服务器端后台运行,如果发现主节点服务宕机就启动备用节点。为了以防主机点意外关机,无法执行ssh命令启动备用节点,你也可以把这个脚本放在备用节点,具体怎么修改相信聪明的你一下就看明白了。

#!/bin/bash
while true
do
  if [ `ps -aux |grep perl.*mha |wc -l` -eq ];then
    ssh 10.220.5.134 nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log >& &
    exit
  fi
done

MySQL架构集群实现

目前为止所有的脚本都已经接收完毕,现在需要把这些脚本整合在一个脚本里面,只要进行推送就行了,这样我们就实现了一键部署。下面来看一下这个脚本里面都有什么吧。

1.首先关闭防火墙,以免遇到不必要的错误。

2.在本机(MHA主节点)运行分发秘钥的脚本,保证能够连同各个节点,推送脚本及软件。

3.执行下载软件的脚本。

4.执行mysql-proxy的脚本

5.执行部署LVS的脚本

6.执行实现级联复制的脚本

7.打包的脚本文件以及把mha备节点的脚本都推送到备节点执行,获得一个mha备用节点

8.执行配置mha的脚本。

9.执行监控mha主节点的脚本。

[root@ken ~]# vim jiagouzhu.sh
#!/bin/bash
. /etc/init.d/functions #关闭本机防火墙
setenforce &>/dev/null
systemctl stop firewalld &>/dev/null #执行分配秘钥脚本
bash /root/ssh1.sh #推送脚本至各个节点
bash /root/ssh2.sh #执行下载相应软件及启动mysqld的脚本
bash /root/down2.sh #执行部署mysql-proxy的脚本
scp /root/mysql-proxy-0.8.-linux-glibc2.-x86-64bit.tar.gz 10.220.5.135:/root
scp /root/mysqlp3.sh 10.220.5.135:/root
ssh 10.220.5.135 bash /root/mysqlp3.sh #执行部署lvs服务器端脚本
scp /root/lvs4.sh 10.220.5.139:/root
ssh 10.220.5.139 bash /root/lvs4.sh
#执行部署lvs客户端脚本
scp /root/lvs4c.sh 10.220.5.137:/root
scp /root/lvs4c.sh 10.220.5.138:/root
ssh 10.220.5.137 bash /root/lvs4c.sh
ssh 10.220.5.138 bash /root/lvs4c.sh
#执行实现级联复制脚本
scp /root/zhum.sh 10.220.5.132:/root
ssh 10.220.5.132 bash /root/zhum.sh scp /root/yijis.sh 10.220.5.133:/root
ssh 10.220.5.133 bash /root/yijis.sh scp /root/erjis.sh 10.220.5.137:/root
ssh 10.220.5.137 bash /root/erjis.sh scp /root/erjis.sh 10.220.5.138:/root
ssh 10.220.5.138 bash /root/erjis.sh #执行发送备mha脚本
scp /root/mysqljiagou.tar.gz 10.220.5.134:/root
ssh 10.220.5.134 tar xf /root/mysqljiagou.tar.gz
ssh 10.220.5.134 bash /root/ssh1.sh
ssh 10.220.5.134 bash /root/ssh2.sh
ssh 10.220.5.134 bash /root/mha6bei.sh #执行监控主节点的脚本
#nohup bash /root/checkmha.sh &
#执行实现mha的脚本
bash /root/mha6.sh

当你看到下面的返回结果的时候,你的MySQL架构集群已经开始运行起来了.

...
Tue Oct :: - [info] binlog_do_db= , binlog_ignore_db=
Tue Oct :: - [info] Replication filtering check ok.
Tue Oct :: - [info] GTID (with auto-pos) is supported. Skipping all SSH and Node package checking.
Tue Oct :: - [info] Checking SSH publickey authentication settings on the current master..
Tue Oct :: - [info] HealthCheck: SSH to 10.220.5.132 is reachable.
Tue Oct :: - [info]
10.220.5.132(10.220.5.132:) (current master)
+--10.220.5.133(10.220.5.133:) Tue Oct :: - [info] Checking replication health on 10.220.5.133..
Tue Oct :: - [info] ok.
Tue Oct :: - [info] Checking master_ip_failover_script status:
Tue Oct :: - [info] /etc/mha/scripts/master_ip_failover --command=status --ssh_user=root --orig_master_host=10.220.5.132 --orig_master_ip=10.220.5.132 --orig_master_port= IN SCRIPT TEST====/sbin/ifconfig eth0: down==/sbin/ifconfig eth0: 10.220.5.140/=== Checking the Status of the script.. OK
Tue Oct :: - [info] OK.
Tue Oct :: - [warning] shutdown_script is not defined.
Tue Oct :: - [info] Got exit code (Not master dead). MySQL Replication Health is OK. <<主从复制显示正常
app1 is stopped(:NOT_RUNNING).
[root@ken ~]# ps aux | grep perl <<服务正常启动
root 0.4 4.3 pts/ S : : perl /bin/masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover
root 0.0 0.1 pts/ R+ : : grep --color=auto perl

MySQL架构集群测试

 1.检测mha中VIP

可以看到10.220.5.140已经在mysql主服务节点之上了,检测成功。

[root@ken ~]# ip a
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UNKNOWN group default qlen
link/ether :0c::ab::d6 brd ff:ff:ff:ff:ff:ff
inet 10.220.5.132/ brd 10.220.5.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 10.220.5.140/ scope global secondary eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feab:76d6/ scope link
valid_lft forever preferred_lft forever

 2.检测LVS节点是否配置成功

lvs节点已经配置成功

[root@ken ~]# ipvsadm -L -n
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.220.5.129: rr
-> 10.220.5.137: Route
-> 10.220.5.138: Route

3.检测mysql-proxy是否配置成功

登录成功,配置成功。

[root@ken ~]# mysql -uroot -p123 -h10.220.5. -P4040
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is
Server version: 5.7.-log MySQL Community Server (GPL) Copyright (c) , , Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>

4.创建数据库检测

在主节点之上创建数据库,查看一级节点以及二级从节点是否可以同步数据。

在主节点创建数据库ken99

[root@ken ~]# mysql -uroot -p -e "create database ken99;"

在一级从节点查看数据库信息

[root@ken ~]# mysql -uroot -p -e "show databases;"
Enter password:
+--------------------+
| Database |
+--------------------+
| information_schema |
| ken99 |
| ken999 |
| mysql |
| performance_schema |
| sys |
+--------------------+

在二级从节点查看数据库信息,一级二级从节点都已经同步主节点数据库,验证成功。

[root@ken ~]# mysql -uroot -p -e "show databases;"
Enter password:
+--------------------+
| Database |
+--------------------+
| information_schema |
| ken99 |
| ken999 |
| mysql |
| performance_schema |
| sys |
+--------------------+

5.关掉mysql主服务器

关掉mysql的主服务器,查看VIP是否会漂移到备节点之上。

[root@ken ~]# pkill mysqld

查看备节点是否已经有了VIP。可以发现VIP已经漂移到了10.220.5.133之上,完成了mysql的高可用。

[root@ken ~]# ip a
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UNKNOWN group default qlen
link/ether :0c::ab::d6 brd ff:ff:ff:ff:ff:ff
inet 10.220.5.133/ brd 10.220.5.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 10.220.5.140/ scope global secondary eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feab:76d6/ scope link
valid_lft forever preferred_lft forever

MySQL集群架构:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken的更多相关文章

  1. 网站集群架构(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)--技术流ken

    前言 最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客.数据库集群请参考<MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高 ...

  2. Redis Cluster集群架构实现(四)--技术流ken

    Redis集群简介 通过前面三篇博客的介绍<Redis基础认识及常用命令使用(一)--技术流ken>,<Redis基础知识补充及持久化.备份介绍(二)--技术流ken>,< ...

  3. 高可用集群之keepalived+lvs实战-技术流ken

    keepalived简介 lvs在我之前的博客<高负载集群实战之lvs负载均衡-技术流ken>中已经进行了详细的介绍和应用,在这里就不再赘述.这篇博文将把lvs与keepalived相结合 ...

  4. MySQL系列详解八:MySQL多线程复制演示-技术流ken

    前言 Mysql 采用多线程进行复制是从 Mysql 5.6 开始支持的内容,但是 5.6 版本下有缺陷,虽然支持多线程,但是每个数据库只能一个线程,也就是说如果我们只有一个数据库,则主从复制时也只有 ...

  5. MySQL/MariaDB数据库忘掉密码解决办法--技术流ken

    前言 有些时候我们常常会忘掉一些服务的密码,比如系统密码,我们可以进入救援模式进行修改密码,可参考我之前的博客<Centos7破解密码的两种方法--技术流ken>.但有些时候我们也会忘掉数 ...

  6. k8s集群监控(十一)--技术流ken

    Weave Scope   在我之前的docker监控中<Docker容器监控(十)--技术流ken>就已经提到了weave scope. Weave Scope 是 Docker 和 K ...

  7. lvs+keepalived+bind实现负载均衡高可用智能dns【转】

    转:https://www.cnblogs.com/mikeluwen/p/7068356.html 整体架构: 1.IP地址规划: Dns1:172.28.0.54 Dns2:172.28.0.55 ...

  8. lvs+keepalived+bind实现负载均衡高可用智能dns

    整体架构: 1.IP地址规划: Dns1:172.28.0.54 Dns2:172.28.0.55 Dr服务器主:172.28.0.57 Dr服务器从:172.28.0.67 Vip:172.28.0 ...

  9. MySQL + KeepAlived + LVS 单点写入主主同步高可用架构实验

    分类: MySQL 架构设计 2013-05-08 01:40 5361人阅读 评论(8) 收藏 举报 mysql 高可用 keepalive ㈠ 实战环境 服务器名· IP OS MySQL odd ...

随机推荐

  1. Linux下网站根目录权限

    网站根目录权限遵循: 文件644 文件夹755 权限用户和用户组www-data 如出现文件权限问题时,请执行下面3条命令: chown -R www-data.www-data /usr/local ...

  2. DCGAN 代码简单解读

    之前在DCGAN文章简单解读里说明了DCGAN的原理.本次来实现一个DCGAN,并在数据集上实际测试它的效果.本次的代码来自github开源代码DCGAN-tensorflow,感谢carpedm20 ...

  3. dotnet-warp && NSSM 部署 .net core 项目到 windows 服务

    如果你想将 .net core 项目以服务的形式部署到 windows 系统,希望本篇文章能够让你少走弯路 dotnet-warp 安装使用 dotnet-warp 是一个全局的.NET Core 工 ...

  4. 如何做好技术Team Leader

    背景 互联网公司的技术团队管理通常分为2个方向:技术管理和团队管理,互联网公司的技术TL与传统软件公司的PM还是有很大的区别,传统软件公司的PM更多注重于对项目的管理包括项目任务拆解.项目进度以及风险 ...

  5. BF-9000 BMC任务关键型应急通信系统

    一.系统简介 BF-9000 BMC任务关键型应急通信系统,凝聚北峰通信近30年专网通信与应急通信研发的经验,并结合用户实际需求和应用场景所打造. 整体设计思路是采用骨干网.前指网.分队战斗网三层组网 ...

  6. 一文了解 Hadoop 运行机制

    大数据技术栈在当下已经是比较成熟的了,Hadoop 作为大数据存储的基石,其重要程度不言而喻,作为一个想从 java 后端转向大数据开发的程序员来说,打好 Hadoop 基础,就相当于夯实建造房屋的地 ...

  7. DS控件库 Win7链接列表框的仿Windows开始菜单样式

    Win7链接列表框是依照Windows7的开始菜单开发的,同时进行了属性和功能的扩展. 效果图 项属性 控件属性 控件主要事件 点击项(Sender As Win7链接列表框, Itm As 链接项, ...

  8. 内部类、异常以及 LeetCode 每日一题

    1 内部类 内部类的作用: 内部类提供了更好的封装,可以把内部类隐藏于外部类之内,不允许同一个包中的其他类访问该类.(例如给“牛”这个类组合一个“牛腿”,则可以把牛腿定义成内部类,因为牛腿脱离了牛没有 ...

  9. VirtualAPK的简单使用

    VirtualApk引入步骤: 一.宿主应用引入VirtualApk 1.在项目的build.gradle文件中加入依赖: dependencies { classpath 'com.didi.vir ...

  10. BI基础知识