使用glusterfs 作为 kubernetes PersistentVolume PersistentVolumeClaim 持久化仓库,高可用Rabbitmq,高可用mysql,高可用redis
glusterfs 怎么集群,网上一搜铺天盖地的
可利用这个特点做单节点高可用,因为K8S 哪怕节点宕机了 master 会在随意一台节点把挂掉的复活
当然我是在自己的环境下跑,经过网络的glusterfs,数据传输,有笔记大的性能损耗,对网络要求也特别高
小文件存储性能也不高等问题.最下面有mariadb 使用glusterfs 插入10W行数据,与本地硬盘的性能对比
这里记录一下rabbitmq 单机高可用情景,mysql,mongodb, redis 等,万变不离其宗

事先创建好了 volume,卷名为 env-dev
随便找个客户机挂载
mount -t glusterfs 192.168.91.135:/env-dev /mnt/env/dev
预先创建需要的文件夹
mkdir -p /mnt/env/dev/rabbitmq/mnesia
编写 glusterfs endpoint
[root@k8s-master- dev]# cat pv-ep.yaml
apiVersion: v1
kind: Endpoints
metadata:
name: glusterfs
namespace: env-dev
subsets:
- addresses:
- ip: 192.168.91.135
- ip: 192.168.91.136
ports:
- port:
protocol: TCP ---
apiVersion: v1
kind: Service
metadata:
name: glusterfs
namespace: env-dev
spec:
ports:
- port:
protocol: TCP
targetPort:
sessionAffinity: None
type: ClusterIP
编写 pv,注意这里path 是 volume名称 + 具体路径
[root@k8s-master- dev]# cat rabbitmq-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: rabbitmq-pv
labels:
type: glusterfs
spec:
storageClassName: rabbitmq-dir
capacity:
storage: 3Gi
accessModes:
- ReadWriteMany
glusterfs:
endpoints: glusterfs
path: "env-dev/rabbitmq/mnesia"
readOnly: false
编写pvc
[root@k8s-master-0 dev]# cat rabbitmq-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rabbitmq-pvc
namespace: env-dev
spec:
storageClassName: rabbitmq-dir
accessModes:
- ReadWriteMany
resources:
requests:
storage: 3Gi
创建endpoint pv pcv
kubectl apply -f pv-ep.yaml
kubectl apply -f rabbitmq-pv.yaml kubectl apply -f rabbitmq-pvc.yaml



使用方式,红字部分
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: ha-rabbitmq
namespace: env-dev
spec:
replicas: 1
selector:
matchLabels:
app: ha-rabbitmq
template:
metadata:
labels:
app: ha-rabbitmq
spec:
#hostNetwork: true
hostname: ha-rabbitmq
terminationGracePeriodSeconds: 60
containers:
- name: ha-rabbitmq
image: 192.168.91.137:5000/rabbitmq:3.7.7-management-alpine
securityContext:
privileged: true
env:
- name: "RABBITMQ_DEFAULT_USER"
value: "rabbit"
- name: "RABBITMQ_DEFAULT_PASS"
value: "rabbit"
ports:
- name: tcp
containerPort: 5672
hostPort: 5672
- name: http
containerPort: 15672
hostPort: 15672
livenessProbe:
failureThreshold: 3
httpGet:
path: /
port: 15672
scheme: HTTP
initialDelaySeconds: 20
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
readinessProbe:
failureThreshold: 3
httpGet:
path: /
port: 15672
scheme: HTTP
initialDelaySeconds: 20
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
volumeMounts:
- name: date
mountPath: /etc/localtime
- name: workdir
mountPath: "/var/lib/rabbitmq/mnesia"
volumes:
- name: date
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
- name: workdir
persistentVolumeClaim:
claimName: rabbitmq-pvc --- apiVersion: v1
kind: Service
metadata:
name: ha-rabbitmq
namespace: env-dev
labels:
app: ha-rabbitmq
spec:
ports:
- name: tcp
port: 5672
targetPort: 5672
- name: http
port: 15672
targetPort: 15672
创建rabbitmq pod以及service.
kubectl create -f ha-rabbitmq.yaml

分配到了第一个节点,看看数据文件

在管理页面创建一个创建一个 virtual host

环境东西太多,这里就不暴力关机了,直接删除再创建


这次分配到节点0
看看刚才创建的virtual host

还健在
haproxy 代理
[root@localhost conf]# cat haproxy.cfg
global
chroot /usr/local
daemon
nbproc 1
group nobody
user nobody
pidfile /haproxy.pid
#ulimit-n 65536
#spread-checks 5m
#stats timeout 5m
#stats maxconn 100 ########默认配置############
defaults
mode tcp
retries 3 #两次连接失败就认为是服务器不可用,也可以通过后面设置
option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
maxconn 32000 #默认的最大连接数
timeout connect 10s #连接超时
timeout client 8h #客户端超时
timeout server 8h #服务器超时
timeout check 10s #心跳检测超时
log 127.0.0.1 local0 err #[err warning info debug] ########MariaDB配置#################
listen mariadb
bind 0.0.0.0:3306
mode tcp
balance leastconn
server mariadb1 192.168.91.141:3306 check port 3306 inter 2s rise 1 fall 2 maxconn 1000
server mariadb2 192.168.91.142:3306 check port 3306 inter 2s rise 1 fall 2 maxconn 1000
server mariadb3 192.168.91.143:3306 check port 3306 inter 2s rise 1 fall 2 maxconn 1000 #######RabbitMq配置#################
listen rabbitmq
bind 0.0.0.0:5672
mode tcp
balance leastconn
server rabbitmq1 192.168.91.141:5672 check port 5672 inter 2s rise 1 fall 2 maxconn 1000
server rabbitmq2 192.168.91.142:5672 check port 5672 inter 2s rise 1 fall 2 maxconn 1000
server rabbitmq3 192.168.91.143:5672 check port 5672 inter 2s rise 1 fall 2 maxconn 1000 #######Redis配置#################
listen redis
bind 0.0.0.0:6379
mode tcp
balance leastconn
server redis1 192.168.91.141:6379 check port 6379 inter 2s rise 1 fall 2 maxconn 1000
server redis2 192.168.91.142:6379 check port 6379 inter 2s rise 1 fall 2 maxconn 1000
server redis3 192.168.91.143:6379 check port 6379 inter 2s rise 1 fall 2 maxconn 1000
nginx 代理管理页面

Mariadb 使用 glusterfs 与 本地硬盘 性能测试
#使用glusterfs 两个副本的 mariadb 插入10W行数据 2 queries executed, 2 success, 0 errors, 0 warnings 查询:CREATE PROCEDURE test_insert() BEGIN DECLARE Y bigint DEFAULT 1; WHILE Y<100000 DO INSERT INTO t_insert VALUES(NULL,'11111111111... 共 0 行受到影响 执行耗时 : 0.018 sec
传送时间 : 1.366 sec
总耗时 : 1.385 sec
----------------------------------------------------------- 查询:CALL test_insert(); 共 99999 行受到影响 执行耗时 : 6 min 1 sec
传送时间 : 0 sec
总耗时 : 6 min 1 sec #使用本地硬盘 mariadb 插入10W行数据 2 queries executed, 2 success, 0 errors, 0 warnings 查询:CREATE PROCEDURE test_insert() BEGIN DECLARE Y BIGINT DEFAULT 1; WHILE Y<100000 DO INSERT INTO t_insert VALUES(NULL,'11111111111... 共 0 行受到影响 执行耗时 : 0.004 sec
传送时间 : 1.372 sec
总耗时 : 1.376 sec
----------------------------------------------------------- 查询:CALL test_insert(); 共 99999 行受到影响 执行耗时 : 1 min 13 sec
传送时间 : 0.006 sec
总耗时 : 1 min 13 sec
使用glusterfs 作为 kubernetes PersistentVolume PersistentVolumeClaim 持久化仓库,高可用Rabbitmq,高可用mysql,高可用redis的更多相关文章
- 使用Ceph集群作为Kubernetes的动态分配持久化存储(转)
使用Docker快速部署Ceph集群 , 然后使用这个Ceph集群作为Kubernetes的动态分配持久化存储. Kubernetes集群要使用Ceph集群需要在每个Kubernetes节点上安装ce ...
- k8s kubernetes 核心笔记 镜像仓库 项目k8s改造(含最新k8s v1.16.2版本)
k8s kubernetes 核心笔记 镜像仓库 项目k8s改造 2019/10/24 Chenxin 一 基本资料 一 参考: https://kubernetes.io/ 官网 https://k ...
- velero 备份、迁移 kubernetes 应用以及持久化数据卷
velero 是heptio 团队开源的kubernetes 应用以及持久化数据卷备份以及迁移的解决方案,以前的名字为ark 包含以下特性: 备份集群以及恢复 copy 当前集群的资源到其他集群 复制 ...
- Docker数据持久化及实战(Nginx+Spring Boot项目+MySQL)
Docker数据持久化: Volume: (1)创建mysql数据库的container docker run -d --name mysql01 -e MYSQL_ROOT_PASSWORD= my ...
- kubernetes学习 做持久化存储
本节演示如何为 MySQL 数据库提供持久化存储,步骤: 1.创建 PV 和 PVC 2.部署 MySQL 3.向 MySQL 添加数据 4.模拟节点宕机故障,Kubernetes 将 MySQL 自 ...
- [置顶]
kubernetes资源类型--持久化存储Persistent Volume和Persistent Volume Claim
概念 存储管理跟计算管理是两个不同的问题.理解每个存储系统是一件复杂的事情,特别是对于普通用户来说,有时并不需要关心各种存储实现,只希望能够安全可靠地存储数据. 为了简化对存储调度,K8S对存储的供应 ...
- Kubernetes从私有镜像仓库中拉取镜像
当我们尝试从私有仓库中拉取镜像时,可能会收到这样提示:requested access to the resource is denied Error response from daemon: pu ...
- Kubernetes 配置私有镜像仓库时,没有权限访问的问题
使用 K8S 部署服务时,如果指定的镜像地址是内部镜像仓库,那么在下载镜像的时候可能会报权限错误.这是由于在 K8S 中部署服务时,K8S 需要到 Harbor 中进行一次验证,这个验证与节点中使用 ...
- aws eks ebs StorageClass PersistentVolume PersistentVolumeClaim
aws EBS 提供存储资源 Amazon EBS CSI 驱动程序的安装,请参考https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/ebs- ...
随机推荐
- Python基础-列表推导式、匿名函数、os/sys/time/datetime/pymysql/xlwt/hashlib模块
列表推导式 [表达式 for 变量 in range(n) if 条件] 等效于 for 变量 in in range(n): if 条件: 表达式 优点:书写方便,缺点:不易读 注意:用的是方括号 ...
- db2性能优化
性能优化概述 DB2 的性能优化可以从三个方面分析:内存,CPU 和 I/O .DB2 性能优化是一件较为复杂的综合性的工作 , 需要对问题的根源作全方位的探索和思考.同时也需要较深厚的数据库管理经验 ...
- JDBC(12)—DBUtils工具类
DBUtils:commons-dbutils是Apache组织提供的一个开源JDBC工具库,它是对JDBC的简单封装,并且使用dbutils会极大的简化jdbc编码的工作量,同时不会影响到程序的性能 ...
- .Net Core中的通用主机(二)——托管服务
前文介绍了.Net core的通用主机的配置,在基础配置完成后,下一步就是注册我们的后台任务了..net core提供了一个通用的后台服务接口IHostedService,称为托管服务.一个注册托管服 ...
- python测试开发django-50.jquery发送ajax请求(get)
前言 有时候,我们希望点击页面上的某个按钮后,不刷新整个页面,给后台发送一个请求过去,请求到数据后填充到html上,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.Ajax可以完美的 ...
- AHB总线协议
https://blog.csdn.net/linton1/article/details/79649249 1. 简介 AHB(Advanced High Performance Bus)总线规范是 ...
- [rtsp]海康IPC监控摄像头远程外网监控配置(DDNS)
本来这个DDNS服务正是我想要的,但是配置了之后海康提示不再提供这个服务了,以后统一使用萤石云了,看来有必要去学习下萤石开放平台的api,看都提供哪些服务. 海康威视网络摄像机出厂的默认IP地 ...
- spring rest 容易被忽视的后端服务 chunked 性能问题
spring boot 容易被忽视的后端服务 chunked 性能问题 标签(空格分隔): springboot springmvc chunked 作者:王清培(Plen wang) 沪江Java资 ...
- t-io 集群解决方案以及源码解析
t-io 集群解决方案以及源码解析 0x01 概要说明 本博客是基于老谭t-io showcase中的tio-websocket-showcase 示例来实现集群.看showcase 入门还是挺容易的 ...
- Javascript 解读与思想
Javascript 解读与思想 解读:对底层类库功能的理解 思想:对程序架构的部署思维