我试图了解是否可以更改我的hibernate配置并使用单个MySQL实例(而不是我目前拥有的多个MySQL实例):
我有一个使用hibernate的Java应用程序,与2个架构交谈,配置示例如下:
@Entity
@Table(name="Foo", schema="SchemaA")
public class FooSchemaA
@Entity
@Table(name="Bar", schema="SchemaB")
public class BarSchemaB
<bean name="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/SchemaA"/>
<property name="user" value="root"/>
<property name="password" value="password"/>
</bean>
复杂性在于我有5次运行Java应用程序(在不同的盒子上)。我并不要求Java应用程序共享数据,因此托管5个独立的MySQL实例(具有相同的模式),每个框一个。
我现在正试图转向HA解决方案。如果我保留当前配置,我最终会得到10个MySQL实例。它只是感觉不对..有更好的方法吗?
答案 0 :(得分:0)
设置HA数据库很难做到,如果您将数据库托管在与应用程序相同的框中,则没有任何额外的好处。 通常,托管服务器应用程序的框需要与托管RDBMS的框(例如数据备份)不同的保养/维护,特别是如果您需要HA数据库。
因此,假设一个带有RDMS的框可以处理来自应用程序的所有请求,请将数据库移动到一个单独的框中,让应用程序访问“// virt-address:3306 / App01_SchemaA”,“// virt-address :3306 / App01_SchemaB“等。”virt-address“是一个虚拟地址,通过负载均衡器解析为真实地址(如”db01-address“,”db02-address“)。使用虚拟地址是HA设置的第一步:当一个数据库发生故障时,负载均衡器可以将流量引导到另一个数据库。当然,当发生这种切换时,应用程序需要能够刷新数据库连接。
第二步是在HA设置中配置RDBMS。一种常见的方法是主/从设置(因为您现在有1个盒子,1个RDBMS,您只需要担心1个HA设置)并在主设备关闭后立即将从设备切换到主设备。缺点是你必须做一些手动工作,以便在原始主机再次启动后重新启动它。另一种方法是拥有主/主服务器,这样您就不必将从服务器切换到主服务器。缺点是设置起来比较困难:两个数据库都需要同步写入。
无论您选择哪种HA设置,维护1次设置总是比保持2次单独设置更好。当你处于这种状态时,你可能还想考虑/预备“灾难恢复”(当一个位置的所有'直播'RDBMS盒子短路时你会怎么做?)。