Skip to main content

· One min read
jeesk

最近发现自己的服务器时间变成了 EDT , 这个是美国东部夏令时间. 那么如何将服务器的时间变成中国的时间,并且同步呢.

  1. 安装 centos 的时间同步工具
yum -y install ntp
  1. 如果机器的时区不是中国时区需要重新设置时区
mv /etc/localtime /etc/localtime.bak
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  1. 执行同步命令
同步淘宝的时间服务
ntpdate ntp1.aliyun.com
  1. 修改服务器映射到我们系统的时间,ok;
hwclock --systohc
  1. 增加定时任务同步时间
crontab -e  进入定时任务 ,  每隔10分钟同步一次系统时间
*/10 * * * * /usr/sbin/ntpdate ntp1.aliyun.com

路过点赞, 月薪10W

· 3 min read
jeesk
持久化配置
  • RDB
    save 900 1
    save 300 10
    save 60 10000

写入创建快照失败的时候是否继续执行写命令

stop-writes-on-bgsave-error yes

快照是否使用压缩

rdbcompression yes

快照文件目录名称

dbfilename dump.rdb

-  AOF

是否开启aof 模式

appendonly yes

增量备份频率. 每秒

appendfsync everysec

aof 压缩 ( master 推荐设置) 是否后台重写日志, 对性能有要求建议配置yes , 否则重写日志的时候有卡顿

no-appendfsync-on-rewrite yes

aof文件增长比例,指当前aof文件比上次重写的增长比例大小

auto-aof-rewrite-percentage

aof 日志重写的最小比例

auto-aof-rewrite-min-size 64mb

redis 被加载回内存的时候, 可能崩溃. 因为aof文件可能有错误, 如果配置为yes 将会忽略错误, 并且redis 将发出一个日志通知用户. 如果配置为no, 那么redis 将无法重启, 这个时候需要手动执行redis check aof 来修复aof 文件, 修复完成后才能重启

aof-load-truncated yes

-  bind 配置
redis本身无法限制【只有指定主机】连接到redis中,就像我上面说的一样,bind指定只是用来设置接口地址(interfaces)。

1.如果你的bind设置为:bind 127.0.0.1,这是非常安全的,因为只有本台主机可以连接到redis,就算不设置密码,也是安全的,除非有人登入到你的服务器上。

2.如果你的bind设置为:bind 0.0.0.0,表示所有主机都可以连接到redis。(前提:你的服务器必须开放redis的端口)。这时设置密码,就会多一层保护,只有知道密码的才可以访问。也就是任何知道密码的主机都可以访问到你的redis。 3. 如果你bind 绑定本地网卡比如 118.18.19.12 , name流量只能从这个ip来.

#####  运维建议:
1. 凌晨手动执行bgrewriteaof 执行, 备份快照

· 3 min read
jeesk

安装前置条件

  • 3台安装JDK 8 的虚拟机,假设地址分别是192.168.17.81,192.168.17.82,192.168.17.83

zookeeper 发行版页面, 有许多版本的发行版的下载链接,可以根据不同的版本,下载不同的链接 https://zookeeper.apache.org/releases.html

  1. $\color{#FF0000}{修改 hosts }$
vim /etc/hosts
加入一下内容
192.168.17.81 zk01
192.168.17.82 zk02
192.168.17.83 zk03

后面我将使用zk01 代替192.168.17.81 2. $\color{#FF0000}{在zk01机器上面下载zookeeper}$

mkdir -p /opt/soft/ && cd  /opt/soft
wget https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
如果机器没有安装wget, 那么执行下面命令安装
yum -y install wget
  1. $\color{#FF0000}{分发zoookeeper软件 到另外两台机器}$
1. 首先在另外两台机器创建目录
mkdir -p /opt/soft/ && cd /opt/soft
2. 在zk01 的/opt/soft 的目录下执行
scp apache-zookeeper-3.6.2-bin.tar.gz root@zk02:/opt/soft/
scp apache-zookeeper-3.6.2-bin.tar.gz root@zk03:/opt/soft/
  1. $\color{#FF0000}{解压文件}$
    1. 在3台的机器的/opt/soft/ 文件夹执行解压命令 tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz
    2. 在3台的机器的/opt/soft/ 继续执行软连接 ln -s /opt/soft/apache-zookeeper-3.6.2-bin zookeeper
    3. 创建需要的数据文件夹,和日志文件夹, 在后面的配置文件使用需要 cd zookeeper && mkdir {data,log}
  2. $\color{#FF0000}{增加配置文件}$ 在zk01上 的/opt/soft/zookeeper-3.5.2-alpha/conf增加 zoo.cfg文件,文件内容如下
      initLimit=10
    syncLimit=5
    clientPort=2181
    tickTime=2000
    dataDir=/opt/soft/apache-zookeeper-3.6.2-bin/data/
    dataLogDir=/opt/apache-zookeeper-3.6.2-bin/logs/
    dynamicConfigFile=/opt/soft/apache-zookeeper-3.6.2-bin/conf/zoo.cfg.dynamic.100000000
  • 在/opt/soft/zookeeper-3.5.2-alpha/conf 增加配置zoo.cfg.dynamic.100000000 文件, 这个文件是说明zk 的集群机器的ip地址,文件内容如下
server.1=zk01:2888:3888:participant
server.2=zk02:2888:3888:participant
server.3=zk03:2888:3888:participant
  • 将这个两个文件分发到zk02,zk03,在zk01 的/opt/soft/zookeeper-3.5.2-alpha/conf/ 执行命令
scp zoo.cfg root@zk02:/opt/soft/zookeeper-3.5.2-alpha/conf/
scp zoo.cfg root@zk02:/opt/soft/zookeeper-3.5.2-alpha/conf/
scp zoo.cfg.dynamic.100000000 root@zk03:/opt/soft/zookeeper-3.5.2-alpha/conf/
scp zoo.cfg.dynamic.100000000 root@zk03:/opt/soft/zookeeper-3.5.2-alpha/conf/
  1. $\color{#FF0000}{增加每一台机器的标识 }$ 在3台机器上面的 /opt/soft/zookeeper-3.5.2-alpha/conf/data 执行命令 zk01 执行 echo 1 > myid zk02 执行 echo 2 > myid zk03 执行 echo 3 > myid

  2. $\color{#FF0000}{常用命令 }$

在3 台机器的 /opt/soft/zookeeper-3.5.2-alpha/bin/ 执行

  • 启动命令 ./zkServer.sh start
  • 查看启动状态 ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/soft/zookeeper-3.5.2-alpha/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
------------------- 192.168.17.82 -------------------
ZooKeeper JMX enabled by default
Using config: /opt/soft/zookeeper-3.5.2-alpha/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
------------------- 192.168.17.83 -------------------
ZooKeeper JMX enabled by default
Using config: /opt/soft/zookeeper-3.5.2-alpha/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: followe
  • 关闭命令: ./zkServer.sh status
  1. $\color{#FF0000}{常见问题:}$
  • 确保3台机器的防火墙端口2181 已经放开, 如果是本地环境建议直接service fillwalld stop 关闭防火墙
  • 3台机器分别执行太麻烦, 参考 zookeeper 集群脚本

    完结撒花, 路过点赞, 月入10 W!

· 2 min read
jeesk

为了方便管理zookeeper 集群, 我们写了一个zookeeper 脚本

  1. 在bin/zkEnv.sh文件中,zk 增加JAVA_HOME .(有些时候无法找到JAVA_HOME,所以先增加JAVA_HOME)
    ZOOBINDIR="${ZOOBINDIR:-/usr/bin}"
    ZOOKEEPER_PREFIX="${ZOOBINDIR}/.."
    #在上面的2段文字下面增加 JAVA_HOME, 下面的路径是你的 jdk HOME目录
    export JAVA_HOME=/opt/soft/jdk1.8.0_161
2.  3 台机器免密登录, 分别为zk01,zk02,zk03

zk01 执行

ssh-copy-id root@zk02 ssh-copy-id root@zk03

 

zk02 执行

ssh-copy-id root@zk01 ssh-copy-id root@zk03


zk03 执行

ssh-copy-id root@zk01 ssh-copy-id root@zk02

这个时候, 你可以使用 在任意一台机器上面执行免密登录
3. 在2台机器下面的 bin 目录下面增加 zkCluster.sh

#!/bin/bash

red='\e[91m' green='\e[92m' yellow='\e[93m' magenta='\e[95m' cyan='\e[96m' none='\e[0m'

zk_home=$zk_home cluster_array=(192.168.17.81 192.168.17.82 192.168.17.83)

1. 获取输入参数个数,如果没有参数,直接退出

if (($# == 0)); then echo -e ------------------- ${yellow}no args${none} ------------------- exit fi

2. 根据指令循环操作集群

case $1 in "start") { for host in ${cluster_array[@]}; do echo -e ------------------- $yellow$host$none ------------------- ssh $host "$zk_home/bin/zkServer.sh start" done } ;;

"stop") { for host in ${cluster_array[@]}; do echo -e ------------------- $yellow$host$none ------------------- ssh $host "$zk_home/bin/zkServer.sh stop" done } ;;

"status") { for host in ${cluster_array[@]}; do echo -e ------------------- $yellow$host$none ------------------- ssh $host "$zk_home/bin/zkServer.sh status" done } ;;

esac

上面的 cluster_array 就是你的3台机器ip ,也可以使用别名代替
这个时候, 你可以在任意一台机器的zk bin目录下面执行
- 群启动: ./zkCluster.sh start
- 群关闭: ./zkCluster.sh stop
- 群查看状态: ./zkCluster.sh status
如果脚本没有执行权限, 增加执行权限 `chmod u+x zkCluster.sh` 即可.

> 完结撒花, 路过点赞, 月入10W !

· 2 min read
jeesk

问题: 提交项目的时候忘记添加.gitignore文件,误上传了文件(如.idea)如何解决?(本文以.idea文件夹举例)

1.将项目文件拉取下来 git pull origin master

2.添加需要过滤的文件 a. 如果你有.gitignore文件,但是没添加误上传的文件夹(如.idea) 新起一行添加 .idea/ b. 如果你没有.gitignore文件,在你的项目里创建一个.gitignore的文件 将下面的文本放入即可 通用.gitignore文件


# Initially taken from Github's Python gitignore file

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
__pycache__
# C extensions
*.so
.DS_Store
.idea/
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

data/
model/

3.打开项目终端执行命令

删除github上的误上传文件.idea

git rm -rf --cached .idea

4.提交.gitignore文件 git add .gitignore 5.上传 git commit -m '忽略idea' git push -u origin master

· One min read
jeesk

Broker

delete.topic.enable=true                #允许删除topic
num.replica.fetchers=2 # kakfa的线程数量配置
offsets.topic.replication.factor=2 # offset的副本,防止丢失
num.partitions=8 # 分区数量
auto.create.topics.enable=true # 开启自动提交
default.replication.factor=2 # 默认副本数量

log.retention.hours=48 # 日志保留2天
min.insync.replicas=2 # 最少同步副本

Producer 在Spring boot中的配置

spring:
kafka:
bootstrap-servers: 192.168.31.31:9092
producer:
# 重试次数
retries: 0
# 应答级别:多少个分区副本备份完成时向生产者发送ack确认(可选0、1、all/-1)
# 这里使用0 是折中的考虑
acks: "0"
# 批量大小
batch-size: 16384
properties:
# 开启幂等性, 后ack 为all, 这个性能会降低.,
enable.idempotence: false
linger.ms: 50
partitioner.class: org.apache.kafka.clients.producer.RoundRobinPartitioner
buffer-memory: 33554432
key-serializer: "org.apache.kafka.common.serialization.StringSerializer"
value-serializer: "org.apache.kafka.common.serialization.StringSerializer"
# 事务场景开启事务 , 否则会报错
# transaction-id-prefix: "kt"
client-id: ${spring.application.name}

· One min read
jeesk

在日常开发中,开发在使用git的时候请参考以下规范,能够提高项目的搜索git log的效率,以下仅供参考。

  1. Git commit -m "使用的词语"

修复 发布 更改 去掉 加 实行 启用 提高 重构 更新 使 降低

使用 直接使用 git commit 在gun nano 里面编辑

  1. 重复使用上一次的commit,新增加commit echo "I love git" && git commit --allow-empty --amend

增加提交,但是不提交任何信息 echo "I am a git" && git commit --allow-empty-message --no-edit

· 13 min read
jeesk

常用场景:

想想下列工作场景时候是你经常遇见的? 
  1. 我们可能为了保持工作空间clean, 会commit多次,但是很多时候commit的内容是没有什么意义的. 这个时候我们需要合并commit.

  2. 领导叫我去另外一个分支去修改内容, 我要保存当前的分支的内容.

  3. 前几次提交的commit还没push, 我想回滚.

  4. 有些文件我不想提交到git仓库

合并或者修改coomit

有的时候我们提交commit 的备注的时候可能没有写备注,或者是备注写错了,这个时候我们需要修改commit, 这个时候--amend 计算非常有用了. 无论是否提交到远端服务器 git commit --amend 都可以修改最近一次的提交.

  1. 修改commit内容
一、如果已经push到远端服务器,想修改已经提交过的commit信息  
1.保存:Ctrl + o; 回车 ;退出:Ctrl + x
# git commit --amend
2.重新提交gerrit审批
# git push --no-thin origin HEAD:refs/for/master

二、如果已经push到远端服务器,有漏掉的test.txt文件想提交到上一次的commit信息
1.添加test.txt
# git add test.txt
2.修改commit信息;保存:Ctrl + o; 回车 ;退出:Ctrl + x
# git commit --amend
3.重新push到远端服务器
# git push --no-thin origin HEAD:refs/for/master
  1. 合并commit

由于我们可能为了保持工作空间clean, 会commit多次,但是很多时候commit的内容是没有什么意义的. 这个时候我们需要合并commit.

被合并过的commit 是不能再次被合并的I

HEAD~ 后面表示最近多少次提交
git rebase -i HEAD~3
pick d6d290e 123123
pick 5c7ee5a 12321
pick 2e4ed64 12321

简单的解释一下:

前面三行是我们需要操作的三个 Commit,每行最前面的是对该 Commit 操作的 Command。关于每个 Command 具体做什么,下面的注释写得非常清楚。为了完成我们的需求,我们可以关注到这两个命令:

1. s, squash = use commit, but meld into previous commit

2. f, fixup = like "squash", but discard this commit's log message

翻译:

- squash:使用该 Commit,但会被合并到前一个 Commit 当中
- fixup:就像 squash 那样,但会抛弃这个 Commit 的 Commit message

看样子两个命令都可以完成我们的需求,那么让我们先试一下 squash!由于我们是想把三个 Commit 都合并在一起,并且使 Commit Message 写成 Commit-1,所以我们需要把 5c7ee5a(12321) 和 2e4ed64(12321) 前面的 pick 都改为squash,于是它看起来像这样:

pick d6d290e 123123
pick 5c7ee5a 12321
pick 2e4ed64 12321
#当然,因为我很懒,所以通常我会使用它的缩写:
pick d6d290e 123123
s 5c7ee5a 12321
s 2e4ed64 12321

然后执行 :wx ,保存. git又会打开合并备注的vim操作
# This is a combination of 3 commits.
# This is the 1st commit message:

123123

# This is the commit message #2:

12321
#### 后面的内容已经省略

这个时候我们就可以修改上面的备注, 然后执行 : wx.

然后查看提交记录:

git log

就会发现提交记录已经被合并了.

保存工作空间现场

在开发中,会经常碰到bug问题,那么有了bug就需要修复,在Git中,分支是很强大的,每个bug都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临时的分支删除掉。

比如我在开发中接到一个bug时候,我们可以创建一个bug1分支来修复它,但是,当前的dev分支上的工作还没有提交。比如如下:

并不是我不想提交,而是工作进行到一半时候,我们还无法提交,比如我这个分支bug要2天完成,但是我bug1需要5个小时内完成(分支是可以提交的,不过增加了多余的commit信息, 这时候就可以使用stash 命令)。怎么办呢?还好,Git还提供了一个stash功能,可以把当前工作现场 ”隐藏起来”,等以后恢复现场后继续工作。如下:

git stash apply    恢复,恢复后,stash内容并不删除,你需要使用命令git stash drop来删除。
另一种方式是使用git stash pop,恢复的同时把stash内容也删除了。

需注意上面那句话所对作用范围的定义,如果你的文件没add,即没有“被跟踪”和“暂存”,stash是不会帮你保存的。
(1)git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。

(2)git stash list :查看stash了哪些存储

(3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}

(4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p

(5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}

(6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}

(7)git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储

(8)git stash clear :删除所有缓存的stash

回滚或者丢失不想要的内容

用Git的时候commit提交代码后,发现这一次commit的内容是有错误的,或者不想提交了,那么有两种处理方法:

1、修改错误内容,再次commit一次

2、使用git reset 命令撤销这一次错误的commit 第一种方法比较直接,但会多次一次commit记录。 我个人认为 第二种更加好点, 错误的commit就没有必要提交了.

  1. 如果你只是想撤销 commit, 但是保留 add. (此时文件的变动也会被保留)
git reset --soft HEAD^

注意了: HEAD^ 上个版本,HEAD~2 上上个版本miced commitId

  1. 删除工作空间改动代码,撤销commit,撤销git add
git reset --hard HEAD^
  1. 不删除工作空间改动代码,撤销commit,并且撤销git add(常用)
git reset --mixed HEAD^ 或者git reset HEAD^
  1. 还没有commit, 但是已经 add. , 只想撤销 add
-- filename 是指单个文件名
git reset HEAD filename
全部:git reset HEAD
  1. 不想保留本地文件的的改变.
git checkout filename
  1. git命令对各个区的影响
git add.     将工作区的文件添加到缓存区域
git commit 是将缓存区的内容增加到本地仓库
git checkout --file 是将工作区的内容丢弃
git reset --hard HEAD^ 是将当前的index 直接指向上一个版本, 并且将 暂存区,仓库,工作区的内容变动全部删除.
git reset --mixed HEAD^ 或者git reset HEAD^ 将缓存区,本地仓库的变动删除, 但是保留工作区的文件的变动.
git reset --soft HEAD^ 表示本地仓库的 commit的内容丢弃,保留本地和缓存区的变动.

不想提交某些文件到仓库

在项目中,有些文件不需要上传, 比如java的字节码文件 , log日志文件是不需要上传到git服务器器的,那么这个时候,就可以在项目的根目录下面创建.gitignore 文件, 把不需要上传的文件忽略掉即可.

.在使用Git管理代码的过程中,可以修改.gitignore文件中的标示的方法来忽略开发者想忽略掉的文件或目录,如果没有.gitignore文件,可以自己手工创建。在.gitignore文件中的每一行保存一个匹配的规则例如:
# 此为注释 – 将被 Git 忽略
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

在填写忽略文件的过程中,我发现.gitignore中已经标明忽略的文件目录下的文件,当我想git push的时候还会出现在push的目录中,原因是因为git忽略目录中,新建的文件在git中会有缓存,如果某些文件已经被纳入了版本管理中,就算是在.gitignore中已经声明了忽略路径也是不起作用的,这时候我们就应该先把本地缓存删除,然后再进行git push,这样就不会出现忽略的文件了。git清除本地缓存命令如下:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
还有一种情况, 就是发现某个文件,已经写到了.gitignore中 , 但是已经上传到了,git服务器上面.

那么这个文件, 无论你怎么修改,每次上传都是会被忽略掉的.但是呢, 项目中又存在这种文件, 这种文件一般是本地开发的配置文件. 如果你重新让.gitignore文件生效, 那么先前忽略的文件会被删除掉, 也就是说, 以前文件存在, .gitignore填写的配置不生效. 但是现在你删除了缓存,.gitignore文件生效了, 那么会导致原来的文件丢失. 这个是我亲身经历过的. 一定要注意,这种问题发生, 导致丢失不必要的配置文件.

git checkout origin/2.1.0-llw 拉趣远程分支

git checkout --track origin/branch_name 建立关联 git branch --set-upstream-to remotes/origin/news

git branch --set-upstream-to=origin/rzzm_202011208 rzzm_202011208

参考:

· One min read
jeesk

很多时候我们在linux上面压测的时候,在排除网卡和其它的因素后要看一下是否是因为linux本身的限制,在linux中一切皆是文件 所以我们要优化一下linux的相关参数

 vim /etc/security/limits.conf

* soft nofile 500000
* hard nofile 500000
root soft nofile 500000
root hard nofile 500000

执行命令

 echo 5 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse

替换lib 包jar -xvf .\my-test.jar jar -cfM0 my-test.jar ./

{% dplayer "url=http://home.ustc.edu.cn/~mmmwhy/GEM.mp4" "pic=http://home.ustc.edu.cn/~mmmwhy/GEM.jpg" "loop=yes" "theme=#FADFA3" "autoplay=false" "token=tokendemo" %}

· 3 min read
jeesk

前置工作

  1. 3台 安装JDK 8的虚拟机
  2. 3台机器安装 zookeeper 集群的机器
  3. 修改hosts 如下,假设我们有3 台机器,ip 192.168.17.81,192.168.17.82,192.168.17.83, 修改hosts文件

192.168.17.81 zk01 kafka01 storm01
192.168.17.82 zk02 kafka02 storm02
192.168.17.83 zk03 kafka03 storm03
  1. 下载storm 安装包 打开storm 发行版页面 http://storm.apache.org/downloads.html, 选取一个storm 的二进制下载 ```
wget  https://www.apache.org/dyn/closer.lua/storm/apache-storm-2.2.0/apache-storm-2.2.0.tar.gz
  1. 分发解压
# 在storm01 的机器上面执行, 3 台机器记得配置互相免密登录
scp apache-storm-2.2.0.tar.gz root@storm02:/opt/soft/
scp apache-storm-2.2.0.tar.gz root@storm03:/opt/soft/
# 在3 台机器对应的目录执行解压, 软连接
tar -zxvf apache-storm-2.2.0.tar.gz && ln -s /opt/soft/apache-storm-2.2.0 storm
  1. 修改配置 在storm01 的 /opt/soft/storm/conf 目录下执行一面的操作
cp storm.yaml storm.yaml.bak
vim storm.yaml

文件里面粘贴如下内容

#  storm 的3台机器
storm.zookeeper.servers:
- "storm01"
- "storm02"
- "storm03"
# 配置nimbus 机器的IP
nimbus.host: "storm01"
# 配置对应组件的jvm 内存
nimbus.childopts: "-Xmx1024m"
supervisor.childopts: "-Xmx1024m"
worker.childopts: "-Xmx1024m"
ui.childopts: "-Xmx768m"
# 配置supervisor 的端口
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
# 配置storm ui的端口, 这个端口是nimbus 机器上启动的ui.
ui.port: 9999

将storm.yaml, 分发到另外2台机器上面

scp storm.yaml root@storm02:/opt/soft/storm/conf
scp storm.yaml root@storm03:/opt/soft/storm/conf
  1. 相关命令在storm 的bin目录执行
  • 启动nimbus: ./storm nimbus
  • 启动storm ui: ./storm ui
  • 启动supervisor: ./storm supervisor
  • 启动拓扑: ./storm jar xxxxx.jar 拓扑名称
  • 杀死拓扑: ./storm kill 拓扑名称 -w 10 , 执行kill 命令可以通过-2 等待秒数,执行停用以后的等待时间
  • 停用任务: ./storm deactivte 拓扑名称
  • 启用任务: ./storm activate 拓扑名
  • 重新部署任务: ./storm rebalance 拓扑名 注意, 启动nimbus, ui 的命令只能在nimbus 的机器上面执行, 启动supervisor 只能在另外2台机器上面执行.
    上面storm ui的访问地址 http://storm01:9999/index.html

完结撒花,路过点赞, 月入10W .