跳到主要内容

· 阅读需 2 分钟
绝尘

假设我们有一个可执行程序 app.sh(类比 Windows 下的 app.exe),我们想用 systemd 进行管理,并保证其在任何情况下都能够保活。下面是具体步骤:

  1. 编写 systemd 服务管理配置文件 /opt/app/app.service。 在 [Unit] 段落中编写一个描述性语句,让人们了解你正在管理什么。在 [Service] 段落中定义服务的各个参数:

    • Type=forking 表示当该服务启动时,systemd 假定它会再派生出一个子进程(即父子进程)。这是最常见的 service 类型。
    • ExecStart= 定义将要启动的可执行程序路径。
    • ExecReload= 定义重新加载服务时要运行的命令或脚本。
    • Restart= 当服务失败时自动重启,always 是指总是重启,其他选项为 on-failurenever
    • WantedBy=multi-user.target 将这个服务加入启动所需的目标之一。在多用户系统中,multi-user.target 是把计算机带到用户登录界面的主要目标。

    示例配置如下:

    [Unit]
    Description=app daemon

    [Service]
    Type=forking
    ExecStart=/opt/app/app.sh
    ExecReload=/opt/app/app.sh
    Restart=always

    [Install]
    WantedBy=multi-user.target
  2. 将服务管理配置文件做软链接到 /usr/lib/systemd/system/ 目录下。 通过软链接可以方便地维护服务管理配置文件。示例命令如下:

    ln -s /opt/app/app.service /usr/lib/systemd/system/app.service
  3. app.service 加入系统开机自启动。

    systemctl enable app.service
  4. 启动程序。

    systemctl start app

到此为止,原本的可执行程序 app.sh 就已经被 systemd 管理,并保证其在任何情况下都能够保活。

· 阅读需 3 分钟
绝尘

10分钟完成 zookeeper + Kafka 集群部署

环境: Centos,内存 4G+ 以上,配置jdk (zookeeper、Kafka 运行都需要 Java 环境)

安装脚本

# 安装在此目录下
mkdir /usr/java

# 1、下载 zookeeper、Kafka 包
wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
wget https://www.apache.org/dyn/closer.cgi?path=/kafka/2.7.0/kafka_2.13-2.7.0.tgz

# 2、解压安装包
tar -zxf apache-zookeeper-3.6.2-bin.tar.gz
tar -zxf kafka_2.13-2.7.0.tgz
mv apache-zookeeper-3.6.2-bin zookeeper-3.6.2 #修改文件名

# 3、配置zookeeper 集群服务文件
cd zookeeper-3.6.2/conf
# 拷贝三份配置文件(三实例集群)
cp zoo_sample.cfg zoo-1.cfg
cp zoo_sample.cfg zoo-2.cfg
cp zoo_sample.cfg zoo-3.cfg

# 修改 配置文件中的(直接执行脚本即可)
sed -i 's/^dataDir=.*/dataDir=/tmp/zookeeper-1/' zoo-1.cfg
sed -i 's/^dataDir=.*/dataDir=/tmp/zookeeper-2/' zoo-2.cfg
sed -i 's/^dataDir=.*/dataDir=/tmp/zookeeper-3/' zoo-3.cfg

sed -i 's/^clientPort=.*/clientPort=2181/' zoo-1.cfg
sed -i 's/^clientPort=.*/clientPort=2182/' zoo-2.cfg
sed -i 's/^clientPort=.*/clientPort=2183/' zoo-3.cfg

# 每个配置文件的末尾追加内容
echo '
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
' | tee -a zoo-1.cfg zoo-2.cfg zoo-3.cfg

# 创建数据目录及配置实例ID
mkdir /tmp/zookeeper-1 /tmp/zookeeper-2 /tmp/zookeeper-3
echo '0' > /tmp/zookeeper-1/myid
echo '1' > /tmp/zookeeper-2/myid
echo '2' > /tmp/zookeeper-3/myid

# 4、配置 Kafka 集群文件 (执行下面的脚本前修改 ${yourhost} 参数)
cd /usr/java/kafka_2.13-2.7.0/config
# 拷贝三分配置文件(三个集群实例)
cp service.properties service-1.properties
cp service.properties service-2.properties
cp service.properties service-3.properties

# 修改节点ID
sed -i 's/^broker.id=.*/broker.id=0/' service-1.properties
sed -i 's/^broker.id=.*/broker.id=1/' service-2.properties
sed -i 's/^broker.id=.*/broker.id=2/' service-3.properties
# 修改监听 端口、IP地址
sed -i 's/^listeners=.*/listeners=PLAINTEXT://:9092/' service-1.properties
sed -i 's/^listeners=.*/listeners=PLAINTEXT://:9093/' service-2.properties
sed -i 's/^listeners=.*/listeners=PLAINTEXT://:9094/' service-3.properties

sed -i 's/^advertised.listeners=.*/advertised.listeners=PLAINTEXT://${yourhost}:9092/' service-1.properties # yourhost 使用 Kafka对外提供服务的IP
sed -i 's/^advertised.listeners=.*/advertised.listeners=PLAINTEXT://${yourhost}:9093/' service-1.properties
sed -i 's/^advertised.listeners=.*/advertised.listeners=PLAINTEXT://${yourhost}:9094/' service-1.properties

# 修改数据存放地址
sed -i 's/^log.dirs=.*/log.dirs=/tmp/kafka-logs-1/' service-1.properties
sed -i 's/^log.dirs=.*/log.dirs=/tmp/kafka-logs-2/' service-2.properties
sed -i 's/^log.dirs=.*/log.dirs=/tmp/kafka-logs-3/' service-3.properties

# 修改分片、副本数
sed -i 's/^num.partitions=.*/num.partitions=3/' service-*.properties
sed -i 's/^offsets.topic.replication.factor=.*/offsets.topic.replication.factor=3/' service-*.properties
sed -i 's/^transaction.state.log.replication.factor=.*/transaction.state.log.replication.factor=3/' service-*.properties
sed -i 's/^transaction.state.log.min.isr=.*/transaction.state.log.min.isr=3/' service-*.properties

# 修改 zookeeper 地址
sed -i 's/^zookeeper.connect=.*/zookeeper.connect=localhost:2181,localhost:2182,localhost:2183/' service-*.properties

# 5、启动 zookeeper 集群、Kafka 集群
# 分别启动 zookeeper 的三个实例
cd /usr/java/zookeeper-3.6.2
nohup bin/zkServer.sh start conf/zoo-1.cfg &
nohup bin/zkServer.sh start conf/zoo-2.cfg &
nohup bin/zkServer.sh start conf/zoo-3.cfg &

# 分别启动 Kafka 的三个实例
cd /usr/java/kafka_2.13-2.7.0
nohup bin/kafka-server-start.sh config/server-1.properties &
nohup bin/kafka-server-start.sh config/server-2.properties &
nohup bin/kafka-server-start.sh config/server-3.properties &

# 6、测试集群工作情况
...

· 阅读需 3 分钟
绝尘

环境:Centos7.6

分享主题:在 Centos7.x 中安装 ElasticSearch-7.4,中文分词插件,Kibana客户端程序 一、安装 ElasticSearch 1、配置 yum 源,

vim /etc/yum.repos.d/elasticsearch.repo 

文件内容如下

[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=0
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

2、yum 命令安装 ElasticSearch

yum install elasticsearch -y

正常情况,到这里 ElasticSearch 就安装成功了,通过 systemctl start elasticsearch 以及 systemctl status elasticsearch 将 ElasticSearch 启动和查看运行状态 但为了做中文分词查询,我们还需要继续安装它的中文分词插件,

二、安装中文分词插件和客户端可视化工具 安装完 ElasticSearch 后,进入它的可运行脚本目录 /usr/share/elasticsearch/bin/

# 进入 ElasticSearch 安装后软件可执行脚本目录
cd /usr/share/elasticsearch/bin/

# 查看 ElasticSearch 已安装的插件
./elasticsearch-plugin list

# 安装 ElasticSearch 中文分词插件
./elasticsearch-plugin install [插件包资源地址]

1、安装中文分词插件

./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.0/elasticsearch-analysis-ik-7.4.0.zip

2、安装Kibana 配置 Kibana 的 yum 源,然后执行 yum 安装 Kibana

echo '[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=0
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md' > /etc/yum.repos.d/kibana.repo
yum install kibana -y

三、配置、启动、访问 1、ElasticSearch 默认只支持服务本机访问,直接启动即可

# 启动 ElasticSearch 
systemctl start elasticsearch

2、Kibana配置,

vim /etc/kibana/kibana.yml
# 修改服务监听地址
server.host: 0.0.0.0
# 修改国际化语言为中文
i18n.locale: "zh-CN"

# 启动
systemctl restart kibana

3、通过Kibana访问 ElasticSearch 服务

# Kibana 服务默认监听 5601 端口
http://host:5601

四、通过 Kibana 操作 ElasticSearch 数据

五、Java 操作 进行到这里,恭喜你一个简单全文检索的 ElasticSearch 环境已经准备就绪,剩下的就是实现自己的 Java API 去访问应用。

实现应用全文检索步骤: 1、将要检索的数据导入 ElasticSearch 2、数据检索

相关文档: ElasticSearch 访问语法: https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-search.html