存档

‘网络产品’ 分类的存档

一文详解负载均衡和反向代理的真实区别(转)

2020年9月25日 没有评论

一、SLB 产生背景

 

SLB(服务器负载均衡):在多个提供相同服务的服务器的情况下,负载均衡设备存在虚拟服务地址,当大量客户端从外部访问虚拟服务IP地址时,负载均衡设备将这些报文请求根据负载均衡算法,将流量均衡的分配给后台服务器以平衡各个服务器的负载压力,避免在还有服务器压力较小情况下其他服务达到性能临界点出现运行缓慢甚至宕机情况,从而提高服务效率和质量。
因此对客户端而言,RS(real server 实际服务器)的IP地址即是负载均衡设备VIP(虚拟服务地址IP)地址,真正的RS服务器IP地址对于客户端是不可见的。

 

二、SLB 的三种传输模式

 

七层SLB和四层SLB的区别:
四层SLB:配置负载均衡设备上服务类型为tcp/udp,负载均衡设备将只解析到4层,负载均衡设备与client三次握手之后就会和RS建立连接;
七层SLB:配置负载均衡设备服务类型为 http/ftp/https 等,负载均衡设备将解析报文到7层,在负载均衡设备与client三次握手之后,只有收到对应七层报文,才会跟RS建立连接。
在负载均衡设备中,SLB主要工作在以下的三种传输模式中:

 

  • 反向代理模式
  • 透传模式
  • 三角模式

 

根据不同的模式,负载均衡设备的工作方式也不尽相同,但无论在哪种模式下,客户端发起的请求报文总是需要先到达负载均衡设备进行处理,这是负载均衡设备正常工作的前提。模拟网络拓扑环境:

 

  • Client:10.8.21.40
  • 负载均衡设备:172.16.75.83
  • VIP:172.16.75.84
  • RS1IP:172.16.75.82
  • RS2IP:172.16.75.85

 

在整个报文交互过程中,采用 Tcpdump 和 Wireshark 分别在 RS 和 Client 处抓包,然后使用 Wireshark 进行报文解析。

 

三、 反向代理模式

 

反向代理:普通的代理设备是内网用户通过代理设备出外网进行访问,而工作在这种模式下的负载均衡设备,则是外网用户通过代理设备访问内网,因此称之为反向代理。
在反向代理模式下:
当负载均衡设备收到客户端请求后,会记录下此报文( 源IP地址、目的IP地址、协议号、源端口、目的端口,服务类型以及接口索引),将报文目的地址更改为优选后的RS设备的IP地址,目的端口号不变,源地址修改为负载均衡设备下行与对应RS设备接口的IP地址,源端口号随机发送给RS;
当RS收到报文后,会以源为RS接口IP地址,目的IP设备地址回复给负载均衡设备,负载均衡设备将源修改为VIP,目的端口号修改为客户端的源端口号,目的IP修改为Client的源IP回复报文。
查看报文解析结果:
配置完成后,Client 访问 RS 服务器,返回成功,整个报文交互过程如下 :
Client和负载均衡设备之间的报文交互过程
RS和负载均衡设备之间报文交互过程
结果分析
分析整个报文交互过程:
TCP握手过程:首先Client向负载均衡设备发送TCP SYN报文请求建立连接,源IP为Client的IP 10.8.21.40,源端口号50894,目的IP为VIP地址172.16.75.84,目的端口号80;
收到请求报文后,负载均衡设备会以源IP为VIP地址172.16.75.84,端口号80,目的IP 10.8.21.40,目的端口号50894回应SYN ACK报文;
Client收到报文后回复ACK报文,TCP三次握手成功。
HTTP报文交互过程:
当负载均衡设备与client完成三次握手后,因为配置的七层SLB,如果收到HTTP请求,就会根据负载均衡算法和服务器健康状态优选出对应的RS(在这次过程中选择的RS设备为172.16.75.82),然后与RS建立TCP连接:
负载均衡设备发送 TCP SYN 报文请求连接,源IP为负载均衡设备与RS相连接口IP 172.16.75.83,源端口号随机4574,目的IP为RS的IP 172.16.75.82,目的端口号80;
RS 收到报文后,以源 IP 172.16.75.82,端口号80,目的IP 172.16.75.83,目的端口号4574回复SYN ACK报文,负载均衡设备回复ACK报文建立三次握手;
之后,负载均衡设备再将收到的HTTP报文源IP修改为与RS相连下行接口IP地址172.16.75.83,源端口号为随机端口号,将报文发送给RS;当RS收到报文后,使用源为本地IP 172.16.75.82,目的IP为172.16.75.83进行回复,所以报文直接回复给负载均衡设备;
当负载均衡设备收到RS的回应报文后,将报文的源修改为VIP地址172.16.75.84,目的IP为10.8.21.40发送回 Client,再将目的端口号修改为HTTP请求报文中的源端口号,服务器访问成功。
由上述的过程可以看出,在RS端上,client的真实IP地址被负载设备修改成与RS相连接口的IP地址,所以RS无法记录到Client的访问记录,为了解决这个问题,可以采用在HTTP报文头中添加X-Forwarded-For字段,本文不做赘述,可以自行查询。

 

四、透传模式

 

当负载均衡设备工作在透传模式中时,RS无法感知到负载均衡设备的存在,对于Client来说,RS的IP地址就是负载均衡设备的VIP地址。
在这种模式下,当负载均衡设备收到源为 Client 的 IP,目的 IP 为本地 VIP 地址的报文时,会将报文根据负载均衡策略和健康状况发送给最优的 RS 设备上,继而RS设备会收到目的为本地IP,源为Client实际IP的请求报文;
然后RS将会直接回应此请求,报文的目的 IP 地址为 Client 的 IP 地址,当负载均衡设备收到此报文后,将源 IP 地址修改为 VIP 地址,然后将报文发送给 Client。
报文解析结果:
同样在 RS 端和 Client 端抓取交互报文:
Client 和负载均衡设备之间的报文交互过程

 

RS和负载均衡设备之间的报文交互过程

结果分析:

TCP握手过程:同反向代理模式交互过程

HTTP报文交互过程:

Client向负载均衡设备的VIP地址172.16.75.84以源IP 10.8.21.40发送HTTP请求,当负载均衡设备收到报文后,与优选后的RS进行TCP三次握手,过程同反向代理模式,然后将收到的HTTP报文,不改变报文的源IP地址和源/目的端口号,只修改目的IP修改为优选后的RS地址172.16.75.82;

当RS收到源来自IP 10.8.21.40的报文后,回复报文给IP地址10.8.21.40,此时要注意,必须在RS上配置回复报文经过负载均衡设备,负载均衡设备会将源IP修改为VIP地址172.16.75.84,然后转发给Client,否则Client将会收到源IP为172.16.75.82的HTTP报文,服务器访问失败。

 

 

五、 三角模式

 

在三角模式下,当客户端发送请求到负载设备上时,负载均衡设备会计算出最优RS,然后直接根据MAC地址将报文转发给RS,在RS上配置报文的源IP为VIP地址(一般配置在loopback口上),因此在这种情况下,RS会直接将报文发送给Client,即使回复报文经过负载均衡设备,此设备不做任何处理。由于报文在整个过程中传输途径类似于三角形,因此称之为三角模式。
报文解析结果
分别在Client端和RS端抓包,内容如下:
Client和负载均衡设备之间的报文交互过程
RS 和负载均衡设备之间的报文交互过程

 

结果分析

 

TCP握手过程:
由于采用了4层SLB,所以在TCP握手过程中与上述的7层SLB有些不同,当Client和RS完成三次握手之后,此时负载均衡设备会直接选择RS,然后跟RS建立TCP三次握手;
在三角模式环境中,由于RS的Loopback口和负载均衡设备上都存在着VIP地址172.16.75.84,当负载均衡设备经过负载均衡算法选择出对应的RS后,会根据实际配置的RS的IP地址对应的mac地址,将报文以目的mac为RS,目的IP为VIP的方式建立TCP连接。
HTTP报文交互过程:
首先Client向负载均衡设备的VIP发送HTTP请求,源为10.8.21.40,当负载均衡设备收到报文后,将报文直接转发给RS,当RS收到源IP为10.8.21.40,目的IP为本地Loopback口IP地址172.16.75.84的报文后,直接将报文回复给10.8.21.40,同样源为IP地址172.16.75.84,由此访问服务器成功。
在三角模式中,由于回复报文负载均衡设备不做任何处理,所以非常适合于RS到Client方向流量较大或者连接数目较多的组网环境。
采用三角模式时,必须注意RS有路由可以到达Client,并且在RS的Loopback接口上必须有负载均衡设备的VIP地址,否则即使RS设备收到Client的请求报文也会直接丢弃报文,不作回应。

 

六、总结

 

由于反向代理模式中在RS侧只能收到源为负载均衡设备IP的报文,因此可以使用防火墙增加安全性,只允许源IP为负载均衡设备的IP地址的报文通过,同时增加X-Forwarded-For字段也可以让RS只允许有此字段的报文进行访问,因此安全性相对较高。
作者:蹦蹦啪
链接:https://www.zhihu.com/question/20553431/answer/130698230

 

ubuntu18.04配置静态ip

2020年7月10日 没有评论

注意: 18.04和16.04不一样了,配置静态ip的方法有很大差异!

查找netplan目录下默认的网络配置文件,文件后缀为.yaml,我的是叫01-network-manager-all.yaml的文件。如果没有可以使用sudo gedit 01-network-manager-all.yam自己创建。

编辑网络配置文件01-network-manager-all.yaml,内容如下:
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
ethernets:
enp3s0: #配置的网卡名称,使用ifconfig -a查看得到
dhcp4: no #dhcp4关闭
addresses: [192.168.202.36/24] #设置本机IP及掩码
gateway4: 192.168.202.1 #设置网关
nameservers:
addresses: [192.168.202.1] #设置DNS

使用命令,使静态ip生效。
$ sudo netplan apply

宝塔等Nginx环境添加允许跨域Header头问题补充

2020年5月2日 没有评论

宝塔等Nginx环境添加允许跨域Header头

我已宝塔面板为例:
点击站点修改
点击配置文件
在 39 行下面添加
add_header ‘Access-Control-Allow-Origin’ ‘*’;
add_header ‘Access-Control-Allow-Credentials’ ‘true’;
add_header ‘Access-Control-Allow-Methods’ ‘GET, POST, OPTIONS’;
然后重启 nginx.
下面是通用 nginx 添加允许跨域header头

使用ngx_http_headers_module中的add_header指令,在响应头中添加允许跨域。

Syntax: add_header name value [always];
Default: —
Context: http, server, location, if in location
一般地,我们把允许跨域的头加在动态接口后面,比如 php,就加在解析 php 后面

add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST;
注意,在实际中 Allow-Origin 不要指定为*,要设置为允许访问的域名,比如 http://abc.com

Centos7系统安装配置GitLab服务器

2019年9月3日 没有评论

1、首先

sudo yum update
更新当前库

2、执行以下命令

sudo yum install curl policycoreutils openssh-server openssh-clients -y
sudo systemctl enable sshd
sudo systemctl start sshd
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
sudo firewall-cmd –permanent –add-service=http
sudo systemctl reload firewalld
其中 sudo yum install postfix 可能会报错,部分环境可能已经配置好此步,报错直接跳过。

3、添加gitlb官方地址至源文件

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
提示如下:

The repository is setup! You can now install packages.
即可以开始安装

执行安装:

sudo yum install gitlab-ce -y
提示如下:

Installed:
gitlab-ce.x86_64 0:9.4.2-ce.0.el7

Complete!
即安装成功

4、执行配置脚本

sudo gitlab-ctl reconfigure
此步骤大概会执行3分钟左右,结果大概如下:

unning handlers:
Running handlers complete
Chef Client finished, 362/517 resources updated in 03 minutes 40 seconds
gitlab Reconfigured!
即可通过访问服务器地址访问,并进行初始化配置(默认为80端口,配置文件为:/etc/gitlab/gitlab.rb)

分类: Linux, 网络产品 标签: ,

cacti图片中文显示方块的解决方案

2019年7月21日 没有评论
1
yum install cjkuni-ukai-fonts.noarch -y

sqlserver自动配置镜像脚本

2019年7月6日 没有评论
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
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
--环境:非域环境
 
DECLARE @DBName NVARCHAR(255) --库名
DECLARE @masterip NVARCHAR(255)  --主库IP
DECLARE @mirrorip NVARCHAR(255)  --镜像库IP
DECLARE @witness NVARCHAR(255)
DECLARE @masteriptail NVARCHAR(255)
DECLARE @mirroriptail NVARCHAR(255)
DECLARE @witnesstail NVARCHAR(255)
DECLARE @certpath NVARCHAR(MAX)  --证书路径
DECLARE @Restorepath NVARCHAR(MAX)
DECLARE @Restorepath1 NVARCHAR(MAX)
DECLARE @Restorepath2 NVARCHAR(MAX)
DECLARE @MKPASSWORD NVARCHAR(500)  --证书密码
DECLARE @LOGINPWD NVARCHAR(500)  --登录名密码
DECLARE @LISTENER_PORT  NVARCHAR(500)  --Endpoint密码
DECLARE @SQL NVARCHAR(MAX)
DECLARE @MASTERHOST_NAME NVARCHAR(50)  --主库登录名
DECLARE @SLAVEHOST_NAME NVARCHAR(50)  --镜像库登录名
DECLARE @WITNESSHOST_NAME NVARCHAR(50)
 
 
if OBJECT_ID ('tempdb..#temp')is not null 
BEGIN 
 DROP TABLE #BackupFileList
END
 
CREATE TABLE #BackupFileList 
    (
      LogicalName NVARCHAR(100) ,
      PhysicalName NVARCHAR(100) ,
      BackupType CHAR(1) ,
      FileGroupName NVARCHAR(50) ,
      SIZE BIGINT ,
      MaxSize BIGINT ,
      FileID BIGINT ,
      CreateLSN BIGINT ,
      DropLSN BIGINT NULL ,
      UniqueID UNIQUEIDENTIFIER ,
      ReadOnlyLSN BIGINT NULL ,
      ReadWriteLSN BIGINT NULL ,
      BackupSizeInBytes BIGINT ,
      SourceBlockSize INT ,
      FileGroupID INT ,
      LogGroupGUID UNIQUEIDENTIFIER NULL ,
      DifferentialBaseLSN BIGINT NULL ,
      DifferentialBaseGUID UNIQUEIDENTIFIER ,
      IsReadOnly BIT ,
      IsPresent BIT ,
      TDEThumbprint NVARCHAR(100)
    )
 
 
SET NOCOUNT ON
 
SET @masterip='192.168.56.131'  
SET @mirrorip='192.168.56.130'  
SET @witness='192.168.56.132'   
--目录后面不要带分隔符: \
SET @certpath='C:\temp\'   
SET @Restorepath='C:\temp\'   
SET @DBName='testmirror'               
SET @MKPASSWORD='master@2015key123' 
SET @LOGINPWD='User_Pass@2015key123'  
SET @LISTENER_PORT='5022'  
SET @MASTERHOST_NAME='A'  
SET @SLAVEHOST_NAME='B'  
SET @WITNESSHOST_NAME='C'  
 
 
 
 
 
 
select @masteriptail= PARSENAME(@masterip,2)+'_'+PARSENAME(@masterip,1) 
select @mirroriptail= PARSENAME(@mirrorip,2)+'_'+PARSENAME(@mirrorip,1) 
select @witnesstail= PARSENAME(@witness,2)+'_'+PARSENAME(@witness,1) 
 
 
--------------------------------------------------------------------------------
DECLARE @stat NVARCHAR(MAX)
 
SET  @stat='--自动生成镜像脚本V1 By huazai'
PRINT @stat
PRINT CHAR(13)+CHAR(13)
 
 
 
 
SET  @stat='--0、首先确定要做镜像的库的恢复模式为完整,用以下sql语句来查看'+CHAR(13)
+'--主机'+CHAR(13)
+'SELECT [name], [recovery_model_desc] FROM sys.[databases]'+CHAR(13)+CHAR(13)+CHAR(13)
 
PRINT '--主:'+@masterip
PRINT '--备:'+@mirrorip
--PRINT '--见证:'+@witness
PRINT CHAR(13)+CHAR(13)
PRINT @stat
 
--------------------------------------------------------------------
PRINT '-- ============================================='
 
SET  @stat='--1、 在主服务器和镜像服务器上和见证服务器上创建Master Key 、创建证书 '+CHAR(13)
+'--主机'+CHAR(13)
+'USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '''+@MKPASSWORD+''';'
+'CREATE CERTIFICATE HOST_'
+@masteriptail
+'_cert  WITH SUBJECT = ''HOST_'
+@masteriptail
+'_certificate'','+CHAR(13)
+'START_DATE = ''09/20/2010'',EXPIRY_DATE = ''01/01/2099'';'+CHAR(13)
 
PRINT @stat
 
 
SET  @stat='--备机'+CHAR(13)
+'USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '''+@MKPASSWORD+''';'
+'CREATE CERTIFICATE HOST_'
+@mirroriptail
+'_cert  WITH SUBJECT = ''HOST_'
+@mirroriptail
+'_certificate'','+CHAR(13)
+'START_DATE = ''09/20/2010'',EXPIRY_DATE = ''01/01/2099'';'+CHAR(13)
 
PRINT @stat
 
 
SET  @stat='--见证'+CHAR(13)
+'USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '''+@MKPASSWORD+''';'
+'CREATE CERTIFICATE HOST_'
+@witnesstail
+'_cert  WITH SUBJECT = ''HOST_'
+@witnesstail
+'_certificate'','+CHAR(13)
+'START_DATE = ''09/20/2010'',EXPIRY_DATE = ''01/01/2099'';'+CHAR(13)+CHAR(13)+CHAR(13)+CHAR(13)
 
PRINT @stat
 
-----------------------------------------------------------
 
PRINT '-- ============================================='
 
 
SET  @stat='--2、创建镜像端点,同一个实例上只能存在一个镜像端点  '+CHAR(13)
+'--主机'+CHAR(13)
+'CREATE ENDPOINT Endpoint_Mirroring 
STATE = STARTED 
AS 
TCP ( LISTENER_PORT='+@LISTENER_PORT+' , LISTENER_IP = ALL ) 
FOR 
DATABASE_MIRRORING 
( AUTHENTICATION = CERTIFICATE HOST_'
+@masteriptail
+'_cert  , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );'+CHAR(13)
 
PRINT @stat
 
SET  @stat='--备机'+CHAR(13)
+'CREATE ENDPOINT Endpoint_Mirroring 
STATE = STARTED 
AS 
TCP ( LISTENER_PORT='+@LISTENER_PORT+' , LISTENER_IP = ALL ) 
FOR 
DATABASE_MIRRORING 
( AUTHENTICATION = CERTIFICATE HOST_'
+@mirroriptail
+'_cert  , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );'+CHAR(13)
 
PRINT @stat
 
 
SET  @stat='--见证'+CHAR(13)
+'CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS
TCP ( LISTENER_PORT='+@LISTENER_PORT+' , LISTENER_IP = ALL )
FOR
DATABASE_MIRRORING
( AUTHENTICATION = CERTIFICATE HOST_'
+@witnesstail
+'_cert  , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );'+CHAR(13)+CHAR(13)+CHAR(13)
 
PRINT @stat
 
----------------------------------------------------------------------------------------
 
PRINT '-- ============================================='
 
 
SET  @stat='--3、备份证书,然后互换  '+CHAR(13)
+'--主机'+CHAR(13)
+'BACKUP CERTIFICATE HOST_'
+@masteriptail
+'_cert TO FILE = '+''''+@certpath+'\HOST_'+@masteriptail+'_cert.cer'';'+CHAR(13)
 
PRINT @stat
 
SET  @stat='--备机'+CHAR(13)
+'BACKUP CERTIFICATE HOST_'
+@mirroriptail
+'_cert TO FILE = '+''''+@certpath+'\HOST_'+@mirroriptail+'_cert.cer'';'+CHAR(13)
 
PRINT @stat
 
 
SET  @stat='--见证'+CHAR(13)
+'BACKUP CERTIFICATE HOST_'
+@witnesstail
+'_cert TO FILE = '+''''+@certpath+'\HOST_'+@witnesstail+'_cert.cer'';'+CHAR(13)+CHAR(13)+CHAR(13)
 
PRINT @stat
 
 
----------------------------------------------------------------------------------
 
PRINT '-- ============================================='
 
 
SET  @stat='--4、新增主备登陆用户  '+CHAR(13)
+'--主机'+CHAR(13)
+'CREATE LOGIN ['+@SLAVEHOST_NAME+'LoginUser] WITH PASSWORD = '''+@LOGINPWD+'''; 
CREATE USER ['+@SLAVEHOST_NAME+'User] FOR LOGIN ['+@SLAVEHOST_NAME+'LoginUser]; 
CREATE CERTIFICATE HOST_'
+@mirroriptail
+'_cert AUTHORIZATION ['+@SLAVEHOST_NAME+'User] FROM FILE ='''+@certpath+'\HOST_'+@mirroriptail+'_cert.cer'';'+CHAR(13)
+'GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO ['+@SLAVEHOST_NAME+'LoginUser];'+CHAR(13)
 
PRINT @stat
 
 
 
 
 
 
SET  @stat='CREATE LOGIN ['+@WITNESSHOST_NAME+'LoginUser] WITH PASSWORD = '''+@LOGINPWD+'''; 
CREATE USER ['+@WITNESSHOST_NAME+'User] FOR LOGIN ['+@WITNESSHOST_NAME+'LoginUser]; 
CREATE CERTIFICATE HOST_'
+@witnesstail+
+'_cert AUTHORIZATION ['+@WITNESSHOST_NAME+'User] FROM FILE ='''+@certpath+'\HOST_'+@witnesstail+'_cert.cer'';'+CHAR(13)
+'GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO ['+@WITNESSHOST_NAME+'LoginUser];'+CHAR(13)
 
PRINT @stat
 
 
 
 
 
SET  @stat='--备机'+CHAR(13)
+'CREATE LOGIN ['+@MASTERHOST_NAME+'LoginUser] WITH PASSWORD = '''+@LOGINPWD+'''; 
CREATE USER ['+@MASTERHOST_NAME+'User] FOR LOGIN ['+@MASTERHOST_NAME+'LoginUser]; 
CREATE CERTIFICATE HOST_'
+@masteriptail
+'_cert AUTHORIZATION ['+@MASTERHOST_NAME+'User] FROM FILE ='''+@certpath+'\HOST_'+@masteriptail+'_cert.cer'';'+CHAR(13)
+'GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO ['+@MASTERHOST_NAME+'LoginUser];'+CHAR(13)
 
PRINT @stat
 
 
 
SET  @stat='CREATE LOGIN ['+@WITNESSHOST_NAME+'LoginUser] WITH PASSWORD = '''+@LOGINPWD+'''; 
CREATE USER ['+@WITNESSHOST_NAME+'User] FOR LOGIN ['+@WITNESSHOST_NAME+'LoginUser]; 
CREATE CERTIFICATE HOST_'
+@witnesstail+
+'_cert AUTHORIZATION ['+@WITNESSHOST_NAME+'User] FROM FILE ='''+@certpath+'\HOST_'+@witnesstail+'_cert.cer'';'+CHAR(13)
+'GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO ['+@WITNESSHOST_NAME+'LoginUser];'+CHAR(13)
 
 
PRINT @stat
 
 
 
 
SET  @stat='--见证'+CHAR(13)
+'CREATE LOGIN ['+@MASTERHOST_NAME+'LoginUser] WITH PASSWORD = '''+@LOGINPWD+'''; 
CREATE USER ['+@MASTERHOST_NAME+'User] FOR LOGIN ['+@MASTERHOST_NAME+'LoginUser]; 
CREATE CERTIFICATE HOST_'
+@masteriptail
+'_cert AUTHORIZATION ['+@MASTERHOST_NAME+'User] FROM FILE ='''+@certpath+'\HOST_'+@masteriptail+'_cert.cer'';'+CHAR(13)
+'GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO ['+@MASTERHOST_NAME+'LoginUser];'+CHAR(13)
 
PRINT @stat
 
 
 
 
 
 
SET  @stat='CREATE LOGIN ['+@SLAVEHOST_NAME+'LoginUser] WITH PASSWORD = '''+@LOGINPWD+'''; 
CREATE USER ['+@SLAVEHOST_NAME+'User] FOR LOGIN ['+@SLAVEHOST_NAME+'LoginUser]; 
CREATE CERTIFICATE HOST_'
+@mirroriptail
+'_cert AUTHORIZATION ['+@SLAVEHOST_NAME+'User] FROM FILE ='''+@certpath+'\HOST_'+@mirroriptail+'_cert.cer'';'+CHAR(13)
+'GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO ['+@SLAVEHOST_NAME+'LoginUser];'+CHAR(13)
 
PRINT @stat
 
------------------------------------------------------------------------------
 
PRINT '-- ============================================='
 
 
 
SET  @stat='--5、各个机器都开放5022端口,并且用telnet测试5022端口是否开通 将下面三个脚本各自粘贴到bat文件里'+CHAR(13)
PRINT @stat
 
SET  @stat='echo 主库'+CHAR(13)
+'telnet '+@mirrorip+' 5022'+CHAR(13)
+'telnet '+@witness+' 5022'+CHAR(13)
+'pause'
 
PRINT @stat+CHAR(13)+CHAR(13)
 
SET  @stat='echo 镜像库'+CHAR(13)
+'telnet '+@masterip+' 5022'+CHAR(13)
+'telnet '+@witness+' 5022'+CHAR(13)
+'pause'
 
PRINT @stat+CHAR(13)+CHAR(13)
 
SET  @stat='echo 见证'+CHAR(13)
+'telnet '+@masterip+' 5022'+CHAR(13)
+'telnet '+@mirrorip+' 5022'+CHAR(13)
+'pause'
 
PRINT @stat+CHAR(13)+CHAR(13)+CHAR(13)
 
 
--------------------------------------------------------------
 
PRINT '-- ============================================='
 
 
 
SET  @stat='--6、备份数据库(完整备份+事务日志备份)在主机执行'+CHAR(13)
PRINT @stat
 
SET  @stat='DECLARE @FileName NVARCHAR(MAX)'+CHAR(13)+CHAR(13)
 
PRINT @stat
 
 
SET  @stat='--('+@DBName+'数据库完整备份)在主机执行'+CHAR(13)
+'SET @FileName = ''D:\DBBackup\'+@DBName+'_FullBackup_1.bak''
BACKUP DATABASE ['+@DBName+']
TO DISK=@FileName WITH FORMAT ,COMPRESSION'+CHAR(13)+CHAR(13)
 
PRINT @stat
 
 
SET  @stat='--('+@DBName+'数据库日志备份)在主机执行'+CHAR(13)
+'SET @FileName = ''D:\DBBackup\'+@DBName+'_logBackup_2.bak''
BACKUP LOG ['+@DBName+']
TO DISK=@FileName WITH FORMAT ,COMPRESSION'
 
PRINT @stat+CHAR(13)+CHAR(13)+CHAR(13)
 
------------------------------------------------------------------------------
 
PRINT '-- ============================================='
 
 
SET  @stat='--7、还原数据库(指定norecovery方式还原)在备机执行'+CHAR(13)
PRINT @stat
 
SET  @Restorepath1=''
 
SET @Restorepath2=@Restorepath+@DBName+'_FullBackup_1.bak'
SET @SQL = 'RESTORE FILELISTONLY  FROM DISK = '''+@Restorepath2+''''  
 
INSERT INTO #BackupFileList EXEC (@SQL);
 
 DECLARE @LNAME NVARCHAR(2000)
  DECLARE @PNAME NVARCHAR(2000)
 
 
        DECLARE CurTBName CURSOR
        FOR
            SELECT LogicalName,PhysicalName
            FROM    #BackupFileList  
 
        OPEN CurTBName
        FETCH NEXT FROM CurTBName INTO @LNAME,@PNAME
 
        WHILE @@FETCH_STATUS = 0
            BEGIN  
             SET  @Restorepath1=' MOVE N'''+@LNAME+''' TO N'''+@PNAME+''', '+CHAR(13)+@Restorepath1
 
 
                FETCH NEXT FROM CurTBName INTO  @LNAME,@PNAME
            END
        CLOSE CurTBName
        DEALLOCATE CurTBName
 
 
 
 
SET  @stat='USE [master]
RESTORE DATABASE '+@DBName+' FROM  DISK = N'''+@Restorepath+@DBName+'_FullBackup_1.bak'' WITH  FILE = 1,'+CHAR(13)
+@Restorepath1
+'NOUNLOAD,NORECOVERY,  REPLACE,  STATS = 5
GO'
 
SET  @stat='USE [master]
RESTORE LOG '+@DBName+' FROM  DISK = N'''+@Restorepath+@DBName+'_logBackup_2.bak'' WITH  FILE = 1,'+CHAR(13)
+'NOUNLOAD,NORECOVERY,  REPLACE,  STATS = 5
GO'
 
 
 
PRINT @stat+CHAR(13)+CHAR(13)
 
DROP TABLE #BackupFileList
 
--------------------------------------------------------------------------------
 
PRINT '-- ============================================='
 
 
 
SET  @stat='--8、增加镜像伙伴,需要先在备机上执行,再执行主机,镜像弄好之后,默认为事务安全等级为FULL'+CHAR(13)
PRINT @stat
 
 
 
 
SET  @stat='--备机上执行'+CHAR(13)
+'USE [master]
GO
 
ALTER DATABASE ['+@DBName+'] SET PARTNER = '''+'TCP://'+@masterip+':5022'';  --主机服务器的ip'+CHAR(13)+CHAR(13)
 
PRINT @stat
 
 
SET  @stat='--主机上执行'+CHAR(13)
+'USE [master]
GO
 
ALTER DATABASE ['+@DBName+'] SET PARTNER = '''+'TCP://'+@mirrorip+':5022'';  --镜像服务器的ip'+CHAR(13)+CHAR(13)
 
PRINT @stat
 
SET  @stat='ALTER DATABASE ['+@DBName+'] SET WITNESS = '''+'TCP://'+@witness+':5022'';  --见证服务器的ip'+CHAR(13)+CHAR(13)
 
PRINT @stat

定时备份docker内的mysql数据库并传到远程ftp服务器附脚本

2019年7月2日 没有评论

自从有了docker,也可以在此容器中使用mysql也很方便。不过备份数据库也是个麻烦事。不像原来那样备份。
以下的脚本功能是自动备份并传到远程ftp服务器,保留7天时间的文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
data_dir="/root/dbbackup"
cd /root/dbbackup/
#localhost_mysql_1为docker所在的容器名,可以自行用docker ps进行查看自己mysql所在容器名
docker exec localhost_mysql_1 mysqldump -uroot -ppassword dbname > "$data_dir/dbname_`date +%Y%m%d`.sql"
tar zcvf $data_dir/dbname_`date +%Y%m%d`.tar.gz $data_dir/dbname_`date +%Y%m%d`.sql
#删除超过七天的备份文件
find $data_dir -mtime +7 -name 'dbname_[1-9].sql' -exec rm -rf {} \;
find $data_dir -mtime +7 -name 'dbname_[1-9].tar.gz' -exec rm -rf {} \;
#以下为自动登陆ftp并传文件
ftp -n -i 123.123.123.123 <<EOF
user ftpname ftppassword
binary
lcd /www/wwwroot/ftp
prompt
mput dbname_`date +%Y%m%d`.tar.gz
close
bye !
EOF

centos7 firewall-cmd

2019年4月4日 没有评论
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
#删除端口规则
firewall-cmd --zone=public --remove-port=22/tcp --permanent
 
#查看列表规则
firewall-cmd --zone=public --list-ports
 
#开设端口
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
 
firewall-cmd --reload
systemctl enable firewalld
systemctl restart firewalld
 
#限制指定ip地址访问端口,例如ssh端口22
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.11.11" port protocol="tcp" port="22" accept"
 
#删除限制规则
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.11.11" port protocol="tcp" port="11300" accept"
 
#开通端口范围规则
firewall-cmd --permanent --add-port=1000-2000/tcp
 
#添加指定网段对ssh所用的端口访问权限
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="112.112.112.0/24" port protocol="tcp" port="22" accept"
 
#以上是一些实用新版本防火墙笔记,希望对大家有用

“流量监管”和”流量整形”的区别

2019年3月13日 没有评论

“流量监管” (Traffic Policing) 就是对流量进行控制,通过监督进入交换机端口的流量速率,对超出部分的流量进行”惩罚” (采用监管方式时是直接丢弃),使进入端口的流量被限制在一个合理的范围之内。例如可以限制HTTP报文不能占用超过50%的网络带宽,否则QoS流量监管功能可以选择丢弃报文,或重新配置报文的优先级。

“流量整形”为控制最大输出通信速率提供可能,以确保通信符合配置的最大传输速率规定。符合某种配置的通信可能被整形,以使它符合下游设备的通信速率需求,处理任何失配的数据传输速率。流量整形通常使用缓冲区和令牌桶来完成,当报文的发送速率过快时,首先在缓冲区进行缓存,在令牌桶的控制下再均匀地发送这些被缓冲的报文。当下游设备的接口速率小于上游设备的端口速率或发生突发流量时,在下游设备入端口处可能出现流量拥塞的情况。此时用户可以通过在下游设备的出端口配置流量整形将上游不规整的流量进行削峰填谷,输出一条比较平整的流量,从而解决下游设备的拥塞问题。流量整形是一种可应用于接口、子接口或队列的流量控制技术,可以对从接口上经过的所有报文或某类报文进行速率限制

流量整形和流量监管都是作用于网络边缘,对进入设备端口的流量进行的一种处理方式。它们的主要区别在于:流量监管直接丢弃不符合速率要求的报文,丢弃的报文比较多,可能引发重传;而流量整形是将不符合速率要求的报文先行缓存,当令牌桶有足够的令牌时再均匀地向外发送这些被缓存的报文,较少丢弃报文,但引入时延和抖动,需要较多的缓冲资源缓存报文 。所以这两种功能的应用领域也不尽相同,流量监管适用于对丢弃率不敏感,而对时延和抖动比较敏感的网络应用,如一些普通的话音和视频通信;流量整形适用于对时延和抖动不敏感的网络应用,如数据传输、 www 访问等 。

分类: 网络产品 标签:

修复win10 F8无法进入安全模式的方法

2019年3月1日 没有评论

windwos的操作系统中一个模式叫做安全模式,很多无法在开机时修复的故障或是设置都可以进入到安全模式中处理。小编最近在使用win10系统的时候经常会遇到这样的情况,关机重启之后按下F8按钮电脑不会有任何的反应,依旧是正常的开机,无法打开系统中的安全模式,这是什么回事呢?大家在遇到这样的故障是不用太过担心,我们使用一个命令语句就可以解决这个问题。

随后将下面的代码复制粘贴进去,然后按下回车键进行执行!

  bcdedit set {default} bootmenupolicy legac

等待系统自动执行完毕之后大家可以重新关闭电脑,此时再次使用F8按键就可以进入到安全模式中去了!PS:有的用户担心错过按下F8的机会,可以一直连续点击,这样就可以进入到提示界面了!