一、自动化运维

1、网络层(接入层、汇聚层、核心层);

1 LB+HA(L4、L7);
2 服务层(reverse proxy cache、应用层、web层、SOA层、分布式层、DAL);
3 数据层(分布式缓存、NoSQL、DB);
4 系统层(环境初始化)
5 基础设施(IDC托管、设备上下架);

2、自动化实现:

1 网络层(SDN,softwaredefinition network);
2 LB+HA(平台开发、IaaS);
3 服务层(PaaS or docker(自动化调度、自动化开发、自动化发现(服务发现、服务注册));reverse proxy cache(第三方平台开发);应用层(自定义开发);web层、SOA层、分布式层、DAL(saltstack,saltcloud,有docker模块、消息));
4 数据层(DAL);
5 基础设备、系统层(IaaS,openstack);

3、安全:

1 网络层(firewall);
2 LB+HA、服务层(WAF,web application firewall)
3 数据层(如DB权限);
4 系统层(tcp wrapper);
5 基础设施(物理安全);

 4、备份:

 1 网络层(HSRP、VRRP);
2 LB+HA(VRRP);
3 数据层(DB备份);
4 服务层中的web层(saltstack);
5 核心层(网关设备(outside、inside)、防火墙、router);
6 汇聚层(三层交换;动态路由、静态路由、EC、端口汇聚);
7 接入层(二层交换;VTP、SPF、trunk、port安全);
8 L4(LVS、F5's BigIP、Citrix's Netscaler、A10);
9 L7(haproxy、nginx);
10 DAL、专业团队做(taobao'sTDDL、360);
11 分布式层(分布式存储(glusterfs、moosefs、fastDFS);分布式MQ(rabbitMQ、QPID、zeroMQ));
12 SOA层、服务化(应用服务层duddo、基于restfull api开发);
13 web层(httpd、nginx、tomcat、jboss、resin);
14 应用层、应用变更ittle(php、java、python、C、C++);
15 reverse proxy cache(ATS、squid、varnish;CDN(配置同步;流量统计;预缓存;缓存更新;日志分析;智能DNS));
16 DB(MySQL、Oracle、postgre SQL、SQLserver、access);
17 NoSQL(mongodb、redis、couchbase、elasticsearch);
18 分布式缓存(memcached、redis);
19 环境初始化(性能优化;监控agent;自动化管理saltstack minion;内部DNS;limit(例如tcp wrapper限制仅跳板机ssh到server);
20 设备上下架(网络配置;标签;自检(配货单与实物对比);raid;iDrac|ILO|IMM;OS安装;资产录入(分层设计)——合同管理(采购方-采购时间-采购人-联系信息)——保修时间——地点——配置详情——MDB配置项(OS类型-IPv4,RIP,VIP,IPMI,hostname)——服务层面);
21 IDC托管(熟悉各大IDC厂商;根据业务类型选择;网络测试;谈价格、走合同;设备采购(需求分析、采购、上下架));

5、运维标准化(版本、路径、服务、OS……);

6、运维边界:

1 运维边界模糊化(掌握尽可能多的知识点);
2 运维开发(后端>前端,重点在后端);

7、自动化运维发展阶段:

1 标准化、工具化(标准化运维;运维标准化、操作工具化、变更流程化);
2 web化、平台化(web化运维;操作web化、权限控制、弱化流程、统计分析、统一调度);
3 服务化、api化(DNS服务、LB服务、监控服务、分布式缓存服务、分布式存储服务、CMDB);
4 智能化;

8、服务器生命周期:

服务器上架-->网络配置-->raid配置-->IPMI
服务器上架-->环境部署-->运维变更-->(服务更新-->代码更新-->服务扩容&缩容);(服务下线,服务器下线)
环境部署(OS安装(cobbler);服务部署(saltstack);应用代码部署(saltstack&shell);监控配置(zabbix);加入运行集群(LVS&haproxy))

9、持续集成、持续部署:

二、git简介

分布式的版本控制系统;
diff(2002年之前)-->bitkeeper(2002年)-->git(不要逼我);
集中式;
分布式(中央服务器用于交换代码);
https://www.git-scm.com/
注:不要拿git与svn相对比,git只能管理文本文件,不能管理picture;
https://github.com/jowinchaitest,github源码托管,开源项目,代码管理,控制工具;

三、安装部署

yum install git                                  #安装git
git config –global user.name “tom” #配置git用户
git config –global user.email “tom@qq.com” #配置git邮箱
git config –global color.ui true #配置颜色
git config –list #查看配置信息

四、git常用命令

add         #添加文件内容至索引
bisect #通过二分查找定位引入 bug 的变更
branch #列出、创建或删除分支
checkout #检出一个分支或路径到工作区
clone #克隆一个版本库到一个新目录
commit #记录变更到版本库
diff #显示提交之间、提交和工作区之间等的差异
fetch #从另外一个版本库下载对象和引用
grep #输出和模式匹配的行
init #创建一个空的 Git 版本库或重新初始化一个已存在的版本库
log #显示提交日志
merge #合并两个或更多开发历史
mv #移动或重命名一个文件、目录或符号链接
pull #获取并合并另外的版本库或一个本地分支
push #更新远程引用和相关的对象
rebase #本地提交转移至更新后的上游分支中
reset #重置当前HEAD到指定状态
rm #从工作区和索引中删除文件
show #显示各种类型的对象
status #显示工作区状态
tag #创建、列出、删除或校验一个GPG签名的 tag 对象

 五、git基本操作

1、git提交数据

mkdir tom
cd tom
git init #初始为git工作目录
echo 111 > readme.txt
git status #查看git状态
git add readme.txt #git添加文件至暂存区
git status #再次查看状态
git commit -m “this is 1 commit” #git cmmit提交暂存取文件至git版本仓库

2、git移除数据

touch aa.txt
git add aa.txt #添加文件至暂存区
git status
git rm –cached aa.txt #将文件从git暂存区域的追踪列表移除(不会删除文件的数据)
git status

将文件数据从git暂存区和工作目录一起删除
git add aa.txt
git rm –f aa.txt #强制删除-f参数
ls
git status

3、git移动数据

方法一:
git mv readme.txt test.txt #修改文件名称
git status
git commit -m “changed name”
方法二:
mv test.txt readme.txt #先修改名称
git rm test.txt #然后删除git版本仓库内的文件快照
git add readme.txt #最后再将新的文件添加进入
git commit -m “changed name” #提交至git版本仓库

4、git历史记录

git log                        #查看提交历史记录
git log -2 #查看最近几条记录
git log -p -1 #-p显示每次提交的内容差异,例如仅查看最近一次差异
git log –stat -2 #–stat简要显示数据增改行数,这样能够看到提交中修改过的内容,
对文件添加或移动的行数,并在最后列出所有增减行的概要信息
git log –pretty=oneline #–pretty根据不同的格式展示提交的历史信息
git log –pretty=fuller -2 #以更详细的模式输出提交的历史记录
git log –pretty=fomat:”%h %cn” #查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名

还可以使用format参数来指定具体的输出格式,这样非常便于后期编程的提取分析哦,常用的格式有:
%s 提交说明。
%cd 提交日期。
%an 作者的名字。
%cn 提交者的姓名。
%ce 提交者的电子邮件。
%H 提交对象的完整SHA-1哈希字串。
%h 提交对象的简短SHA-1哈希字串。
%T 树对象的完整SHA-1哈希字串。
%t 树对象的简短SHA-1哈希字串。
%P 父对象的完整SHA-1哈希字串。
%p 父对象的简短SHA-1哈希字串。
%ad 作者的修订时间。

5、git还原数据

echo “hello word” >> readme.txt     #追加一段话
git add readme.txt #添加至暂存区
git commit -m “test” #提交至git版本仓库

git log –pretty=oneline #查看提交的历史信息
git reset –hard HEAD^ #还原历史提交版本上一次
cat readme.txt #查看文件内容(已经还原)

git log –pretty=oneline
git reflog #查看未来历史更新点
git reset –hard 4bf5b29 #找到还原点的SHA-1值,就可以还原(值不写全,系统会自动匹配) echo “hello tom” >> readme.txt
git checkout — readme.txt #还原某个文件
cat readme.txt
规则:如果暂存区中有该文件,则直接从暂存区恢复。如果没有该文件,将还原成最近一次提交的快照。

六、git管理分支结构

1、创建分支

git branch linux                        #创建分支
git checkout linux #切换分支
git branch #查看当前分支情况,标示为*号 echo “Create new branch” >> readme.txt #我们对文件追加一行字符串
git add readme.txt #提交到暂存区
git commit -m “new branch” #提交到git版本仓库 git checkout master #切回master分支
cat readme.txt #查看文件内容,并没有新追加的字符串
分支可以理解为:目录、数据库

2、合并分支

git branch              #查看是否在master分支
git merge linux #合并Linux分支至master
cat readme.txt #查看合并后的readme文件
git branch -d linux #确认合并完成后,删除Linux分支
git branch #查看分支

3、分支冲突

git checkout -b linux          #创建并切换到该分支
echo “1 hello” >> readme.txt #追加一行内容
git add readme.txt #在Linux分支添加readme至暂存区
git commit -m “create two” #在Linux分支提交readme

git checkout master #切换到master分支
echo "2 tom" >> readme.txt #在master分支上追加同一行内容
git add readme.txt #添加至暂存区
git commit -m ‘to master’ #提交至Git版本仓库

git merge linux #合并Linux分支(冲突)
cat readme.txt #冲突内容
git status #可获取冲突原因

解决冲突:手动编辑好,add到缓存区,再commit,最后合并两分支
vim readme.txt
git add readme.txt #再次添加至暂存区
git commit -m ‘config’ #提交至git版本仓库
git merge linux #合并Linux分支

七、git管理标签

cd tom/                       #进入git版本控制系统
git tag v1.0 #当前分支打一个标签(方便快速回滚)
git tag #查看当前所有的标签
git show v1.0 #查看当前1.0版本的详细信息
git tag v1.2 -m “v1.2” #创建带有说明的标签,-a指定标签名字,-m指定说明文字
git tag -d v1.0 #删除之前的v1.0
git tag #再次查看,v1.0已经被删除

八、持续集成

markdown编辑器(是一种可以使用普通文本编辑器编写的标记语言)

标题:
#表示一级标题,##、###、####、#####、######,共支持6级标题 列表:
列表分有序列表和无序列表,无序列表用*或-;只有空格或tab的就是一个空行; 引用:
> hello,word
[ ]( ) #(链接,网页引用,广告链接)
![ ]( ) #(图片引用,图片广告) 代码框:
例1:
<TAB>while true:
<TAB><TAB>do echo nimei;
<TAB>done 例2:
'yum -y install lrzsz' 'echo nimei'
*的使用:
*我变斜了* #(文字两边各1个*,把文字倾斜)
**我变粗了** #(文字两边用2个*,把文字变粗)
*** #(一行中仅有3个*,表示分割线)

九、GitLab安装部署

Gitlab是一个用Ruby onRails开发的开源项目管理程序,可以通过WEB界面进行访问公开的或者私人项目。它和Github有类似的功能,能够浏览源代码,管理缺陷和注释

1、安装gitlab的依赖
yum install -y curl openssh-server openssh-clients postfix cronie policycoreutils-python

2、启动postfix,并设置为开机启动
service postfix start
chkconfig on postfix

3、获取gitlab的rpm包
清华开源镜像站
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-10.0.2-ce.0.el6.x86_64.rpm

4、安装gitlab
rpm -ivh gitlab-ce-10.0.2-ce.0.el6.x86_64.rpm

基本操作

gitlab-ctl reconfigure         #重新编译配置
gitlab-ctl status #查看状态
gitlab-ctl stop #停止服务
gitlab-ctl start #启动服务
gitlab-ctl tail #查看日志、
gitlab-ctl tail nginx #查看nginx日志
gitlab-ctl help #查看帮助

汉化

1、查看gitlab版本
head -1 /opt/gitlab/version-manifest.txt

2、停止服务
gitlab-ctl stop

3、下载汉化包
v7-v8.8:https://gitlab.com/larryli/gitlab
v8.9:https://gitlab.com/xhang/gitlab

4、更新汉化包
\cp -rf /tmp/gitlab/* /opt/gitlab/embedded/service/gitlab-rails/

5、重新编译并启动服务
gitlab-ctl reconfigure
gitlab-ctl start

6、报错排除思路
查看报错日志,排除报错
vim /etc/gitlab/gitlab.rb
external_url = 'http://192.168.4.19' 不加=会出现问题 删除/opt/gitlab/embedded/service/gitlab-rails/public/uploads
删除/opt/gitlab/embedded/service/gitlab-rails/tmp
删除/opt/gitlab/embedded/service/gitlab-rails/log 权限设置
chown -R git:git /var/opt/gitlab/gitlab-rails/tmp/cache
chown -R git:root /opt/gitlab/embedded/service/gitlab-rails/

修改后台密码

gitlab-rails console production
user = User.where(id: 1).first #id为1的是超级管理员
user.password = '12345678' #密码必须至少8个字符
user.save! #如没有问题 返回true
exit

十、自动化部署上线

获取代码-->编译(可选)-->配置文件-->打包-->copy到对应服务器(对应目录)-->部署节点、移除集群-->解压、copy差异文件-->创建软链接-->重启-->自动化测试-->加入集群-->列出回滚版本-->执行回滚-->删除软链接-->重新创建软链接-->重启(可选)

---------------------script start------------------

#!/bin/bash

#

DATE=`date "+%Y-%m-%d"`

TIME=`date "+%Y-%m-%d-%H-%M"`

CODE_DIR=/ane/test/demo

CONFIG_DIR=/ane/test/config

TAR_DIR=/ane/tar

TMP_DIR=/ane/tmp

usage() {

    echo$"Usage: $0 [deploy|rollback-list|rollback-pro VERSION]"

}

git_pro() {

    echo "git pull"

    cd $CODE_DIR && git pull

    API_VERL=`gitshow | grep commit | cut -d' ' -f2`

    API_VER=`echo${API_VERL:0:6}`

    /bin/cp -r $CODE_DIR $TMP_DIR

}

config_pro() {

    echo "add pro config"

    /bin/cp $CONFIG_DIR/* $TMP_DIR/demo

    TAR_VER=$API_VER-$TIME

    cd $TMP_DIR && mv demo pro_demo_"$TAR_VER"

}

tar_pro() {

    echo "tar_pro"

    cd $TMP_DIR && tar zcf pro_demo_"$TAR_VER".tar.gz pro_demo_"$TAR_VER"

    echo "tar end"

}

scp_pro() {

    echo "begin scp"

    /bin/cp$TMP_DIR/pro_demo_"$TMP_VER".tar.gz /tmp/

}

deploy_pro() {

    echo "begin deploy"

    cd /tmp && tar zxf pro_demo_"$TAR_VER".tar.gz

    rm -f /var/www/html/demo

    ln -s /tmp/pro_demo_"$TAR_VER" /var/www/html/demo

}

test_pro() {

    echo "test begin"

    echo "test ok"

}

rollback_list() {

    ls -l /tmp/*.tar.gz

}

rollback_pro() {

    rm -f /var/www/html/demo

    ln -s /tmp/$1 /var/www/html/demo

}

main() {

   case $1 in

    deploy)

        git_pro;

        config_pro;

        tar_pro;

        scp_pro;

        deploy_pro;

        test_pro;

    ;;

    rollback-list)

        rollback_list;

    ;;

    rollback-pro)

        rollback_pro$2;

    ;;

    *)

        usage;

   esac

}

main $1 $2

---------------------scriptend-----------------

pro-deploy.sh

sh -x  pro-deploy.sh deploy
sh -x pro-deploy.sh rollback-list
sh -x pro-deploy.sh rollback-pro

十一、其他应用

git clone git@github.com:test/demo   #把github上面的仓库克隆到本地
git push -u origin master #将本地的Git仓库同步到远程Github服务器上
git remote #查看本机列表

学习git(一)的更多相关文章

  1. 学习 git基础命令

    缘起 年后到了新公司,由于个人意愿到了一个海外的项目组,除了自己从Java技术栈转了C#技术栈外,很多技术都是第一次使用,学习压力不小啊. 自己也就先从常用的技术开始学起,比如C#,AngularJS ...

  2. 学习Git的总结与体会

    学习Git的总结 blog 第一次学习Git是完全按照廖雪峰老师的教程学习的,学的过程中基本上没有遇到什么问题,但是自己实际操作就问题不断了. 首先,还是按照惯例,来膜拜一下廖雪峰老师精简的教程知识吧 ...

  3. 深入理解学习Git工作流

    http://blog.csdn.net/hongchangfirst/article/list/3 //可以看看 http://blog.csdn.net/hongchangfirst/articl ...

  4. [转]深入理解学习GIT工作流

    深入理解学习Git工作流 字数13437 阅读2761 评论3 喜欢70 个人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协作模式,直到有一天我看到了下面的文章,好多遗留在心 ...

  5. 记录我开始学习 Git的路程

    工作半年多了,总觉得没学到什么东西,于是乎找了个Git学习一下,感觉还蛮厉害的样子.为此记录下我的路程 2015,11,26 更新 前面的路都挺艰难的,在官网下载msysgit网速几乎为0(心情千万只 ...

  6. 推荐一个可视化的学习Git的好网站:LearnGitBranching

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:推荐一个可视化的学习Git的好网站:LearnGitBranching.

  7. 发现一个不错的学习git的地方

    Git入门:http://rogerdudler.github.io/git-guide/index.zh.html 简洁.实用.高效的学习git基本操作的方式

  8. 深入理解学习Git工作流(转)

    个人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协作模式,直到有一天我看到了下面的文章,好多遗留在心中的困惑迎刃而解,于是我将这部分资料进行整理放到了github上,欢迎st ...

  9. [少数派]如何学习Git

    用玩游戏的方式学习 Git 目录 为什么要学习 Git 怎么学习 Git Learn Git Branching 其他学习资源 用游戏的方式来学习,是一种有趣而高效的方式. 从刚接触电脑时的打字练习软 ...

  10. 深入理解学习Git工作流(git-workflow-tutorial)

    转载:https://segmentfault.com/a/1190000002918123#articleHeader11 人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协 ...

随机推荐

  1. Smartbi代替Alteryx+Tableau,用1份投入如何获得2份回报?

    Smartbi是国内一家知名的BI厂商,Alteryx.Tableau是国外两款重要的BI工具,它们都是在BI领域内提供特定的功能,以满足企业的数据分析需求.那么,对于用户来说,在选择BI工具的时候要 ...

  2. Oracle建表和SQL语句的增删改

    创建表 --建表语法结构: /* CREATE TABLE 表名( 字段名1 数据类型, 字段名2 数据类型 .... ); */ --建一张老师表,里面包含老师编号,老师姓名,老师联系方式,老师入职 ...

  3. [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器---(8) ---Distributed Hash之后向传播

    [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器---(8) ---Distributed Hash之后向传播 目录 [源码解析] NVIDIA HugeCTR,GPU 版本参数服务 ...

  4. Python 的垃圾回收

    垃圾回收 首先介绍两个画图的工具:objgraph 包和在线绘图网站 draw.io.具体的使用以后再写. 1.引用计数 Python 中,每个对象都有存有指向该对象的引用总数,即:引用计数(refe ...

  5. linux基础-jdk1.8和weblogic12.2.1.3.0安装

    转至:https://www.cnblogs.com/jiarui-zjb/p/9642416.html 1.环境探查与准备 安装jdk和weblogic前需要对进行安装的linux系统硬件和软件环境 ...

  6. docker:nginx+confd动态生成配置

    docker:nginx+confd动态生成配置 当我们项目越来越多时手动去服务器修改nginx配置是一件很麻烦而且可能出错的事情.我们可以通过nginx+confd+配置中心实现一套方案避免出错并减 ...

  7. 修饰符-final

    Java是由C/C++泛生的,其也保留了C/C++的部分特性,如关键字.在C/C++中,关键字有着特殊的含义. final修饰符 在编程中,一般会存在一些变量或方法,程序员不让其数据"发生改 ...

  8. 【python】kNN基础算法--分类和推荐系统

    (1)k-近邻算法是分类数据最简单最有效的方法. (2)在将数据输入到分类器之前,必须将待处理数据的格式改变为分类器可以接受的格式. (3)所有的推荐模型都可以使用这个算法,只要将结果量化就行了,主要 ...

  9. thinkphp 添加数据

    ....控制器方法返回视图 public function create() { // return view(); } ...............表单页面 <!DOCTYPE html&g ...

  10. vlan端口隔离配置

    对于大型网络来说,vlan是一种不错的解决办法,但对于有些项目,项目本身不需要不同vlan之间进行互访,比如有些监控项目就只需要内网访问,那么就没有必要创建vlan了,用户如果还将不同的端口划入不同的 ...