Kairosdb集群的搭建

2022-04-24 00:00:00 集群 服务器 运行 服务 配置

今天我们来学习一下如何搭建kairosdb的集群,在生产环境下我们需要考虑很多性能和安全上的问题,传统的一个应用配置一个数据库,再加上一个服务器的模式已经不能满足生产的需要了,而集群的出现很好的解决的很多问题,下面列出一些集群服务器的优劣:

优势


  一、集群系统可解决所有的服务器硬件故障,当某一台服务器出现任何故障,如:硬盘、内存、CPU、主板、I/O板以及电源故障,运行在这台服务器上的应用就会切换到其它的服务器上。

  二、集群系统可解决软件系统问题,我们知道,在计算机系统中,用户所使用的是应用程序和数据,而应用系统运行在操作系统之上,操作系统又运行在服务器上。这样,只要应用系统、操作系统、服务器三者中的任何一个出现故障,系统实际上就停止了向客户端提供服务,比如我们常见的软件死机,就是这种情况之一,尽管服务器硬件完好,但服务器仍旧不能向客户端提供服务。而集群的大优势在于对故障服务器的监控是基于应用的,也就是说,只要服务器的应用停止运行,其它的相关服务器就会接管这个应用,而不必理会应用停止运行的原因是什么。

  三、集群系统可以解决人为失误造成的应用系统停止工作的情况,例如,当管理员对某台服务器操作不当导致该服务器停机,因此运行在这台服务器上的应用系统也就停止了运行。由于集群是对应用进行监控,因此其它的相关服务器就会接管这个应用。

缺点

  我们知道集群中的应用只在一台服务器上运行,如果这个应用出现故障,其它的某台服务器会重新启动这个应用,接管位于共享磁盘柜上的数据区,进而使应用重新正常运转。我们知道整个应用的接管过程大体需要三个步骤:侦测并确认故障、后备服务器重新启动该应用、接管共享的数据区。因此在切换的过程中需要花费一定的时间,原则上根据应用的大小不同切换的时间也会不同,越大的应用切换的时间越长。

kairosdb作为监控的分布式数据库框架,当然需要考虑集群的问题,接下来我们一起来搭建一个集群吧。

一、首先我们需要具备一下环境

服务器说明 CPU Memory Disk IP OS JDK Software
kariosdb1 2 core 4 g 100 g 10.10.10.172 centos7 jdk-8u91-linux-x64.tar.gz kairosdb-1.1.1-1.tar.gz
kariosdb2 2 core 4 g 100 g 10.10.10.173 centos7 jdk-8u91-linux-x64.tar.gz kairosdb-1.1.1-1.tar.gz
canssandra1 4 core 8 g 200 g 10.10.10.170 centos7 jdk-8u91-linux-x64.tar.gz apache-cassandra-3.0.5-bin.tar.gz
canssandra2 4 core 8 g 200 g 10.10.10.171 centos7 jdk-8u91-linux-x64.tar.gz apache-cassandra-3.0.5-bin.tar.gz
系统:centos7或者其他版本,本实验使用的都是centos7

分别在四台机器上安装JDK,通过Xshell 可以将本地的文件上传到虚拟机中,都将JDK放到/usr/java目录下,解压即可。

然后编辑,

# vim /etc/profile

在文件开始的位置添加内容即可。退出保存
JAVA_HOME=/usr/java/jdk1.8.0_91
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$CLASSPATH
export PATH JAVA_HOME CLASSPATH

都安装好JDK之后就可以安装软件了,默认我们都将要装的软件放到各种root文件夹的/usr/下面,大家建立一个文件夹存放即可
例如 在kairosdb1中 #mkdir /usr/java ;

以上安装的步骤在此不过多讲解,大家可以参考官方网站自行安装

二、集群配置

各自安装好各自的软件后,我们进入设置集群关键的部分,我们来看一下我们需要搭建的框架图


由于我们是使用cassandra作为存储的,而cassandra本身的集群搭建就比较简单,所以我们分别去修改cassandra.yaml的配置就行,首先我们修改cassandra1(10.10.10.170)的部分配置如下:

# any class that implements the SeedProvider interface and has a
# constructor that takes a Map<String, String> of parameters will do.
seed_provider:
# Addresses of hosts that are deemed contact points.
# Cassandra nodes use this list of hosts to find each other and learn
# the topology of the ring. You must change this if you are running
# multiple nodes!
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
# seeds is actually a comma-delimited list of addresses.
# Ex: "<ip1>,<ip2>,<ip3>"
- seeds: "10.10.10.170"
listen_address: 10.10.10.170
start_rpc: true
rpc_address: 10.10.10.170
我们修改cassandra2(10.10.10.171)的部分配置如下:
# any class that implements the SeedProvider interface and has a
# constructor that takes a Map<String, String> of parameters will do.
seed_provider:
# Addresses of hosts that are deemed contact points.
# Cassandra nodes use this list of hosts to find each other and learn
# the topology of the ring. You must change this if you are running
# multiple nodes!
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
# seeds is actually a comma-delimited list of addresses.
# Ex: "<ip1>,<ip2>,<ip3>"
- seeds: "10.10.10.170"
listen_address: 10.10.10.171
start_rpc: true
rpc_address: 10.10.10.171

这里我们可以把cassandra1和cassandra2都作为seed节点了,其实可以只指定一个节点即可,被指定的节点负责向其他的节点同步更新数据,这里我将10.10.10.170作为seed。
接下来就是配置kairosdb中的配置信息了,首先我们修改kairosdb1(10.10.10.172)中的kairosdb.properties配置,修改如下:

#===============================================================================
#kairosdb.service.datastore=org.kairosdb.datastore.h2.H2Module
kairosdb.datastore.concurrentQueryThreads=5
kairosdb.service.datastore=org.kairosdb.datastore.cassandra.CassandraModule
#kairosdb.service.datastore=org.kairosdb.datastore.remote.RemoteModule
#Cassandra properties
#host list is in the form> 1.1.1.1:9160,1.1.1.2:9160
kairosdb.datastore.cassandra.host_list=10.10.10.170:9160
kairosdb.datastore.cassandra.keyspace=kairosdb
kairosdb.datastore.cassandra.replication_factor=1
kairosdb.datastore.cassandra.write_delay=1000
kairosdb.datastore.cassandra.write_buffer_max_size=500000

修改kairosdb2(10.10.10.173)中的 kairosdb.properties配置,修改如下:

#===============================================================================
#kairosdb.service.datastore=org.kairosdb.datastore.h2.H2Module
kairosdb.datastore.concurrentQueryThreads=5
kairosdb.service.datastore=org.kairosdb.datastore.cassandra.CassandraModule
#kairosdb.service.datastore=org.kairosdb.datastore.remote.RemoteModule
#Cassandra properties
#host list is in the form> 1.1.1.1:9160,1.1.1.2:9160
kairosdb.datastore.cassandra.host_list=10.10.10.170:9160
kairosdb.datastore.cassandra.keyspace=kairosdb
kairosdb.datastore.cassandra.replication_factor=1
kairosdb.datastore.cassandra.write_delay=1000
kairosdb.datastore.cassandra.write_buffer_max_size=500000
以上就是主要的配置更改,接下来我们需要将各自的防火墙先关闭,或者你设置开放9160和9042端口,否则会报错的。
我们这里将防火墙关闭,命令如下:

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
三、开启服务
1、开启cassandra1和cassandra2中cassandra服务,./cassandra -f

2、使用命令参看集群中的节点状态

# ./nodetool status

Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 10.10.10.170 286.5 KB 256 50.5% abc11be0-73ed-48d3-b292-a4fbe8b36947 rack1
UN 10.10.10.171 373.37 KB 256 49.5% a5881208-0c89-428e-bce1-a34290751a1d rack1


3、开启kairosdb1和kairosdb2中的kairosdb服务,./kairosdb.sh run

这时候你访问10.10.10.172:8080或者10.10.10.173:8080都可以访问,而且数据是同步的。

当然目前为止已经配置完成,但是我们还需要做一个负载均衡,对外我们只要提供一个ip地址即可,下一次我们讲解利用Nginx来搭建负载均衡。

谢谢各位,高手勿喷!

相关文章