1
只有当存储过程编写创建以后每次执行存储过程的存储过程,不需要重新编译,但是我们通常使用每执行一次编译的SQL语句一次,所以使用数据库存储过程执行速度可以提高。
2,经常会遇到复杂的业务逻辑和对数据库的 *** 作,这个时候就会用SP来封装数据库 *** 作。当复杂的数据库 *** 作(如多表更新,插入,查询,删除的时候),可以封装这个复杂的 *** 作与存储过程提供交易处理和数据库结合在一起。可以大大提高有效使用的数据库,能够减少程序,它是在数据库中的动作的大数据量的执行时间是非常重要的。在视图,SQL语句,分离和程序代码语句的代码点可以提高代码的可读性。
3,存储过程可以设置参数,你可以在根据传入的参数不同的存储过程,重复使用相同的优化高效的速度,提高代码的可读性。
4,安全,只能设置一个用户只需要指定要使用的存储过程存储过程的正确类型:
比索(1)系统存储过程:以sp_开头中,用于该系统的各种设置。获得相关的管理信息,如sp_help将是获得的相关信息指定的对象。
日(2)扩展存储过程来开始XP_,用来调用 *** 作系统提供的功能EXEC master..xp_cmdshell'平10.8.16.1'
比索(3)用户定义的存储过程,这是我们指的是一种通用格式
模板的存储过程:创建过程procedue_name [参数DATA_TYPE] [输出] [用] {重新编译|加密}为sql_statement
解释说:输出:表示该参数,则返回
酒店与{重新编译|加密}编译:编译曾经说过,每次执行存储过程加密:创建内容存储过程将被加密。
Kubernetes中使用GlusterFS作为持久化存储,要提供storageClass使用需要依赖Heketi工具。Heketi是一个具有resetful接口的glusterfs管理程序,作为kubernetes的Storage存储的external provisioner。 “Heketi提供了一个RESTful管理界面,可用于管理GlusterFS卷的生命周期。借助Heketi,像OpenStack Manila,Kubernetes和OpenShift这样的云服务可以动态地配置GlusterFS卷和任何支持的持久性类型。Heketi将自动确定整个集群的brick位置,确保将brick及其副本放置在不同的故障域中。Heketi还支持任意数量的GlusterFS集群,允许云服务提供网络文件存储,而不受限于单个GlusterFS集群。
heketi:提供基于RESTful接口管理glusterfs的功能,可以方便的创建集群管理glusterfs的node,device,volume;与k8s结合可以创建动态的PV,扩展glusterfs存储的动态管理功能。主要用来管理glusterFS volume的生命周期,初始化时候就要分配好裸磁盘(未格式化)设备.
注意事项:
安装Glusterfs客户端:每个kubernetes集群的节点需要安装gulsterfs的客户端,如glusterfs-cli,glusterfs-fuse.主要用于在每个node节点挂载volume。
加载内核模块:每个kubernetes集群的节点运行modprobe dm_thin_pool,加载内核模块。
高可用(至少三个节点):至少需要节点用来部署glusterfs集群,并且这3个节点每个节点需要至少一个空余的磁盘。
基础设施要求:
正在运行的glusterfs集群,至少有三个node节点,每个节点至少有一个可用的裸块设备(如EBS卷或本地磁盘,就是没有格式化的).
用于运行GlusterFS节点必须为GlusterFS通信打开相应的端口(如果开启了防火墙的情况下,没开防火墙就不需要这些 *** 作)。
安装依赖及常用工具包:
yum -y install flex bison openssl openssl-devel libxml2-devel gcc lrzsz vim*
查找gluster的最新软件仓库:
yum search centos-release-gluster
安装最新版本的gluster软件仓库:
yum install centos-release-gluster7.noarch -y
安装gluster源,并安装glusterfs及相关软件包
yum install glusterfs glusterfs-server glusterfs-cli glusterfs-geo-replication glusterfs-rdma -y
客户端安装GlusterFS客户端软件
yum install glusterfs-fuse glusterfs-cli
启动Glusterd服务
systemctl start glusterd
systemctl enable glusterd --now //设开机自启,并立即启动服务
在任意一个节点上添加信任节点
gluster peer probe node99
gluster peer probe node110
gluster peer probe node145
gluster peer probe node108
查看节点状态:
gluster peer status //查看节点状态
创建复制卷
mkdir /glusterfs/storage1/rep_vol1
gluster volume create rep_vol1 replica 2 node99:/glusterfs/storage1/rep_vol1 node108:/glusterfs/storage1/rep_vol1
创建分布式卷
gluster volume create vdisk1 node108:/brick1 node110:/brick1 brick node145:/brick1 force
创建分布式复制卷
gluster volume create fbfz replica 2 transport tcp node108:/gluster/fbfz1 node110:/gluster/fbfz1 node145:/gluster/fbfz1 node108:/gluster/fbfz2 node110:/gluster/fbfz2 node145:/gluster/fbfz2 force
启动卷
gluster volume start rep_vol1
查看卷状态
gluster volume status
gluster volume info
客户端测试挂载卷
mount -t glusterfs node108:rep_vol /tmp/aaa
mount -t glusterfs node145:fbfz /mnt/fbfz
客户端测试卷数据存储
for i in `seq -w 1 3`do cp -rp /var/log/messages /tmp/aaa/test-$idone
其他备用 *** 作
停止卷:
gluster volume stop vdisk2
删除卷:
gluster volume delete vdisk2
将某个存储节点主机从信任池中删除:
gluster peer detach node2
Heketi是由golang编写,直接静态编译运行二进制即可,也可以通过yum安装以及docker部署,主要会产生db文件存储cluster、node、device、volume等信息。
安装二进制包
wget -c https://github.com/heketi/heketi/releases/download/v8.0.0/heketi-v8.0.0.linux.amd64.tar.gz tar zxvf heketi-v9.0.0.linux.amd64.tar.gz
mkdir -pv /opt/heketi/{bin,conf,data}
cp heketi/heketi.json /opt/heketi/conf/
cp heketi/{heketi,heketi-cli} /opt/heketi/bin/
创建ssh-key
我们glusterFS部署在k8s集群外,所以heketi通过ssh管理glusterFS。需要创建免秘钥登陆到所有glusterFS节点。
ssh-keygen -f /opt/heketi/conf/heketi_key -t rsa -N ''
ssh-copy-id -i /opt/heketi/conf/heketi_key.pub root@node108 -p 2222
ssh-copy-id -i /opt/heketi/conf/heketi_key.pub root@node110 -p 2222
ssh-copy-id -i /opt/heketi/conf/heketi_key.pub root@node145 -p 2222
配置文件修改
注意:
需要说明的是,heketi有三种executor,分别为mock、ssh、kubernetes,建议在测试环境使用mock,生产环境使用ssh,当glusterfs以容器的方式部署在kubernetes上时,才使用kubernetes。我们这里将glusterfs和heketi独立部署,使用ssh的方式。
使用docker部署的时候,还需将/var/lib/heketi/mounts 挂载至容器里面, heketi 会将此目录作为 gluster volume的挂载点。
systemd配置
cat /usr/lib/systemd/system/heketi.service
启动heketi服务
systemctl start heketi
systemctl enable heketi
systemctl status heketi
添加cluster
/opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey --json cluster create
将3个glusterfs节点作为node添加到cluster
添加节点
opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey --json node add --cluster "bb1362c3360d80419c822b9994381608" --management-host-name node108 --storage-host-name 10.14.151.108 --zone 1
/opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey --json node add --cluster "bb1362c3360d80419c822b9994381608" --management-host-name node110 --storage-host-name 10.14.151.110 --zone 1
/opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey --json node add --cluster "bb1362c3360d80419c822b9994381608" --management-host-name node145 --storage-host-name 10.14.151.145 --zone 1
查看节点:
/opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey node list
添加device
机器只是作为gluster的运行单元,volume是基于device创建的。同时需要特别说明的是,目前heketi仅支持使用裸分区或裸磁盘(未格式化)添加为device,不支持文件系统。
/opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey --json device add --name="/dev/sdb" --node "227fd34c519f0a2c9d5a5b7f3d048745"
/opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey --json device add --name="/dev/sdb" --node "5f2d7412f0c874634aa8ee18865533bf"
/opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey --json device add --name="/dev/sdb" --node "e20c47a9d9a31a300ed85ccc37441608"
注:--node参数给出的id是上一步创建node时生成的,实际配置中,要添加每一个节点的每一块用于存储的硬盘。
生产实际配置
以上ad-hoc命令均可通过配置文件创建然后导入:
$ sudo cat /data/heketi/conf/topology.json
创建:
$ sudo heketi-cli topology load --json topology.json
添加volume
这里仅仅是做一个测试,实际使用中,会由kubernetes自动创建pv.
创建一个大小为3G,副本为2的volume
opt/heketi/bin/heketi-cli --user admin --server http://10.143.143.111:18080 --secret adminkey volume create --size 3 --replica 2
kubernetes storageclass 配置
创建storageclass
添加storageclass-glusterfs.yaml文件,内容如下:
cat storageclass-glusterfs.yaml
kubectl apply -f storageclass-glusterfs.yaml
kubectl get sc
注意:
storageclass.beta.kubernetes.io/is-default-class: "true" #表示此storageClass作为default sc,创建pvc不指定sc时,默认使用此sc.
reclaimPolicy: Retain #表示pv回收策略为保留,删除pvc时将不删除pv。
更详细的用法参考: <u>https://kubernetes.io/docs/concepts/storage/storage-classes/#glusterfs</u>
创建pvc
kubectl create -f glusterfs-pvc.yaml
cat glusterfs-pvc.yaml
kubectl create -f glusterfs-pvc.yaml
kubectl get pv
kubectl get pvc
创建pod,使用pvc
cat mysql-deployment.yaml
kubectl create -f mysql-deployment.yaml
kubectl get deploy
kubectl get pods
kubectl exec -ti mysql-b75b5dcfb-cb7qm sh
df -Th
创建statefulset
kubectl apply -f nginx-statefulset.yml
kubectl get pod,pv,pvc
我们可以看到RECLAIM POLICY: Retain ,经过测试
删除pvc,pv status会变成Released状态,且不会被删除
删除pv, 通过heketi-cli volume list查看,volume不会被删除
kubernetes pv和gluster volume不一致时,可使用heketi来统一管理volume.此文档heketi和glusterfs都在kubernetes集群外部署。对于支持AWS EBS的磁盘,可通过EBS storageClass方式将glusterFS heketi部署在容器中管理.参考 https://github.com/gluster/gluster-kubernetes
参考文档
https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
https://kubernetes.io/docs/concepts/storage/storage-classes/#glusterfs
https://github.com/heketi/heketi/blob/master/docs/admin/readme.md
https://www.cnblogs.com/breezey/p/8849466.html
https://www.cnblogs.com/breezey/p/8849466.html )
验证测试:
kubectl exec -ti mysql-b75b5dcfb-cb7qm sh
说明挂掉一个节点是不影响用户使用的。
数组大小要可以改变,没有办法实现,因为编译时编译器要求知道数组的大小来分配内存,除非是用动态申请的数组,如用int array = new int[10]这种动态分配的形式时内存是在运行时分配的,@@@@@@@@@但是@@@@@@@数组的大小也必须是确定的值,这里是10.你想实现数组大小可以改变的话,使用C++标准模板库STL编程中的容器Vector,这种能实现数组大小可以不确定的情况。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)