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 .