我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Cassandra配置JMX

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Cassandra配置JMX

Cassandra配置JMX

Cassandra的JMX服务的配置和开启

Cassandra数据库通过JMX方式对外提供监控和管理服务。本文讲解如何配置和开启Cassandra的JMX服务。

环境说明

本文是基于以下版本的系统和服务:

  • cassandra 3.11.6
  • openjdk 1.8.0
  • mx4j 3.0.2
  • Ubuntu 18.04.4 LTS

需要说明的是,当使用java 11以服务形式启动cassandra,服务启动后会进入 active(exited) 状态:

  $ systemctl status cassandra
  ● cassandra.service - LSB: distributed storage system for structured data
     Loaded: loaded (/etc/init.d/cassandra; generated)
       Active: active (exited) since Wed 2020-05-13 13:48:21 CST; 4s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 23280 ExecStop=/etc/init.d/cassandra stop (code=exited, status=0/SUCCESS)
    Process: 23298 ExecStart=/etc/init.d/cassandra start (code=exited, status=0/SUCCESS)

这是因为有参数不支持导致jvm启动失败。虽然根据Cassandra 3的文档,java 1.8及以上版本都支持,但至少java 11并不支持。

Cassandra目录和文件

安装和数据目录

Cassandra安装在 /usr/share/cassandra 目录下。这个目录的子目录 /lib下是Cassandar的依赖包,后面安装配置MX4J服务时,会用到这个目录。

Cassandra的数据文件保存在 /var/lib/cassandra 目录下。一般可以通过这个目录来备份和恢复数据。

日志文件在 /var/log/cassandra目录下。这个目录有三种日志文件 system.logdebug.loggc.log。多数情况下,通过查看system.log可以了解系统的运行状态和错误信息。

配置和运行脚本

在Ubuntu上通过Debian Packages方式安装Cassandra之后,Cassandra可以以服务方式启动。接下来的配置也都是基于服务方式操作Cassandra的情况。

Cassandra没有提供Systemd服务的配置,所以服务操作还是通过 /etc/init.d/ 目录下的 cassandra 脚本来定义的。可以根据这个脚本来分析Cassandra服务的启动过程。

根据服务启动脚本,可以发现/etc/default/cassandra配置脚本会用来设置运行时所需要的环境变量。比如,如果系统默认的java是不兼容的版本,就可以在这个脚本中添加JAVA_HOMEJRE_HOME环境变量,比如:

  export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
  export JRE_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre

注意,如果不是以系统服务的方式启动Cassandra,则这个配置脚本中设置的环境变量不会生效。

最主要的配置文件和脚本在/etc/cassandra目录下。这个脚本会根据环境变量等参数动态的计算一些jvm启动参数。这个目录下的另外一个配置文件jvm.options也可以用来设置jvm启动参数,但是cassandra-env.sh脚本设置的优先级比较高,所以要注意确认jvm.options中的设置不会被cassandra-env.sh覆盖。本文主要使用cassandra-env.sh脚本来设置需要的参数。

配置MX4J HttpAdaptor

Cassandra可以与MX4J HttpAdaptor集成,通过Web控制台的方式提供JMX服务访问。

为了开启MX4J HttpAdaptor服务,需要安装MX4J。MX4J可以从下载页面下载需要的版本。下载并解压后,在mx4j-3.0.2/lib目录下找到mx4j-tools.jar,将这个jar包安装到Cassandra的lib目录/var/lib/cassandra下,然后重启Cassandra。

如果一切正常,可以看到system.log中以下日志内容:

  INFO  [main] 2020-05-14 09:29:24,963 Mx4jTool.java:61 - mx4j successfuly loaded

日志里的拼写错误是Cassandra的代码问题,不是我弄错了。

默认情况下MX4J HttpAdaptor监听的是127.0.0.1上的8081端口。如果启动正常,可以通过本地浏览器访问Web控制台了:

8081这个端口很有可能和其他服务冲突。当端口冲突时,可以在system.log中看到以下错误信息:

  WARN  [main] 2020-05-14 15:52:41,847 Mx4jTool.java:70 - Could not start register mbean in JMX
  java.lang.reflect.InvocationTargetException: null
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_252]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_252]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_252]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_252]
        at org.apache.cassandra.utils.Mx4jTool.maybeLoad(Mx4jTool.java:60) ~[apache-cassandra-3.11.6.jar:3.11.6]
        at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:197) [apache-cassandra-3.11.6.jar:3.11.6]
        at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:630) [apache-cassandra-3.11.6.jar:3.11.6]
        at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:757) [apache-cassandra-3.11.6.jar:3.11.6]
  Caused by: java.net.BindException: Address already in use (Bind failed)
        at java.net.PlainSocketImpl.socketBind(Native Method) ~[na:1.8.0_252]
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387) ~[na:1.8.0_252]
        at java.net.ServerSocket.bind(ServerSocket.java:390) ~[na:1.8.0_252]
        at java.net.ServerSocket.(ServerSocket.java:252) ~[na:1.8.0_252]
        at mx4j.tools.adaptor.PlainAdaptorServerSocketFactory.createServerSocket(PlainAdaptorServerSocketFactory.java:24) ~[mx4j-tools.jar:na]
        at mx4j.tools.adaptor.http.HttpAdaptor.createServerSocket(HttpAdaptor.java:672) ~[mx4j-tools.jar:na]
        at mx4j.tools.adaptor.http.HttpAdaptor.start(HttpAdaptor.java:478) ~[mx4j-tools.jar:na]
        ... 8 common frames omitted

另外,如果希望从远程访问,需要设置监听地址。此时,可以在/etc/default/cassandra脚本中将这两个变量设置为期望的值,然后重启Cassandra服务:

  export MX4J_ADDRESS="-Dmx4jaddress=0.0.0.0"
  export MX4J_PORT="-Dmx4jport=7081"

设置成功后,可以在system.log日志中看到mx4jaddressmx4jport虚拟机参数:

  INFO  [main] 2020-05-14 16:04:19,007 CassandraDaemon.java:506 - JVM Arguments: [-Xloggc:/var/log/cassandra/gc.log, -ea, -XX:+UseThreadPriorities, -XX:ThreadPriorityPolicy=42, -XX:+HeapDumpOnOutOfMemoryError, -Xss256k, -XX:StringTableSize=1000003, -XX:+AlwaysPreTouch, -XX:-UseBiasedLocking, -XX:+UseTLAB, -XX:+ResizeTLAB, -XX:+UseNUMA, -XX:+PerfDisableSharedMem, -Djava.net.preferIPv4Stack=true, -XX:+UseParNewGC, -XX:+UseConcMarkSweepGC, -XX:+CMSParallelRemarkEnabled, -XX:SurvivorRatio=8, -XX:MaxTenuringThreshold=1, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -XX:CMSWaitDuration=10000, -XX:+CMSParallelInitialMarkEnabled, -XX:+CMSEdenChunksRecordAlways, -XX:+CMSClassUnloadingEnabled, -XX:+PrintGCDetails, -XX:+PrintGCDateStamps, -XX:+PrintHeapAtGC, -XX:+PrintTenuringDistribution, -XX:+PrintGCApplicationStoppedTime, -XX:+PrintPromotionFailure, -XX:+UseGCLogFileRotation, -XX:NumberOfGCLogFiles=10, -XX:GCLogFileSize=10M, -Xms3952M, -Xmx3952M, -Xmn600M, -XX:+UseCondCardMark, -XX:CompileCommandFile=/etc/cassandra/hotspot_compiler, -javaagent:/usr/share/cassandra/lib/jamm-0.3.0.jar, -Dcassandra.jmx.local.port=7199, -Dcom.sun.management.jmxremote.authenticate=false, -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password, -Djava.library.path=/usr/share/cassandra/lib/sigar-bin, -Dmx4jaddress=0.0.0.0, -Dmx4jport=7081, -XX:OnOutOfMemoryError=kill -9 %p, -Dlogback.configurationFile=logback.xml, -Dcassandra.logdir=/var/log/cassandra, -Dcassandra.storagedir=/var/lib/cassandra, -Dcassandra-pidfile=/var/run/cassandra/cassandra.pid, -XX:HeapDumpPath=/var/lib/cassandra/java_1589443456.hprof, -XX:ErrorFile=/var/lib/cassandra/hs_err_1589443456.log]

当然,直接在cassandra-env.sh脚本设置这两个环境变量也是可以的。

安全

虽然MX4J HttpAdaptor支持用基于户名和密码的基础认证,但是Cassandra没有使用这个特性,任何人都可以访问Web控制台,所以要谨慎决定是否要开启MX4J HttpAdaptor,以及监控的地址。

配置JMX

默认情况下,Cassandra开启了JMX的本地访问,监听端口是7199。在Cassandra所在服务器中运行JConsole, 新建连接窗口中选择 远程进程 ,在地址中填入 127.0.0.1:7199,用户名和密码留空,然后就可以连接了:

由于默认配置下使用的不是SSL连接,JConsole会有警告信息,选择使用不安全连接就可以继续了:

连接成功后,可以看到虚拟机的运行状态以及其他JMX信息:

远程访问

开启远程访问首先需要在/etc/default/cassandra脚本中添加以下两个环境变量:

  export LOCAL_JMX=no
  export JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=192.168.112.16"

其中,虚拟机参数java.rmi.server.hostname用来设置JMX服务访问的域名或者地址。如果不显试设置,可能会导致远程访问失败。这个地址不一定是服务监听的地址,比如如果cassandra运行在docker容器中,通过端口映射到宿主机上,那么就需要设置为宿主机的地址或者域名。

然后创建文件/etc/cassandra/jmxremote.password,用来设置JMX访问所需的用户名和密码,比如在文件中加入:

  jmx 12345

这里jmx是用户名,12345是密码,两者之间用空格分隔。如果有多个用户,则每个用户一行。为了安全性,建议将这个文件设置为只有cassandra用户可以访问和修改。

如果配置成功,重启Cassandra服务可以在system.log中的jvm参数信息中看到java.rmi.server.hostnamecassandra.jmx.remote.portcom.sun.management.jmxremote.rmi.portcom.sun.management.jmxremote.authenticatecom.sun.management.jmxremote.password.file等的值:

  INFO  [main] 2020-05-18 19:11:47,721 CassandraDaemon.java:506 - JVM Arguments: [-Djava.rmi.server.hostname=192.168.112.16, -Xloggc:/var/log/cassandra/gc.log, -ea, -XX:+UseThreadPriorities, -XX:ThreadPriorityPolicy=42, -XX:+HeapDumpOnOutOfMemoryError, -Xss256k, -XX:StringTableSize=1000003, -XX:+AlwaysPreTouch, -XX:-UseBiasedLocking, -XX:+UseTLAB, -XX:+ResizeTLAB, -XX:+UseNUMA, -XX:+PerfDisableSharedMem, -Djava.net.preferIPv4Stack=true, -XX:+UseParNewGC, -XX:+UseConcMarkSweepGC, -XX:+CMSParallelRemarkEnabled, -XX:SurvivorRatio=8, -XX:MaxTenuringThreshold=1, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -XX:CMSWaitDuration=10000, -XX:+CMSParallelInitialMarkEnabled, -XX:+CMSEdenChunksRecordAlways, -XX:+CMSClassUnloadingEnabled, -XX:+PrintGCDetails, -XX:+PrintGCDateStamps, -XX:+PrintHeapAtGC, -XX:+PrintTenuringDistribution, -XX:+PrintGCApplicationStoppedTime, -XX:+PrintPromotionFailure, -XX:+UseGCLogFileRotation, -XX:NumberOfGCLogFiles=10, -XX:GCLogFileSize=10M, -Xms3952M, -Xmx3952M, -Xmn600M, -XX:+UseCondCardMark, -XX:CompileCommandFile=/etc/cassandra/hotspot_compiler, -javaagent:/usr/share/cassandra/lib/jamm-0.3.0.jar, -Dcassandra.jmx.remote.port=7199, -Dcom.sun.management.jmxremote.rmi.port=7199, -Dcom.sun.management.jmxremote.authenticate=true, -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password, -Djava.library.path=/usr/share/cassandra/lib/sigar-bin, -Dmx4jaddress=0.0.0.0, -Dmx4jport=7081, -XX:OnOutOfMemoryError=kill -9 %p, -Dlogback.configurationFile=logback.xml, -Dcassandra.logdir=/var/log/cassandra, -Dcassandra.storagedir=/var/lib/cassandra, -Dcassandra-pidfile=/var/run/cassandra/cassandra.pid, -XX:HeapDumpPath=/var/lib/cassandra/java_1589800305.hprof, -XX:ErrorFile=/var/lib/cassandra/hs_err_1589800305.log]

接下来就可以远程访问Cassandra的JMX服务了:

除了地址需要改成远程地址之后,还需要指定正确的用户名和密码。后面的操作就和上文中的例子一样了。

在上面的日志信息中,可以看到还有很多JMX相关的配置项。如果要调整这些配置,则需要修改cassandra-env.sh脚本。比如如果希望修改JMX服务监听的端口,需要在cassandra-env.sh脚本中找到以下部分,然后将JMX_PORT变量的值修改为期望的端口:

  # Specifies the default port over which Cassandra will be available for
  # JMX connections.
  # For security reasons, you should not expose this port to the internet.  Firewall it if needed.
  JMX_PORT="7199"

修改保存后,重启Cassandra服务,成功的话就可以看到日志中的相关信息,并用新端口访问了。

其它相关的配置可以参考cassandra-env.sh脚本中的注释说明和Cassandra文档。

参考资料

  • Apache Cassandra - Installing Cassandra

  • Apache Cassandra - Metrics

  • Apache Cassandra - Security - JMX Access

  • MX4J - HttpAdaptor

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Cassandra配置JMX

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Cassandra配置JMX

Cassandra的JMX服务的配置和开启 Cassandra数据库通过JMX方式对外提供监控和管理服务。本文讲解如何配置和开启Cassandra的JMX服务。环境说明本文是基于以下版本的系统和服务:cassandra 3.11.6openjdk
Cassandra配置JMX
2022-01-13

Cassandra怎么配置跨数据中心复制

要配置Cassandra的跨数据中心复制,需要在cassandra.yaml配置文件中进行一些设置。以下是配置跨数据中心复制的步骤:打开cassandra.yaml配置文件。找到listen_address和rpc_address设置节点的
Cassandra怎么配置跨数据中心复制
2024-04-09

怎么实现Hikari连接池使用SpringBoot配置JMX监控

这篇文章主要介绍“怎么实现Hikari连接池使用SpringBoot配置JMX监控”,在日常操作中,相信很多人在怎么实现Hikari连接池使用SpringBoot配置JMX监控问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
2023-06-20

Hikari连接池使用SpringBoot配置JMX监控的方法是什么

本文小编为大家详细介绍“Hikari连接池使用SpringBoot配置JMX监控的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Hikari连接池使用SpringBoot配置JMX监控的方法是什么”文章能帮助大家解决疑惑,下面跟
2023-07-06

如何在Cassandra中配置和管理复杂的数据模型和索引

在Cassandra中配置和管理复杂的数据模型和索引可以通过以下步骤实现:设计数据模型:首先确定数据模型的结构,包括表的列和主键,以及需要存储的数据类型。创建表:使用CQL(Cassandra Query Language)创建表,并定义表
如何在Cassandra中配置和管理复杂的数据模型和索引
2024-04-09

MyBatis视图与Apache Cassandra分布式数据库的适配

MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。而 Apache Cassandra 是一个高度可扩展的分布式数据库,旨在提供高可用性、高性能的数据存储解决方案。虽然 MyBatis 和 Cassandr
MyBatis视图与Apache Cassandra分布式数据库的适配
2024-10-14

Python配置与OpenCV进行配置

最近学习机器学习手写数字识别的过程中需要安装Python与OpenCV,并在Pycharm上运行,在安装配置过程中遇到了很多问题,为此将解决办法记录下来。一、首先需要安装Python:https://www.python.org/downl
2023-01-31

Maven安装与配置,Idea配置Maven

文章目录 一、安装本地Maven二、安装三、配置环境变量四、配置settings文件五、idea配置 一、安装本地Maven 选择你需要的maven版本下载:官网下载传送门 我使用的是3.6.1版本:maven-3.6.1-bi
2023-08-16

Aerospike配置

vi /etc/aerospike/aerospike.confservice {} #调整参数和进程所有者network { #用于配置集群内和应用程序节点通讯 service {}
Aerospike配置
2015-09-15

druid配置

DruidDataSource配置兼容DBCP,但个别配置的语意有所区别。配置缺省值说明name配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.
druid配置
2014-12-11

H3C 配置

H3C 2126进入系统视图   system-view配置Web网管用户  localuser user_name password 1 进入VTY界面视图  user-interface vty 0 设置Telnet用户登录密码  se
2023-01-31

编程热搜

目录