openresty通过lua增加随机traceid

在没有引入zipkin(或者阿里的鹰眼,百度的华佗)这种trace系统的时候,排查问题的一般思路都是按照请求链路来寻找问题源。因此如果能在请求链路中有一个唯一的标识就最好了,而在nginx/openresty做接入层的架构中,可以通过lua脚本生成一个随机traceid。

随机数的生成原理,都是先初始化一个随机数种子,由于伪随机数的特性,种子的随机性就显得格外重要,而一般种子的生成都是通过时间的倒序来选取

lua 随机数生成方法

首先我们看下通常lua的随机数生成方法

math.randomseed(tonumber(tostring(os.time()):reverse():sub(1,6)))
math.random(m,n)

通过时间字符串的逆序初始化随机种子,这里注意到有个sub函数做了截断,是因为

math.randomseed will call the underlying C function srand which takes an unsigned integer valueLua will cast the value of the seed to this format. In case of an overflow the seed will actually become a bad seed, without warning

所以需要避免出现高类型向低类型转换的溢出问题

common 方法的问题

但上面的方法有个问题,就是os.time()函数返回的是秒(10位整数), 所以在做web请求的traceid时很容易就出现重复,影响问题追踪的效率,而lua如果要以毫秒为单位的时间来初始化随机种子,需要引入socket等外部模块,对于openresty来说一般都是封装好的,不方便去做这种定制

利用openresty 与lua生成traceid

幸运的是,nginx-lua中有个函数ngx.now会返回一个浮点数(当然在lua中统一为number类型),3位小数即为毫秒位,所以问题就变得简单了

access_by_lua_block {
    math.randomseed(tonumber(tostring(ngx.now()*1000):reverse():sub(1,9)))
    local randvar = string.format("%.0f",math.random(1000000000000000000,9223372036854775807))
    ngx.req.set_header("traceid", randvar)
}

通过ngx.now()*1000拿到毫秒数据转换为字符串取反,这样毫秒数据的变化才能显出效果; unsigned int(64bit机器下为4byte) 最大值为10位数,我们取前9位避免数据溢出带来的转换问题; lua在显示大于64bit的数据时会自动用科学技术法表示,所以我们需要通过string.format函数来将其转换为19位数字,然后通过ngx.req.set_header添加到请求头中去。

samba安装及配置说明

amba是为了跨平台(windows及Linux)的文件共享而产生的网络文件系统,有了Samba,window用户可以像访问本地磁盘一样访问局域网(or 远端)Linux系统的磁盘,当然Linux用户也可以直接去访问windows系统的磁盘。

关于samba的详细介绍可以参考鸟哥的Linux 及 Samba Wiki

1、Centos samba安装与启动

我们以Linux系统安装Samba Server 为例,Samba目前的版本为4.6版本,centos用户可以直接yum install samba, 启动也十分简单,service smb start (centos6) or systemctl start smb (centos7)

2、samba 配置

yum安装完samba之后,在/etc/samba/下面有samba的配置文件,一般会有一个smb.conf.example 配置实例,里面有各个配置项的详细解释

[global]
#workgroup 配置成和windows机器的工作组相同的名字
workgroup = WORKGROUP
server string = Samba Server
#netbios name 是用来设置局域网别名(不同于hostname),如果不用nmb服务的话,这个没有用处
netbios name = tjwq024113
#这2个选项用来设置字符集,防止出现乱码(window与Linux编码通常不一样)
dos charset = cp950
unix charset = UTF8
##
ntlm auth = no
lanman auth = no
client ntlmv2 auth = yes
##日志的配置
log file = /var/log/samba/log.%m
max log size = 50
##安全模式,4.6之后没有share模式(不需要鉴权)了,因此需要设置一个密码
security = user
passdb backend = tdbsam
##局域网内的browser配置,没有多少用处
domain master = yes
local master = yes
os level = 33
preferred master = yes

####下面是共享文件夹的配置
#pan设置了共享的名称,访问的时候用\servershare来访问,而不是\serverdatasamba
[share]
#备注
comment = samba share 
#共享文件夹路径
path = /data/samba
browseable = yes
#设置客户端的写权限
writable = yes
#用于客户端新建文件(夹)的权限设置
create mask = 0664
directory mask = 0775
#需要注意这里的user必须设置成用户登录共享文件夹的用户,不要用%U,%U是客户端的用户
valid users = work
#设置是否公开,因为security设置了user 模式,所以这个配置无效了就
public = yes

然后需要创建samba用户,因为我们使用TDB数据库,所以用pdbedit来新建一个用户

$pdbedit -a -u samba  #-a add user option, -u specify a username

配置文件修改完后,需要用testparm来测试配置文件语法

然后用smbclient测试文件加可否正常访问

$testparm
$smbclient -L //server -Uwork

3、windows挂载samba共享磁盘

windows 用户想要访问Linux共享的磁盘,需要 win+R 弹出运行窗口,然后输入\server\share敲回车键,根据提示输入密码,则在网络那里就可以看到共享的磁盘了。

当然右键点击并选择映射网络驱动器的话,还可以将其挂载,这样就可以像本地磁盘一样使用了。

samba安装配置使用

samba,连接Unix阵营和Windows系统的桥梁。在类Unix系统中安装samba服务端,让windows系统像访问共享文件夹一样访问类Unix系统中的指定文件夹。

samba,桑巴舞蹈也是它呢!给一个软件起了这样性感的名字,想想是不是醉了。

有了这个小家伙,解决了我们局域网多个系统互相访问文件的大麻烦。下面是全过程。

1. 安装samba,apt-get 推荐我安装samba4.

[html] view plain copy

  • sudo apt-get install samba4

安装时遇到错误:

[plain] view plain copy

  • /var/lib/dpkg/info/samba4.postinst: 14: /var/lib/dpkg/info/samba4.postinst: /usr/share/samba/setoption.pl: Permission denied
  • dpkg: error processing samba4 (–configure):
  • subprocess installed post-installation script returned error exit status 126
  • Errors were encountered while processing:
  • samba4
  • E: Sub-process /usr/bin/dpkg returned an error code (1)

应该是我的dpkg有问题,源于上一次的apt-get upgrade中途被我人工阻断。

解决的办法是删掉/var/lib/dpkg/info这个文件夹并重新创建它。

[html] view plain copy

  • cd /var/lib/dpkg
  • sudo mv info info.bak
  • sudo mkdir info

重新install就可以了。

2. 在/home下创建文件夹用以共享

[html] view plain copy

  • home$ sudo mkdir share
  • home$ sudo chmod 777 share

创建一个文件在share文件夹中,一会用它作为访问成功与否的标志。

3. 修改smb的配置文件

之前可以先做个备份

[html] view plain copy

  • home$ sudo cp /etc/samba/smb.conf /etc/samba/smb-bk.conf
  • home$ sudo vim /etc/samba/smb.conf

找到security = user这一句,如果被注释了,就放开注释。

在其后增加一句:username map = /etc/samba/smbusers

在文件的最后增加下面语句:

[html] view plain copy

  • [Share]
  • comment = Shared Folder
  • path = /home/share
  • public = yes
  • writeable = yes
  • valid users = friend
  • create mask = 0700
  • directory mask = 0700
  • force user = nobody
  • force group = nogroup
  • available = yes
  • browseable = yes

上面设置了文件的路径和可用的用户为friend。

再搜索[global]

在workgroup = workgroup下面增加如下:

[html] view plain copy

  • display charset = UTF-8
  • unix charset = UTF-8
  • dos charset = cp936

保存并退出。

4. 增加friend账户

[html] view plain copy

  • home$ sudo useradd friend

为friend设置smb密码

[html] view plain copy

  • home$ sudo smbpasswd -a friend
  • New SMB password:
  • Retype new SMB password:
  • Added user friend.

5. 新建smbusers文件并增加一行语句

[html] view plain copy

  • home$ sudo vim /etc/samba/smbusers
  • friend = “network username”

6. 重启smbd

[plain] view plain copy

  • home$ sudo service smbd restart

查看smbd监听端口

home$ sudo netstat -tlnp | grep smb
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      5224/smbd       
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      5224/smbd   

7. 在windows中测试

命令行输入\my ip

就可以访问了。

文件共享服务Samba

介绍

SMB:Server Message Block服务器消息块,IBM发布,最早是DOS网络文件共享协议

SAMBA的功能:

  • 共享文件和打印,实现在线编辑
  • 实现登录SAMBA用户的身份认证
  • 可以进行NetBIOS名称解析
  • 外围设备共享

Samba介绍

相关包:

Samba 提供smb服务
Samba-client 客户端软件
samba-common 通用软件
cifs-utilssmb客户端工具
samba-winbind和AD相关

相关服务进程:

smbd提供smb(cifs)服务TCP:139,445
nmbdNetBIOS名称解析UDP:137,138
主配置文件:/etc/samba/smb.conf
帮助参看:man smb.conf
语法检查:testparm[-v] [/etc/samba/smb.conf]
客户端工具:smbclient,mount.cifs

Samba服务器配置

Samba服务的配置文件在/etc/samba/smb.conf里 来看一下文件的内容,包了几个部分

#全局设置:
[global]    #服务器通用或全局设置的部分

#特定共享设置:
[homes]     #用户的家目录共享
[printers]  #定义打印机资源和服务
[sharename] #自定义的共享目录配置

#在配置文件中的宏定义
宏定义:
    %m 客户端主机的NetBIOS名
    %M 客户端主机的FQDN
    %H 当前用户家目录路径
    %U 当前用户用户名
    %g 当前用户所属组
    %h samba服务器的主机名
    %L samba服务器的NetBIOS名
    %I 客户端主机的IP
    %T 当前日期和时间
    %S 可登录的用户名

#全局的服务配置
workgroup       指定工作组名称
server string   主机注释信息
netbios name    指定NetBIOS名
interfaces      指定服务侦听接口和IP
hosts allow     可用“,” ,空格,或tab分隔,默认允许所有主机访问,也可在每个共享独立配置,如在[global]设置,将应用并覆盖所有共享设置
hosts deny      拒绝指定主机访问
config file=/etc/samba/conf.d/%U    用户独立的配置文件
Log file=/var/log/samba/log.%m      不同客户机采用不同日志
max log size=50                     日志文件达到50K,将轮循rotate,单位KB
Security                            三种认证方式:
    share:  匿名(CentOS7不再支持)
    user:   samba用户(采有linux用户,samba的独立口令)
    domain:使用DC(DOMAINCONTROLLER)认证
passdb backend = tdbsam             密码数据库格式

管理samba用户

#添加samba用户
smbpasswd  -a <user>    #该用户必须是Linux内存在的系统用户,同时为用户添加账户和密码
pdbedit -a -u <user>

#修改用户密码
smbpasswd  <user>

#删除用户和密码:
smbpasswd –x <user>
pdbedit –x  –u <user>

#查看samba用户列表:
/var/lib/samba/private/passdb.tdb
pdbedit   –L –v         #查看本机的Samba账户

#查看samba服务器状态
smbstatus

设定共享目录

#每个共享目录应该有独立的[ ]部分,选项内容为
[共享名称]      远程网络看到的共享名称
comment         注释信息
path            所共享的目录路径
public          (能否匿名访问)能否被guest访问的共享,默认no,和guest ok 类似
browsable       是否允许所有用户浏览此共享,默认为yes,no为隐藏共享文件
writable=yes    可以被所有用户读写,默认为no
read only=no    和writable=yes等价,如与以上设置冲突,放在后面的设置生效,默认只读
write list      三种形式:用户,@组名,+组名,用,分隔
    如writable=no,列表中用户或组可读写,不在列表中用户只读
valid users 特定用户才能访问该共享,如为空,将允许所有用户,用户名之间用空格分隔

实现Samba文件共享

在进行操作前请确保已经安装了Samba软件包,如未安装执行如下命令yum install samba

#创建Samba共享的用户和组,并将wang用户添加至admin组中
useradd -s /sbin/nologin wang
useradd -s /sbin/nologin ymd
groupadd admin
groupmems -g admin -a wang

#设定samba用户和密码
smbpasswd -a wang
smbpasswd -a ymd

#创建共享目录
mkdir  /app/share
chgrp admin /app/share

#设定samba配置文件sma.conf
#编辑/etc/samba/smb.conf
[share]
path = /app/share       #共享文件夹的路径
write list = @admin     #可写的列表,未在列表当中的为只读

#重新启动samba服务
service smb restart

#客户端访问测试
yum -y install cifs-utils  #客户端工具包
#登录访问
[root@centos7 ~]#smbclient  //172.18.18.18/share -U wang%centos
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-41.el6]
smb: > ls
  .                                   D        0  Mon Oct 16 07:21:08 2017
  ..                                  D        0  Mon Oct 16 07:20:38 2017
  samba                               N        0  Mon Oct 16 07:21:08 2017

        40185208 blocks of size 1024. 37987148 blocks available

挂载cifs文件系统

同样也需要安装户端工具包cifs-utils,这里不再赘述

#进行手动挂载
[root@centos7 ~]#mount -o username=wang,password=centos //172.18.18.18/share /mnt/smb
#进行查看
[root@centos7 ~]#cd /mnt/smb/
[root@centos7 /mnt/smb]#ls
samba  yan.pubkey

#开机自动挂载
编辑/etc/fstab文件,可以用文件代替用户名和密码的输入
//172.18.18.18/share    /mnt/smb     cifs    credentials=/etc/smb.txt      0 0

#编辑用户密码文件
vim /etc/smb.txt
    username=wang
    password=centos

#为了防止密码泄露更改权限
chmod  600 /etc/smb.txt

多用户挂载

SAMBA共享默认只支持同时用一个用户挂载SMB共享 CentOS7中可启用多用户挂载功能客户端挂载samba共享目录后,在客户端登录的不同用户访问同一个samba的挂载点,可获得不同权限

#Samba服务器配置
vim /etc/samba/smb.conf
[smbshare]
path=/app/share
write list= @admins

#Samba服务器创建账户及设定共享目录权限,与上面创建的用户一致,这里不再进行重新创建和设置
#同时需要在客户端也需要创建相同的账号

#samba客户端启用多用户挂载

vim  /etc/smb.txt
    username=ymd
    password=centos

chmod 600 /etc/smb.txt

#以多用户的方式挂载
vim /etc/fstab
//172.18.18.18/share    /mnt/smb     cifs    multiuser,credentials=/etc/smb.txt      0 0

mount -a 

#在客户端上进行测试
#默认是以挂载时的用户进行访问的
[root@centos7 ~]#cd /mnt/smb/
[root@centos7 /mnt/smb]#touch aaa
touch: cannot touch ‘aaa’: Permission denied    #与设定的相符,ymd账号只有读 的权限

#切换成wang用户进行测试
su - wang 
cifscreds add  172.18.18.18
[wang@centos7 ~]$ cd /mnt/smb/
[wang@centos7 smb]$ touch aaa
[wang@centos7 smb]$ ls
aaa  samba  yan.pubkey                          #能够创建文件,有读写权限

多用户实现了特定的用户的特定权限

这里还要进行说明,也可以再全局设定中指定子配置文件来对不同的用户进行设定

#在global内添加如下内容
[global]
config file  = /etc/samba/conf.d/%U

#在自己指定的配置目录写创建与用户同名的子配置文件
#那么在进行指定的用户连接时就可以,读取相应的配置文件

至此Samba文件共享的服务完毕,如有错误还望批评指正,敬请谅解!

公司内部Samba 服务器架设

一、需求

在公司内部打造一个文件管理系统,其作用域仅仅在公司内部,支持在线对文件的修改和保存操作等,同时也要注意权限问题。

二、策划

目前设立四个群组:运维、开发 、测试和普通,当然所对应的对文件的访问权限也是不一致的,运维具有最高权限,其次才是开发、测试和普通

三、安装与部署

3.1 利用yum安装samba服务器

[root@localhost ~]# yum install -y samba

3.2 利用groupadd建立用户组

[root@localhost ~]# groupadd management

[root@localhost ~]# groupadd development

[root@localhost ~]# groupadd test

[root@localhost ~]# groupadd user

[root@localhost ~]#

3.3 新建用户并且指定群组

[root@localhost ~]# cat /etc/group | egrep "management|development|test|^user:"

management:x:1001:

development:x:1002:

test:x:1003:

user:x:1004:

[root@localhost ~]#

[root@localhost ~]# useradd D17040009 -g 1001

[root@localhost ~]# useradd D17040010 -g 1002

[root@localhost ~]# useradd D17040011 -g 1003

[root@localhost ~]# useradd D17040012 -g 1004

3.4 新建文件夹并且配置ACL权限

[root@localhost home]# mkdir sam

[root@localhost sam]# mkdir management development test user

[root@localhost sam]# setfacl -m g:development:rwx development/

[root@localhost sam]# setfacl -m g:management:rwx management/

[root@localhost sam]# setfacl -m g:management:rwx development/

[root@localhost sam]# setfacl -m g:management:rwx tset/

[root@localhost sam]# setfacl -m g:management:rwx test/

[root@localhost sam]# setfacl -m g:management:rwx user/

[root@localhost sam]# setfacl -m g:development:rwx test/

[root@localhost sam]# setfacl -m g:development:rwx user/

[root@localhost sam]# setfacl -m g:test:rwx test

[root@localhost sam]# setfacl -m g:test:rwx user

[root@localhost sam]# setfacl -m g:user:rwx user

3.5 修改配置文件

[root@localhost sam]# cat /etc/samba/smb.conf

# See smb.conf.example for a more detailed config file or

# read the smb.conf manpage.

# Run 'testparm' to verify the config is correct after

# you modified it.

[global]

# workgroup = SAMBA

workgroup = WORKGROUP

security = user

passdb backend = tdbsam

printing = cups

printcap name = cups

# load printers = yes

load printers = no

cups options = raw

log file = /var/log/samba/log.%m

max log size = 50

passdb backend = smbpasswd

username map = /etc/samba/smbusers

[smb]

comment = 5M1330

path = /home/sam

writable = yes

browseable = yes

available = yes

#[homes]

# comment = Home Directories

# comment = 5M1330 Directories

# path = /home/vsftpd

# admin user = root

# valid users = %S, %D%w%S

# valid user = @management,@development,@test,@user

# browseable = yes

# writable = yes

# read only = no

# inherit acls = Yes

# guest ok = no

#[printers]

# comment = All Printers

# path = /var/tmp

# printable = Yes

# create mask = 0600

# browseable = No

#[print$]

# comment = Printer Drivers

# path = /var/lib/samba/drivers

# write list = root

# create mask = 0664

# directory mask = 0775

四、测试

4.1 登陆用户:D17040009 所属组:management

未分类

4.2 登陆用户:D17040010所属组:development

未分类

4.3 登陆用户:D17040011所属组:test

未分类

4.4 登陆用户:D17040012所属组:user

未分类

五、系统维护和故障排除

5.1 无法连接samba服务器

  • 尝试ping一次查看网络能否ping通
  • 查看firewall配置
  • 重启samba服务尝试

5.2 无法创建文件

  • 查看服务器selinux配置
  • 重启samba服务尝试

5.3 新建用户并且加入群组无法访问应该访问的位置

  • 删除用户再次新建

CDNFly发布日志

2017-11-04 发布 v2.1.0版本

  • 功能:支持设置详细的缓存条件
  • 功能:支持免费的let’s encrypt https证书自动申请

2017-10-30 发布 v2.0.12版本

  • 功能:新增http2支持

2017-10-29 发布 v2.0.2版本

  • 功能:新增自动升级功能

2017-10-25 发布 v2.0.0-beta版本

  • 功能:新增多节点支持
  • 功能:支持控制面板管理反向代理网站
  • 功能:新增自动开启防cc功能
  • 功能:新增爬虫白名单
  • 功能:新增监控中心,自动对域名和节点进行监控

samba配置

由于工作需要,需要使用samba在windows下访问linux下的文件,主要是编译环境,linux下使用的是root用户,SSH登陆,而开发是在windows下,代码在windows下开发,为了开发的文件能方便共享,提高开发效率,就折腾了一下samba。

安装samba:yum install samba

开机启动:chkconfig smb on

          chkconfig smb on

samba添加root用户访问:useradd root(默认已有)

smbpasswd -a root —后面输入密码

配置samba:(主要配置)

[chen]
       comment = rogsm-build
       path = /macc/chen
       writable = yes
;       public = yes
       browseable = yes
       valid users = root 
       create mask = 0777

重启samba:service smb restart;

service nmb restart

windows下清除共享用户名和密码:net use * /delete

windows下访问共享:\xx.xx.xx.xxxx

saltstack的state.sls和state.highstate之区别

saltstack的state.sls和state.highstate之区别

state.sls默认的运行环境是base环境,但是它并不读取top.sls(top.sls定义了运行环境以及需要运行的sls)。关于state.sls的官方文档说明如下:

salt.modules.state.sls(mods, saltenv='base', test=None, exclude=None, queue=False, env=None,**kwargs)

这里saltenv指的是运行环境,默认是base环境。

state.highstate: 这个是全局的所有环境,以及所有状态都生效。它会读取每一个环境的top.sls,并且对所有sls都生效。

我只有一个base环境,这个base环境下的top.sls文件内容如下:

base:
  '*':
    - backup
    - monitor
    - sysctr
    - slowlog
    - offline
    - conf
    - statistics
    - test
    - shell
    - dbmsdba
    - dba-tools

top.sls文件并没有定义 – sync_dbconf这个sls。但是在base环境定义的目录下:

file_roots:
   base:
     - /data/dbms/salt

也就是/data/dbms/salt目录下,定义了sync_dbconf.sls文件,该sls定义是为了向minion下发特定的文件。

1)、使用state.highstate的时候

/data1/Python-2.7.4/bin/salt 'minion_xxxx' state.highstate

可以发现并没有将sync_dbconf.sls定义的文件下发到minion端

2)、使用state.sls的时候

/data1/Python-2.7.4/bin/salt 'minion_xxxx' state.sls sync_dbconf

发现可以将sync_dbconf.sls定义的文件下发到minion端

以上说明:

1、state.highstate会读取所有环境(包括base环境)的top.sls文件,并且执行top.sls文件内容里面定义的sls文件,不在top.sls文件里面记录的sls则不会被执行;

2、state.sls默认读取base环境,但是它并不会读取top.sls文件。你可以指定state.sls执行哪个sls文件,只要这个sls文件在base环境下存在;

3、state.sls也可以指定读取哪个环境:state.sls salt_env=’prod’ xxxx.sls,这个xxxx.sls可以不在top.sls中记录。

Saltstack (grains、pillar、jinja模版、haproy+keeplived)

配置内容接上篇

  • redhat6.5

  • server1 172.25.29.1 salt-master

  • server2 172.25.29.2 salt-minion haproy+keeplived

  • server3 172.25.29.3 salt-minion nginx

  • server4 172.25.29.4 salt-minion nginx

  • server5 172.25.29.5 salt-minion haproy+keeplived

做之前配置好本地解析

一、Grains

grains是minion第一次启动的时候采集的静态数据,可以用在salt的模块和其他组件中。其实grains在每次的minion启动(重启)的时候都会采集,即向master汇报一次的。

二、minion端配置grains

修改server3和server4的salt-minion,设定nginx角色

未分类

在server3和server4的/etc/salt下创建grains,内容如下

未分类

未分类

未分类

1. 测试grains的数据

未分类

未分类

2. 修改top.sls文件并推送

未分类

未分类

推送成功

未分类

三、mster端配置grains,不用重启服务

1. 在master端创建_grains文件

未分类

未分类

2. 修改server3和server4的grains或者是删除grains文件,做到不影响下面master这边的grains

未分类

未分类

未分类

3. 向server3和server4同步grains

未分类

查看server3和server4的salt缓存

未分类

未分类

4. 修改top.sls推送文件

未分类

推送成功

未分类

四、pillar用法

grain和pillar区别

(1)grains存储的是静态、不常变化的内容,pillar则相反

(2)grains是存储在minion本地,而pillar存储在master本地

(3)minion有权限操作自己的grains值,如增加、删除,但minion只能查看自己的pillar,无权修改

1. 配置pillar

修改server1上的master配置文件,开通pillar base目录,可以与grains共存

未分类

未分类

采集主机名

未分类

2. 设置不同的主机名推送安装不同的服务

未分类

未分类

未分类

3. 在pillar下创建一个新的top.sls推送文件

未分类

刷新

未分类

4. 检测和查看的相关命令

查看采集的推送项目,按照不同的主机名通过pillar下的web.sls做不同的事情

未分类

未分类

未分类

未分类

通过salt采集server3开启的服务

未分类

远程重启server3的nginx服务

未分类

将master server1上的文件群传给minion端

未分类

群查看minion的/tmp下的文件,已经传过来了

未分类

远程查看passwd文件

未分类

远程给server4安装htppd文档

未分类

远程给server4安装losf工具

未分类

五、jinja模版的使用

Jinja是基于python的模板引擎,在saltstack中我们使用yaml_jinja渲染器来根据模板生产对应的配置文件,对于不同的操作系统或者不同的情况通过jinja可以让配置文件或者操作形成一种模板的编写方式。

模版文件里面变量使用{{名称}},例如{{PORT}}
变量使用Grains:{{ grains[‘fqdn_ip4’] }}
变量使用执行模块:{{ salt‘network.hw_addr’ }}
变量使用Pillar:{{ pillar[‘apache’][‘PORT’] }}

1. jinja模版配置

以httpd下的web.sls为例,添加模版,端口,地址

未分类

未分类

2. 修改files下的httpd.conf配置文件为变量格式

未分类

未分类

3. 用jinja模版推送httpd服务

未分类

未分类

server3 httpd服务8080端口正常

未分类

六、jinja模版的另外三种实现方法

1. 方法一

未分类

在httpd.conf配置文件的最上面添加变量模块

未分类

下面的监听端口上按python的方式取值

未分类

在files下面新建 vim lib.sls

未分类

将之前的web.sls里的template下面注释掉

未分类

用jinja模版给server3推送httpd服务

未分类

未分类

2. 方法二

将httpd.conf里刚才上面写的删除,因为会与下面的这个方法冲突

未分类

监听端口修改为下图所示

未分类

将web.sls文件修改为以下设置

未分类

vim lib.sls

未分类

未分类

3. 方法三:使用pillar

进入到pillar的base目录下

未分类

(1)配置文件第一种写法

未分类

vim httpd.conf

未分类

(2)配置文件第二种写法

未分类

vim httpd.conf

未分类

推送

未分类

salt server4 state.sls httpd.web

未分类

七、salt自动化推送keepalived+nginx

1. 配置keepalived salt文件

未分类

vim keepalived.conf,添加vip

未分类

vim install.sls

未分类

未分类

vim service.sls

未分类

单击keepalived推送成功

2. 由于keepalived高可用,主备的配置文件不一样,需要添加jinja模版

未分类

在install.sls里添加jinja模版

未分类

keepalived.conf里的state和priority写成变量

未分类

3.新添加一台虚拟机server5做keepalived的高可用

未分类

将server5加入到salt-key

未分类

未分类

4. 修改top.sls文件并推送

未分类

5. 查看推送结果

haproy+keeplived正常启动,vip在主上

未分类

将主server2上的keepalived关闭,服务到备server5上

未分类

负载均衡haproxy正常

未分类

未分类

CDNFly防CC规则介绍

术语

  • 匹配器: 用来匹配用户的请求,可以匹配用户IP,Host,req_uri(带参数),uri(不带参数),user_agent和referer。一个匹配器可以有多个匹配项,添加多个匹配项时,此匹配器所有的匹配项都满足时,这个匹配器才为真。
  • 过滤器: 用来过滤用户请求,过滤器类型有req_rate(限制请求速率),js_jump(返回js跳转代码验证),temp_redirect(返回302跳转验证),cookie(返回cookie验证),captcha(返回验证码验证),slide(返回滑动条验证)。
  • 动作: 当请求无法通过过滤器时,执行相应的动作。动作包括iptables(使用iptables封锁请求),captcha(返回验证码验证,如果多次验证失败,则使用iptables封锁),slide(返回滑动条验证,当多次验证失败,则使用iptables封锁),exit_code(返回如403状态码)。
  • 规则组: 包含多个规则,按顺序应用规则,当请求应用了一个规则后,不再应用余下的规则。
  • 规则: 包含匹配器,过滤器和动作。

原理

用户预置了多个规则组,其中一个规则组设置为默认。规则组有多条规则。
执行流程
– CDNFly首先查看用户是否有设置rule_name变量,如果有,则使用此变量指向的规则组名称,否则使用默认的规则组
– 遍历此规则组的规则。取出一条规则,使用此规则中的匹配器匹配请求,如果匹配失败,继续取下一条规则
– 如果匹配器匹配成功,检查此IP是否在黑名单,如果在,执行此规则中的动作。否则,使用此规则的过滤器验证一次请求,当验证失败达到一定次数时,把此IP加入到黑名单。