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.000.00:5433/DBname?ConnectionLoadBalance=1&BackupServerNode=192.168.000.01:5433,192.168.000.02:5433

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

SELECT SET_LOAD_BALANCE_POLICY('ROUNDROBIN');

取消该功能:

SELECT SET_LOAD_BALANCE_POLICY('NONE');

查询是否开启:

SELECT GET_LOAD_BALANCE_POLICY();

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 2015年9月20日 12:46 公司策略微调,将减少对之前技术平台的支持,于是今年来SF从满城跑着参加两个会议减...
    Nicole雅斐阅读 2,900评论 0 0
  • 在央企并不是一进入企业就会有公司培训,而是在实习期满之后开始的培训。 作为新员工能更好的完成培训如何才能更好的完成...
    斜小普阅读 1,688评论 0 0
  • 一重山,两重山,重重青山远乡关。 烟渺渺,水茫茫,处处烟波使人愁。 风一程,雨一程,平添相思又几程。[微笑][微笑]
    迹远留香阅读 1,769评论 0 3
  • 站在你们背后的老师留
    周玉成阅读 2,790评论 0 0
  • 今天老师在上面文质彬彬的上着课,讲着关于上课之类的一系列内容,我在下面文质彬彬的吃着包子,早餐又睡过头了,起来吃了...
    不像话的故事阅读 1,432评论 0 0

友情链接更多精彩内容