如何使用HAProxy实现Kerberos环境下的Impala负载均衡
  pdddowW4fPp8 2023年11月02日 34 0

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。


Fayson的github:https://github.com/fayson/cdhproject


提示:代码块部分可以左右滑动查看噢


1.文档编写目的




前面Fayson介绍过《​​如何使用HAProxy实现Impala的负载均衡​​》,在Kerberos环境HAProxy的配置与非Kerberos环境下是一样的,只是在Impala的配置上需要做一些修改,接下来本篇文件主要讲述如何在Kerberos环境下使用HAProxy实现Impala的负载均衡。


  • 内容概述

1.修改Impala配置

2.Impala shell及JDBC测试


  • 测试环境

1.CM和CDH版本为5.11.2

2.采用sudo权限的ec2-user用户操作

3.集群已启用Kerberos

4.HAProxy1.5.18


2.HAProxy安装及配置




本文不再重复如何安装及配置HAProxy了,具体的安装及配置大家可以参考Fayson前面的文章《​​如何使用HAProxy实现Impala的负载均衡​​》。


我们在ip-172-31-22-86.ap-southeast-1.compute.internal节点上安装HAProxy服务,通过浏览器访问服务正常


如何使用HAProxy实现Kerberos环境下的Impala负载均衡_cloudera


3.Impala配置




1.使用管理员账号登录Cloudera Manager,进入Impala服务


如何使用HAProxy实现Kerberos环境下的Impala负载均衡_hadoop_02


2.搜索“Load Balancer”,在下图所示配置HAProxy的<IP>:<PORT>


如何使用HAProxy实现Kerberos环境下的Impala负载均衡_cloudera_03


3.保存配置,回到CM主页根据提示重启相应服务


如何使用HAProxy实现Kerberos环境下的Impala负载均衡_hadoop_04

如何使用HAProxy实现Kerberos环境下的Impala负载均衡_hadoop_05


4.重启成功


如何使用HAProxy实现Kerberos环境下的Impala负载均衡_java_06


4.Impala Shell测试




使用多个终端同时访问,并执行SQL语句,查看是否会通过HAProxy服务自动负载到其它Impala Daemon节点,由于集群启用了Kerberos,所以在执行Impala shell命令前,需要先获取令牌


1.获取fayson的Kerberos令牌


[ec2-user@ip-172-31-21-45 ~]$ kinit -kt fayson.keytab fayson[ec2-user@ip-172-31-21-45 ~]$ klistTicket cache: FILE:/tmp/krb5cc_1000Default principal: fayson@CLOUDERA.COMValid starting       Expires              Service principal12/22/2017 09:58:57  12/23/2017 09:58:57  krbtgt/CLOUDERA.COM@CLOUDERA.COM
renew until 12/29/2017 09:58:57[ec2-user@ip-172-31-21-45 ~]$


如何使用HAProxy实现Kerberos环境下的Impala负载均衡_hadoop_07


2.使用Impala shell访问HAProxy服务的25003端口,命令如下


impala-shell -i ip-172-31-22-86.ap-southeast-1.compute.internal:25003


3.打开第一个终端访问并执行SQL


如何使用HAProxy实现Kerberos环境下的Impala负载均衡_cloudera_08


4.同时打开第二个终端访问并执行SQL


如何使用HAProxy实现Kerberos环境下的Impala负载均衡_hadoop_09


通过以上测试可以看到,两个终端执行的SQL不在同一个Impala Daemon,这样就实现了Impala Daemon服务的负载均衡。


5.Impala JDBC测试




如何创建Java工程,Fayson不在赘述。具体请参考《​​如何使用java代码通过JDBC连接Impala(附Github源码)​​》



1.配置JDBC的地址为HAProxy服务所在的IP端口为25004,提示:代码块部分可以左右滑动查看噢


package com.cloudera.impalajdbc;

import com.cloudera.utils.JDBCUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.security.UserGroupInformation;
import java.io.IOException;
import java.security.PrivilegedAction;
import java.sql.*;

/**
* package: com.cloudera.impala
* describe: 该示例主要讲述通过JDBC连接Kerberos环境下的Impala
* creat_user: Fayson
* email: htechinfo@163.com
* 公众号:Hadoop实操
* creat_date: 2017/11/21
* creat_time: 下午7:32
*/
public class KBSimple{

private static String JDBC_DRIVER = "com.cloudera.impala.jdbc41.Driver";
private static String CONNECTION_URL = "jdbc:impala://ip-172-31-22-86.ap-southeast-1.compute.internal:25004/default;AuthMech=1;KrbRealm=CLOUDERA.COM;KrbHostFQDN=ip-172-31-22-86.ap-southeast-1.compute.internal;KrbServiceName=impala";

static {
try {
Class.forName(JDBC_DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

public static void main(String[] args){
System.out.println("通过JDBC连接Kerberos环境下的Impala");
//登录Kerberos账号
try {
System.setProperty("java.security.krb5.conf", "/Volumes/Transcend/keytab/krb5.conf");
Configuration configuration = new Configuration();
configuration.set("hadoop.security.authentication" , "Kerberos");
UserGroupInformation. setConfiguration(configuration);
UserGroupInformation.loginUserFromKeytab("fayson@CLOUDERA.COM", "/Volumes/Transcend/keytab/fayson.keytab");
System.out.println(UserGroupInformation.getCurrentUser() + "------" + UserGroupInformation.getLoginUser());

UserGroupInformation loginUser = UserGroupInformation.getLoginUser();

loginUser.doAs(new PrivilegedAction<Object>(){

public Object run(){
Connection connection = null;
ResultSet rs = null;
PreparedStatement ps = null;
try {
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(CONNECTION_URL);
ps = connection.prepareStatement("select * from test_table");
rs = ps.executeQuery();
rs = ps.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt(1));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.disconnect(connection, rs, ps);
}
return null;
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}


2.运行代码,查看运行结果


如何使用HAProxy实现Kerberos环境下的Impala负载均衡_java_10


6.总结


  • 在Kerberos环境下使用HAProxy实现Impala负载均衡,需要配置Impala的Load Balance。
  • 在Kerberos环境下一旦配置了Impala的LoadBalance,将不能再连单个Impala Daemon,只能连HAProxy。
  • 在使用JDBC连接HAProxy时,需要注意JDBC连接串中的KrbHostFQDN要与HAProxy服务的hostname一致,否则会报认证失败的错误。


Github地址:

​https://github.com/fayson/cdhproject/tree/master/jdbcdemo/src/main/java/com/cloudera/impalajdbc/KBHAProxySimple.java​



为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。





推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

如何使用HAProxy实现Kerberos环境下的Impala负载均衡_hadoop_11

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  ehrZuhofWJiC   2024年04月26日   36   0   0 日志Java
pdddowW4fPp8