MHA简介
MHA能够自动化实现主服务器故障转移,这样就能够快速将从服务器晋级为主服务器(一般在10-30s),而不影响复制的一致性,不须要花钱买更多的新服务器,不会有性能损耗,容易安装,没必要更改现有的部署环境,适用于任何存储引擎。node
MHA提供在线主服务器切换,改变先正运行的主服务器到另一台上,这个过程只需0.5-2s的时间,这个时间内数据没法写入。mysql
MHA Manager经过ssh链接mysql slave服务器。因此在配置MHA的时候,咱们首先实现的就是各个节点的互信。linux
虽然MHA试图从宕掉的主服务器上保存二进制日志,并非老是可行的。例如,若是主服务器硬件故障或没法经过ssh访问,MHA无法保存二进制日志,只进行故障转移而丢失最新数据。
使用半同步复制,能够大大下降数据丢失的风险。MHA能够与半同步复制结合起来。若是只有一个slave已经收到了最新的二进制日志,MHA能够将最新的二进制日志应用于其余全部的slave服务器上,所以他们彼此保持一致性。sql
MySQL高可用架构图
MySQL高可用架构图说明
1.10.220.5.131做为MHA主节点,监控MySQL的各个节点,实现MySQL的高可用。数据库
2.10.220.5.134下方一台做为MHA的备用节点,实现MHA服务器的高可用。在MHA主服务器端运行MHA监测脚本,当主MHA服务器宕机以后,自动启动备用MHA节点,完成MHA的高可用。vim
3.10.220.5.132做为整个MySQL集群中的主节点,用来执行客户端的写操做。后端
4.10.220.5.133做为主节点的从节点,采用主从同步的价格,实时同步主节点中的内容。centos
5.10.220.5.135配置MySQL-PROXY实现读写分离,提高整个MySQL集群结构的性能。客户端写的操做会被调度到10.220.5.132主节点之上,读操做会被调度到10.220.5.129(VIP)。安全
6.10.220.5.139做为LVS调度器,接收客户端的读请求并根据LVS调度规则,把请求调度到后方节点。bash
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 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 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 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 #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