首页数据库k8s数据库,k8s中的Mysql数据库持久化存储

k8s数据库,k8s中的Mysql数据库持久化存储

编程之家2023-10-17107次浏览

大家好,今天来为大家解答k8s数据库这个问题的一些问题点,包括k8s中的Mysql数据库持久化存储也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

k8s数据库,k8s中的Mysql数据库持久化存储

linux和k8s和数据库笔记

有关linux:

1、卸载某一个特定的挂在点。

umount/dev/datavg01/data01

2、移掉lvm。

vgremove/dev/datavg01

3、拷贝数据。

k8s数据库,k8s中的Mysql数据库持久化存储

scp-r/home/gaoge.txt root@192.168.10.1:/opt或rsync-av/root/rpmpkgs/tmp/backups/

4、显示系统盘符并以树状格式展开。

lsblk。

5、扫描新增设备。

echo"---">/sys/class/scsi-host/hosto/scan

6、强行杀死mysql

k8s数据库,k8s中的Mysql数据库持久化存储

kill-9$(ps-ef| grep mysql)

7、将文件内容以每一行5个的形式展示出来。

cat test2.txt| xargs-n 5

8、用cut去实现awk切割列的效果

cat/etc/passwd| cut-d:-f 2

9、sed、grsp、awk。之前已经说过了、具体看从linux三剑客说起这篇。

10、增加一个oracle用户让其属于oinstall组同时也隶属于dba组。useradd oracle-g oinstall-G dba

11、新建立一个组groupnew并将组id修改为255。

groupadd-g 255 groupnew

12、将本地/dev/hdb整盘中的数据备份到/dev/hdd上。

dd if=/dev/hdb of=/dev/hdd

13、查看服务器cpu个数。

cat/proc/cpuinfo| grep"physical id"| wc-l

14、查看服务器io状况并以每间隔1秒的速度输出5次。

iostat 1 5

15、查看服务器内存使用情况并以每间隔2秒的速度输出10次。

vmstat 2 10

16、将gaoge.txt中的第一列db2找到并将db两个字符用ab替换。

cat gaoge.txt|grep db2| awk-F 2'{print$1}'| tr db ab

17、将包名解压到指定目录。

tar-cxvf包名-C指定的目录

18、linux中前后台任务切换。

ctrl+z切换到后台、jobs显示id、fg+ id切换至前台。

19、杀掉top下stopped的进程。

ps-A-ostat,ppid,pid,cmd|grep-e'^[T]'

然后在进行kill

20、监控cpu状态。

mpstat

21、查看虚拟内存使用了多少。

swapon

22、每月1到10号4:45重启nginx。

crontab-u root-l显示root当前的计划任务。

crontab-u root-e后输入以下内容并保存退出。

45 4 1,10** systemctl start nginx

23、awk打印df-h的第一列、第三列、最后一列。

df-h| awk'{print$1""$3""$NF}'

24、批量拉、打标签、推docker镜像的shell脚本。

#!/bin/bash

for image in'docker images| grep 10.171.10.1:10000| awk'{ print$1":"$2}

do

version='echo$image| awk-F/'{ print$2}'

docker tag$image 192.168.10.1/$version

docker push 192.168.10.1/$version

done

25、正则表达式匹配电话号码。

(?0d{2}[)-]?d{8}

26、编译安装三步骤。

./configure--prefix=安装目录

make

make install

有关kubernetes:

将kubernetes中pod的数据拷贝到物理宿主机上。

kubectl cp gyl-run/gyl-mysql-01020304:/opt/docker.sh/opt

将kubernetes中物理宿主机上的数据拷贝到pod中。

kubectl cp/opt/docker.sh gyl-run/gyl-mysql-01020304:/opt

检查当前用户有没有权限在k8s中创建资源权限。

kubectl auth can-i'*''*'

检查当前用户有没有权限在k8s集群中创建namespace权限。

kubectl auth can-i create pods--all-namespaces

查看集群是否健康。

kubectl get cs

有关数据库:

查看 mysql二进制日志格式。

show variables like‘%binlog_format%’

查看所有二进制日志文件

show master logs

查看正在写入的二进制日志

show master status

格式化二进制显示为sql格式

mysqlbinlog--base64--output=decode-rows-v--start-date="2019-01-25 00:00:00"--stop-date=“2019-01-26 17:30” master-bin.000006

利用bin-log去还原数据

/usr/bin/mysqlbinlog--no-default/var/lib/mysql/mysql-bin.00001| usr/bin/mysql-u root-p pwd test

连接 postgresql

psql-U用户名-d数据

数据库名-h主机地址-p端口(默认端口为5432)

l显示数据库列表

d显示所有表

d表名称显示表结构

du显示所有数据库用户

c数据库名连接数据库

q退出pg窗口

pg备份:

pg_dump-U kong-d kong-f/opt/2019-01-26-pg.sql

pg还原:

psql-d kong-U kong-f/opt/2019-01-26-pg.sql

mongo批量更新数据:把age大于20的class name修改为,设置multi为true

如何入门k8s

Kubernetes(简称K8S)是Google开源的分布式的容器管理平台,方便我们在服务器集群中管理我们容器化应用。

节点(Master node and Worker node)

节点通常指的就是服务器,在k8s中有两种节点:管理节点(Master Node)和工作节点(Worker Node)

管理节点(Master Node):负责管理整个k8s集群,一般由3个管理节点组成HA的架构。

工作节点(Worker Node):主要负责运行容器。

命名空间(Namespace)

k8s命名空间主要用于隔离集群资源、隔离容器等,为集群提供了一种虚拟隔离的策略;默认存在3个名字空间,分别是默认命名空间 default、系统命名空间 kube-system和 kube-public。

Object

k8s对象(Object)是一种持久化存储并且用于表示集群状态的实体。k8s对象其实就是k8s自己的配置协议,总之我们可以通过定义一个object让k8s根据object定义执行一些部署任务、监控任务等等。

POD

Pod是 Kubernetes部署应用或服务的最小的基本单位。一个Pod封装多个应用容器(也可以只有一个容器)、存储资源、一个独立的网络 IP以及管理控制容器运行方式的策略选项。

副本集(Replica Set,RS)

是一种控制器,负责监控和维护集群中pod的副本(replicas)数,确保pod的副本数是我们期望的样子。

部署(Deployment)

表示对k8s集群的一次更新操作,是k8s集群中最常用的Object,主要用于部署应用。支持滚动升级。

服务(service)

是对应用的抽象,也是k8s中的基本操作单元,一个服务背后由多个pod支持,服务通过负载均衡策略将请求转发到容器中。

Ingress

是一种网关服务,可以将k8s服务通过http协议暴露到外部。

无状态应用&有状态应用

无状态应用指的是应用在容器中运行时候不会在容器中持久化存储数据,应用容器可以随意创建、销毁;如果一个应用有多个容器实例,对于无状态应用,请求转发给任何一个容器实例都可以正确运行。例如:web应用

有状态应用指的是应用在容器中运行时候需要稳定的持久化存储、稳定的网络标识、固定的pod启动和停止次序。例如:mysql数据库

k8s中的Mysql数据库持久化存储

 

一、配置:

环境:

CentOS7 

VMware

笔者配置了四台虚拟机:

K8S-Master节点: 3GB内存  2核CPU  20GB硬盘空间

K8S-node1节点:  2GB内存  2核CPU  30GB硬盘空间

K8S-node2节点:  2GB内存  2核CPU  30GB硬盘空间

镜像仓库节点:    2GB内存  2核CPU  50GB硬盘空间

二、节点规划:

使用三台虚拟机搭建K8S集群,使用一台虚拟机搭建镜像仓库。

每台虚拟机配置两块网卡,其中一块为“NAT模式”,用于拉取镜像等功能。

另外一块网卡为“仅主机模式”,用于集群节点间的通信。归划如下:

K8s-master节点:

仅主机模式:10.10.10.200

NAT模式: 192.168.200.130

K8S-node1节点:

仅主机模式:10.10.10.201

NAT模式: 192.168.200.131

K8S-node2节点:

仅主机模式:10.10.10.202

NAT模式: 192.168.200.132

镜像仓库节点:

仅主机模式:10.10.10.101

NAT模式: 192.168.200.150

三、版本信息

Linux内核版本:

Linux version 3.10.0-862.el7.x86_64(builder@kbuilder.dev.centos.org)

(gcc version 4.8.5 20150623(Red Hat 4.8.5-28)(GCC))

 #1 SMP Fri Apr 20 16:44:24 UTC 2018

K8s集群版本为1.15.0版本:

四、基于StatefulSet与PV/PVC的MySql持久化存储实验

1.在每个节点安装nfs服务

在“镜像仓库”节点,执行以下命令:

yum install-y nfs-common nfs-utils rpcbind

在k8s集群,执行以下命令:

yum install-y nfs-utils rpcbind

2.在“镜像仓库”节点下,配置nfs服务器

mkdir/nfs_mysql

Chmod 777 /nfs_mysql/

(在测试环境中,为了不考虑用户属性,暂时赋予777权限,但在生产环境不推荐这样做)

Chown nfsnobody /nfs_mysql/

echo“/nfs_mysql*(rw,no_root_squash,no_all_squash,sync)” >>/etc/exports

cat/etc/exports

/nfs_mysql *(rw,no_root_squash,no_all_squash,sync)

systemctl start rpcbind

systemctl start nfs

3.测试nfs服务是否可用

mkdir/test

showmount-e 10.10.10.101

可见/nfs_mysql*已暴露于共享目录,接下来测试挂载是否可用:

在master节点下执行:

mount-t nfs 10.10.10.101:/nfs_mysql/test/

echo"hello-world">>/test/1.txt

在镜像仓库节点下查看1.txt是否存在,若存在则挂载成功:

可见nfs服务可以正常使用,接下来删除test目录和1.txt

在镜像仓库下:

[root@hub nfs_mysql]# rm-f 1.txt

在Master节点下:

[root@k8s-master~]# umount/test/

[root@k8s-master~]# rm-rf/test/

同理,依照以上步骤同时创建:(提供多个mysql副本进行挂载)

nfs_mysql1

nfs_mysql2

完成后需要重启nfs服务

systemctl restart rpcbind

systemctl restart nfs

最终效果:

4.将nfs封装成pv

创建mysql_test文件夹,将yaml文件统一保存在此目录下

mkdir mysql_test

cd mysql_test

vim mysql-pv.yml

mysql-pv.yml配置如下:

apiVersion: v1

kind: PersistentVolume

metadata:

  name: mysql-pv

spec:

  capacity:

    storage: 5Gi

  accessModes:

    - ReadWriteOnce

  persistentVolumeReclaimPolicy: Retain

  storageClassName: nfs

  nfs:

    path:/nfs_mysql

    server: 10.10.10.101

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: mysql-pv1

spec:

  capacity:

    storage: 5Gi

  accessModes:

    - ReadWriteOnce

  persistentVolumeReclaimPolicy: Retain

  storageClassName: nfs

  nfs:

    path:/nfs_mysql1

    server: 10.10.10.101

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: mysql-pv2

spec:

  capacity:

    storage: 5Gi

  accessModes:

    - ReadWriteOnce

  persistentVolumeReclaimPolicy: Retain

  storageClassName: nfs

  nfs:

    path:/nfs_mysql2

    server: 10.10.10.101

注意:

在k8s集群15版本中recycle回收策略已被删除,只能用retain策略或者Delete策略。这里我们使用 persistentVolumeReclaimPolicy: Retain

 

执行命令:

kubectl create-f mysql-pv.yml

kubectl get pv

如图所示,即为Pv创建成功。

5.部署MySQL,在mysql_test目录下编写mysql.yml,配置文件如下

apiVersion: v1

kind: Service

metadata:

  name: mysql

  labels:

    app: mysql

spec:

  ports:

  - port: 3306

    name: mysql

  clusterIP: None

  selector:

    app: mysql

---

apiVersion: apps/v1

kind: StatefulSet

metadata:

  name: mysql

spec:

  selector:

    matchLabels:

      app: mysql

  serviceName:"mysql"

  replicas: 3

  template:

    metadata:

      labels:

        app: mysql

    spec:

      containers:

      - name: mysql

        image: mysql:5.6

        env:

        - name: MYSQL_ROOT_PASSWORD

          value: password

        ports:

        - containerPort: 3306

          name: mysql

        volumeMounts:

        - name: mysql-persistent-storage

          mountPath:/var/lib/mysql

  volumeClaimTemplates:

  - metadata:

      name: mysql-persistent-storage

    spec:

      accessModes: ["ReadWriteOnce"]

      storageClassName:"nfs"

      resources:

        requests:

          storage: 1Gi 

执行以下命令,部署mysql服务:

kubectl create-f mysql.yml

如图可知,mysql按StatefulSet依次创建了mysql-0 mysql-1 mysql-2

查看各个Pod部在哪个节点:

6.通过创建临时容器,使用MySQL客户端发送测试请求给MySQL master节点

注意:

主机名为mysql-0.mysql;跨命名空间的话,主机名请使用mysql-0.mysql. [NAMESPACE_NAME].如果没有指定命名空间,默认为default,即 mysql-0.mysql. default。

  

这里笔者打算关闭node2节点来模拟node2宕机,来测试是否实现数据的持久化存储,

所以我们向node2上的mysql1写入数据。

 

执行以下命令,访问mysql1:

kubectl run mysql-client--image=mysql:5.6-it--rm--restart=Never-- mysql-h mysql-1.mysql.default-p password

创建数据库demo,并向messages表中写入hello-world

CREATE DATABASE demo; 

CREATE TABLE demo.messages(message VARCHAR(250)); 

INSERT INTO demo.messages VALUES('hello-world');

如图所示

接下来我们来关闭k8s-node2虚拟机,模拟宕机

查看nodes的运行状态,可知node2的状态已转变为NotReady

一段时间后,k8s将Pod MySql-1迁移到节点k8s-node1

由于时间过长,笔者把三个Pod都删除重启后,验证数据:

MySQL服务恢复,数据完好无损!

文章分享结束,k8s数据库和k8s中的Mysql数据库持久化存储的答案你都知道了吗?欢迎再次光临本站哦!

网站域名ip地址查询(怎样才能查看网站的IP地址方法有多少种)搞笑一家人2演员表,谁知道搞笑一家人2的全部演员表啊 要完整的 谢谢额