Vertica的这些事<九>—— 关于vertica的Connection Failover

最近在生产中发现vertica有个别节点老是宕机(又碰到的童鞋交流下),实际业务中有Python通过odbc连接vertica,还有Java通过jdbc连接vertica。假如你连接的那个节点正好是down的节点或者是standby节点,那么就会连接失败,程序就会报错,影响正常业务。其实vertica官方文档已经给出了解决方法,下面我们来看一下如何实现。

ODBC Connection Failover

官方给出的代码如下:

[VMartBadNode]
Description=VMart Vertica Database
Driver=/opt/vertica/lib64/libverticaodbc.so
Database=VMart
Servername=badnode.example.com
BackupServerNode=node02.example.com,node03.example.com

其中上面的BackupServerNode就是备用的IP

JDBC Connection Failover

代码:

import java.sql.*;
import java.util.Properties;

public class ConnectionFailoverExample {
    public static void main(String[] args) {
        // Assume using JDBC 4.0 driver on JVM 6+. No driver loading needed.
        Properties myProp = new Properties();
        myProp.put("user", "dbadmin");
        myProp.put("password", "vertica");
        // Set two backup hosts to be used if connecting to the first host
        // fails. All of these hosts will be tried in order until the connection
        // succeeds or all of the connections fail.
        myProp.put("BackupServerNode", "VerticaHost02,VerticaHost03");
        Connection conn;
        try {
            // The connection string is set to try to connect to a known
            // bnad host (in this case, a host that never existed).
            conn = DriverManager.getConnection(
                    "jdbc:vertica://BadVerticaHost:5433/vmart", myProp);
            System.out.println("Connected!");
            // Query system to table to see what node we are connected to.
            // Assume a single row in response set.
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(
                    "SELECT node_name FROM v_monitor.current_session;");
            rs.next();
            System.out.println("Connected to node " + rs.getString(1).trim());
            // Done with connection.
            conn.close();
        } catch (SQLException e) {
            // Catch-all for other exceptions
            e.printStackTrace();
        }
    }
}

另外也可以通过jdbc连接串来实现:

jdbc:vertica://192.168.111.25:5433/DBname?ConnectionLoadBalance=1&BackupServerNode=192.168.111.12:5433,192.168.111.13:5433

其中ConnectionLoadBalance是vertica的负载均衡,如果在库中没有开启该功能的话,此时是没有作用的,不影响。
开启ConnectionLoadBalance的话,需要管理员账户

SELECT SET_LOAD_BALANCE_POLICY('ROUNDROBIN');

取消该功能:

SELECT SET_LOAD_BALANCE_POLICY('NONE');

查询是否开启:

SELECT GET_LOAD_BALANCE_POLICY();

通过这次设置,加了几个备用连接节点,确保业务正常。

时间: 2024-08-14 03:13:03

Vertica的这些事<九>—— 关于vertica的Connection Failover的相关文章

Vertica的这些事<三>—— 谈谈vertica的flex table

Json格式对于现在所有的软件开发者都不陌生,很多数据格式都用他来存储,我们来看一下vertica是怎么处理json数据的.这就是vertica的flex table! 首先创建一个json文件: {"name": "Everest", "type":"mountain", "height":29029, "hike_safety": 34.1} {"name": &

Vertica的这些事<十五>—— Vertica备份元数据信息

-备份资源池 SELECT 'CREATE RESOURCE POOL ' || name || CASE WHEN memorysize IS NULL THEN ' ' ELSE ' MEMORYSIZE ' || '''' || memorysize || '''' END || CASE WHEN maxmemorysize = '' THEN ' ' ELSE ' MAXMEMORYSIZE ' || '''' || maxmemorysize || '''' END || CASE

Vertica的这些事<十四>—— vertica优化

DELETE_VECTORS 数据模型: 1.  规范化你的表 2.  使用核实的压缩格式 表设计: 1.  使用分区 2.  定义主键外键 3.  默认的数字类型长度可能比实际需要的大.例如:NUMBERC 该类型默认的长度是38位,如果实际的长度比这个小,那你建表的时候最好加上适合的长度. 4.  对于一个True/False值,Boolean类型比char(1)类型和integer类型更快. Projections 1.  Segmentation vs. Replication (uns

Vertica的这些事<五>—— 关于vertica常用函数介绍(持续更新ing)

取绝对值:select abs(-1); 向上取整:select ceil(-1.001); 向下取整:select floor(-1.001); 取整:select trunc(-1.002); 四舍五入:select round(1.23456,4.0); 取随机数:select random(); 数值比较:select greatest(1,-2,4,3); 链接字符:select '11'||'22'||'33'; 返回字符串位置:select INSTR('sdsq','s',2);

《Vertica的这些事》系列文章

HPVertica是一款MPP数据库,其列式存储对于OLAP分析很方便. HPE Vertica is the most advanced SQL database analytics portfolio built from the very first line of code to address the most demanding Big Data analytics initiatives. HPE Vertica delivers speed without compromise,

Vertica的这些事<七>—— Vertica中实现Oracle中的ws_concat功能

vertica中没有类似Oracle中的ws_concat函数功能,需要开发UDF,自己对C++不熟悉,所有只有想其他方法解决了. 上代码: SELECT node_state, MAX(DECODE(row_number, 1, a.node_name)) || NVL(MAX(DECODE(row_number, 2, ',' || a.node_name)), '') || NVL(MAX(DECODE(row_number, 3, ',' || a.node_name)), '') ||

Vertica的这些事<十一>—— Vertica 管理

1.版本信息 dbadmin=> SELECT version(); version ------------------------------------ Vertica Analytic Database v7.2.3-7 (1 row) 2.license信息 dbadmin=> SELECT DISPLAY_LICENSE(); DISPLAY_LICENSE ------------------------------------------- HPE Vertica 2/16/2

Vertica的这些事<十>—— vertica中group by 和join 语句的优化

vertica group by优化语句,先对语句进行explain 操作查看预执行计划,其中group by 分为 GROUPBY PIPELINED 和 GROUPBY HASH,通过执行计划可以清楚的看到vertica到底采用的那种执行方式,优化一般就是吧GROUPBY HASH优化为GROUPBY PIPELINED 下面讲一下官网举得例子 CREATE TABLE sortopt ( a INT NOT NULL, b INT NOT NULL, c INT, d INT ); CRE

Vertica的这些事<八>—— vertica加密数据

通过创建 Secure Access Policies可以对vertica中的某一列数据进行加密: CREATE ACCESS POLICY ON [schema][tablename] FOR COLUMN columnname expression [ENABLE/DISABLE]; 例如: CREATE ACCESS POLICY ON customers_table FOR COLUMN SSN CASE WHEN ENABLED_ROLE('manager') THEN SSN WHE