分类目录归档:数据库

数据库管理员

elasticsearch学习笔记

ElasticSearch 官方中文手册
英文:https://www.elastic.co/guide/en/elasticsearch/reference/current/targz.html#_check_that_elasticsearch_is_running

中文:
mac或linux系统,从归档文件中安装Elasticsearch

elasticsearch为linux和mac提供.tar.gz的归档包,
这个包包含免费和订阅的功能。30天的试用期

注意:elasticsearch内建包含了OpenJDK。

1、下载和安装
#cd /home/source
#wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.3.2-linux-x86_64.tar.gz
#tar -zxvf elasticsearch-8.3.2-linux-x86_64.tar.gz
#cd elasticsearch-8.3.2
#pwd
目录/home/source/elasticsearch-8.3.2 将作为 $ES_HOME的值

2、开启系统的自动建立索引
部分商业特性自动建立索引。默认情况下,elasticsearch不需要额外步骤,启动后建立就被配置为自动建立索引。
如果你关闭了自动索引,你必须在配置文件elasticsearch.yml中配置active.auto_create_index,如下配置:
action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*

重要:如果你使用Logstash或Beats,大多数你需要在;action.autocreate_index增加索引名字,如果你不能确认该写什么参数,你可以写个*,这样会自动建立所有的索引

3、从命令行运行elasticsearch
$./bin/elasticsearch
第一次启动Elasticsearch时,安全会被配置,下面的是自动生成的:
. 验证被打开,用户elastic是内建的超级管理员,密码自动生成
. HTTP传输层的TLS的证书和秘钥生成,TLS会被配置使用此证书和密钥
. 为Kibana生成一个登记了的token,有效期30分钟
可以在其它任何时间更改内置超级管理员的密码:$bin/elasticsearch-reset-password -u elastic
可以在其它任何时间更改Kibana实例的token:$bin/elasticsearch-create-enrollment-token -s kibana
可以在其它任何时间更改Elasticsearch nodes的token:$bin/elasticsearch-create-enrollment-token -s node
如果你有一个受密码保护的Elasticsearch keystore,会被提示输入keystore的密码
Elasticsearch默认会打印日志到控制台,并且记录把日志记录到日志目录<clustername>.log。elasticsearch初始化时会打印一些信息,初始化完成后在前端运行时,不再打印日志,除非有值得记录的一些东西发生。Elasticsearch运行时,可以通过http接口9200端口和ElasticSearch交互。

在注册新节点之前,在集群中通常需要额外的操作,比如绑定到localhost以外的地址或满足elasticsearch引导程序检查。 在此期间,自动生成的注册令牌可能会过期,这就是为什么注册令牌不会自动生成的原因。
此外,同一主机上的节点加入集群,不需要额外的配置。 如果希望其他主机上的节点加入集群,则需要设置transport.host,指定一个受支持的值(如取消transport.host:0.0.0.0的注释),或者指定一个绑定到服务器的某个ip地址。
要在集群中注册新节点,可以在集群中的任何现有节点上使用elasticsearch-create-enrollment-token工具创建一个注册令牌。 然后,您可以使用–enrollment-token参数启动一个新节点,以便它加入现有的集群。
a、在运行Elasticsearch的另一个终端中,在Elasticsearch的安装目录,运行elasticsearch-create-enrollment-token工具,为新节点生成注册令牌。
$bin/elasticsearch-create-enrollment-token -s node
复制注册令牌,注册新节点。
b、 从新节点的安装目录中,启动Elasticsearch,并通过–enrollment-token参数传递注册令牌。
$bin/elasticsearch –enrollment-token <entollment-token>
这样,Elasticsearch 会在config/certs目录中自动生成证书和密钥
c、其它新节点加入重复以上步骤即可

4、检查Elasticsearch的运行
发送一个https的请求到本地端口9200来测试elasticsearch状态
$curl –cacert $ES_HOME/config/certs/http_ca.crt -u elastic https://localhost:9200
上面的$ES_HOME,也就是/home/source/elasticsearch-8.3.2

5、Run as daemon
$./bin/elasticsearch -d -p pid
日志会记录在$ES_HOME/logs/
pkill -F pid
注意:elasticsearch的tar.gz包,不包含systemd模块,如果希望以服务运行,那就使用rpm包

6、命令行配置Elasticsearch
elasticSearch默认读取$ES_HOME/config/elasticsearch.yml配置,yml中可以配置所有的参数,参数参考这里https://www.elastic.co/guide/en/elasticsearch/reference/current/settings.html
命令行也支持所以参数,使用-E参数,如
$./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1
小技巧:通常,关于集群的配置都会放在yml配置中,而特点于节点的配置会放在命令行,如node.name,节点名

7、客户端连接elasticsearch
首次启动Elasticsearch时,会自动为HTTP层配置TLS。 生成CA证书并存储在磁盘上:
$ES_HOME/config/certs/http_ca.crt
该证书的十六进制SHA-256指纹也输出到终端。 任何连接到Elasticsearch的客户端,如Elasticsearch客户端、Beats、独立的Elastic Agents和Logstash,都必须验证他们是否信任Elasticsearch用于HTTPS的证书。 Fleet Server和Fleet-managed Elastic agent会自动配置为信任CA证书。 其他客户端可以使用CA证书的指纹或CA证书本身建立信任。
如果已完成自动配置,仍可获取安全证书的指纹信息。 您还可以将CA证书复制到您的计算机并配置您的客户端以使用它。

8、使用CA指纹
复制Elasticsearch启动时输出到终端的指纹值,并配置客户机在连接到Elasticsearch时使用该指纹建立信任。
如果已经完成自动配置,仍然可以通过以下命令获取安全证书的指纹信息。 路径为自动生成的HTTP层CA证书。
$openssl x509 -fingerprint -sha256 -in config/certs/http_ca.crt
该命令将返回安全证书,包括指纹。 颁发者应该是 Elasticsearch security auto-configuration HTTP CA。

9、使用CA 证书
如果您的库不支持验证指纹的方法,Elasticsearch节点自动生成的CA证书位于以下目录中:
$ES_HOME/config/certs/http_ca.crt
复制http_ca。 并将您的客户端配置为在连接到Elasticsearch时使用这个证书来建立信任。

10、目录说明
存档发行版是完全独立的。 默认情况下,所有文件和目录都包含在$ES_HOME中——解压缩时创建的目录。
这非常方便,因为您不需要创建任何目录就可以开始使用Elasticsearch,而卸载Elasticsearch就像删除$ES_HOME目录一样简单。 但建议修改config目录、data目录和logs目录的默认位置,以免后续删除重要数据。
home -> $ES_HOME
bin -> 可执行脚本目录,包含elesticsearch,用于启动node和elasticsearch-plugin,用于安装插件
conf -> 配置文件目录,包含elasticsearch.yml $ES_PATH_CONF,实际目录是$ES_HOME/config
conf -> 传输层和http层生成的密钥和证书的位置 $ES_HOME/config/certs
data -> 分配在节点上的每个索引/分片的数据文件的位置 $ES_HOME/data
logs ->
plugins -> 插件文件所在目录,一个插件一个子目录 $ES_HOME/plugins
repo -> 共享文件存储位置。 可容纳多个位置。 文件系统存储库可以放在这里指定的任何目录的任何子目录中。

11、证书和密码安全
安装Elasticsearch时,将在Elasticsearch配置目录中生成以下证书和密钥,用于将Kibana实例连接到您的Elasticsearch集群,并对节点间通信进行加密。 这里列出的文件供参考。
http_ca.crt 用于对这个Elasticsearch集群的HTTP层证书进行签名的CA证书。
http.p12 包含此节点HTTP层的密钥和证书的密钥存储库。
transport.p12 包含集群中所有节点的传输层密钥和证书的密钥存储库。
http.p12和运输。 p12是有密码保护的pkcs# 12密钥存储库。 Elasticsearch将这些密钥库的密码作为安全设置存储。 要检索密码,以便检查或更改密钥存储库内容,请使用bin/elasticsearch-keystore工具。
使用如下命令找回http.p12的密码:
$bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password
使用如下命令找回transport.p12的密码:
bin/elasticsearch-keystore show xpack.security.transport.ssl.keystore.secure_password

 

 

 

 

 

 

 

 

 

 

 

1、安装,设置监听ip后,启动出错

| ERROR: [2] bootstrap checks failed. You must address the points described in the following [2] lin

[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
编辑 /etc/security/limits.conf,追加以下内容;

#* soft core 0
#* hard rss 10000
* soft nofile 65536
* hard nofile 65536

此文件修改后需要重新登录用户,才会生效

[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

编辑 /etc/sysctl.conf,追加以下内容:

vm.max_map_count=655360

2,报错:[2022-07-23T18:44:55,440][ERROR][o.e.i.g.GeoIpDownloader ] [localhost.localdomain] exception during geoip databases update
org.elasticsearch.ElasticsearchException: not all primary shards of [.geoip_databases] index are active
at org.elasticsearch.ingest.geoip.GeoIpDownloader.updateDatabases(GeoIpDownloader.java:134) ~[ingest-geoip-8.3.2.jar:8.3.2]
at org.elasticsearch.ingest.geoip.GeoIpDownloader.runDownloader(GeoIpDownloader.java:274) [ingest-geoip-8.3.2.jar:8.3.2]
at org.elasticsearch.ingest.geoip.GeoIpDownloaderTaskExecutor.nodeOperation(GeoIpDownloaderTaskExecutor.java:102) [ingest-geoip-8.3.2.jar:8.3.2]
at org.elasticsearch.ingest.geoip.GeoIpDownloaderTaskExecutor.nodeOperation(GeoIpDownloaderTaskExecutor.java:48) [ingest-geoip-8.3.2.jar:8.3.2]
at org.elasticsearch.persistent.NodePersistentTasksExecutor$1.doRun(NodePersistentTasksExecutor.java:42) [elasticsearch-8.3.2.jar:?]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:769) [elasticsearch-8.3.2.jar:?]
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26) [elasticsearch-8.3.2.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
at java.lang.Thread.run(Thread.java:833) [?:?]

因为他启动时会去更新地图的一些数据库,这里直接禁掉即可,用到时再说,配置文件conf/elasticsearch.yml,增加配置

1
ingest.geoip.downloader.enabled: false

 

 

 

 

 

 

curl:测试语句
1、curl –user elastic:xEjB13-nuDEGVNLhCvhm -XGET ‘https://localhost:9200/dangjian_articles/_source/506’ –tlsv1.2 -k

2、curl –user elastic:xEjB13-nuDEGVNLhCvhm -XGET ‘https://localhost:9200/_cat/health?v‘ –tlsv1.2 -k    获取健康状态

3、curl –user elastic:xEjB13-nuDEGVNLhCvhm -H “Content-Type:application/json” -XGET ‘https://localhost:9200/_cat/indices‘ –tlsv1.2 -k  获取所有索引

curl –user elastic:xEjB13-nuDEGVNLhCvhm -H “Content-Type:application/json” -X PUT ‘https://localhost:9200/test/_doc/1’ -d ‘{“user”:”zhangsan”,”uid”:”8888″}’ –tlsv1.2 -k

curl –user elastic:xEjB13-nuDEGVNLhCvhm -H “Content-Type:application/json” -X GET ‘https://localhost:9200/twitter/_doc/ZYtFTYIBk4Inmlc-1jup?pretty’ –tlsv1.2 -k

 

curl –user elastic:xEjB13-nuDEGVNLhCvhm -H “Content-Type:application/json” -X POST ‘https://localhost:9200/twitter/_create/4′ -d ‘{“user”:”GBX2″,”uid”:4,”city”:”shijiazhuang”,”province”:”Hebei”,”country”:”China”,”DOB”:”2008-06-05″}’ –tlsv1.2 -k    如果id存在,则冲突,不能增加,如果id不存在,则能增加

 

 

 

 

 

 

 

 

 

 

 

其它:

Lucene全文检索就是对文档中全部内容进行分词,然后对所有单词建立倒排索引的过程
lucene是一套用于全文检索和搜寻的开源程序库
lucene可以用来制作搜索引擎产品
放一张图说明倒排索引:

如果list是常量,则可以直接用IN, 否则要用find_in_set()函数。

MySQL手册中find_in_set函数的语法解释:

FIND_IN_SET(str,strlist)

str 要查询的字符串

strlist 字段名 参数以”,”分隔 如 (1,2,6,8,10,22)

查询字段(strlist)中包含(str)的结果,返回结果为null或记录

假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 一个字符串列表就是一个由一些被 ‘,’ 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。 如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

继续阅读

mysql的netstat 时很多的连接的解决办法

刚看服务器出现大量的TIME_WAIT链接

netstat -an
192.168.12.13:3306 192.168.12.12:30443 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30444 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30445 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30446 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30447 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30448 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30449 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30450 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30451 TIME_WAIT
192.168.12.13:3306 192.168.12.12:30452 TIME_WAIT

技术不太好,赶忙google
看到有很多前辈给出了解决方法
编辑/etc/sysctl.conf添加如下内容
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
然后执行 /sbin/sysctl -p 让刚添加的内容生效

解释下:
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。

net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间

再次用netstat -an 查看
发现大量的TIME_WAIT已经不存在了。

xfs,数据库mysql优化

准备尝试一下

xfs和Ext4最近学习文件系统,先要搞明白如何把分区格式化成相应的格式。

如果是xfs,需要安装 XFSprogs

如果是Ext4,需要安装e4fsprogs

对于ubuntu,比较好办,默认就已经搞定。但是Centos,就需要安装,xfs官方的源里都是没有的。

root@cloud:~# mkfs.xfs -f /dev/sdb1
meta-data=/dev/sdb1 isize=256 agcount=4, agsize=122009214 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=488036855, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal log bsize=4096 blocks=238299, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

# mkfs.ext /dev/sdb1
mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.ext4dev
root@cloud:~# mkfs.ext4 /dev/sdb1
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
122011648 inodes, 488036855 blocks
24401842 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
14894 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

http://hi.baidu.com/chenshake/blog/item/b2b0eb246407412e8644f93c.html

mysql优化工具,profiler,服务器维护时会经常用到

Query Profiler可以定位出一条SQL语句执行的各种资源消耗情况,比如CPU,IO等,以及该SQL执行所耗费的时间等。该工具只有在MYSQL 5.0.37以及以上版本中才有实现
默认的情况下,MYSQL的该功能没有打开,需要自己手动启动。可以通过如下方法查看当前mysql服务器是否开启了该功能。

mysql> show variables like ‘%profiling%’;
+————————+——-+
| Variable_name | Value |
+————————+——-+
| profiling | OFF |
| profiling_history_size | 15 |
+————————+——-+
继续阅读

mysql5.5.8源码安装,使用cmake,真不习惯。

mysql5.5.8源码编译安装

wget http://www.cmake.org/files/v2.8/cmake-2.8.3.tar.gz
tar -zxvf cmake-2.8.3.tar.gz
cd cmake
./configure
make
make install

mysql5.5.8源代码编译安装的选项
cmake程序提供了一个强大的配置mysql源代码的方法,典型的,你应该在cmake的命令行使用下面的选项
,cmake支持下面的选项信息,应该在mysql的源代码的顶级目录使用这些选项。
[root@localhost mysql-5.5.8]# cmake . -LH
[root@localhost mysql-5.5.8]# cmake .
你可以影响cmake的某些环境变量
下面是一些cmake的一些有用的选项。
CMAKE_INSTALL_PREFIX mysql的安装路径,默认为/usr/local/mysql5.5.8
DEFAULT_CHARSET 默认的服务器编码,设置latin1, 5.5.7
DEFAULT_COLLATION 也是关于编码的
MYSQL_DATADIR data目录
MYSQL_TCP_PORT TCP/IP端口,3306
MYSQL_UNIX_ADDR unix的socket文件,默认/tmp/mysql.sock
WITH_xxx_STORAGE_ENGINE 编译静态的存储引擎xxx
WITHOUT_xxx_STORAGE_ENGINE Exclude storage engine xxx from build
WITH_EXTRA_CHARSETS 扩展字符集
WIHT_ZLIB zlib支持
我的编译参数:
[root@localhost mysql-5.5.8]# cmake -DCMAKE_INSTALL_PREFIX=/home/system/mysql -DDEFAULT_CHARSET=utf8 -DMYSQL_DATADIR=/home/db -DMYSQL_UNIX_ADDR=/tmp/mysql.sock .

# cmake -DMYSQL_DATADIR=/home/data
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DEXTRA_CHARSETS=all
-DMYSQL_UNIX_ADDR=/base/MySQL/socket
-DMYSQL_TCP_PORT=3306
-DMYSQL_USER=mysql
-DCMAKE_INSTALL_PREFIX=/base/MySQL
-DINSTALL_SBINDIR=bin

CMake参数对照关系
–localstatedir=/base/MySQL/data     =========>   -DMYSQL_DATADIR=/base/MySQL/data
–with-charset=utf8    ====================>   -DDEFAULT_CHARSET=utf8
–with-collation=utf8_general_ci     ===========>   -DDEFAULT_COLLATION=utf8_general_ci
–with-extra-charsets=all      ================>   -DEXTRA_CHARSETS=all
–with-unix-socket-path=/base/MySQL/socket    ==>    -DMYSQL_UNIX_ADDR=/base/MySQL/socket
–with-tcp-port=3306      ==================>     -DMYSQL_TCP_PORT=3306
–with-mysqld-user=mysql    ===============>     -DMYSQL_USER=mysql
–prefix=/usr    ========================>     -DCMAKE_INSTALL_PREFIX=/base/MySQL
–sbindir=EPREFIX/sbin     ================>     -DINSTALL_SBINDIR=bin

    鸡鸡哥
    QQ:21428749
    https://www.hardwork.cn