Vertica系列: Vertica DB连接负载均衡
背景
谈到负载均衡, 对于数据库集群需要区分几个概念:
- 运算的负载均衡, Vertica 本身是 MPP 数据库, SQL 操作自动会利用多台机器来加快处理速度.
- 数据库连接的负载均衡, Vertica 和 Teradata 一样都是无主节点的架构, 这种架构允许客户端连接任意一个节点, 连接后将由这个节点负责和客户端交互.
- 数据库连接的 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连接负载均衡的更多相关文章
- SpringCloud 源码系列(5)—— 负载均衡 Ribbon(下)
SpringCloud 源码系列(4)-- 负载均衡 Ribbon(上) SpringCloud 源码系列(5)-- 负载均衡 Ribbon(下) 五.Ribbon 核心接口 前面已经了解到 Ribb ...
- 【转载】解决k8s中的长连接负载均衡问题
原文链接:一流铲屎官二流程序员[解决k8s中的长连接负载均衡问题] 长连接与短连接: 简介 长连接是指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测 ...
- SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)
1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册的目的是希望所有的服务都统一归属到 Eureka 之中进 行处理,但是现 ...
- 死磕nginx系列--使用nginx做负载均衡
使用nginx做负载均衡的两大模块: upstream 定义负载节点池. location 模块 进行URL匹配. proxy模块 发送请求给upstream定义的节点池. upstream模块解读 ...
- 基于netty框架的socket长连接负载均衡解决方案
socket通讯的单机瓶颈 物联网的项目socket使用方式有两种: 短连接的socket请求 维持socket长连接的请求 对于socket短链接来说就好比是http请求,请求服务器,服务器返回数据 ...
- SpringCloud 源码系列(4)—— 负载均衡 Ribbon
一.负载均衡 1.RestTemplate 在研究 eureka 源码上篇中,我们在 demo-consumer 消费者服务中定义了用 @LoadBalanced 标记的 RestTemplate,然 ...
- Dubbo学习源码总结系列五--集群负载均衡
Dubbo提供了哪些负载均衡机制?如何实现的? LoadBalance接口:可以看出,通过SPI机制默认为RandomLoadBalance,生成的适配器类执行sel ...
- Nginx系列(3)- 负载均衡
负载均衡 Nginx提供的负载均衡策略有两种: 内置策略为轮询.加权轮询.ip hash 扩展策略,就天马行空了,只有你想不到的没有它做不到的 轮询 加权轮询(根据权重来) iphash对客户端请求 ...
- Vertica系列:Vertica和Hadoop的互操作性
Vertica 8和 Hadoop 集群的互操作性已经很不错的, 但这块肯定是Vertica研发的重点, 将来可能还有较大的变动. Vertica 集群 和 Hadoop 集群的两种布局方式 集群布局 ...
随机推荐
- Leetcode 349. 两个数组的交集 By Python
给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = [4,9,5], ...
- cf245H Queries for Number of Palindromes (manacher+dp)
首先马拉车一遍(或者用hash),再做个前缀和处理出f[i][j]表示以j为右端点,左端点在[i,j]的回文串个数 然后设ans[i][j]是[i,j]之间的回文串个数,那就有ans[i][j]=an ...
- Equivalent Sets HDU - 3836 (Tarjan)
题目说给出一些子集,如果A是B的子集,B是A的子集,那么A和B就是相等的,然后给出n个集合m个关系,m个关系表示u是v的子集,问你最小再添加多少个关系可以让这n个集合都是相等的 如果这n个几个都是互相 ...
- react案例->新闻移动客户端--(react+redux+es6+webpack+es6的spa应用)
今天分享一个react应用,应在第一篇作品中说要做一个react+redux+xxx的应用.已经做完一部分,拿出来分享.github地址为:点我就可以咯~ 这里实现了一个新闻移动站的spa.本来想写p ...
- TimerTask的run()方法里面如何调用service层里面的方法
在java的spring框架中,用Timer和TimerTask来实现定时任务,有时我们要在TimerTask的子类的重写run方法里,调用service层的方法. 但是不管是spring.xml配置 ...
- redis 指令文档
参考:https://redis.io/commands http://www.runoob.com/redis/redis-lists.html redis: 打开一个 cmd 窗口 使用cd命令切 ...
- a超链接设置样式
/* divcss5对象内 a超链接设置样式 */ .divcss5 a:link{ color:#F00}/* 链接默认为红色 */ .divcss5 a:hover{ color:#000}/* ...
- 洛谷P3980 志愿者招募
题意:懒得写了...... 解: 一开始想的是每天建点,每种人建点,然后连边费用流,发现一个人可以管辖多天,不好处理. 回想起了网络流24题中的"最长k可重线段集","最 ...
- P1966 火柴排队
这道题需要小小的思考一波 (然而我思考了两节课) 好,我们先得出一个结论:a中第k大的与b中第k大的一定要排在一起,才能保证最小. 然后发现:挪a,b其实没有区别,故我们固定a,挪b. 然后我们就思考 ...
- [luogu4309][最长上升子序列]
题目链接 思路 因为这些数字是从小到大加进去的,所以以当前数字结尾的最长上升子序列可以从前面位置的任何一个数字转移过来.所以只要能知道每个数字最终位于哪个位置就行了. 没想到出了treap还有什么办法 ...