您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

MySQL集群架构:MHA+MySQL-PROXY+LVS实现MySQL集群架构

时间:2023-08-10 17:28:32  来源:今日头条  作者:Java小玖

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 0 ];then
        echo -n "download expect"
        success
        echo ""
else
        echo -n "download expect"
        fAIlure
        echo ""
        exit 8
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 1 2 3 4 5 7 8 9
do
ken=10.220.5.13$i
/usr/bin/expect<<eof
spawn ssh-copy-id $ken
expect {
"yes/no" {send yesr;exp_continue}
"password" {send or}
}
expect eof
exit
eof
done

 

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

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

 

[root@ken ~]# vim ssh2.sh 
#!/bin/bash
for i in 1 2 3 4 5 7 8 9 
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 1 2 3 4 5 7 8 9
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 0 ];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-0.el7.centos.noarch.rpm $ken:/root &>/dev/null
#各个节点安装mha node组件
if [ `ssh $ken rpm -ql mha4mysql-node | wc -l` -lt 2 ];then
ssh $ken rpm -ivh mha4mysql-node-0.58-0.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.5-linux-glibc2.3-x86-64bit.tar.gz /usr/local/ -f &>/dev/null
cd /usr/local/
tar xf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
ln -s mysql-proxy-0.8.5-linux-glibc2.3-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 0660 mysql-proxy.cnf
cat>mysql-proxy.cnf<<eof
[mysql-proxy]
user=mysql-proxy
admin-username=root
admin-password=123
proxy-address=10.220.5.135:4040
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 4040 ;then
echo -n "start mysql-proxy"
        success
        echo ""
else
        echo -n "start mysql-proxy"
        failure
        echo ""
        exit 8
fi

 

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

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

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

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

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

 

[root@ken ~]# vim lvs4.sh
#!/bin/bash
#3.实现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.32-754.el6.x86_64 /usr/src/linux &>/dev/null
yum install ipvsadm -y &>/dev/null
#绑定VIP以及添加后端节点服务器

ip a a $vip/24 dev eth0 &>/dev/null
ipvsadm -A -t $vip:3306 -s rr                &>/dev/null  #采用轮询
ipvsadm -a -t $vip:3306 -r $rip1:3306 -w 1 -g  &>/dev/null  #权重为1,采用DR模式
ipvsadm -a -t $vip:3306 -r $rip2:3306 -w 1 -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/32 dev lo:0
echo "1">/proc/sys.NET/ipv4/conf/lo/arp_ignore
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "2">/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 statusG"

 

[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
#5.实现MHA
#在本机即manager安装依赖包及所需软件
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y &>/dev/null
if [ $? -eq 0 ];then
        echo -n "manager download softs"
        success
        echo ""
else
        echo -n "manager download softs"
        failure
        echo ""
fi
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm  &>/dev/null
if [ $? -eq 0 ];then
        echo -n " manager download node"
        success
        echo ""
else
        echo -n "manager download node"
        failure
        echo ""
fi

rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm  &>/dev/null
if [ $? -eq 0 ];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=123
ssh_user=root
repl_user=ken
repl_password=123
ping_interval=1
#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=1
master_binlog_dir="/var/lib/mysql"
#查看方式 find / -name mysql-bin*
 
[server2]
hostname=10.220.5.133
candidate_master=1
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/24 dev eth0:0 &>/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 2>&1 &
#检查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 1 ];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 2>&1 &
    exit 3
  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 0 &>/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.5-linux-glibc2.3-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 30 00:42:16 2018 - [info]  binlog_do_db= , binlog_ignore_db= 
Tue Oct 30 00:42:16 2018 - [info]  Replication filtering check ok.
Tue Oct 30 00:42:16 2018 - [info] GTID (with auto-pos) is supported. Skipping all SSH and Node package checking.
Tue Oct 30 00:42:16 2018 - [info] Checking SSH publickey authentication settings on the current master..
Tue Oct 30 00:42:16 2018 - [info] HealthCheck: SSH to 10.220.5.132 is reachable.
Tue Oct 30 00:42:16 2018 - [info] 
10.220.5.132(10.220.5.132:3306) (current master)
 +--10.220.5.133(10.220.5.133:3306)

Tue Oct 30 00:42:16 2018 - [info] Checking replication health on 10.220.5.133..
Tue Oct 30 00:42:16 2018 - [info]  ok.
Tue Oct 30 00:42:16 2018 - [info] Checking master_ip_failover_script status:
Tue Oct 30 00:42:16 2018 - [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=3306 


IN SCRIPT TEST====/sbin/ifconfig eth0:1 down==/sbin/ifconfig eth0:1 10.220.5.140/24===

Checking the Status of the script.. OK 
Tue Oct 30 00:42:16 2018 - [info]  OK.
Tue Oct 30 00:42:16 2018 - [warning] shutdown_script is not defined.
Tue Oct 30 00:42:16 2018 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.       <<主从复制显示正常
app1 is stopped(2:NOT_RUNNING).

[root@ken ~]# ps aux | grep perl      <<服务正常启动
root     14382  0.4  4.3 301488 21928 pts/1    S    00:42   0:00 perl /bin/masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover
root     14469  0.0  0.1 112704   972 pts/1    R+   00:43   0:00 grep --color=auto perl

 

MySQL架构集群测试

1.检测mha中VIP

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

 

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

 

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

lvs节点已经配置成功

 

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

 

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

登录成功,配置成功。

 

[root@ken ~]# mysql -uroot -p123 -h10.220.5.135 -P4040
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MySQL connection id is 58
Server version: 5.7.23-log MySQL Community Server (GPL)

Copyright (c) 2000, 2018, 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
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 00:0c:29:ab:76:d6 brd ff:ff:ff:ff:ff:ff
    inet 10.220.5.133/24 brd 10.220.5.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 10.220.5.140/24 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feab:76d6/64 scope link 
       valid_lft forever preferred_lft forever


Tags:MySQL   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
MySQL 核心模块揭秘
server 层会创建一个 SAVEPOINT 对象,用于存放 savepoint 信息。binlog 会把 binlog offset 写入 server 层为它分配的一块 8 字节的内存里。 InnoDB 会维护自己的 savepoint...【详细内容】
2024-04-03  Search: MySQL  点击:(5)  评论:(0)  加入收藏
MySQL 核心模块揭秘,你看明白了吗?
为了提升分配 undo 段的效率,事务提交过程中,InnoDB 会缓存一些 undo 段。只要同时满足两个条件,insert undo 段或 update undo 段就能被缓存。1. 关于缓存 undo 段为了提升分...【详细内容】
2024-03-27  Search: MySQL  点击:(10)  评论:(0)  加入收藏
MySQL:BUG导致DDL语句无谓的索引重建
对于5.7.23之前的版本在评估类似DDL操作的时候需要谨慎,可能评估为瞬间操作,但是实际上线的时候跑了很久,这个就容易导致超过维护窗口,甚至更大的故障。一、问题模拟使用5.7.22...【详细内容】
2024-03-26  Search: MySQL  点击:(9)  评论:(0)  加入收藏
从 MySQL 到 ByteHouse,抖音精准推荐存储架构重构解读
ByteHouse是一款OLAP引擎,具备查询效率高的特点,在硬件需求上相对较低,且具有良好的水平扩展性,如果数据量进一步增长,可以通过增加服务器数量来提升处理能力。本文将从兴趣圈层...【详细内容】
2024-03-22  Search: MySQL  点击:(23)  评论:(0)  加入收藏
MySQL自增主键一定是连续的吗?
测试环境:MySQL版本:8.0数据库表:T (主键id,唯一索引c,普通字段d)如果你的业务设计依赖于自增主键的连续性,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不...【详细内容】
2024-03-10  Search: MySQL  点击:(5)  评论:(0)  加入收藏
准线上事故之MySQL优化器索引选错
1 背景最近组里来了许多新的小伙伴,大家在一起聊聊技术,有小兄弟提到了MySQL的优化器的内部策略,想起了之前在公司出现的一个线上问题,今天借着这个机会,在这里分享下过程和结论...【详细内容】
2024-03-07  Search: MySQL  点击:(27)  评论:(0)  加入收藏
MySQL数据恢复,你会吗?
今天分享一下binlog2sql,它是一款比较常用的数据恢复工具,可以通过它从MySQL binlog解析出你要的SQL,并根据不同选项,可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。主要...【详细内容】
2024-02-22  Search: MySQL  点击:(43)  评论:(0)  加入收藏
如何在MySQL中实现数据的版本管理和回滚操作?
实现数据的版本管理和回滚操作在MySQL中可以通过以下几种方式实现,包括使用事务、备份恢复、日志和版本控制工具等。下面将详细介绍这些方法。1.使用事务:MySQL支持事务操作,可...【详细内容】
2024-02-20  Search: MySQL  点击:(51)  评论:(0)  加入收藏
为什么高性能场景选用Postgres SQL 而不是 MySQL
一、 数据库简介 TLDR;1.1 MySQL MySQL声称自己是最流行的开源数据库,它属于最流行的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。LAMP...【详细内容】
2024-02-19  Search: MySQL  点击:(37)  评论:(0)  加入收藏
MySQL数据库如何生成分组排序的序号
经常进行数据分析的小伙伴经常会需要生成序号或进行数据分组排序并生成序号。在MySQL8.0中可以使用窗口函数来实现,可以参考历史文章有了这些函数,统计分析事半功倍进行了解。...【详细内容】
2024-01-30  Search: MySQL  点击:(53)  评论:(0)  加入收藏
▌简易百科推荐
MySQL 核心模块揭秘
server 层会创建一个 SAVEPOINT 对象,用于存放 savepoint 信息。binlog 会把 binlog offset 写入 server 层为它分配的一块 8 字节的内存里。 InnoDB 会维护自己的 savepoint...【详细内容】
2024-04-03  爱可生开源社区    Tags:MySQL   点击:(5)  评论:(0)  加入收藏
MySQL 核心模块揭秘,你看明白了吗?
为了提升分配 undo 段的效率,事务提交过程中,InnoDB 会缓存一些 undo 段。只要同时满足两个条件,insert undo 段或 update undo 段就能被缓存。1. 关于缓存 undo 段为了提升分...【详细内容】
2024-03-27  爱可生开源社区  微信公众号  Tags:MySQL   点击:(10)  评论:(0)  加入收藏
MySQL:BUG导致DDL语句无谓的索引重建
对于5.7.23之前的版本在评估类似DDL操作的时候需要谨慎,可能评估为瞬间操作,但是实际上线的时候跑了很久,这个就容易导致超过维护窗口,甚至更大的故障。一、问题模拟使用5.7.22...【详细内容】
2024-03-26  MySQL学习  微信公众号  Tags:MySQL   点击:(9)  评论:(0)  加入收藏
从 MySQL 到 ByteHouse,抖音精准推荐存储架构重构解读
ByteHouse是一款OLAP引擎,具备查询效率高的特点,在硬件需求上相对较低,且具有良好的水平扩展性,如果数据量进一步增长,可以通过增加服务器数量来提升处理能力。本文将从兴趣圈层...【详细内容】
2024-03-22  字节跳动技术团队    Tags:ByteHouse   点击:(23)  评论:(0)  加入收藏
MySQL自增主键一定是连续的吗?
测试环境:MySQL版本:8.0数据库表:T (主键id,唯一索引c,普通字段d)如果你的业务设计依赖于自增主键的连续性,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不...【详细内容】
2024-03-10    dbaplus社群  Tags:MySQL   点击:(5)  评论:(0)  加入收藏
准线上事故之MySQL优化器索引选错
1 背景最近组里来了许多新的小伙伴,大家在一起聊聊技术,有小兄弟提到了MySQL的优化器的内部策略,想起了之前在公司出现的一个线上问题,今天借着这个机会,在这里分享下过程和结论...【详细内容】
2024-03-07  转转技术  微信公众号  Tags:MySQL   点击:(27)  评论:(0)  加入收藏
MySQL数据恢复,你会吗?
今天分享一下binlog2sql,它是一款比较常用的数据恢复工具,可以通过它从MySQL binlog解析出你要的SQL,并根据不同选项,可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。主要...【详细内容】
2024-02-22  数据库干货铺  微信公众号  Tags:MySQL   点击:(43)  评论:(0)  加入收藏
如何在MySQL中实现数据的版本管理和回滚操作?
实现数据的版本管理和回滚操作在MySQL中可以通过以下几种方式实现,包括使用事务、备份恢复、日志和版本控制工具等。下面将详细介绍这些方法。1.使用事务:MySQL支持事务操作,可...【详细内容】
2024-02-20  编程技术汇    Tags:MySQL   点击:(51)  评论:(0)  加入收藏
MySQL数据库如何生成分组排序的序号
经常进行数据分析的小伙伴经常会需要生成序号或进行数据分组排序并生成序号。在MySQL8.0中可以使用窗口函数来实现,可以参考历史文章有了这些函数,统计分析事半功倍进行了解。...【详细内容】
2024-01-30  数据库干货铺  微信公众号  Tags:MySQL   点击:(53)  评论:(0)  加入收藏
mysql索引失效的场景
MySQL中索引失效是指数据库查询时无法有效利用索引,这可能导致查询性能显著下降。以下是一些常见的MySQL索引失效的场景:1.使用非前导列进行查询: 假设有一个复合索引 (A, B)。...【详细内容】
2024-01-15  小王爱编程  今日头条  Tags:mysql索引   点击:(82)  评论:(0)  加入收藏
站内最新
站内热门
站内头条