背景

谈到负载均衡, 对于数据库集群需要区分几个概念:

  1. 运算的负载均衡, Vertica 本身是 MPP 数据库, SQL 操作自动会利用多台机器来加快处理速度.
  2. 数据库连接的负载均衡, Vertica 和 Teradata 一样都是无主节点的架构, 这种架构允许客户端连接任意一个节点, 连接后将由这个节点负责和客户端交互.
  3. 数据库连接的 Fail over, 这个概念不同于会话 node 的负载均衡. 对于多数数据库, 数据库连接字符串(比如 JDBC)只能设定一个 IP 地址, 如果这个 IP 的节点宕机, 客户端就无法连接. Vertica 允许指定多个 IP 地址, 如果第一个 IP 的节点无法连接, Vertica JDBC driver 会使用其他 IP 尝试连接.

上面这几个特性 Vertica 都支持. 另外 Vertica 是一个纯列式数据库, 没有数据倾斜问题. 因为这些特性, 使用上稍加注意, Vertica 就不太容易出现某个节点成为性能瓶颈.

下面重点讲解如何开启数据库连接的 Load balance 和 Fail over.

Server 端的配置

通过 SET_LOAD_BALANCE_POLICY() 函数设置负载均衡策略, 共有三种, 分别是 NONE/ROUNDROBIN/RANDOM , 这三个设置的含意是很显然的, NONE 是禁用负载均衡, ROUNDROBIN 是轮询, RANDOM 是随机, 推荐使用 ROUNDROBIN 策略. 具体设置代码为:

--设置节点load balance的方法, 有NONE/ROUNDROBIN/RANDOM三种
SELECT SET_LOAD_BALANCE_POLICY('ROUNDROBIN'); --查询服务器端的 Load balance 策略
SELECT GET_LOAD_BALANCE_POLICY();

Java代码客户端的配置

下面是一个 JDBC 示例代码, 开启了 Load balance 和 Fail over.


Properties myProp = new Properties();
myProp.put("user", "dbadmin");
myProp.put("password", "vertica"); # 开启 connection failover
myProp.put("BackupServerNode", "VerticaHost02,VerticaHost03"); # JDBC客户端开启Load balance
myProp.put("ConnectionLoadBalance", 1);
conn = DriverManager.getConnection(
"jdbc:vertica://BadVerticaHost:5433/vmart", myProp);

客户端多连接几次, 并执行下面SQL, 观察 node_name 节点是否不同, 就可以验证负载均衡是否工作,

SELECT node_name,client_version FROM CURRENT_SESSION;

DbVisualizer 工具开启负载平衡

Vertica 查询工具并不多, DbVisualizer 工具是最好的一个, 具体配置:

升级 JDBC driver

DbVisualizer 工具自带的 Vertica jdbc driver 版本太低, 要支持负载均衡, JDBC driver 至少是7.0以上, 推荐使用和服务器版本一致的jdbc, 这里使用的是 vertica-jdbc-8.1.1-0.jar .

在 DbVisualizer 工具菜单 Tool/Driver manager界面中, 选择 Vertica 数据库类型, 删除原有的自带老版本的jdbc driver, 增加新版的driver.

修改已有的 Vertica connection

新建或修改一个Vertica connection, 选择 connection 的 Properties - Driver Properties快捷菜单, 找到 connectionloadbalance, 将它的值设置为 true, 点击 Apply 应用.

验证

客户端多连接几次, 并执行下面SQL, 观察 node_name 节点是否不同.

SELECT node_name,client_version FROM CURRENT_SESSION;

Vertica系列: Vertica DB连接负载均衡的更多相关文章

  1. SpringCloud 源码系列(5)—— 负载均衡 Ribbon(下)

    SpringCloud 源码系列(4)-- 负载均衡 Ribbon(上) SpringCloud 源码系列(5)-- 负载均衡 Ribbon(下) 五.Ribbon 核心接口 前面已经了解到 Ribb ...

  2. 【转载】解决k8s中的长连接负载均衡问题

    原文链接:一流铲屎官二流程序员[解决k8s中的长连接负载均衡问题] 长连接与短连接: 简介 长连接是指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测 ...

  3. SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)

    1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册的目的是希望所有的服务都统一归属到 Eureka 之中进 行处理,但是现 ...

  4. 死磕nginx系列--使用nginx做负载均衡

    使用nginx做负载均衡的两大模块: upstream 定义负载节点池. location 模块 进行URL匹配. proxy模块 发送请求给upstream定义的节点池. upstream模块解读 ...

  5. 基于netty框架的socket长连接负载均衡解决方案

    socket通讯的单机瓶颈 物联网的项目socket使用方式有两种: 短连接的socket请求 维持socket长连接的请求 对于socket短链接来说就好比是http请求,请求服务器,服务器返回数据 ...

  6. SpringCloud 源码系列(4)—— 负载均衡 Ribbon

    一.负载均衡 1.RestTemplate 在研究 eureka 源码上篇中,我们在 demo-consumer 消费者服务中定义了用 @LoadBalanced 标记的 RestTemplate,然 ...

  7. Dubbo学习源码总结系列五--集群负载均衡

            Dubbo提供了哪些负载均衡机制?如何实现的?          LoadBalance接口:可以看出,通过SPI机制默认为RandomLoadBalance,生成的适配器类执行sel ...

  8. Nginx系列(3)- 负载均衡

    负载均衡 Nginx提供的负载均衡策略有两种: 内置策略为轮询.加权轮询.ip hash 扩展策略,就天马行空了,只有你想不到的没有它做不到的 轮询  加权轮询(根据权重来) iphash对客户端请求 ...

  9. Vertica系列:Vertica和Hadoop的互操作性

    Vertica 8和 Hadoop 集群的互操作性已经很不错的, 但这块肯定是Vertica研发的重点, 将来可能还有较大的变动. Vertica 集群 和 Hadoop 集群的两种布局方式 集群布局 ...

随机推荐

  1. python之各种装饰器的使用

    """ 装饰器,带参数的装饰器,类的装饰器 判断是否为可迭代的 from collections import Iterable print(isinstance([1, ...

  2. Pycharm自动添加文件头注释

    1.选择File -> Settings 2.选择 File and Code Templates -> Files -> Python Script 3.设置 #!/usr/bin ...

  3. Oracle数据库中遇到的坑

    最近在帮别人忙写程序,用的是Oracle数据库,写一篇文章来说说在Oracle中遇到的一些坑: 1. PL/SQL develop的坑: 由于在这里工作环境是内网完全,无奈只能使用PL/SQL 工具, ...

  4. 如何搭建高可用redis架构?

    如何搭建高可用redis架构? 温国兵 架构师小秘圈 昨天 作者:温国兵,曾任职于酷狗音乐,现为三七互娱 DBA.目前主要关注领域:数据库自动化运维.高可用架构设计.数据库安全.海量数据解决方案.以及 ...

  5. jackson json转对象 对象转json

    一,Jackson使用示例 第1步:创建ObjectMapper对象. 创建ObjectMapper对象.它是一个可重复使用的对象. ObjectMapper mapper = new ObjectM ...

  6. OpenLayers学习笔记(一)—在线加载谷歌影像地图&离线加载本地瓦片地图

    实现根据在线离线判断加载地图, 在线加载谷歌影响地图, 离线加载本地瓦片地图 作者: 狐狸家的鱼 Github: 八至 html代码 <div id="map" tabind ...

  7. 【洛谷P2709】小B的询问

    题目大意:给定一个长度为 N 的序列,M 个询问,静态查询区间 [l,r] 内的不同颜色数的平方和. 题解:直接莫队即可. 代码如下 #include <bits/stdc++.h> #d ...

  8. Day10--Python--动态传参,作用域

    python的三目运算a = 10b = 20c = a if a > b else b #先判断中间的条件a > b是否成立,成立返回if前面的值,不成立返回else后面的值,也可以 c ...

  9. codesmith 连接mysql

    下载地址是http://dev.mysql.com/downloads/mirror.php?id=403020 请先注册登录后才能下载mysql-connector-net-6.3.7.msi这个文 ...

  10. linux c 编程 ------ 头文件及其作用

    #include <stdio.h> printf #include <sys/types.h> 基本系统数据类型.系统的基本数据类型在32编译环境中保持为32位值,在64编译 ...