您的位置:首页 > 大数据 > 人工智能

Kairosdb集群的搭建

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

优势

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

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

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

缺点

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

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

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

服务器说明CPUMemoryDiskIPOSJDKSoftware
kariosdb12 core4 g100 g10.10.10.172centos7jdk-8u91-linux-x64.tar.gzkairosdb-1.1.1-1.tar.gz
kariosdb22 core4 g100 g10.10.10.173centos7jdk-8u91-linux-x64.tar.gzkairosdb-1.1.1-1.tar.gz
canssandra14 core8 g200 g10.10.10.170centos7jdk-8u91-linux-x64.tar.gzapache-cassandra-3.0.5-bin.tar.gz
canssandra24 core8 g200 g10.10.10.171centos7jdk-8u91-linux-x64.tar.gzapache-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/下面,大家建立一个文件夹存放即可

例如
4000
在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来搭建负载均衡。

谢谢各位,高手勿喷!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: