Influxdb Cluster集群部署

准备工作

确定安装版本

1、此次安装选择的是influxdb-cluster集群部署方案,参考项目开源地址为:https://github.com/chengshiwen/influxdb-cluster/wiki,选择的版本为v1.8.10-c1.2.0。

下载地址

https://github.com/chengshiwen/influxdb-cluster/releases

下载命令

# 注意机器版本
wget https://github.com/chengshiwen/influxdb-cluster/releases/download/v1.8.10-c1.1.2/influxdb-cluster_1.8.10-c1.1.2_linux_amd64.tar.gz

验证端口是否占用

1、influxdb使用的默认端口号为分别为用于meta集群内部服务的8091端口,meta节点通信的8089端口,data集群内部服务的8088端口,以及data节点对外提供http服务的8086端口。
2、通过 lsof -i :端口号 命令检查端口占用情况,如果存在占用需要进行修改
3、如果存在修改端口后发现在添加meta节点进入集群时出现报错并提示出修改前的端口,需要手动删除指定存放meta数据的目录再进行添加。

注意以上端口都为默认端口,可以在配置文件中进行修改

Meta节点说明和要求

1、确定部署机器数量,Meta节点至少需要三个,如果超过三个也必须为奇数个节点(官方不建议超过三个)。如果只有一个Meta节点那需要在启动该单个Meta节点时添加-single-server标志。
2、建议不要在同一服务器上部署多个Meta节点,因为如果该特定服务器无响应,它会产生更大的潜在故障。InfluxDB Cluster建议在占用空间相对较小的服务器上部署Meta节点。
3、Meta节点可以与Data节点部署在同一台物理机上,不过最好的情况是都分开部署

Data节点说明和要求

1、InfluxDB Cluster需要至少两个Data节点才能实现高可用性和冗余。
2、InfluxDB Cluster没有负载均衡功能,所以需要借助Nginx或其他有相同功能的应用进行负载均衡,在负载均衡应配置data节点对外提供http服务的8086端口。

主机配置

修改主机名
1、确定集群机器后,在每一台主机的/etc/hosts文件添加主机ip与主机名的映射(当然如果您希望使用IP地址,可忽略该步骤),示例如下:
	172.168.1.176 influxdb-cluster-1
	172.168.1.167 influxdb-cluster-15
	172.168.1.182 influxdb-cluster-18
	172.168.1.171 influxdb-cluster-5
验证主机间连通性
1、使用ping命令进行验证,示例如下:
	ping -qc 1 influxdb-cluster-1
	ping -qc 1 influxdb-cluster-15
	ping -qc 1 influxdb-cluster-18
	ping -qc 1 influxdb-cluster-5
目录创建
# 创建influxdb所需目录
mkdir -p influx/{meta,data,wal,hh}

配置Meta节点集群

确定配置机器

influxdb-cluster-1
influxdb-cluster-15
influxdb-cluster-5

配置步骤

注:确定部署Meta节点的每台机器都需做如下配置
1、编辑meta节点配置文件 vim influxdb-cluster-1.8.10-c1.1.2-1/etc/influxdb/influxdb-meta.conf
2、主要修改的项为以下几处:
    bind-address = ":8091"
    hostname = "influxdb-cluster-1"
        [meta]
        # Directory where cluster meta data is stored.
        dir = "/data/ops/home-influxdb/influx/meta"

        # The default address for meta node communication
        bind-address = ":8089"

        # The default address to bind the API to.
        http-bind-address = ":8091"
            
3、修改完成后启动Meta节点, 启动命令如下:
	nohup ./influxdb-cluster-1.8.10-c1.1.2-1/usr/bin/influxd-meta -config influxdb-cluster-1.8.10-c1.1.2-1/etc/influxdb/influxdb-meta.conf > nohup.out 2>&1 &
	
4、验证各机器上data节点是否正常启动,命令如下:
	ps -ef | grep meta
	
5、启动完成后,在任意一个Meta节点上,加入所有Meta节点,包括它自己。加入的命令如下(下列命令都在hebsjzx-1plusn-86-qt-1执行):
	./influxdb-cluster-1.8.10-c1.1.2-1/usr/bin/influxd-ctl add-meta influxdb-cluster-1:8091
	./influxdb-cluster-1.8.10-c1.1.2-1/usr/bin/influxd-ctl add-meta influxdb-cluster-15:8091
	./influxdb-cluster-1.8.10-c1.1.2-1/usr/bin/influxd-ctl add-meta influxdb-cluster-5:8091
	
	预期的输出为:Added meta node 1 at influxdb-cluster-1:8091
6、验证节点是否正确加入,在任意一台Meta节点机器上使用如下命令:
	 ./influxdb-cluster-1.8.10-c1.1.2-1/usr/bin/influxd-ctl show
   预期的输出为:
   	Data Nodes
    ==========
    ID      TCP Address     Version

    Meta Nodes
    ==========
    ID      TCP Address                     Version
    1       influxdb-cluster-1:8091    1.8.10-c1.1.2
    2       influxdb-cluster-15:8091   1.8.10-c1.1.2
    3       influxdb-cluster-5:8091    1.8.10-c1.1.2
7、至此Meta集群搭建完成

配置Data节点集群

确定配置机器

influxdb-cluster-1
influxdb-cluster-15
influxdb-cluster-18
influxdb-cluster-5

配置步骤

注:确定部署Data节点的每台机器都需做如下配置
1、编辑Data节点配置文件 vim influxdb-cluster-1.8.10-c1.1.2-1/etc/influxdb/influxdb.conf
2、主要修改的项为以下几处:
 	# The TCP bind address to use for cluster-internal services.
	bind-address = ":8088"

	# Hostname advertised by this host for remote addresses. This must be resolvable by all
	# other nodes in the cluster.
	hostname = "influxdb-cluster-1"
	[meta]
    	# Directory where the cluster metadata is stored.
    	dir = "/data/ops/home-influxdb/influx/meta"
    	
    [data]
  		# The directory where the TSM storage engine stores TSM files.
 		dir = "/data/ops/home-influxdb/influx/data"

  		# The directory where the TSM storage engine stores WAL files.
 		wal-dir = "/data/ops/home-influxdb/influx/wal"
 	[http]
 		# The bind address used by the HTTP service.
 	 	bind-address = ":8086"
  		
  	[hinted-handoff]
        # The directory where the hinted handoff queues are stored.
        dir = "/data/ops/home-influxdb/influx/hh"
3、修改完成后启动Data节点, 启动命令如下:
    	nohup ./influxdb-cluster-1.8.10-c1.1.2-1/usr/bin/influxd -config influxdb-cluster-1.8.10-c1.1.2-1/etc/influxdb/influxdb.conf > datanode.out 2>&1 &

4、验证各机器上data节点是否正常启动,命令如下:
	ps -ef | grep influxd
5、Data 节点在未被加入集群之前,出现 Failed to create storage,failed to store statistics 或 meta service unavailable 日志是正常情况。

6、将Data节点加入集群,在任意一台Data节点,命令如下:
	 ./influxdb-cluster-1.8.10-c1.1.2-1/usr/bin/influxd-ctl add-data influxdb-cluster-1:8088
	 ./influxdb-cluster-1.8.10-c1.1.2-1/usr/bin/influxd-ctl add-data influxdb-cluster-15:8088
	 ./influxdb-cluster-1.8.10-c1.1.2-1/usr/bin/influxd-ctl add-data influxdb-cluster-18:8088
	 ./influxdb-cluster-1.8.10-c1.1.2-1/usr/bin/influxd-ctl add-data influxdb-cluster-5:8088
	预期的输出为:Added data node 7 at influxdb-cluster-1:8088

7、验证节点是否正确加入,在任意一台Meta节点机器上使用如下命令:
	 ./influxdb-cluster-1.8.10-c1.1.2-1/usr/bin/influxd-ctl show
  	预期的输出为:
    Data Nodes
    ==========
    ID      TCP Address                     Version
    4       influxdb-cluster-1:8088    1.8.10-c1.1.2
    5       influxdb-cluster-15:8088   1.8.10-c1.1.2
    6       influxdb-cluster-18:8088   1.8.10-c1.1.2
    7       influxdb-cluster-5:8088    1.8.10-c1.1.2

    Meta Nodes
    ==========
    ID      TCP Address                     Version
    1       influxdb-cluster-1:8091    1.8.10-c1.1.2
    2       influxdb-cluster-15:8091   1.8.10-c1.1.2
    3       influxdb-cluster-5:8091    1.8.10-c1.1.2
    
8、至此Data集群搭建完成

配置Data节点JWT访问

注意:创建用户后再增加该配置
1、在未设置Jwt访问前启动Data节点并使用./influxdb-cluster-1.8.10-c1.1.2-1/usr/bin/influx 进入并创建用户,创建用户并赋权的语句如下:
	# 创建用户并赋予全部权限
	create user admin  with password 'admin' with all privileges:
	# 创建用户只服务写权限,ALL为全部权限,WRITE为写,READ为读权限,多权限以逗号分割
	create user pxq  with password 'pxq'
	GRANT WRITE ON test TO pxq
2、编辑Data节点配置文件 vim influxdb-cluster-1.8.10-c1.1.2-1/etc/influxdb/influxdb.conf
3、主要修改的项为以下几处:
	[http]
  		# Determines whether user authentication is enabled over HTTP/HTTPS.
  		# 开启
  		auth-enabled = true
		# The JWT auth shared secret to validate requests using JSON web tokens.
		# token加密字符串
  		shared-secret = "XXXX"
  		
4、生成token,网站:https://jwt.io/,生成规则如下:
	HEADER:{
  		"alg": "HS256",
  		"typ": "JWT"
	}
	PAYLOAD:{
  		"username": "pxq", # 用户名
  		"exp": 1679642512 # 过期时间
	}
	# 主要为最后那串字符使用influxdb.conf中shared-secret配置的字符串
	VERIFY SIGNATURE:
	HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload),I don't even know what it is)
	
5、验证是否成功
		curl -XPOST "http://172.168.1.176:8086/query?db=test" --data-urlencode "q=Select * from Test" --header "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.xxxx.5rcJ_-YeJsZ3XjRtxwe7kzH_4e__2btz0pEw_GQ8OJs"
		权限不足将提示:{"error":"error authorizing query: pxq not authorized to execute statement 'SELECT * FROM Test', requires READ on test"}
		正常将提示展示结果
		

配置负载均衡

由于InfluxDB Cluster 不能用作负载均衡器,故需要配置

1、nginx配置于/data/ops/nginx/目录
2、具体配置如下:
	upstream influxdb {

        server influxdb-cluster-1:8086;
        server influxdb-cluster-15:8086;
        server influxdb-cluster-18:8086;
        server influxdb-cluster-5:8086;
    }
    server {

        listen       8888;

        server_name  localhost;

        location /influx/ {
          proxy_set_header Host $proxy_host;
          proxy_pass   http://influxdb/;

        }

    }
3、对外统一访问地址:http://192.168.1.2:8888/influx
	例如访问查询test库Test表全部数据:curl -XPOST "http://192.168.1.2:8888/influx/query?db=test" --data-urlencode "q=Select * from Test" --header "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNjc5NjQyNTEyfQ.7mIPMjB60kFGFQuTSyf7KvYF921MkMmL662_icTfvRQ"
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Kubernetes(k8s)是一个流行的容器编排平台,可以用于部署和管理Redis Cluster集群。要部署Redis Cluster集群,您需要创建一个Kubernetes集群,并使用Kubernetes对象(如Deployment、Service和ConfigMap)来定义Redis Cluster的各个组件。您还需要使用Redis官方提供的Redis Cluster镜像来创建Redis节点,并使用Kubernetes的网络和存储资源来确保Redis节点之间的通信和数据持久性。最后,您需要使用Kubernetes的监控和日志记录工具来监视和管理Redis Cluster集群的状态和性能。 ### 回答2: Kubernetes是一种流行的容器编排平台,可以轻松地部署各种应用程序和服务。Redis是一个开源的内存键值数据库,广泛用于缓存和存储解决方案。在生产环境中,我们通常需要对Redis进行集群部署,以提高性能和可用性。在这篇文章中,我们将介绍如何使用Kubernetes部署Redis Cluster集群。 1. 创建Redis镜像 首先,我们需要创建一个Redis Docker镜像,并将其推送到Docker Hub等镜像仓库中。这个过程比较简单,我们可以从Docker官方网站下载Redis的Dockerfile,并进行一些基本的修改。例如: - 安装一些必要的依赖项,如wget和tar。 - 下载和解压Redis源代码。 - 编译Redis,并将其放置在/usr/local/bin目录下。 - 拷贝启动脚本和Redis配置文件到镜像中。 2. 编写Redis Cluster配置文件 接下来,我们需要编写一个Redis Cluster配置文件,用于指定每个Redis节点的端口和IP地址等信息。Redis Cluster要求至少有3个主节点和3个从节点,因此我们需要至少6个Redis节点来构建集群。例如: port 6379 cluster-enabled yes cluster-node-timeout 15000 cluster-config-file /data/nodes.conf cluster-require-full-coverage no appendonly yes dir /data/ daemonize no logfile "" 3. 部署Redis Cluster 现在,我们可以使用Kubernetes来部署Redis Cluster集群。我们需要使用StatefulSet控制器来生成一组具有唯一名称和稳定网络标识符的Redis Pod。此外,我们还需要使用Service来创建一个Redis Headless服务,并允许Pod之间相互发现和通信。例如: apiVersion: apps/v1beta1 kind: StatefulSet metadata: name: redis-cluster spec: serviceName: redis-cluster replicas: 6 template: metadata: labels: app: redis spec: containers: - name: redis image: my-redis-image:latest command: ["redis-server"] args: ["--appendonly", "yes"] ports: - containerPort: 6379 name: redis volumeMounts: - name: data mountPath: /data volumeClaimTemplates: - metadata: name: data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi apiVersion: v1 kind: Service metadata: name: redis-cluster spec: clusterIP: None ports: - name: redis port: 6379 selector: app: redis 4. 启动Redis Cluster 最后,我们可以启动Redis Cluster集群。首先,我们需要使用kubectl命令创建StatefulSet和Headless Service: kubectl create -f redis-cluster.yaml 然后,我们可以检查StatefulSet和Service是否成功创建: kubectl get statefulset kubectl get service 最后,我们可以使用kubectl命令进入Redis Pod,并运行redis-cli命令来验证集群是否正常工作: kubectl exec redis-cluster-0 redis-cli -c cluster info 总之,使用Kubernetes部署Redis Cluster集群比较简单,只需要做好上述几个步骤即可。在实际生产环境中,我们需要注意确保每个Redis节点之间的网络通信和数据同步,以提高集群的性能和可用性。 ### 回答3: Redis是一种快速的开源键值数据库,它的性能是其他NoSQL解决方案无法匹敌的。而Kubernetes是一个开源的容器编排引擎,负责在容器集群中自动化地部署、扩展和运行容器化应用程序。通过结合Kubernetes和Redis,我们可以快速构建一个高性能的Redis Cluster集群。 首先,我们需要设置Redis Cluster节点。因为Redis Cluster需要在一组单独的Redis实例之间进行数据分片,所以必须创建多个Redis实例来配置集群。因此,在Kubernetes中创建Redis Cluster时,最好使用StatefulSet,这样可以保证每个实例都有唯一的标识符和网络标识符。 接下来,我们创建一个Redis镜像,并将其推送到容器仓库。我们还需要为Redis Cluster创建一个配置文件,以确保各个节点能够正确地彼此通信。这里有一些要注意的事项,如: 1. 配置文件中必须使用静态IP地址来分配节点,否则它们将无法正确地通信。 2. 每个Redis实例还需要独立的持久化存储来保存数据,因此需要为每个节点分配一个存储卷。 3. 我们需要使用Kubernetes Service来将Redis Cluster公开给集群内的其他服务。 4. 对于Redis Cluster来说,最好使用至少6个节点用于数据分片。 接下来,我们使用Kubernetes YAML文件创建Redis Cluster。首先,创建一个名为“redis-cluster.yaml”的文件,并将以下内容复制并粘贴。注意,这里的配置文件和镜像名称都需要修改。 --- apiVersion: v1 kind: Service metadata: name: redis-cluster labels: app: redis-cluster spec: ports: - port: 6379 name: redis clusterIP: None selector: app: redis-cluster --- apiVersion: apps/v1 kind: StatefulSet metadata: name: redis-cluster spec: serviceName: redis-cluster replicas: 6 selector: matchLabels: app: redis-cluster template: metadata: labels: app: redis-cluster spec: containers: - name: redis image: redis:5.0.1-alpine command: - redis-server args: - /data/redis.conf ports: - containerPort: 6379 volumeMounts: - name: redis-data mountPath: /data - name: redis-config mountPath: /data/redis.conf subPath: redis.conf volumes: - name: redis-data persistentVolumeClaim: claimName: redis-data - name: redis-config configMap: name: redis-config --- apiVersion: v1 kind: ConfigMap metadata: name: redis-config data: redis.conf: |- port 6379 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes 最后,我们需要使用kubectl工具将YAML文件应用于Kubernetes集群。使用以下命令: kubectl apply -f redis-cluster.yaml 完成这些步骤后,Redis Cluster集群应该已经成功地部署到了Kubernetes集群中。我们可以使用特定的redis-cli命令将各个节点添加到集群中: redis-cli --cluster create 192.168.0.2:6379 192.168.0.3:6379 192.168.0.4:6379 192.168.0.5:6379 192.168.0.6:6379 192.168.0.7:6379 --cluster-replicas 1 这个命令将在所有节点之间创建数据分片,并将第7个节点设置为冗余备份。这样我们就创建了一个可靠的、高性能的Redis Cluster集群,可以在Kubernetes集群中自动部署、扩展和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值