运维随笔

笔记


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

http1对比http2实测

发表于 2021-07-29 | 更新于: 2022-06-05 | 分类于 Linux
字数统计: 284 | 阅读时长 ≈ 1

1 测试硬件条件

设备 CPU 内存 带宽
服务器 8核心 8G 千兆
客户端 4核心 16G 千兆

2 测试

2.1 测试场景1

无限制

2.1.1 测试结果

http/1.1

image-20210729120947051

​

http/2

image-20210729121127492

根据以上结果,因为每个请求花费的时间很小,加载速度几乎没有变化。

2.2 测试场景2

限制请求带宽10MB/s

2.2.1 测试结果

http/1.1

image-20210729121150173

http/2

image-20210729121159362

根据以上结果,限制传输带宽为10M/s,2700次请求,http/1.1下,450秒加载完成;http/2下260秒加载完成;效率提升在40%左右。

综上结果得出判断,http2更适合在长请求情况下提高请求量达到并发请求数提高加载速度,对于每个请求文件较小,返回花费时间较短的请求,性能和http1差不多。

同时,在高并发请求的情况下,对客户端的cpu性能和内存要求较高,提高客户端的性能瓶颈,可以提高并发请求数,达到更快加载的效果。

客户端资源占用

image-20210729121831657

image-20210729121843581

image-20210729121856535

虚拟机体验

发表于 2021-07-29 | 更新于: 2022-01-17 | 分类于 Windows
字数统计: 76 | 阅读时长 ≈ 1

虚拟机体验之 QEMU 篇 - sunylat - 博客园 (cnblogs.com)

虚拟机体验之 KVM 篇 - sunylat - 博客园 (cnblogs.com)

虚拟机体验之 VirtualBox 篇 —— 性能强大的经典架构 - sunylat - 博客园 (cnblogs.com)

虚拟机体验之 Xen 篇 —— 令人脑洞大开的奇异架构 - sunylat - 博客园 (cnblogs.com)

Hadoop优化及问题汇总

发表于 2021-07-16 | 更新于: 2022-06-05 | 分类于 Centos
字数统计: 1.4k | 阅读时长 ≈ 6

1 HDFS副本设置

说明:HDFS文件上传默认创建3个副本,在3个节点上面分别写入一个副本;

这里修改副本数为默认2个。

修改client端的hdfs-site.xml文件,哪里上传,哪里修改。

  • 修改hdfs-site.xml中的dfs.replication参数,默认为3,这里修改为1

image-20210716155859672

  • 也可以通过命令更改已经上传的文件的副本数。
1
hadoop fs -setrep -R 2 /
  • 通过命令指定上传文件的副本数
1
hadoop dfs -D dfs.replication=1 -put testfile /testdir/
  • 服务端的修改方式,可以登录各个datanode节点修改hdfs-size.xml文件,也可以通过修改Ambari平台进行修改

HDFS>>configs>>Adbanced

image-20210716160920131

保存,重启指定服务。

2 删除HDFS文件空间不释放-回收站

core-size.xml 中的fs.trash.interval 参数

删除检查点后的分钟数。如果为零,则禁用垃圾功能。可以在服务器和客户机上配置此选项。如果禁用了垃圾桶服务器端,则检查客户端配置。如果在服务器端启用了垃圾桶,那么将使用在服务器上配置的值,并忽略客户机配置值。

core-size.xml 中的fs.trash.checkpoint.interval 参数

垃圾检查点之间的分钟数。应小于或等于fs.trash.interval。如果为零,则该值设置为fs.trash.interval的值。每次检查点运行时,它都会在当前之外创建一个新的检查点,并删除几分钟前创建的超过fs.trash.interval的检查点。

fs.trash.interval是在指在这个回收周期之内,文件实际上是被移动到trash的这个目录下面,而不是马上把数据删除掉。等到回收周期真正到了以后,hdfs才会将数据真正删除。默认的单位是分钟。
fs.trash.checkpoint.interval则是指垃圾回收的检查间隔,应该是小于或者等于fs.trash.interval。img

2.1 举例操作

2.1.1 一个副本

备注:下面操作上传文件,默认只创建一个副本

通过hdfs dfs -rm 命令删除HDFS集群文件后,集群空间不释放(即DFS Used )

image-20210716160643775

1
2
3
4
5
# 上传文件
hadoop fs -put /hw1/* /hw1/
# 删除文件
hadoop fs -rm /hw1/*
# 因为默认开启了垃圾回收功能,文件被放到了回收站,所以容量没有变化

image-20210716162443573

1
2
# 清空回收站(跟windows不一样,它是打包,文件名为时间戳,时间到了依然删除)
hadoop fs -expunge

发现清空回收站后,DFS Used依然没有变化。

image-20210716162443573

image-20210716164654420

手动删除回收站文件

1
2
# 手动删除回收站的文件,查看空间回收
hadoop fs -rm -f /user/hdfs/.Trash/210716162922

image-20210716165645746

通过命令删除文件,跳过回收站

1
2
# 跳过回收站,可达到上面操作删除文件释放空间同样的效果
hadoop fs -rm -r -skipTrash /hw1/*

2.1.2 多个副本

image-20210716160643775

1
2
3
4
5
# 上传600M文件创建2份副本,占用空间是双倍的
hadoop fs -D dfs.replication=2 -put /hw1/* /hw1/
# 删除文件
hadoop fs -rm /hw1/*
# 因为默认开启了垃圾回收功能,文件被放到了回收站,所以容量没有变化

image-20210716170651159

1
2
# 跳过回收站删除文件,空间回收了
hadoop fs -rm -r -skipTrash /hw1/*

image-20210716170910796

image-20210716170933232

3 Ambari启动成功后File View无法访问

参考链接

基本类似页面无法访问均可以通过重新创建可以得到解决

启动成功后,打开文件视图报错Issues detected
Service ‘hdfs’ check failed: Server Error

在这里插入图片描述

在这里插入图片描述

查看日志:
Caused by: org.apache.ambari.server.ClusterNotFoundException: Cluster not found, clusterId=2
at org.apache.ambari.server.state.cluster.ClustersImpl.getCluster(ClustersImpl.java:277)
at org.apache.ambari.server.view.ViewRegistry.getCluster(ViewRegistry.java:928)
… 101 more

在这里插入图片描述

出现原因:在新建文件视图之后,对俩个文件视图进行了对比,怀疑可能是集群名字的问题

在这里插入图片描述

解决方案:
新建一个文件视图

在这里插入图片描述

在这里插入图片描述

发现可以成功查看

image-20210716172839414

4 Ambari Hive View 页面提示错误

Service ‘userhome’ check failed: File does not exist: /user/admin

我访问Ambari页面的电脑默认的用户名是admin

image-20210716174501747

解决办法:自己创建一个

1
hadoop fs -mkdir /user/admin

image-20210716174626773

5 Ambari Server Alert 的故障排查

问题现象

本篇文章适用于 HDI(3.6) ,内置 Ambari-2.5 以上版本中常见的异常报警:

1
There are xx stale Alerts from 1 host(s):

问题分析

如果在 Ambari Server 中突然发现了大量的 stale alerts(>20),通常来说是因为 Ambari-agent 出现了线程异常,导致无法正常将 metrics 的结果返回给 Server。

该问题通常表现为所有的 HDI 服务都可以正常访问,但是 Ambar 监控界面中断断续续的出现 Ambari Server Alert 并且会断断续续的出现。

问题截图如下:

1
There are 36 stale Alerts from 1 host(s):

01 02

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

There are 27 stale alerts from 1 host(s):
NameNode High Availability Health,
hdp4.test
[Ambari Agent Distro/Conf Select Versions (1h 30m),
DataNode Health Summary (1h 26m),
DataNode Heap Usage (1h 28m),
DataNode Process (1h 26m),
DataNode Storage (1h 28m),
DataNode Unmounted Data Dir (1h 28m),
DataNode Web UI (1h 26m),
Flume Agent Status (1h 26m),
HBase RegionServer Process (1h 26m),
HDFS Capacity Utilization (1h 28m),
HDFS Pending Deletion Blocks (1h 28m),
HDFS Upgrade Finalized State (1h 26m),
Host Disk Usage (1h 26m),
JournalNode Web UI (1h 26m),
Metrics Monitor Status (1h 26m),
NameNode Blocks Health (1h 28m),
NameNode Client RPC Processing Latency (Hourly) (1h 30m),
NameNode Client RPC Queue Latency (Hourly) (1h 30m),
NameNode Directory Status (1h 26m),
NameNode Host CPU Utilization (1h 30m),
NameNode Last Checkpoint (1h 26m),
NameNode RPC Latency (1h 28m),
NameNode Web UI (1h 26m),
NodeManager Health (1h 26m),
NodeManager Web UI (1h 26m),
ZooKeeper Failover Controller Process (1h 26m)]

解决办法

  1. 使用 putty 登入头节点。

  2. 使用命令确认 Ambari-agent 的 PID: Ambari-agent status 。

    03

  3. 使用命令: top |grep 5130 确认 Ambari-agent 进程的 CPU 使用率. 5130 需要替换成上条命令中的结果。

    04

  4. 如果 CPU 使用率为 100% 则使用命令: service Ambari-agent restart 来重启 Ambari-agent service.

  5. 稍等几分钟,再次刷新 Ambari 界面,Alert 消失。

多环境批处理脚本

发表于 2021-07-12 | 更新于: 2022-06-05 | 分类于 Windows
字数统计: 2.8k | 阅读时长 ≈ 15

version 3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
@echo off & SetLocal EnableDelayedExpansion

cd /d %~dp0

:: 检测mysql端口
:: 检查端口,如果冲突则随机端口,重新执行检查
set myport=16603
rem set myport=137
:myportDetect
netstat -aon|findstr "%myport%" > NUL 2>NUL && set myport=%random% && goto myportDetect || echo %myport%
:: 因随机端口后myport的值后,替换端口后面会又空格,执行如下步骤,转换以下,使空格消除。
for /F %%i in ('echo %myport%') do ( set myport=%%i)
echo myport=%myport%

set inipath="%cd%\mysql\mybak.ini"
rem del "%cd%\mysql\my.ini" >nul 2>nul
for /f "delims=" %%a in (.\mysql\mybak.ini) do (
set a=%%a
set a=!a:16603=%myport%!
echo !a!>>"%cd%\mysql\my.ini"
)


:: 检查redis端口
set redisport=17963
rem set redisport=137
:redisportDetect
netstat -aon|findstr "%redisport%" > NUL 2>NUL && set redisport=%random% && goto redisportDetect || echo %redisport%
for /F %%i in ('echo %redisport%') do ( set redisport=%%i)
echo redisport=%redisport%
rem set reconfpath="%cd%\redis\redis.windows-service-bak.conf"
del "%cd%\redis\redis.windows-service.conf" >nul 2>nul
for /f "delims=" %%b in (.\redis\redis.windows-service-bak.conf) do (
set b=%%b
set b=!b:17963=%redisport%!
echo !b!>>"%cd%\redis\redis.windows-service.conf"
)


:: 检查tomcat端口
::: zxzb1 端口
set zxzb1=18785
rem set zxzb1=137
:javaportDetect1
netstat -aon|findstr "%zxzb1%" > NUL 2>NUL && set zxzb1=%random% && goto javaportDetect1 || echo %zxzb1%
for /F %%i in ('echo %zxzb1%') do ( set zxzb1=%%i)
echo zxzb1=%zxzb1%




::: zxzb2 端口
set zxzb2=18388
rem set zxzb2=137
:javaportDetect2
netstat -aon|findstr "%zxzb2%" > NUL 2>NUL && set zxzb2=%random% && goto javaportDetect2 || echo %zxzb2%
for /F %%i in ('echo %zxzb2%') do ( set zxzb2=%%i)
echo zxzb2=%zxzb2%



::: zxzb3 端口
set zxzb3=18489
rem set zxzb3=137
:javaportDetect3
netstat -aon|findstr "%zxzb3%" > NUL 2>NUL && set zxzb3=%random% && goto javaportDetect3 || echo %zxzb3%
for /F %%i in ('echo %zxzb3%') do ( set zxzb3=%%i)
echo zxzb3=%zxzb3%
:: dos命令替换文本内容,存在弊端,对一些特殊服务转义存在问题,只适合简单文档的替换
:: 原理读取文档每一行,检查每一行,存在匹配,替换到新文档,然后新文档覆盖原来的文档
rem set javaconfpath="%cd%\service\conf\server_bak.xml"
del "%cd%\service\conf\server.xml" >nul 2>nul
for /f "delims=" %%c in (.\service\conf\server_bak.xml) do (
set c=%%c
set c=!c:18785=%zxzb1%!
set c=!c:18388=%zxzb2%!
set c=!c:18489=%zxzb3%!
echo !c!>>"%cd%\service\conf\server.xml"
)

:: 检查地图服务端口
set mapport=10000
rem set mapport=137
:mapportDetect
netstat -aon|findstr "%mapport%" > NUL 2>NUL && set mapport=%random% && goto mapportDetect || echo %mapport%
for /F %%i in ('echo %mapport%') do ( set mapport=%%i)
echo mapport=%mapport%

:: 替换env.bat内容
:: 本方法是采用vbs命令方式,对特殊符号转义稍好,原理和dos命令差不多,复杂符号还是需要其他深入配置
del ".\mapser\env.bat" >nul 2>nul
echo set fso=createobject("scripting.filesystemobject") >3.vbs
echo set file=fso.opentextfile("env.bat") >>3.vbs
echo s=file.readall >>3.vbs
echo file.close >>3.vbs
echo s=replace(s,"10000","%mapport%") >>3.vbs
echo set file=fso.createtextfile(".\mapser\env.bat") >>3.vbs
echo file.write s >>3.vbs
echo file.close >>3.vbs
start 3.vbs

:: 替换gdw.conf
del ".\mapser\serv\conf\gdw.conf" >nul 2>nul
echo set fso=createobject("scripting.filesystemobject") >4.vbs
echo set file=fso.opentextfile("gdw.conf") >>4.vbs
echo s=file.readall >>4.vbs
echo file.close >>4.vbs
echo s=replace(s,"10000","%mapport%") >>4.vbs
echo set file=fso.createtextfile(".\mapser\serv\conf\gdw.conf") >>4.vbs
echo file.write s >>4.vbs
echo file.close >>4.vbs
start 4.vbs

:: 修改war config
:zxzbconfig
rem set zxzbconfpath=%cd%\service\webapps\zxzb\WEB-INF\classes\application-dev-bak.properties
rem set vbsfile1=%cd%\service\webapps\zxzb\WEB-INF\classes\vbs1.txt
rem set vbsfile2=%cd%\service\webapps\zxzb\WEB-INF\classes\vbs2.txt
rem set zxzbconf=%cd%\service\webapps\zxzb\WEB-INF\classes\application-dev.properties
del "%cd%\service\webapps\zxzb\WEB-INF\classes\application-dev.properties" >nul 2>nul
echo set fso=createobject("scripting.filesystemobject") >1.vbs
echo set file=fso.opentextfile(".\service\webapps\zxzb\WEB-INF\classes\application-dev-bak.properties") >>1.vbs
echo s=file.readall >>1.vbs
echo file.close >>1.vbs
echo s=replace(s,"16603","%myport%") >>1.vbs
echo set file=fso.createtextfile(".\service\webapps\zxzb\WEB-INF\classes\vbs1.txt") >>1.vbs
echo file.write s >>1.vbs
echo file.close >>1.vbs

echo set fso=createobject("scripting.filesystemobject") >>1.vbs
echo set file=fso.opentextfile(".\service\webapps\zxzb\WEB-INF\classes\vbs1.txt") >>1.vbs
echo s=file.readall >>1.vbs
echo file.close >>1.vbs
echo s=replace(s,"17963","%redisport%") >>1.vbs
echo set file=fso.createtextfile(".\service\webapps\zxzb\WEB-INF\classes\vbs2.txt") >>1.vbs
echo file.write s >>1.vbs
echo file.close >>1.vbs

echo set fso=createobject("scripting.filesystemobject") >>1.vbs
echo set file=fso.opentextfile(".\service\webapps\zxzb\WEB-INF\classes\vbs2.txt") >>1.vbs
echo s=file.readall >>1.vbs
echo file.close >>1.vbs
echo s=replace(s,"10000","%mapport%") >>1.vbs
echo set file=fso.createtextfile(".\service\webapps\zxzb\WEB-INF\classes\application-dev.properties") >>1.vbs
echo file.write s >>1.vbs
echo file.close >>1.vbs
start 1.vbs
ping 127.1 -n 2 >nul
del .\service\webapps\zxzb\WEB-INF\classes\vbs1.txt
del .\service\webapps\zxzb\WEB-INF\classes\vbs2.txt
rem del 1.vbs

rem for /f "tokens=*" %%f in (%zxzbconfpath%) do (
rem endlocal
rem set f=%%f
rem setlocal enabledelayedexpansion
rem set f=!f:16603=%myport%!
rem set f=!f:17963=%redisport%!
rem set f=!f:18785=%zxzb1%!
rem set f=!f:18388=%zxzb2%!
rem set f=!f:18489=%zxzb3%!
rem echo !f! >>"%cd%\service\webapps\zxzb\WEB-INF\classes\application-dev.properties"
rem )

::: 前端urlport修改(只用在web封装版本)
:webconfig
rem set javaconfpath=requestUrl.js
del "..\app\static\js\requestUrl.js" >nul 2>nul
echo set fso=createobject("scripting.filesystemobject") >2.vbs
echo set file=fso.opentextfile("requestUrl.js") >>2.vbs
echo s=file.readall >>2.vbs
echo file.close >>2.vbs
echo s=replace(s,"24486","%zxzb2%") >>2.vbs
echo set file=fso.createtextfile("..\app\static\js\requestUrl.js") >>2.vbs
echo file.write s >>2.vbs
echo file.close >>2.vbs

:: app\static\js\config
del "..\app\static\js\config.js" >nul 2>nul
echo set fso=createobject("scripting.filesystemobject") >>2.vbs
echo set file=fso.opentextfile("config.js") >>2.vbs
echo s=file.readall >>2.vbs
echo file.close >>2.vbs
echo s=replace(s,"10000","%mapport%") >>2.vbs
echo set file=fso.createtextfile("..\app\static\js\config.js") >>2.vbs
echo file.write s >>2.vbs
echo file.close >>2.vbs

::这个作为测试页面web
del ".\service\webapps\zxzb\WEB-INF\classes\templates\static\js\config.js" >nul 2>nul
echo set fso=createobject("scripting.filesystemobject") >>2.vbs
echo set file=fso.opentextfile("config.js") >>2.vbs
echo s=file.readall >>2.vbs
echo file.close >>2.vbs
echo s=replace(s,"10000","%mapport%") >>2.vbs
echo set file=fso.createtextfile(".\service\webapps\zxzb\WEB-INF\classes\templates\static\js\config.js") >>2.vbs
echo file.write s >>2.vbs
echo file.close >>2.vbs

start 2.vbs


rem for /f "delims=" %%d in (requestUrl.js) do (
rem set d=%%d
rem set d=!d:24486=%zxzb2%!
rem echo !c!>>"..\app\static\js\requestUrl.js"
rem )

::::: 安装服务
::: 安装vc服务
::: 原理 查询注册表,根据返回值判断执行不同结果命令,采用判断语句
:2010Detect
cd /d %~dp0
rem set "HKLMU=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
::::: 判断系统是否已经安装了 Visual C++ 2010(包括所有版本)
::::: 有就跳过安装Visual C++ 2010,没有则先安装。
:: 此处采用 if defined 命令返回变量的值,执行不同结果命令,下面{}是vc工具ID,进行匹配,但是版本太多,没有手机完,总成匹配不全
rem reg query %HKLMU%\{196BB40D-1578-3D01-B289-BEFC77A11A1E}>nul 2>nul&&set VC2010=Microsoft Visual C++ 2010 Redistributable X86
rem reg query %HKLMU%\{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}>nul 2>nul&&set VC2010=Microsoft Visual C++ 2010 Redistributable X64
rem if defined VC2010 (echo %VC2010% 已安装!&goto mysqlserviceDetect >nul) else (goto 2010Install)
::::: 判断系统是否已经安装了 Visual C++ 2010(包括所有版本)
::::: 有就跳过安装Visual C++ 2010,没有则先安装。
:: 此处采用检查注册表路径下有没有特定版本的目录,返回结果,真和假。匹配准确性待测试,个人想到的方式
set "HKLMU=HKLM\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\"
if %errorlevel% ==0 (
echo %vc10% 已安装!& goto 2015Detect
) else (
echo noexsit & goto 2010Install
)
:2010Install
:::::各版本下载地址 http://www.microsoft.com/downloads/details.aspx?FamilyID=766a6af7-ec73-40ff-b072-9112bab119c2&DisplayLang=zh-cn
"%cd%\mysql\vcredist_x64_2010.exe"

:2015Detect
reg query %HKLMU%14.0 >nul && set vc15=Microsoft Visual C++ 2015
if %errorlevel% ==0 (
echo %vc15% 已安装! & goto mysqlserviceDetect
) else (
echo noexsit & goto 2015Install
)

:2015Install
vcredist_x64_2015.exe

::: 安装mysql
:mysqlserviceDetect
cd /d %~dp0
set "mysqlservice=jx_mysql5.6"
sc query "%mysqlservice%">nul
IF ERRORLEVEL 1060 GOTO mysqlInstall
GOTO mysqlexist


:mysqlInstall
"%cd%\mysql\bin\mysqld.exe" -install %mysqlservice% --defaults-file="%cd%\mysql\my.ini"
sc config %mysqlservice% start=auto
net start %mysqlservice%

::: 安装redis
:redisserviceDetect
cd /d %~dp0
set "redisservice=jx_redis3.2.100"
sc query "%redisservice%">nul
IF ERRORLEVEL 1060 GOTO redisInstall
GOTO redisexist

:redisInstall
"%cd%\redis\redis-server" --service-install --service-name %redisservice% "%cd%\redis\redis.windows-service.conf" --loglevel verbose
sc config %redisservice% start=auto
net start %redisservice%
echo ------------------------------------------------------------------------------

::: 安装tomcat
:javaserviceDetect
cd /d %~dp0
set "javaservice=jx_tomcat8.5_jdk8"
sc query "%javaservice%">nul
IF ERRORLEVEL 1060 GOTO javaInstall
GOTO javaexist

:javaInstall
cd service
call "%cd%\bin\service.bat" install %javaservice%
ping 127.0.0.1 -n 5 > nul
sc config %javaservice% start=auto
net start %javaservice%

::: 安装mapserver
:mapserviceDetect
cd /d %~dp0
set "mapservice=jx_mapserv0.20.1"
sc query "%mapservice%">nul
IF ERRORLEVEL 1060 GOTO mapInstall
GOTO mapexist

:mapInstall
instsrv.exe jx_mapserv0.20.1 "%cd%\mapser\start.exe"
ping 127.0.0.1 -n 5 > nul
sc config jx_mapserv0.20.1 start=auto
net start jx_mapserv0.20.1

echo mysqlport=%myport% > READ.txt
echo redisport=%redisport% >> READ.txt
echo javaport1=%zxzb1% >> READ.txt
echo javaport2-http=%zxzb2% >> READ.txt
echo javaport3=%zxzb3% >> READ.txt
echo mapport=%mapport% >> READ.txt
ping 127.0.0.1 -n 60 > nul
goto END

:mysqlexist
mshta vbscript:msgbox("ERROR:%mysqlservice% 服务已存在!!!",64,"异常提醒")(window.close)
GOTO END

:redisexist
mshta vbscript:msgbox("ERROR:%redisservice% 服务已存在!!!",64,"异常提醒")(window.close)
GOTO END

:javaexist
mshta vbscript:msgbox("ERROR:%javaservice% 服务已存在!!!",64,"异常提醒")(window.close)
GOTO END

:END

version 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
::[Bat To Exe Converter]
::
::YAwzoRdxOk+EWAnk
::fBw5plQjdG8=
::YAwzuBVtJxjWCl3EqQJgSA==
::ZR4luwNxJguZRRnk
::Yhs/ulQjdF+5
::cxAkpRVqdFKZSzk=
::cBs/ulQjdF+5
::ZR41oxFsdFKZSDk=
::eBoioBt6dFKZSDk=
::cRo6pxp7LAbNWATEpCI=
::egkzugNsPRvcWATEpCI=
::dAsiuh18IRvcCxnZtBJQ
::cRYluBh/LU+EWAnk
::YxY4rhs+aU+JeA==
::cxY6rQJ7JhzQF1fEqQJQ
::ZQ05rAF9IBncCkqN+0xwdVs0
::ZQ05rAF9IAHYFVzEqQJQ
::eg0/rx1wNQPfEVWB+kM9LVsJDGQ=
::fBEirQZwNQPfEVWB+kM9LVsJDGQ=
::cRolqwZ3JBvQF1fEqQJQ
::dhA7uBVwLU+EWDk=
::YQ03rBFzNR3SWATElA==
::dhAmsQZ3MwfNWATElA==
::ZQ0/vhVqMQ3MEVWAtB9wSA==
::Zg8zqx1/OA3MEVWAtB9wSA==
::dhA7pRFwIByZRRnk
::Zh4grVQjdCyDJGyX8VAjFBpQQQ2MAE+/Fb4I5/jH9fKdoHEUWvEreYPXlLGWJYA=
::YB416Ek+ZW8=
::
::
::978f952a14a936cc963da21a135fa983
@echo off
cd /d %~dp0

call envport.bat

:myportDetect
netstat -aon|findstr LISTENING|findstr "%myport%" > NUL 2>NUL && mshta vbscript:msgbox("ERROR:%myport% 端口已占用!!!",64,"异常提醒")(window.close) || echo %myport%

:redisportDetect
netstat -aon|findstr LISTENING|findstr "%redisport%" > NUL 2>NUL && mshta vbscript:msgbox("ERROR:%redisport% 端口已占用!!!",64,"异常提醒")(window.close) || echo %redisport%

:javaportDetect1
netstat -aon|findstr LISTENING|findstr "%zxzb1%" > NUL 2>NUL && mshta vbscript:msgbox("ERROR:%zxzb1% 端口已占用!!!",64,"异常提醒")(window.close) || echo %zxzb1%

:javaportDetect2
netstat -aon|findstr LISTENING|findstr "%zxzb2%" > NUL 2>NUL && mshta vbscript:msgbox("ERROR:%zxzb2% 端口已占用!!!",64,"异常提醒")(window.close) || echo %zxzb2%

:javaportDetect3
netstat -aon|findstr LISTENING|findstr "%zxzb3%" > NUL 2>NUL && mshta vbscript:msgbox("ERROR:%zxzb3% 端口已占用!!!",64,"异常提醒")(window.close) || echo %zxzb3%

:mapportDetect
netstat -aon|findstr "%mapport%" > NUL 2>NUL && mshta vbscript:msgbox("ERROR:%mapport% 端口已占用!!!",64,"异常提醒")(window.close) || echo %mapport%

::::: 安装服务
::: 安装vc2010
:2010Detect
cd /d %~dp0
set "HKLMU=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
::::: 判断系统是否已经安装了 Visual C++ 2010(包括所有版本)
::::: 有就跳过安装Visual C++ 2010,没有则先安装。
reg query %HKLMU%\{196BB40D-1578-3D01-B289-BEFC77A11A1E}>nul 2>nul&&set VC2010=Microsoft Visual C++ 2010 Redistributable X86
reg query %HKLMU%\{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}>nul 2>nul&&set VC2010=Microsoft Visual C++ 2010 Redistributable X64

if defined VC2010 (echo %VC2005% 已安装!&goto mysqlserviceDetect >nul) else (goto 2010Install)

:2010Install
:::::各版本下载地址 http://www.microsoft.com/downloads/details.aspx?FamilyID=766a6af7-ec73-40ff-b072-9112bab119c2&DisplayLang=zh-cn
"%cd%\mysql\vcredist_x64_2010.exe"


::: 安装mysql
:mysqlserviceDetect
cd /d %~dp0
set "mysqlservice=jx_mysql5.6"
sc query "%mysqlservice%">nul
IF ERRORLEVEL 1060 GOTO mysqlInstall
GOTO mysqlexist


:mysqlInstall
"%cd%\mysql\bin\mysqld.exe" -install %mysqlservice% --defaults-file="%cd%\mysql\my.ini"
sc config %mysqlservice% start=auto
net start %mysqlservice%

::: 安装redis
:redisserviceDetect
cd /d %~dp0
set "redisservice=jx_redis3.2.100"
sc query "%redisservice%">nul
IF ERRORLEVEL 1060 GOTO redisInstall
GOTO redisexist

:redisInstall
"%cd%\redis\redis-server" --service-install --service-name %redisservice% "%cd%\redis\redis.windows-service.conf" --loglevel verbose
sc config %redisservice% start=auto
net start %redisservice%
echo ------------------------------------------------------------------------------

::: 安装tomcat
:javaserviceDetect
cd /d %~dp0
set "javaservice=jx_tomcat8.5_jdk8"
sc query "%javaservice%">nul
IF ERRORLEVEL 1060 GOTO javaInstall
GOTO javaexist

:javaInstall
cd service
call "%cd%\bin\service.bat" install %javaservice%
ping 192.0.2.2 -n 1 -w 10000 > nul
sc config %javaservice% start=auto
net start %javaservice%
ping 192.0.2.2 -n 1 -w 10000 > nul


:mapserviceDetect
cd /d %~dp0
set "mapservice=jx_mapserv0.20.1"
sc query "%mapservice%">nul
IF ERRORLEVEL 1060 GOTO mapInstall
GOTO mapexist

:mapInstall
instsrv.exe jx_mapserv0.20.1 "%cd%\mapser\start.exe"
ping 192.0.2.2 -n 1 -w 3000 > nul
sc config jx_mapserv0.20.1 start=auto
net start jx_mapserv0.20.1
goto END

:mysqlexist
mshta vbscript:msgbox("ERROR:%mysqlservice% 服务已存在!!!",64,"异常提醒")(window.close)
GOTO END

:redisexist
mshta vbscript:msgbox("ERROR:%redisservice% 服务已存在!!!",64,"异常提醒")(window.close)
GOTO END

:javaexist
mshta vbscript:msgbox("ERROR:%javaservice% 服务已存在!!!",64,"异常提醒")(window.close)
GOTO END

:mapexist
mshta vbscript:msgbox("ERROR:%mapservice% 服务已存在!!!",64,"异常提醒")(window.close)
GOTO END

:END

gitlab_gitbook搭建WIKI

发表于 2021-06-18 | 更新于: 2022-06-05 | 分类于 Linux
字数统计: 1.2k | 阅读时长 ≈ 5

1 环境

OS: centos7.9
gitlab: gitlab-ce-10.0.0-ce
GitBook CLI version: 2.3.2
GitBook version: 3.2.3
Gitlab-runner 13.12.0

2 环境准备

2.1 安装nodejs

1
2
yum install epel-release
yum install nodejs

2.2 安装git

1
yum install git

3 安装GitLab

  1. 下载gitlab的rpm包
    地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
  2. 执行安装
1
yum install gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm
  1. 修改访问URL
1
vim /etc/gitlab/gitlab.rb

## 修改以下内容并保存

1
external_url http://服务器IP地址

info
备注:这里可以写服务器IP地址,如果映射域名了,可以写域名,不用加端口号,端口号另外配置

  1. 载入配置
1
2
gitlab-ctl reconfigure
gitlab-ctl restart

4 GitLab汉化(可选)

GitLab10版本支持配置中文,但是翻译率较低,通过其他方式增加汉化

info
备注:此方式暂时只适用于10版本


参考 Gitlab10.0.X社区版本,汉化
https://kinggoo.com/gitlab-chinesize.htm

  1. 下载汉化文件
    汉化文件:下载 https://kinggoo.com/wp-content/upload/2017/10/10.0.x.zip
  2. 停止gitlab
1
2
gitlab-ctl stop
patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < 10.0.diff
  1. 启动gitlab
1
gitlab-ctl start

访问页面验证。
5 安装GitBook
npm install -g gitbook-cli -g

6 安装GitLab-Runner

  1. 下载GitLab Runner
    通过 uname –m 命令查看 Linux 系统的位数,然后下载对应的安装包
1
2
3
4
5
6
# x86-64
sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
# x86
sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-386
# arm
sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm
  1. 文件放置
    文件已经放置于 /usr/local/bin/gitlab-runner,需要配置相应权限
    chmod +x /usr/local/bin/gitlab-runner

  2. 安装GitLab Runner

1
2
3
4
5
6
**## 安装**
gitlab-runner install --user=root --working-directory=/software/gitlab-runner
备注:/software/gitlab-runner 是安装路径,可以自定义,目录需要提前创建,否则启动报错。

**## 启动**
gitlab-runner start

7 打通GitLab与GitBook

  1. 创建wiki的工程,如下所示:
    1
  2. 注册GitLab Runner
1
2
3
4
5
6
7
8
**## 注册**
gitlab-runner register
然后依次输入以下参数:
## 1. GitLab的url,参考下图
## 2. Token,参考下图
## 3. 描述,随便写一个
## 4. Runner描述,随便写一个
## 5. shell,意思是执行方式,这里用shell即可

2

  1. 配置完成后,可以在GitLab看到Runner已经注册上来了,如下所示:
    3
  2. 项目配置CI
    在项目中新增.gitlab-ci.yml文件,内容如下:
1
2
3
4
5
6
7
8
9
10
stages:
- build
xx-wiki:
stage: build
script:
- p=`pwd`
- echo $p
- gitbook install
- gitbook build
- setsid nohup sh startup.sh > nohup.out 2>&1 &

在项目中新增startup.sh文件,内容如下:

1
2
3
#!/bin/bash
for i in `ps -ef | grep gitbook | grep serve`; do kill -9 $i ; done;
gitbook serve

提交到GitLab后,通过Pipelines菜单查看任务执行情况:
4
5

8 验证

修改Wiki内容,然后推送到GitLab,可以看到GitLab上的任务被执行:
6
访问http://IP:4000,可以看到对应的Wiki被更新,证明WiKi搭建完成,并能实时更新
7

9 问题

9.1 runner一直处于Pending状态

这是由于在注册gitlab runner完成后,有一个配置项需要修改,否则不会执行,详见以下链接:
https://www.daxiblog.com/gitlab-pages无法运行,一直处于pending状态的原因/
https://www.daxiblog.com/gitlab-pages%E6%97%A0%E6%B3%95%E8%BF%90%E8%A1%8C%EF%BC%8C%E4%B8%80%E7%9B%B4%E5%A4%84%E4%BA%8Epending%E7%8A%B6%E6%80%81%E7%9A%84%E5%8E%9F%E5%9B%A0/
在gitlab中启动pages服务并配置好gitlab runner之后,push代码后,虽然触发了自动CI,但是一直处于Pending状态,

danger
错误信息是:This job is stuck, because you don’t have any active runners that can run this job

这是由于在注册gitlab runner完成后,有一个配置项需要修改,就是是否在没有标记tag的job上运行,如果选择默认值false,那没有标记tag的代码提交是不会触发gitlab runner的,如果做测试,最好填true。
这个配置可以在runner的编辑页面进行修改:

打开settings→CI/CD→Runners settings,然后会看到已经启用的runner,点击编辑按钮,勾选以下选项即可:
9

9.2 runner一直处于running

这是由于直接通过gitbook serve启动时,没有以后台方式启动。最后通过setsid解决

10 优化

10.1 优化GitBook展示页面

创建book.js,可配置页面超链接,书籍标题等信息,安装及禁用了部分插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"title": "test标题",
"author": "XXX作者",
"authorHomepage": "http://zhjxdns.imwork.net:332/",
"description": "site description",
"language": "zh-hans",
"copyright": "All Rights Reserved",
"variables": {},
"plugins": [
"theme-code",
"splitter",
"prism",
"-font-settings",
"folding-chapters",
"-sharing",
"search-pro",
"-smart-nav-collapse",
"include-codeblock",
"-livereload",
"toggle-chapters"
],
"pluginsConfig": {
"theme-default": {
"showLevel": true
}
}
}

10.2 优化默认Introduction

11
修改SUMMARY.md文件,添加* [前言](README.md)

1
2
3
4
5
6
* [前言](README.md)
# 目录
* [第一章](1.md)
* [1.1](1.1.md)
* [第二章](2.md)
* [第三章](3.md)

12

1…789…32
OperationMAN

OperationMAN

日常运维文档整理。

157 日志
9 分类
107 标签
E-Mail GitHub 码云 Linux命令大全 鸟哥的私房菜 RUNOOB.com 陈沙克日志 Bitnami Font Awesome
友情链接
  • Next优化
  • Next深度优化
© 2023 OperationMAN | 豫ICP备 17032296 号