数据库开发经常需要面临和解决负载均衡的问题,一般是解决客户端连接分配、服务器端工作任务负载分布,以及客户端连接FAILOVERR的问题。
为什么需要负载均衡?针对每个客户端连接,Vertica集群中的主机都需要少量的内存和处理器时间开销。如果许多客户连接到单个主机,此开销可能会开始影响数据库的性能。因此通过负载均衡的方案,可以将客户连接均衡到群集中的不同主机,可以分散客户端连接的开销。另一方面,Vertica的服务器端均衡也可以用于不同类型负载的管理。
首先谈一下服务器端的负载均衡:
1、常规的负载均衡方案,集群的各个节点在查询或者ETL任务时,接受任务的节点产生执行计划,选择开销最小的计划执行,执行过程中根据数据分布,集群的节点参与任务的处理。因此,对Vertica而言,集群的节点会自动参与任务处理,无需特殊处理。
2、负载彼此隔离的方案,更适合Eon方式部署的Vertica。可以将集群划分为多个子集群,可以是一个子集群负责数据装载任务,另外集群负责数据查询任务等。客户端在执行任务时,可以选择访问的集群。
如下图,将集群区分lb_users和lb_etl,前者负责查询任务,后者负责etl任务,客户端分别有不同的地址段,来自etl任务阶段的访问会自动路由到lb_etl组的节点。

实现过程:
CREATE NETWORK ADDRESS node01 ON v_vmart_node0001 WITH '192.0.2.1';CREATE NETWORK ADDRESS node02 ON v_vmart_node0002 WITH '192.0.2.2';CREATE NETWORK ADDRESS node03 ON v_vmart_node0003 WITH '192.0.2.3';CREATE NETWORK ADDRESS node04 ON v_vmart_node0004 WITH '192.0.2.4';CREATE NETWORK ADDRESS node05 ON v_vmart_node0005 WITH '192.0.2.5';^CREATE LOAD BALANCE GROUP lb_users WITH FAULT GROUP group_a FILTER '192.0.2.0/24';CREATE LOAD BALANCE GROUP lb_etl WITH FAULT GROUP group_b FILTER '192.0.2.0/24';CREATE ROUTING RULE users_rule ROUTE '192.0.0.0/5' TO lb_users;CREATE ROUTING RULE etl_rule ROUTE '203.0.113.0/24' TO lb_etl;
客户端访问的负载均衡,Vetica提供了两种方案:
一种是classic connection load balancing方案,9.2版本之前,这是唯一的解决方案。这种方式要求数据库和客户端都必须启用负载平衡选项。当客户端和服务器都启用负载平衡时,当客户端尝试打开到Vertica的连接时,服务器会根据均衡策略返回客户端需要访问的节点。Vertica提供了ROUNDROBIN和RANDOM两种方案,实现过程如下:
#服务器端设置,启用负载均衡SELECT SET_LOAD_BALANCE_POLICY('ROUNDROBIN');#查看功能是否开启SELECT GET_LOAD_BALANCE_POLICY();#客户端设置,在url中加入ConnectionLoadBalance参数"jdbc:vertica://:5433/?ConnectionLoadBalance=1"
第二种是Native connection load balancing方案,这是目前服务器和客户端内嵌的解决方案,不仅能解决客户端访问的负载均衡,也可以用于服务器端资源隔离。
该方案的实现分为三个步骤,1)创建networ address;2)创建负载均衡组;3)创建访问路由规则,根据客户端地址将其路由到不同的服务器组。
具体过程见服务器端负载隔离的实现,不再赘述。
由于环境所限,这里只是记录Vertica官方的资料,供参考。
No.14




