数据库笔记1

安全

输入参数用grep来做判断的话,有个坑,就是因为grep只要有一行匹配,就会返回匹配,所以用grep来判断输入参数会被人家用多行参数来绕过。最好还是使用==或者~=来进行判断。

事务

ACID代表atomic,consistency,isolation,durable.其中一致性和可持续性是必然要保证的,然后使用事务一般是为了使用它的原子性,然后配置隔离性是为了在使用事务时能有最好的性能。

事务的隔离级别是一次连接一次配置,每次只要配置自己连接的事物隔离级别

脏读、不可重复读、幻读都是多条事务之间的互相干扰,脏读是读到别人没有commit的数据,不可重复读和幻读都是读到别人提交了的数据(其实这个从某些场合和角度看是合理的),不可重复读是读到别人对某条记录的修改,幻读是读到别人新增的记录。

标准的四个隔离级别:read uncommitted(啥都不防);read committed(防脏读);read repeatable(防脏读和不可重复读,有时候防幻读有时候又不防,所以对幻读不要抱有必然性);synchronized(全防)

MySql支持4个隔离级别,oracle只支持两个隔离级别,分别是read committed和synchronized。

ES

状态检查

注意端口号,VS是7300,ES是9200

查看集群状态

curl -XGET "http://100.100.48.224:7300/_cat/health?v&pretty"

查看哪些索引有问题

curl -XGET "http://100.100.48.224:7300/_cat/indices?v&pretty"

查看哪些shard有问题

curl -XGET "http://100.100.48.224:7300/_cat/shards?v&pretty"

查看哪些节点有问题

curl -XGET "http://100.100.48.224:7300/_cat/allocation?v&pretty"

配置文件

数据路径,在配置文件platform的es.yml里面。

问题解决

无法恢复shard,直接删除对应的shard文件。

VS中查看数据

使用前需要先关闭鉴权,把VS的vsearch.yml中设置vs.authentication: none(注意中间空格),然后重启VS。

http://10.22.85.220:7300/_plugin/head/


KAFKA

源码debug

在kafka-run-class.sh文件里面

# 加上变量
CMP_DEBUG="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y"
# 修改执行脚本加上$DEBUG
exec $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS $CMP_DEBUG -cp $CLASSPATH $KAFKA_OPTS "$@"
启动命令,一台机器多个kafka

./zookeeper-server-start.sh ../config/zookeeper.properties &

./kafka-server-start.sh ../config/server.properties &

./kafka-server-start.sh ../config/server-1.properties &

./kafka-server-start.sh ../config/server-2.properties &

查看kafka状态

上zk中看节点情况

创建TOPIC

注意IP能不能用localhost要看zk的配置

./kafka-topics.sh --create --zookeeper 10.64.49.110:2181 --replication-factor 2 --partitions 2 --topic testupgrade

删除TOPIC

./kafka-topics.sh --create --zookeeper 10.64.49.110:2181 --topic testupgrade

创建消息

./kafka-console-producer.sh --broker-list 10.64.49.110:9092 --topic testupgrade;

查询TOPIC状态

./kafka-topics.sh --describe --zookeeper 10.64.49.110:2181 --topic testupgrade

读取TOPIC

./kafka-console-consumer.sh --boostrap-server localhost:9092 --from-beginning --topic test

KAFKA向下兼容

在server.properties里面添加下列

inter.broker.protocol.version=0.10.0
log.message.format.version=0.10.0
连接zookeeper超时

在server.properties里面添加

zookeeper.session.timeout.ms=15000

KAFKA开启kerberos验证

先是在kerberos里面增加principle和keytab

./kadmin.local -q 'addprinc -randkey kafka-2/hadoop.hadoop.com@HADOOP.COM'

./kadmin.local -q "ktadd -k /home/zyr/kafka_2.11-2.1.0/config/user-2.keytab kafka-2/hadoop.hadoop.com@HADOOP.COM"

在kafka的config里面添加jaas.conf

KafkaServer {
  com.sun.security.auth.module.Krb5LoginModule required
  debug=false
keyTab="/home/zyr/kafka_2.11-2.1.0/config/user-2.keytab"
  useTicketCache=false
  storeKey=true
  principal="kafka-2/hadoop.hadoop.com@HADOOP.COM"
  useKeyTab=true;
};
KafkaClient {
  com.sun.security.auth.module.Krb5LoginModule required
  debug=false
keyTab="/home/zyr/kafka_2.11-2.1.0/config/user-2.keytab"
  useTicketCache=false
  storeKey=true
  principal="kafka-2/hadoop.hadoop.com@HADOOP.COM"
  useKeyTab=true;
};
Client {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
keyTab="/home/zyr/kafka_2.11-2.1.0/config/user-2.keytab"
  principal="kafka-2/hadoop.hadoop.com@HADOOP.COM"
  useTicketCache=false
  storeKey=true
  debug=true;
};

把kerberos的krb5.conf拷贝到kafka的conf里面

在kafka的启动脚本kafka-server-start.sh里面倒数第二行,也就是执行kafka-run之前,添加一行增加环境变量

s

更改kafka的配置文件

listeners=SASL_PLAINTEXT://10.171.98.103:21007
sasl.kerberos.principal.to.local.rules=DEFAULT
security.inter.broker.protocol=SASL_PLAINTEXT
security.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=GSSAPI
sasl.enabled.mechanisms=GSSAPI
sasl.kerberos.service.name=kafka
sasl.kerberos.ticket.renew.jitter=0.05
sasl.kerberos.min.time.before.relogin = 60000
sasl.kerberos.ticket.renew.window.factor = 0.8
kerberos.domain.name=hadoop.hadoop.com
allow.everyone.if.no.acl.found = true

ZK

启停命令

./zkServer.sh start(stop,restart)

登录ZK

IP和端口可以通过查看zk状态获得。

./zkCli.sh -server 10.22.85.220:24002

查看所有的节点

ls /

查看ZK状态

./zkServer.sh status

ZK开启kerberos认证

先是在kerberos里面增加principle和keytab

./kadmin.local -q 'addprinc -randkey zookeeper-2/hadoop.hadoop.com@HADOOP.COM'

./kadmin.local -q "ktadd -k /home/zyr/zookeeper-3.4.13/conf/user-2.keytab zookeeper-2/hadoop.hadoop.com@HADOOP.COM"

在zk的config里面添加jaas.conf

Server {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
keyTab="/home/zyr/zookeeper-3.4.13/conf/user-2.keytab"
  storeKey=true
  useTicketCache=false
  principal="zookeeper-2/hadoop.hadoop.com@HADOOP.COM";
};

把kerberos的krb5.conf拷贝到zk的conf里面

修改zoo.conf,增加

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
requireClientAuthScheme=sasl

新增文件java.env,增加

export JVMFLAGS="-Djava.security.auth.login.config=${HOME}/add-ons/kafka_zookeeper/conf/jaas.conf -Djava.security.krb5.conf=${HOME}/config/kafka/krb5.conf "

Kerberos

什么是主体?

kerberos的主体就是一台一台的机器。

主体的加密分为密码和密钥:

client主体的密码,是在主KDC上创建主体时设定,然后用安全的方式通知相应的机器(可以认为是同一个人操作完主KDC的机器,又去操作client的机器),从KDC也需要同步更新一下这些主体的信息。

然后client主体在自己的机器上用kadmin登录自己的主体(client上会装kerberos的客户端,所以有kadmin工具。再因为它此时已经知道了自己的密码,所以可以登录),再创建keytabs。这样一来,KDC和client上就都同步了这个client主体的密钥也就是keytabs了。(还有另一种方式,不用这么麻烦,就是直接把keytabs从KDC的机器上拷贝到client机器上。)

一些配置项:

supported_enctypes里面配置了client到kdc的允许加密类型。kdc会选择同时兼容client和server的加密类型。(最主要的配置项,强限制client到kdc的允许加密类型,变相限制了server到kdc的加密类型)

(下面这些默认不配就好,会采用默认值)

default_tkt_enctypes是配置了client到kdc中获取tkt的加密类型,也受supported_enctypes约束。

default_tgs_enctypes、master_key_enctype 也类似。

permitted_enctypes是配置server和kdc之间的session key。因为要server到kdc兼容kdc到client的加密类型(client用TGS session key和KDC通信,用Server seesion key和server通信),也相当于受到supported_enctypes的约束。

kerberos测试方法:

先启动sbin下的./kadmin。输入listprincs看看。

然后启动./kadmind和./krb5kdc两个后台线程。

常用文件

数据库文件,首节点生成,其他节点通过keytab同步过去

  • two Kerberos database files, principal, and principal.ok
  • the Kerberos administrative database file, principal.kadm5
  • the administrative database lock file, principal.kadm5.lock

首节点生成,然后拷贝到其他节点

  • krb5.conf
  • kdc.conf
  • kadm5.acl
  • master key stash file(.k5.HADOOP.COM)
  • kpropd.acl

GRADLE

在用户目录下配置gradle.properties

systemProp.http.proxyHost=172.18.32.221
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=z00480266
systemProp.http.proxyPassword=
systemProp.http.nonProxyHosts=localhost|127.0.0.*|10.*|192.168.*|*.huawei.com

systemProp.https.proxyHost=172.18.32.221
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=z00480266
systemProp.https.proxyPassword=
systemProp.https.nonProxyHosts=localhost|127.0.0.*|10.*|192.168.*|*.huawei.com

需要在build.gradle文件里把maven相关的地址换成如下:

  repositories {
    maven {
      url "http://rnd-mirrors.huawei.com/maven/"
    }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值