快速,持续,稳定,傻瓜式
支持Mysql,Sqlserver数据同步

Keepalived+LVS+MySQL主从复制实现读写分离及高可用

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

版权声明:本文是博主的原创文章,未经博主许可不得重印。 https://blog.csdn.net/wzy0623/article/details/81045843

目录

首先,架构设计

2.安装和配置

1.配置MySQL半同步复制

1.1半同步复制的基本概念

1.2半同步复制的潜在问题

1.3半同步复制的安装和部署

2.下载并安装LVS

3.下载并安装Keepalived

4 。iptables配置

5.Keepalived配置

5.编写RealServer网络配置脚本

6.启动RealServer和Keepalived

三,测试

参考:


通过前面的两个实验,我们基本了解了Keepalived和LVS的工作原理。在本文中,我们将进行与上一个实验不同的新实验:使用Keepalived + LVS + MySQL主从复制来实现读写分离和高可用性。

具体架构如图1所示。

图1

从图1可以看出,使用两个主机进行MySQL主从复制,以实现读写分离,从而提高了查询性能。使用MySQL 5.6.x半同步来实现数据复制和同步。使用Keepalived监视MySQL并提供读写VIP漂移。 Keepalived主要在此处用于检查RealServer的运行状况以及LoadBalance主机和Backup主机之间的故障转移的实现。任何主机的停机时间都不会影响外部服务的提供(读和写VIP可能会漂移),从而保持MySQL数据库服务的高可用性。

Keepalived实现了基于VRRP协议的高可用性解决方案,并使用它来避免单点故障。通常在此解决方案中,至少有两台运行Keepalived的服务器,一台是主服务器,另一台是备用服务器,但从外部将其表示为VIP或一组VIP。主机将特定消息发送到备份。当备份未能接收到该消息时,则认为主服务器已失败。备份将接管VIP,并继续提供服务,从而确保高可用性。 LVS在此示例中的作用是提供读取负载平衡。整个体系结构的设计原理和异常处理可以描述如下:

  1. RealServer A和B,配置为MySQL半同步的主服务器和从服务器复制
  2. 通过Keepalived启用了两个虚拟IP:W-VIP/R-VIP,一个用于写入,一个用于读取,以实现读写分离。
  3. 当A和B同时存在时,LVS通过W-VIP将写入请求转发到主机A,并通过R-VIP将读取请求转发到A和B以实现读取负载平衡。
  4. 当主机A异常时,B接管服务,此时W-VIP/R-VIP全部漂移到主机B。
  5. 当主机B异常时,R-VIP将踢出B,其余的将保持不变。

环境:

172.16.1.126:Keepalived + LVS Master + MySQL Semisync-Replication Master

172.16.1.127:Keepalived + LVS备份+ MySQL半同步复制从属

172.16.1.100:R-VIP

172.16.1.210:W-VIP

从MySQL 5.5开始,MySQL支持以插件形式进行半同步复制。如何理解半同步?首先,让我们看一下MySQL中的异步,完全同步和半同步复制的概念。

  • 异步复制:MySQL的默认设置复制是异步的,主库将在执行客户端提交的事务后立即传输结果。返回给客户端,不在乎从属库是否已被接收和处理,因此如果主库崩溃,将会出现问题。 ,此时主机可能无法将已提交的事务传输给从机,如果此时主要将强制强制,则可能导致新主机上的数据不完整。
  • 完全同步复制(完全同步复制):当主库执行事务时,所有从属库都在返回客户端之前执行事务,因为您需要等待所有从属在返回之前执行事务,所以性能会降低。 f完全同步复制将不可避免地受到严重影响。
  • 半同步复制(半同步复制):在异步复制和完全同步复制之间,主库在执行客户端提交的事务后不会立即返回到客户端,而是等待至少一个从属。接收并将其写入中继日志,然后再将其返回给客户端。与异步复制相比,半同步复制提高了数据的安全性,并且还造成了一定程度的延迟。此延迟至少是TCP/IP往返时间。因此,半同步复制最好在低延迟网络中使用。

图2是半同步复制的示意图:

图2

假设客户端在存储引擎层提交事务之后,在从数据库获得确认的过程中,主数据库将关闭。这时,可能存在以下两种情况:

  • 事务尚未发送到从属库:此时,客户端将收到一个事务提交失败的信息,客户端将把事务重新提交给新的主服务器。重新启动已关闭的主库时,它将作为从属库添加到主从结构中。将发现事务已在从属库中提交。两次,一次是我以前的主人,一次是由新主人同步的。
  • 事务已发送到从属库:此时,从属库已接收并应用了事务,但是客户端仍将收到事务提交失败消息,并将事务重新提交给新的主服务器上。

1.先决条件

要使用半同步复制,必须满足以下条件:

  • MySQL 5.5及更高版本
  • 变量have_dynamic_loading为YES
  • 异步复制已存在

2.加载插件

由于用户需要执行INSTALL PLUGIN,SET GLOBAL,STOP SLAVE和START SLAVE操作,因此用户需要具有SUPER权限。在172.16.1.126和172.16.1.127上执行:

安装插件rpl_semi_sync_master soname \#x27; semisync_master.so \#x27 ;;

安装插件rpl_semi_sync_slave soname \#x27; semisync_slave.so \#x27 ;;

在这里,我们认为将来解决问题后,主服务器和从服务器的可能角色会互换,因此这两个半同步插件。检查插件是否已成功加载:

 mysql \ gt;从information_schema.plugins中选择plugin_name,plugin_status,其中plugin_name如\#x27;%semi%\#x27 ;;

+----------------------+---------------+

| plugin_name | plugin_status |

+----------------------+---------------+

| rpl_semi_sync_master |活动|

| rpl_semi_sync_slave |活动|

+----------------------+---------------+

设置2行(0.00秒)

3.开始半同步复制

(1)准备配置文件

172.16.1.126(主)上my.cnf文件的内容如下:

 [mysqld]

basedir =/主页/mysql/mysql-5.6.14

datadir =/数据

跳过名称解析

用户= MySQL

binlog_format =行

默认存储引擎= InnoDB

transaction_isolation = READ-COMMITTED

log-bin =/数据/mysql-bin

log-bin-index =/数据/mysql-bin.index

tmpdir =/数据

服务器ID = 126

innodb_data_home_dir =/数据

innodb_log_group_home_dir =/数据

sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

插件加载= rpl_semi_sync_master = semisync_master.so

rpl_semi_sync_master_enabled = 1

172.16.1.127(从属)上my.cnf文件的内容如下:

 [mysqld]

basedir =/主页/mysql/mysql-5.6.14

datadir =/数据

跳过名称解析

用户= MySQL

binlog_format =行

默认存储引擎= InnoDB

transaction_isolation = READ-COMMITTED

log-bin =/数据/mysql-bin

log-bin-index =/数据/mysql-bin.index

tmpdir =/数据

服务器ID = 127

innodb_data_home_dir =/数据

innodb_log_group_home_dir =/数据

sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

插件加载= rpl_semi_sync_master = semisync_master.so

rpl_semi_sync_master_enabled = 1

只读#设置为只读模式,只能从主数据库同步,不能直接写入

(2)重新启动主库和从库

服务mysql restart 

(3)在主库上授权

在*上授予复制从属。 *至\#x27; repl \#x27; @ \#x27;%\#x27;由\#x27标识; 123456 \#x27 ;;

重置主机;

显示主人身份;

(4)在从属库上开始复制

将主数据库更改为

master_host = \#x27; 172.16.1.126 \#x27;,

master_port = 3306,

master_user = \#x27; repl \#x27;,

master_password = \#x27; 123456 \#x27;,

master_log_file = \#x27; mysql-bin.000001 \#x27;,

master_log_pos = 120;

启动奴隶;

显示从站状态\\\\ G

(5)测试

在主数据库上创建测试表并插入数据。

 mysql \ gt;使用测试;

数据库已更改

mysql \ gt;创建表t1(一个int);

查询正常,受影响的0行(0.01秒)

mysql>插入t1值(1),(2),(3);

查询正常,受影响的3行(0.00秒)

记录:3重复:0警告:0

mysql>提交;

查询正常,受影响的0行(0.00秒)

从上面查询。

 mysql \ gt;从test.t1选择*;

+------+

|一个|

+------+

| 1 |

| 2 |

| 3 |

+------+

设置3行(0.00秒)

在从站上执行数据更新时报告错误。

 mysql \ gt;从test.t1中删除;

错误1290(HY000):MySQL服务器正在使用--read-only选项运行,因此它无法执行该语句

至此,半同步复制配置已完成。

在172.16.1.126和172.16.1.127上,以root用户执行以下命令:

 yum-y install ipvsadm 

在172.16.1.126和172.16.1.127上安装Keepalived。有关详细步骤,请参考”使用Keepalived实现MySQL主从高可用性”。

在这种体系结构中,由于MySQL读写主机VIP的漂移,需要将Keepalived,LVS和MySQL部署在同一主机上。当LVS架构中的Director和realserver是同一台机器时,两个Director将在无限循环中转发请求。具体分析如下:

  1. Director1收到了目的地址作为VIP数据包。
  2. Director1通过ip_vs对数据包进行负载平衡,并将某些数据包转发到realserver2(director2)。
  3. 对于转发Director2接收到的数据包,目的地址也是VIP,然后使用ip_vs进行负载平衡,并将某些数据包转发到realserver1(director1)。

解决方案是,导向器使用iptables标记数据包,LVS转发fwm而不是直接转发TCP。在每个控制器上,标记其他控制器未发送的数据包,然后ip_vs转发这些标记的数据包。也就是说,其他控制器发送的数据包不再被ip_vs转发,而是直接移交给上层侦听器。

在172.16.1.126(主库)上执行:

 iptables-t mangle-I PREROUTING-d 172.16.1.100-p tcp-m tcp--dport 3306-m mac!--Mac-source 00:50:56:a5:49:7f-j MARK--set-mark 0x1 

在172.16.1.127(备用数据库)上执行:

 iptables-t修改-I PREROUTING-d 172.16.1.100-p tcp-m tcp--dport 3306-m mac!--mac-source 00:50:56:a5:0f:77-j MARK--set-mark 0x2 

其中172.16.1.100是读取的VIP,3306是VPORT,00:50 :56:a5:49:7f为172.16。 1.127主机网卡的MAC地址,00:50:56:a5:0f:77是主机网卡的MAC地址172.16.1.126。

172.16.1.126最初是keepalived的母版,其上的keepalived配置文件如下:

 [root @ hdp3 ] #more/etc/keepalived/keepalived.conf

global_defs {

router_id LVS_DEVEL

}

vrrp_sync_group VG1 {

组{

VI_1

}

}

vrrp_instance VI_1 {

状态备份

界面ens32

virtual_router_id 51

优先级100

notify_master \ quot;/home/mysql/remove_slave.sh\\u0026";

advert_int 1

不可抢占

认证{

auth_type通过

auth_pass 1234

}

virtual_ipaddress {

172.16.1.100

172.16.1.210

}

}

#编写VIP virtual_server,仅配置本地机器

virtual_server 172.16.1.210 3306 {#定义虚拟服务器,地址与上面的virtual_ipaddress相同

delay_loop 3#运行状况检查间隔,3秒

lb_algo rr#负载均衡调度算法:wrr | lc | wlc | sh | dh |磅

lb_kind DR#负载均衡转发规则:NAT | DR | UN

#persistence_timeout 5#会话保持时间为5秒,启用了动态服务建议

protocol TCP#转发协议协议,通常为tcp和udp

real_server 172.16.1.126 3306 {

重量1#重量越大,负载得分越大,0表示失败

notify_down/home/mysql/mysql_down.sh

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

}

#读取VIP virtual_server,配置fwmark转发

virtual_server fwmark 1 {

delay_loop 3

lb_algo rr

lb_kind DR

#persistence_timeout 5

协议TCP

real_server 172.16.1.126 3306 {

重量1

notify_down/home/mysql/mysql_down.sh

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

real_server 172.16.1.127 3306 {

重量1

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

}

[root @ hdp1]#

R-VIP绑定172.16.1.126、172.16.1.127,W-VIP绑定172.16.1.126。

172.16.1.127最初是keepalived的备份。其上的keepalived配置文件如下:

 [root @ hdp4] #more/etc/keepalived/keepalived。 conf

global_defs {

router_id LVS_DEVEL

}

vrrp_sync_group VG1 {

组{

VI_1

}

}

vrrp_instance VI_1 {

状态备份

界面ens160

virtual_router_id 51

优先级90

notify_master \ quot;/home/mysql/remove_slave.sh\\u0026";

advert_int 1

不可抢占

认证{

auth_type通过

auth_pass 1234

}

virtual_ipaddress {

172.16.1.100

172.16.1.210

}

}

#编写VIP virtual_server,仅配置本地机器

virtual_server 172.16.1.210 3306 {#定义虚拟服务器,地址与上面的virtual_ipaddress相同

delay_loop 3#运行状况检查间隔,3秒

lb_algo rr#负载均衡调度算法:wrr | lc | wlc | sh | dh |磅

lb_kind DR#负载均衡转发规则:NAT | DR | UN

#persistence_timeout 5#会话保持时间为5秒,启用了动态服务建议

protocol TCP#转发协议协议,通常为tcp和udp

real_server 172.16.1.127 3306 {

重量1#重量越大,负载得分越大,0表示失败

notify_down/home/mysql/mysql_down.sh

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

}

#读取VIP virtual_server,配置fwmark转发

virtual_server fwmark 2 {

delay_loop 3

lb_algo rr

lb_kind DR

#persistence_timeout 5

协议TCP

real_server 172.16.1.126 3306 {

重量1

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

real_server 172.16.1.127 3306 {

重量1

notify_down/home/mysql/mysql_down.sh

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 3306

}

}

}

[root @ hdp4]#

Master和Backup的keepalived配置文件具有以下四个差异:

  • 优先级设置为不同,主设备为100,从设备为90。
  • 编写VIP 172.16.1.210绑定到本地地址。
  • /home/mysql/mysql_down.sh脚本是在本地地址下定义的。
  • 根据iptables的配置,Master的fwmark为1,Backup的fwmark为2。

有关每个网段及其参数的配置说明在配置文件中,请参考” Keepalived + LVS + MySQL双主复制,以实现读写负载平衡和高可用性”。

/home/mysql/mysql_down.sh文件的内容如下:

#!/bin/bash

/etc/init.d/keepalived stop

当LVS检测到主库已关闭时,它将执行mysql_down.sh脚本以停止主库上的keepalived服务,从而使VIP漂移到从属库。

/home/mysql/remove_slave.sh文件的内容如下:

#!/bin/bash

。/home/mysql/.bashrc

用户=根

密码= 123456

日志=/home/mysql/remove_slave.log

回声\" `date` \ quot; \ gt; \ gt; $日志

mysql-u $用户-p $密码-e \设置全局read_only = OFF;停止奴隶;重置主机;重置所有奴隶; \ quot; \ gt; \ gt; $日志

/bin/sed-i \#x27; s#只读#\\\\#只读#\#x27;/home/mysql/mysql-5.6.14/my.cnf

当主库关闭时,在将172.16.1.127切换到Master的机器上,执行remove_slave.sh脚本,停止复制,重置MySQL主服务器和从服务器的状态,关闭read_only并将原始从服务器slave更改为master。

在172.16.1.126和172.16.1.127上创建/etc/init.d/realserver文件,内容如下:

 #!/bin/sh

RVIP = 172.16.1.100

WVIP = 172.16.1.210

。/etc/rc.d/init.d/functions

情况" $ 1 \\"在

#禁止本地ARP请求并绑定本地环回地址

开始)

/sbin/ifconfig下

/sbin/ifconfig查找

回声" 1 \\" \ gt;/proc/sys/net/ipv4/conf/lo/arp_ignore

回声" 2 \ quot; \ gt;/proc/sys/net/ipv4/conf/lo/arp_announce

回声" 1 \\" \ gt;/proc/sys/net/ipv4/conf/all/arp_ignore

回声" 2 \ quot; \ gt;/proc/sys/net/ipv4/conf/all/arp_announce

/sbin/sysctl-p \\ u>/dev/null 2 gt; \ 1

#将VIP绑定到环回地址,设置掩码,并与Direct Server上其自身IP保持通信

/sbin/ifconfig lo:0 $ RVIP网络掩码255.255.255.255起

/sbin/ifconfig lo:1 $ WVIP网络掩码255.255.255.255起

/sbin/route add-host $ RVIP dev lo:0

/sbin/route add-host $ WVIP dev lo:1

回声" LVS-DR真实服务器成功启动。 \\\\ n \ quot;

;;

停)

/sbin/ifconfig lo:0向下

/sbin/ifconfig lo:1下

/sbin/route del $ RVIP>/dev/null 2 gt; \ 1

/sbin/route del $ WVIP /dev/null 2 gt; \ 1

回声" 1 \\" \ gt;/proc/sys/net/ipv4/conf/lo/arp_ignore

回声" 2 \ quot; \ gt;/proc/sys/net/ipv4/conf/lo/arp_announce

回声" 1 \\" \ gt;/proc/sys/net/ipv4/conf/all/arp_ignore

回声" 2 \ quot; \ gt;/proc/sys/net/ipv4/conf/all/arp_announce

回声" LVS-DR真实服务器已停止。 \\\\ n \ quot;

;;

状态)

isLoOn =`/sbin/ifconfig lo:0 | grep \ quot; $ RVIP \\`

isRoOn =`/bin/netstat-rn | grep \ quot; $ RVIP \\`

如果[\ quot; $ isLoON \ quot; == \ quot; \ quot;-a \ quot; $ isRoOn \ quot; == \ quot; \ quot;];然后

回声" LVS-DR真实服务器尚未运行。 \ quot;

其他

回声" LVS-DR真实服务器正在运行。 \ quot;

科幻

3号出口

;;

*)

回声"用法:$ 0 {开始|停止|状态} \ quot;

1号出口

埃萨克

退出0

执行以下命令以将脚本添加到自启动以来的启动:

 chmod + x/etc/init。 d/realserver

回声"/etc/init.d/realserver\\u0026" \ gt; \ gt;/etc/rc.d/rc.local

在172.16.1.126和172.16.1.127上执行:

服务realserver start

/etc/init.d/keepalived start

执行命令后,图3和4分别显示了172.16.1.126和172.16.1.127上的IP地址。

图3

图4

可以看出,绑定地址172.16.1.126和172.16.1.127可以读写两个VIP,而只有本地IP 172.16.1.126可以读写两个VIP。此时,请按照以下步骤从172.16.1.126检查LVS群集的状态:

 [root @ hdp3] #ipvsadm-Ln

IP虚拟服务器版本1.2.1(大小= 4096)

Prot LocalAddress:端口调度程序标志

-> RemoteAddress:端口转发权重ActiveConn InActConn

TCP 172.16.1.210:3306 rr

-> 172.16.1.126:3306路线1 0 0

FWM 1 rr

-> 172.16.1.126:3306路线1 0 0

-> 172.16.1.127:3306路线1 0 0

[root @ hdp3]#

1.验证通过172.16.1.100连接的读取负载平衡转发策略

 C:\\\\ WINDOWS \\\\ SYSTEM32 \\ mysql-utest-p123456-h172.16.1.100-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 126 |

+---------------+-------+

C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.100-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 127 |

+---------------+-------+

C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.100-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 126 |

+---------------+-------+

C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.100-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 127 |

+---------------+-------+

2.验证通过172.16.1.210

连接的读取负载平衡转发策略

 C:\\\\ WINDOWS \\\\ system32 \> mysql-utest-p123456-h172.16.1.210-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 126 |

+---------------+-------+

C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.210-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 126 |

+---------------+-------+

C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.210-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 126 |

+---------------+-------+

C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.210-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 126 |

+---------------+-------+

3.模拟从库的mysqld崩溃

在172.16.1.127上执行以下命令:

 pkill-9 mysqld 

4.再次使用两个VIP连接,数据库服务为正常的。

 C:\\\\ WINDOWS \\\\ system32 \ gt; mysql-utest-p123456-h172.16.1.100-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 126 |

+---------------+-------+

C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.100-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 126 |

+---------------+-------+

C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.210-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 126 |

+---------------+-------+

C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.210-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 126 |

+---------------+-------+

现在从172.16.1.127检查LVS集群状态,如下所示,您可以看到地址仅172.16.1.126。

 [root @ hdp4] #ipvsadm-Ln

IP虚拟服务器版本1.2.1(大小= 4096)

Prot LocalAddress:端口调度程序标志

-> RemoteAddress:端口转发权重ActiveConn InActConn

TCP 172.16.1.210:3306 rr

-> 172.16.1.126:3306路线1 0 0

FWM 2 rr

-> 172.16.1.126:3306路线1 0 0

[root @ hdp4]#

5.重新启动从属库的mysql服务

在172.16.1.127上执行以下命令:

服务mysql start 

6.重新验证通过172.16连接的读取负载平衡。 1.100转发策略

 C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.100-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 127 |

+---------------+-------+

C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.100-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 126 |

+---------------+-------+

C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.100-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 127 |

+---------------+-------+

C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.100-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 126 |

+---------------+-------+

现在从172.16.1.127检查LVS集群状态,如下所示,您可以看到地址172.16.1.127将自动添加回去。

 [root @ hdp4] #ipvsadm-Ln

IP虚拟服务器版本1.2.1(大小= 4096)

Prot LocalAddress:端口调度程序标志

-> RemoteAddress:端口转发权重ActiveConn InActConn

TCP 172.16.1.210:3306 rr

-> 172.16.1.126:3306路线1 0 0

FWM 2 rr

-> 172.16.1.126:3306路线1 0 0

-> 172.16.1.127:3306路线1 0 0

7.模拟主库的mysqld崩溃

在172.16.1.126上执行以下命令:

 pkill-9 mysqld 

8.重新验证通过VIP连接策略

 C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.100-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 127 |

+---------------+-------+

C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.100-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 127 |

+---------------+-------+

C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.210-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 127 |

+---------------+-------+

C:\\\\ WINDOWS \\\\ system32 \\ u> mysql-utest-p123456-h172.16.1.210-e \ quot;显示变量,如\#x27; server_id \#x27; \ quot;

mysql:[警告]在命令行界面上使用密码可能不安全。

+---------------+-------+

|变量名|价值|

+---------------+-------+

| server_id | 127 |

+---------------+-------+

这时,查看绑定到172.16.1.127的IP,如图5所示。

图5

您可以看到,读取和写入两个VIP的速度已达到172.16.1.127。

9.确认切换后可以读写新的主库。

 C:\\\\ WINDOWS \\\\ system32 \ gt; mysql-utest-p123456-h172.16.1.210

mysql:[警告]在命令行界面上使用密码可能不安全。

欢迎使用MySQL监视器。命令以;结尾;或\\\\ g。

您的MySQL连接ID是2104

服务器版本:5.6.14-log源分发

版权所有(c)2000、2017,Oracle和/或其分支机构。版权所有。

Oracle是Oracle Corporation和/或其子公司的注册商标。

会员。其他名称可能是其各自的商标

拥有者。

输入\#x27;帮帮我; \#x27;或\#x27; \\\\ h \#x27;求助。输入\#x27; \\\\ c \#x27;清除当前输入语句。

mysql \ gt;从test.t1选择*;

+------+

|一个|

+------+

| 1 |

| 2 |

| 3 |

+------+

设置3行(0.00秒)

mysql \ gt;从test.t1中删除;

查询正常,受影响的3行(10.00秒)

mysql>提交;

查询正常,受影响的0行(0.00秒)

mysql \ gt;

  1. MySQL半同步复制
  2. CentOS7安装iptables防火墙
  3. LVS + Keepalived实现高MySQL可用(2)
  4. 第二个mysql高可用性体系结构解决方案(keepalived + lvs +读写分离+负载平衡)

相关推荐

 
QQ在线咨询
售前咨询热线
QQ1922638