搭建一个局域网http的yum源


1. 先创建一个目录,作为存在rpm包的目录
mkdir /data/yumdata
2. 拷贝ISO镜像文件中的rpm包到/data/yumdata/
mount /dev/cdrom /mnt/
cp /mnt/Packages/*rpm /data/yumdata
【小常识】 可以在/data/yumdata/下面创建子目录,然后把rpm包放到子目录下面,也可以被识别到
3. 创建repository
createrepo /data/yumdata/
如果rpm包有增加,需要执行
createrepo --update /data/yumdata/
4. 安装nginx,提供http服务
yum install epel-release
yum install nginx
当然,如果无法使用yum,需要下载nginx源码包,并编译安装
配置nginx.conf,使其可以通过IP地址访问到/data/yumdata
参考配置文件:
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /data/yumdata;

        location / {
            autoindex on;  //这一步必须要有,这是为了提供目录浏览
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
5. 客户端上配置repo文件
cd /etc/yum.repos.d
mkdir bak
mv *.rep  bak/  //把系统自带的repo挪走
vim my.repo //内容如下
[aming]
name=myserver
baseurl=http://192.168.133.140
gpgcheck=0
enabled=1
6.  做一个镜像yum源
比如可以把系统默认的源给镜像到局域网来,思路是用rsync工具把远程的rpm包同步到这台局域网的对应目录下即可。
rsync -av rsync://mirrors.ustc.edu.cn/centos/7/os/x86_64/Packages/  /data/yumdata/
7. 当局域网的rpm库有更新时,除了服务端执行“createrepo  –update /data/yumdata/”外,客户端上也需要执行
yum  clean all   //删除缓存

Nginx代理tomcat https跳转到http


问题

网站采用了 Nginx 反向代理 Tomcat 的方式来负载均衡。

Nginx使用https,默认端口443。Tomcat使用http,端口8080

结果今天后台操作停留时间过长session超时后,跳转到登录页面时出现无法访问错误。如图:

http_error

分析

可以看到,出错的原因应该是跳转的时候加上了web默认80端口,而https默认的端口并不是80,所以导致无法访问。

后台无session时跳转代码:

  1. requestURL = HttpUtils.encodeUrl(requestURL);
  2. String path = request.getContextPath();
  3. String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path
  4. + "/";
  5. return basePath + "user/login?goUrl=" + requestURL;

代码跳转的是绝对路径,包括schema和port,问题应该就在这里。

经过调试发现获取到的request.getScheme()总是http而非实际的https,相应的request.getServerPort()也就成了80。

端口是80而非Tomcat本身的8080说明获取到的确实是nginx转发过来的请求,那schema为什么得不到呢?

解决

通过查找资料,发现nginx请求转发时必须设置proxy_set_header才能让被代理的tomcat获取到正确的客户端ip等信息。

但是之前已经设置过nginx的proxy_set_header,而获取ip等也毫无问题:

  1. proxy_set_header X-Real-IP $remote_addr;
  2. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  3. proxy_set_header Host $http_host;
  4. proxy_set_header X-Forwarded-Proto $scheme;
  5. proxy_redirect http:// $scheme://;
  6. proxy_pass http://localhost:8080;#转向tomcat处理

上面有一行设置了proxy_redirect,所以浏览器地址栏的schema仍然是https.

接着查找资料,发现要传递schema,在Tomcat端也需要相应配置。

  1. <Engine>
  2. <Valve className="org.apache.catalina.valves.RemoteIpValve"
  3. remoteIpHeader="X-Forwarded-For"
  4. protocolHeader="X-Forwarded-Proto"
  5. protocolHeaderHttpsValue="https"/>
  6. </Engine >

加上后,重启Tomcat,一切正常了!

你不知道的vim小秘密


大家先了解一些背景知识:

1) 给文件增加了i权限,那文件不能被更改,不能删除,也不能修改名字以及权限。

2) 给文件增加a权限,文件可以追加内容,不能删除,不能修改内容,不能修改名字以及权限。

3) vim一个文件,如果不正常退出,再次编辑时是会提示一些信息的,并且有一个隐藏的文件.xxx.swp

了解以上知识后,再来看下面的现象:

1) 如果给一个文件增加a权限,用vim编辑文件,增加内容(注意是在文件末尾增加内容,不要修改其他内容),并不会成功。

2) 如果给一个目录增加i权限或者a权限,在该目录下面vim一个文件,更改文件内容可以正常保存。

既然a权限可以追加内容,那为何vim一个文件在末尾增加内容不能成功?既然i权限不能修改,那为何在目录里面变更文件内容却可以成功?

关于这两点,你有没有疑惑?下面我们来分析原因。

先不管i或者a权限,在一个没有i或者a权限的目录下,编辑一个没有i或者a权限的文件,用strace来查看其执行过程。

mkdir /tmp/test

strace vim /tmp/test/aminglinux.txt 2>/tmp/vim.log

写入一个数字1,然后保存退出。再来查看vim.log的内容。

less /tmp/vim.log

大部分内容你不用关心,只需要看这几行:

stat(“/tmp/test/aminglinux.txt”, 0x7fff072ecb10) = -1 ENOENT (No such file or directory)

access(“/tmp/test/aminglinux.txt”, W_OK) = -1 ENOENT (No such file or directory)

open(“/tmp/test/aminglinux.txt”, O_RDONLY) = -1 ENOENT (No such file or directory)

readlink(“/tmp/test/aminglinux.txt”, 0x7fff072eb360, 4095) = -1 ENOENT (No such file or directory)

open(“/tmp/test/.aminglinux.txt.swp”, O_RDONLY) = -1 ENOENT (No such file or directory)

open(“/tmp/test/.aminglinux.txt.swp”, O_RDWR|O_CREAT|O_EXCL, 0600) = 3

open(“/tmp/test/.aminglinux.txt.swx”, O_RDONLY) = -1 ENOENT (No such file or directory)

open(“/tmp/test/.aminglinux.txt.swx”, O_RDWR|O_CREAT|O_EXCL, 0600) = 4

unlink(“/tmp/test/.aminglinux.txt.swx”) = 0

unlink(“/tmp/test/.aminglinux.txt.swp”) = 0

stat(“/tmp/test/.aminglinux.txt.swp”, 0x7fff072ec310) = -1 ENOENT (No such file or directory)

lstat(“/tmp/test/.aminglinux.txt.swp”, 0x7fff072ec3e0) = -1 ENOENT (No such file or directory)

lstat(“/tmp/test/.aminglinux.txt.swp”, 0x7fff072ec8a0) = -1 ENOENT (No such file or directory)

open(“/tmp/test/.aminglinux.txt.swp”, O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW, 0600) = 3

stat(“/tmp/test/aminglinux.txt”, 0x7fff072eac40) = -1 ENOENT (No such file or directory)

stat(“/tmp/test/aminglinux.txt”, 0x7fff072ebe20) = -1 ENOENT (No such file or directory)

stat(“/tmp/test/aminglinux.txt”, 0x7fff072eadf0) = -1 ENOENT (No such file or directory)

write(1, “\”/tmp/test/aminglinux.txt\””, 26) = 26

stat(“/tmp/test/aminglinux.txt”, 0x7fff072ec050) = -1 ENOENT (No such file or directory)

open(“/tmp/test/aminglinux.txt”, O_WRONLY|O_CREAT|O_TRUNC, 0666) = 4

stat(“/tmp/test/aminglinux.txt”, {st_mode=S_IFREG|0644, st_size=2, …}) = 0

stat(“/tmp/test/aminglinux.txt”, {st_mode=S_IFREG|0644, st_size=2, …}) = 0

unlink(“/tmp/test/.aminglinux.txt.swp”) = 0

看起来乱乱的,其实大概的过程就是vim  /tmp/test/aminglinux.txt时,先看有没有.aminglinux.txt.swp以及.aminglinux.txt.swx,因为这两个文件就是vim产生的临时文件,swp先产生,如果swp存在就产生第二个swx。写入的内容先存到swp里,当保存退出vim时,再把swp的内容存到aminglinux.txt里,最后删除掉swp文件。

有了这个认识之后,我们再来分析上面提到的现象1。如果文件给了a权限,那么在编辑该文件时,会产生swp文件,当保存退出时,swp文件内容会写入该文件,这相当于更改该文件,很线上a权限是不允许的。

再来分析现象2,按照我们的推测,如果目录给了a权限,增加文件没问题,也就是说产生swp或者swx文件没有问题,当然把swp或者swx内容写入到文件里时也不会有问题,但swp或者swx文件却不会被删除了,所以再次编辑文件时就会提示临时文件已经存在了。但这并不会影响修改文件内容。

如果给目录设置了i权限的话,vim编辑文件,要产生swp或swx肯定会出错啊,但为何依然能正常编辑文件? 下面继续用strace来分析一下。

chattr +i  /tmp/test

strace vim /tmp/test/aminglinux.txt 2> /tmp/vim.log

看vim.log里面和aminglinux.txt相关的信息

stat(“/tmp/test/aminglinux.txt”, {st_mode=S_IFREG|0644, st_size=4, …}) = 0

stat(“/tmp/test/aminglinux.txt”, {st_mode=S_IFREG|0644, st_size=4, …}) = 0

stat(“/tmp/test/aminglinux.txt”, {st_mode=S_IFREG|0644, st_size=4, …}) = 0

stat(“/tmp/test/aminglinux.txt”, {st_mode=S_IFREG|0644, st_size=4, …}) = 0

access(“/tmp/test/aminglinux.txt”, W_OK) = 0

open(“/tmp/test/aminglinux.txt”, O_RDONLY) = 3

readlink(“/tmp/test/aminglinux.txt”, 0x7fff49efc6f0, 4095) = -1 EINVAL (Invalid argument)

open(“/tmp/test/.aminglinux.txt.swp”, O_RDONLY) = -1 ENOENT (No such file or directory)

open(“/tmp/test/.aminglinux.txt.swp”, O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)

stat(“/tmp/test/.aminglinux.txt.swp”, 0x7fff49efd6a0) = -1 ENOENT (No such file or directory)

lstat(“/tmp/test/.aminglinux.txt.swp”, 0x7fff49efd770) = -1 ENOENT (No such file or directory)

lstat(“/tmp/test/.aminglinux.txt.swp”, 0x7fff49efdc30) = -1 ENOENT (No such file or directory)

open(“/tmp/test/.aminglinux.txt.swp”, O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW, 0600) = -1 EACCES (Permission denied)

readlink(“/tmp/test/aminglinux.txt”, 0x7fff49efc6f0, 4095) = -1 EINVAL (Invalid argument)

open(“/root/tmp/aminglinux.txt.swp”, O_RDONLY) = -1 ENOTDIR (Not a directory)

open(“/root/tmp/aminglinux.txt.swp”, O_RDWR|O_CREAT|O_EXCL, 0600) = -1 ENOTDIR (Not a directory)

stat(“/root/tmp/aminglinux.txt.swp”, 0x7fff49efd6a0) = -1 ENOTDIR (Not a directory)

lstat(“/root/tmp/aminglinux.txt.swp”, 0x7fff49efd770) = -1 ENOTDIR (Not a directory)

lstat(“/root/tmp/aminglinux.txt.swp”, 0x7fff49efdc30) = -1 ENOTDIR (Not a directory)

open(“/root/tmp/aminglinux.txt.swp”, O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW, 0600) = -1 ENOTDIR (Not a directory)

readlink(“/tmp/test/aminglinux.txt”, 0x7fff49efc6f0, 4095) = -1 EINVAL (Invalid argument)

open(“/var/tmp/aminglinux.txt.swp”, O_RDONLY) = -1 ENOENT (No such file or directory)

open(“/var/tmp/aminglinux.txt.swp”, O_RDWR|O_CREAT|O_EXCL, 0600) = 4

open(“/var/tmp/aminglinux.txt.swx”, O_RDONLY) = -1 ENOENT (No such file or directory)

open(“/var/tmp/aminglinux.txt.swx”, O_RDWR|O_CREAT|O_EXCL, 0600) = 5

unlink(“/var/tmp/aminglinux.txt.swx”)   = 0

unlink(“/var/tmp/aminglinux.txt.swp”)   = 0

stat(“/var/tmp/aminglinux.txt.swp”, 0x7fff49efd6a0) = -1 ENOENT (No such file or directory)

lstat(“/var/tmp/aminglinux.txt.swp”, 0x7fff49efd770) = -1 ENOENT (No such file or directory)

lstat(“/var/tmp/aminglinux.txt.swp”, 0x7fff49efdc30) = -1 ENOENT (No such file or directory)

open(“/var/tmp/aminglinux.txt.swp”, O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW, 0600) = 4

chmod(“/var/tmp/aminglinux.txt.swp”, 0644) = 0

open(“/tmp/test/aminglinux.txt”, O_RDONLY) = 3

stat(“/tmp/test/aminglinux.txt”, {st_mode=S_IFREG|0644, st_size=4, …}) = 0

stat(“/tmp/test/aminglinux.txt”, {st_mode=S_IFREG|0644, st_size=4, …}) = 0

stat(“/tmp/test/aminglinux.txt”, {st_mode=S_IFREG|0644, st_size=4, …}) = 0

access(“/tmp/test/aminglinux.txt”, W_OK) = 0

write(1, “\”aminglinux.txt\””, 16)      = 16

stat(“aminglinux.txt”, {st_mode=S_IFREG|0644, st_size=4, …}) = 0

access(“aminglinux.txt”, W_OK)          = 0

getxattr(“aminglinux.txt”, “system.posix_acl_access”, 0x7fff49efd050, 132) = -1 ENODATA (No data available)

stat(“aminglinux.txt”, {st_mode=S_IFREG|0644, st_size=4, …}) = 0

open(“aminglinux.txt”, O_WRONLY|O_CREAT|O_TRUNC, 0644) = 3

chmod(“aminglinux.txt”, 0100644)        = 0

setxattr(“aminglinux.txt”, “system.posix_acl_access”, “\x02\x00\x00\x00\x01\x00\x06\x00\xff\xff\xff\xff\x04\x00\x04\x00\xff\xff\xff\xff \x00\x04\x00\xff\xff\xff\xff”, 28, 0) = 0

stat(“/tmp/test/aminglinux.txt”, {st_mode=S_IFREG|0644, st_size=6, …}) = 0

unlink(“/var/tmp/aminglinux.txt.swp”)   = 0

我相信你可以看到Permission denied的提示,这是因为当前目录有i权限,不能增加文件,也就不能在当前目录下生成临时文件。当然,vim如果遇到这样的问题,它还是会“曲线救国”的,于是先找/root/tmp/,但是并没有该目录,只好继续找/var/tmp/,这个目录存在,所以就在这个目录里生成了临时文件(并不是隐藏的)。后面的操作就不用多说了。

既然vim可以在/var/tmp/下生成临时文件,自然也可以在已经设置了i权限的目录里编辑文件的,这样现象2也解释通了。上面罗嗦了这么多,其实我就想表达如下观点:

vim编辑文件时,会在该文件所在目录生成临时隐藏文件.swp和.swx,如果那目录不可写就会到/root/tmp/下或者/var/tmp/下生成临时文件(非隐藏),当编辑的文件保存后,临时文件删除。

这个命令你看得懂么


直接上命令

history 1 | { read x cmd; echo “$cmd”; }

对于read命令的了解,仅限于在shell脚本中使用read -p,对于这种用法从来没用过,更不知道它的含义。

今天抽空琢磨了一下,终于搞明白了来龙去脉。先来写几个命令吧:

# read a b c

1 2 3

# echo $a

1

# echo $b

2

# echo $c

3

# read x y

1 2 3

# echo $x

1

# echo $y

2 3

到这,也许你似乎看出一些门道了。read命令,后面跟的是变量名,可以是1个,也可以是多个,用空格分隔。回车后,输入的字符就是在给这些变量赋值,输入的字符串也需要用空格分隔,如果和上面的变量名一个一个地对应,那么这样就一个一个地赋值了。

如果没有对应呢?通过上面的命令也可以发现,如果值比变量多,它只对应前面的。例如,变量只有x和y,而值是1 2 3,则它把x赋值1,后面的2 3一股脑赋值给最后面的变量y。

再来一个例子吧。

# echo 1 2 3 4 5|read a b c

# echo $a

1

# echo $b

2

# echo $c

3 4 5

再回头看这条命令:

history 1 | { read x cmd; echo “$cmd”; }

管道前面,history 1表示取最后一条命令。管道后面'{ }’内是一整体,相当于一个函数,函数里面可以有多条命令,用分号分割,而且最后一条命令也必须加分号。第一条命令和'{‘之间必须要有空格。

成功转型并不是没有原因


很早之前在网上搜索linux找到了铭哥的论坛,当时也下载了铭哥分享的课程视频,并照着视频自学了一遍,将所有实验都做了一遍,距离找工作可能也还差点。

就这样过了几个月,工作上不是特别忙了,下定决心转行做专职运维,报名阿铭linux vip课程学习。

和自学相比,有一群小伙伴和你一起学习明显感觉不一样,有不明白的地方可以及时相互讨论解决,更重要的是每天都有安排学习任务,不及时的学习就落后其他同学了,特别是在职平时可能要加会儿班,只能用周末的时间来追上学习进度。

回想那会儿,真有点入魔的感觉,每天下班回来吃完饭,就开始边看视频边做笔记边实验,经常都是十二点多睡,遇到故障排错可能就得凌晨一两点才睡,上下班路上拿出笔记复习,仿佛回到了高考。

下面说说找工作的经历:刚开始投简历出去都没有什么反应,赶紧找铭哥看看是不简历写的有问题,相对来说二、三线城市职位机会少一些,找工作真得有点耐心才行。

参加的所有面试中虽然有笔试的很少,但还是建议看看面试宝典上的试题,特别是脚本、如何看待运维、运维工作内容、处理过的重大故障等,都可以在宝典上找到非常好的答案。

脚本平时一定要多练,至少要掌握思路,有的面试官会直接让你写脚本。对于简历上提到的技术点一定要非常了解,陆陆续续的面试中不断总结再回去看笔记或者动手配置,加深印象,不至于陌生。

另外,几乎没有面试者可以百分之百匹配企业岗位,所以面试中展现自己的学习能力非常重要。

最近入职运维工程师了,算是跨入运维行业了,感谢铭哥带我转行,也感谢自己3个月的付出,越努力,越幸运!祝愿大家都能找到满意的工作。

从野路子转型为专业的Linux运维


之所以这么说,是因为在现在的公司干的比较杂,感觉不算是专业的运维,虽然接触到Linux也比较长的时间了。

先简单说下自己的情况,我是从开发转过来的,因为开发做的时间也不长,由于公司职位的变动,后续阴差阳错的就开始了公司的杂七杂八的系统运维的工作,后期在Aming Linux学些了一段时间,刚开始是想找运维开发的工作,可是运维开发的经验几乎没有,于是在铭哥的建议下,找运维的工作,最后找到的工作后期要整自动化的开发,看来要好好恶补python了。

仔细算下来,接触到 IT 行业已经3年整了,在 dz 公司也默默无闻地待了三年。无论是做开发还是系统运维,都没有哪样能拿得出手的。从去年 11 月份开始正式开始准备学习Linux的各种,主要是通过阿铭Linux来学习系统运维、架构等,到现在也该结束这段旅程了。

写这些东西主要是对这段时间的面试做下总结。说来也不怕大伙笑话,从开始面试到现在,总共面试了五家公司,给 offer 的公司只有一家(囧),也就是现在将要入职的这家公司。

第一家是自如租房的,面试岗位是 Linux 运维工程师,刚开始直接面试结束,谈了挺长时间技术,个人感觉本次面试发挥的还好,面试官比较年轻,问的也不是很深,谈的比较融洽。

问完技术了,他向总监汇报后,看了我的学历是大专,就和我说了他们公司至少要得是本科以上学历,我擦,人事早干啥去了,灰头土脸的就回去了。

第二家公司便是大名鼎鼎的罗胖的公司,没错是罗辑思维,绝对是慕名而去的,大概看了下公司的招聘要求,是招运维开发的,自认为懂点开发和 Python 就不自量力的去面试了。

又是一通打击,面试官是俩人,三十多岁,也算比较亲和,第一句话就说我写的简历太罗嗦,没有重点,给提了些建议。接着开始面试,简历上写的Linux运维开发的经验非常少,自然而然得被强烈鄙视了一把,聊了几分钟就over了,送我走了,不过也有收获,临走还照了张大厅的logo。

第三家是面试的公司名字似乎是叫云校。公司做的是幼儿教育培训的,岗位是Linux高级运维工程师。面试我的是一个中年老男,秃顶,不知道是不是大牛,但至少经历了很多的人。

面试很有重点,awk,sed,grep的询问,当时他说的是三个字母的缩写,根本没想到是是说的这三剑客啊;问了keepalived的原理,vrrp的原理,kvm虚拟化的原理,vlan的含义,大概在看的你也能知道结局有多悲惨了。

当然还问了其它的好多内在底层的东西,给了个评价:我们这是招聘高级运维的,我这也顶多能算个初级的运维吧,还劝我不要做运维了,还是老老实实去做C开发吧。本来纠结的情绪又被他浇了一把火。

第四家是在中关村 E 世界,公司名称是时速云,做 docker 云计算的,冒冒失失的就去了。刚开始面试我的是个老手,问了好多 MySQL的技术,主从的各种问题,虽然有答不上来的问题,但整体回答的还算可以。

不巧,面试官接到了个电话走了,来了个年轻小伙,问了我有没有IDC运维经验,说白了就是问在机房有上架过服务器设备,果断回答没有,然后就没然后了,被打发走了。悲惨呢,还是中午没吃饭去面试的,擦。

第五家,最后一家,也是前天给了 offer 的一家公司,公司名字就不说了,是门户网站的。这次其实面试的时候也没有多大的信心,经过5轮面试官的面试,终于通过了最后的面试,在前天给发了 offer。

其实也没有写多少关于面试中的技术点,就是记录一下流水账,记录自己的面试的几次经历。但是也有收获,对面试也有了新的认识和总结。

1、写好简历,弄懂简历上写的每一条内容。

2、简历内容最好是真实的,如果没有经验,也要事先想好怎么说。

3、准备好自我介绍,感觉这点也很重要。不要指望在面试临场发挥,准备好多个自我介绍的版本,针对不同公司介绍不同的版本。

4、每一项技术点都要弄明白,我说的是你简历上写的专业技能,不能给自己挖坑,比如说精通虚拟化,精通TCP/IP,除非你真的会。

5、如果面试官和你侃侃而谈,而且说的与技术无关的话题,这时候你就要小心了,我就掉过坑了。

6、最好自己整一个个人博客,算是个加分项。

7、即使你没有经验,也要在平时积累点小项目,网上搜罗点小项目,多熟悉练习,成为自己的东西,可以当做自己的实践经验。

8、这点不算,准备想好自己公司的系统架构,即使没有也要编一个出来,参考铭哥论坛上给的一个股票网站的架构。

9、要有自信,其实其它面试的也很菜。

10、总之一句话: 准备 + 总结。

最后说下自己的薪资,16k*12,外加点绩效奖金,不过公司还行,先做一段时间历练历练。先就写这么多吧,上边都写了公司名字,不知道好不好。在这里祝各位暂时还没有找到工作的师兄弟早日找到自己理想的工作。

这个零基础很牛x


我是17年5月左右报名咱们的课程,0基础没有任何经验!

我是一名网管,工作在一家外资企业,虽说薪资待遇在同行看来还算可以,但是安逸和没有任何技术含量的工作让我感觉到岌岌可危!年初离开家,再次来到这个陌生的城市,每次离家出走父母都特别难受(各种叮嘱,各种吧家里好吃的都让我带着),(我母亲尤其是不容易,培养我们两个大学生,每次工作回家都腰疼的不行不舍得花钱去看下!我真的很愧对我的父母!)

毕竟一年也就见面个那么一两次,每次来到这边我都恨我自己为什么别人都可以拿高薪?为什么别人都可以买房子?为什么别人都可以把父母接过来享福?别人可以我也可以!我宁愿拼死在路上,也不愿安逸在现实生活中!

原本以为凭着一口流利的英语和也就那么回事的网管技术,找个1w左右的网管继续干干应该还可以吧,就这样开始各种找,各种投!一天两天一周过去了,仍然没有任何音讯。

之前企业招聘帮我找个小弟,看到很多人投给我的简历,我深有感慨:32,35,最大的38岁我可以理解,可能就是想混混日子吧才要个8k,苏州8k 接近40岁,你打算月月吃土吗?你对得起你的老婆孩子吗?哪些32-35岁的,你们怎么想的?6-8k。。。我真不忍心把他们招过来耽误他们(估计是看重欧美外资了吧)。。

时间来到了4月,我本打算再次学习学习服务器之类的专业,等我再次去网上投投简历(最主要的是看招聘要求),想确认一个方向,只要筛选1w左右的,几乎都是需要会Linux。一不干二不休,周末就去图书馆(我一直坚持到现在,每周都去图书馆)借了几本书。

我算是比较幸运就此开始接触铭哥,那本“让小白和女友都可以学会的linux教程”深深地刺激了我,小白不就是我么。开始学了一个多月吧,一直看到正则。开始有压力,同时也遇到了大家相同的问题,学着后面的忘了前面的,尤其是正则那部分,几乎全部是我凭脑袋死记硬背的!“学习不得法,累死也白搭!”~

时间就这么来到了5月,打算报铭哥的课程,我每月5.2k的房贷。真剩不下多少钱可以再次报名了,可能大家都是一次性付款的,我选择了贷款!因为我知道,未来的我一定会感谢现在的冲动!

顺利加入23期大家庭!铭哥,我不多说了,非常非常的负责任,为了专心培养我们舍弃了腾讯年薪40w的薪资,各种想法设法的搞在线考试系统,联系有条件的同学组成各个“架构组”,我真心的感觉到了我找对地方了。

学习了算是6个月吧,自己的坚持不舍,终究还是还来的一份完美的结果,我第一份真的只是打算去被虐下,让自己知道自己的不足之处,就真的把我要了。

1w转正!我认为在苏州这个薪资还算可以,最起码我算是真正的入门了。

重点是面试的内容,我已经在群内分享了我写的简历。一定要把自己挖的坑填上,一定要把自己挖的坑填上,一定要把自己挖的坑填上。我自己面试自己至少不下于10次吧,我自己也整理了好几套我们所学的架构的原理,优缺点,性能调优等等,不要求你全会,面试的时候总能说上几句吧?

其实我这几天又面试了两家。都给我了offer,昨天的甚至说的现在可以签合同不,薪资1.5w(五险一金全部按照最低来)12个开发(8个java+4个php)线上商城,我面试之后他直接说,嗯你非常适合我们这个职位,经过你说完,我感觉我们线上的这些服务都是单点?

我不想签的原因是(未来就我一个人,而且又TM(允许我使用一次tm)兼职IT的工作!也就是来个人你还得装系统)我tm想想都恶心,装系统,装你妹哇装。。。

三家面试的路子全部都是按照我简历所写来的。小伙伴们,再次提醒,自己挖的坑,埋不上就别去送死!还有三家我全部都让我画了我们公司的架构图!所以面试前一定也要准备好,万无一失,多想想自己的简历是不是还有没有想到的地方?你觉得你还会有压力么?

时光飞逝转眼下年我28,求时光慢些,饶了我那含辛茹苦的父母,拼死3年争取30岁能对得起我自己在家辛苦的父母!时光不老,23期永远不散,我永远都在23期!

iptables,netfilter,firewalld关系


在centos6上,我们用的是iptables服务,而在centos7上,我们用的是firewalld服务。同样的,centos6上安装的是iptables包,而centos7上安装的是firewalld包。

不管是centos6还是centos7,核心其实都是netfilter,netfilter是linux的一个内核模块,iptables命令是linux内核自带的。

centos6上的iptables服务和centos7上的firewalld服务,其实都是用来定义防火墙规则功能的防火墙管理工具。它们都是将定义好的规则交由内核中的netfilter即网络过滤器来读取,从而真正实现防火墙功能,所以其实在配置规则的思路上是完全一致的。

12期老油条曾经走过的路


04年初中未毕业跟着家人从重庆来到广州,干过工厂,发廊,销售,工地,做过兼职,餐厅,酒吧,网吧等等大大小小很多工作。

11年2月到12年2北大青鸟学习IT,第一次接触到Linux,喜欢上了,但是由于中间各种原因没有包括自己当时没给自己做好规划,没有做到这方面的工作,北大青鸟毕业后,在一家IT公司做了三年的电话客服。

15年4月回去重庆发展,不理想,又想起学习东西,来来回回想了很多,中间各种波折,再次选择Linux,通过网络了解很多选择了铭哥。

15年10月中加了铭哥企鹅,拿到一套视频看了后,觉得很合适初级的人学习,于27日报名。

15年12月中旬开始投简历,说实话,本人比较贪玩,包括12期的同学都知道,shell 我不会,脚本我不会,学完lamp果断投简历开始面试。当时想法就是:从面试中去学习,看看那些公司是怎么招聘,看看他们是怎么出面试题,看看他们面试的问题,看看他们给我们的提问。

可能运气比较好,26日面试到一家监控工程师,试用期4.8,转正5.5。当时没想那么多,元旦后正式开始工作,当时想法是以为真的是zabbix这块,去到后才发现,我的工作范围是:每天看着监控服务器zabbix的报错,过滤掉一些邮件和不关紧要的报警邮件。然后就没有其他事情了。

前面说过,当时我比较贪玩,工作后基本就没怎么学习,导致了后面一系列的事情发生。

我记得很清楚,3月底的时候,因为交接工作的时候没有留意,背了黑锅被辞退。

16年4月再次面试一份外包的实施运维,给电信联通做电子发票系统的工作,长期在电信联通工作。工作很简单,服务器上架,环境部署(部署按照文档来操作就可以),部署好后,等着联通电信测试,有问题就看看,没问题就在电信联通无所事事,在这样的情况下,我误入了企图。

在5月到10月初我走入了网赌的道路,学习更没心态。穷到吃不起饭,交不起房租,到处欠账。看到这里各位希望路要走正,堂堂正正的走。

同年的12月在被逼无奈的情况下,返回广州家人身边重新开始工作。

由于之前将近大半年的时间没有学习,回到广州后,面试路上各种碰灰,只有在写面试卷子时候偷偷看手机,面对面试官,只有选择忽悠,和靠自己的真诚去面试。

在连续一周的面试后,15日去了一家公司,当时面试运维,考卷什么的都还OK,比较简单,结果去到上班后发现运维的工作比较少,真的很少,平时就在办公室打机。

浑浑噩噩的3个月想了很多,我有赌债要还,我以后还要家庭,要还我朋友的人情,不想被人看不起。

2月开始就开始从零开始学习。同时将我的简历修改,去掉一些根本没学习的东西,想来好笑简历中我写的很漂亮,什么reids python 虚拟化等等一些根本没接触到的东西写了一大堆,导致前面面试几家公司有两家说我不真诚。回去后开始修改简历,并咨询我做人事的朋友,取消不会的,写上自己会的,和自己的人生规划。

3月中旬重新投简历,面试了大概5家公司,3家通过,一家因为我初中学习没过,另外两家,都要求我去工作,两家的工资都是6K,试用期4.8。一家在大学城,运维有3个,偏向于数据库方向。另外一家就是目前我正在做的,支付平台,运维只有一个。

谈谈我为什么选择支付平台这家。

当时问过老师,菜菜还有曾伟导,给的意见不一样,然后我又在咨询我以前北大青鸟的同学,终于大家的意见我选择支付平台这家的原因,

1、运维只有我一个,学习的东西更多。

2、当时面试有3个运维,而我是唯一一个经历了认识,总监,老板的,老板比较喜欢我

3、根据第一点我觉得在只有我一个人的情况下,压力越大,学习更多

3月27第一天开始工作,由于第一次,真心第一次做到真正的运维工作,导致交接的工作没做好,说到底就是经验不足,4月前任运维离职后,公司出现的问题很茫然,很多事情不知道怎么弄。在这里要谢谢曾伟导,每次出现问题或者不懂的都很耐心帮我解决。

目前在这家公司,其实我自己会的lamp lnmp完全没什么用,能用到的就是nginx而且还不是很熟悉。老板让我在测试机部署hadoop hive base oracle 生产环境要上django,其实这些我都很茫然,完全不会。

每天在公司除了解决一些简单的问题,检测服务器等,其他的时间就是找各种各样的资料去看,百度,谷歌,问人,加群,什么hadoop,oracle,等等到处去问人,甚至老板要我把一亿条的数据弄到mysql中我都不知道,找DBA朋友,找DBA同学,找python的朋友,仍然花了一天的时间才搞定。

在这里我还没去支付平台这家公司上班的时候,再次报名了22期跟班学习,本想学习一段时间工作,谁知道运气来了工作。导致这期间没怎么跟22期同学一起学习。

目前在这家公司工作了一个月7天的时间,虽然第一个不是我到的,每天我都是最后一个走。在这里我学习到很多,特么是工作中的经验这块,一周等于我自己在家里学的两周。我这人比较懒。要我在家学习可能我是没什么心态的。

但这一个多月的时间让我充实满足,每天晚上我都找资料,做实验,了解原理弄到两三点,早上早早的6 7点就起来去公司。刚刚拍拖的女朋友也分手,因为太忙,但是我觉得值得,因为我有了让我更卖力的工作。在我不会那么多东西的情况下,老板仍然选择我,我想他有他的道理,不能辜负了老板的眼光,所以我付出要比别人多。

作为一个12期的老油条,我写下这么多的原因,我想告诉一些朋友,做运维,你付出的要比平时多,不要因为平时的诱惑而放弃,不懂的就要问,不要怕害羞,问了别人告诉你了,那么是你学到的。既然选择了,那么就要坚持走下去。而我作为一个12期的菜鸟,目前开班到22期,虽然是我自己的原因,但我现在又重新回来了。

面试我觉得不要怂,有就去,从面试中大概知道一些公司的面试情况,即使你这个月面试了这家公司,那么有可能下个月还会收到这家的面试,面试把自己会的多说多吹多忽悠,不会的就要说老实话。不要带有隐瞒的性质。多学多问。学到你是的,看不起是别人的,今天他看不起,明天你给他一耳光。加油

在这里真心谢谢老师,曾伟导,菜菜还有同学们。我会继续努力,曾经我丢下的,我会一步一步的捡起来放回自己的口袋。

目标:2018,10K-15K

MySQL延迟主从复制


世界上没有卖后悔药的,一旦做错了,后悔莫及。我们作为运维,尤其是不小心误删除数据库里的数据时,那更是损失巨大。对于MySQL来说,这里有一种方法,可以避免这种悲剧的发生。

这儿所谓的延迟,并不是经常说的网络延迟,而是我们故意把从库复制的步伐放慢,比如让从库比主库慢30分钟。这样,如果在半小时内发现数据有问题,还能补救。

MySQL 5.6 已经支持延迟复制, 可设置备节点的延迟时间, 延迟复制是有意义的,例如防止主节点数据误删,查看数据库历史状态等。

配置也不难,做完主从后,再加上这句:

CHANGE MASTER TO MASTER_DELAY = N;

这里的N单位是秒,这样从库则会比主库延时N秒。做完之后,在show slave status的时候,就可以看到SQL_Delay的值。

SQL_Delay: xxx