场景:mysql数据库磁盘空间告警了,进行了一次主备切换
部件A设置的mysql数据库部件配置,设置了真实的ip地址,没有使用虚拟ip.
主备切换后,原来的主库变成了备库,无写操作。导致部件A异常报错:
SQL Error: 1290, SQLState: HY000
The MySQL server is running with the --read-only option so it cannot execute this statement
更改步骤:
1:把mysql部件设置改成了虚拟ip设置
2:重启部件A
学习下什么是虚拟ip(引用:虚拟Ip详解 - 墨天轮):
我们知道上网时必须得有个唯一的ip地址。
事实上IP地址是主机硬件地址的一种抽象,简单的说,MAC地址是物理地址,IP地址是逻辑地址。
虚拟IP就是一个未分配给真实主机的IP地址,也就是说对外提供服务器的主机除了有一个真实IP外还有一个虚拟IP,使用这两个IP中的任意一个都可以连接到这台主机。
虚拟IP一般用作达到HA(High Availability)的目的,比如让所有项目中数据库链接一项配置的都是这个虚IP,当主服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用服务器
一个网卡上是可以配置多个IP地址的
虚拟IP原理:
之前学习计算机网络时学习过:
ARP地址解析协议,是在数据链路层使用。作用是将一个IP地址转换为MAC地址。
每台主机中都有一个ARP高速缓存,存储同一个网络内的IP地址与MAC地址的对应关系,以太网中的主机发送数据时会先从这个缓存中查询目标IP对应的MAC地址,会向这个MAC地址发送数据。操作系统会自动维护这个缓存。
在Linux下可以使用arp命令操作ARP高速缓存。
如两台机器使用同一个虚拟IP,其中主节点A挂了时,虚拟主机会自动切换到另一台机器B。并且B会把自己的ARP缓存发送出去,让路由器或者交换机上的ARP缓存表修改相应的映射关系,以后的请求就自动发到B了。