运维之路梳理———未完,待更

Posted wobenwuxin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运维之路梳理———未完,待更相关的知识,希望对你有一定的参考价值。

Linux学习知识梳理

1.基础知识梳理

1.1基础命令

vim:/查找相应字符 n:显示下一个匹配字符 N:显示上一个

 mkdir -p  #创建目录
 touch  #创建文件
 cp  #复制粘贴文件
 mv  #移动文件或者改名
 vim  #编辑文件
 echo #查询变量与输出
 head  #默认查看文件前十行
 cat  #查看文件
 tr [a-z] [A-Z] #更改字母大小写
 mount #系统挂载
 umount #系统卸载
 alias  #别名功能
 nalias  #取消别名功能
 export   #定义环境变量
 fdisk -l  #列出磁盘信息大小
 dd if= dev/sda of=/tmp/mbr.txt bs=512 count=1 #提取512字节磁盘文件 提取一次 放在mbr.txt文件中
 mkfs -t 格式化磁盘分区,才可以挂载
 curl #访问网站请求显示详细信息
 wget #访问网站请求显示详细信息
 ping  #查看网站是否可以连通
 ps -ef |grep #查看指定进程号
 rpm -e  #卸载软件   -qa #查看软件是否安装
 nc #打开一个端口
 ss -lntup #查看端口
 iptables -save # 转换新添加的规则 >/etc/sysconfig/iptables 中
 iptables -restore #重新写入</etc/sysconfig/iptables 中
 ln -s # 创建软连接
 lest #一页一页看日志
 pstree #显示java进程信息
 iftop #显示系统网络信息 -P #显示端口号 -N #不要把端口号显示为对应的服务 -n #不要逆向解析ip为域名 # -i #指定网卡
 crontab #编写定时任务
 chmod #更改文件权限信息
 chown #更改文件属主属组信息

 

lvm:逻辑卷管理 弹性扩容和缩容磁盘 缺陷:存储效率较低

磁盘种类:SATA SAS PCI-E(插显卡)

磁盘分区: d delete a partition 删除分区 g create a new empty GPT partition table 创建一个新的空的GPT分区表(对大于2T磁盘进行分区) l list known partition types 列出已知的分区类型 m print this menu n add a new partition 创建分区 o create a new empty DOS partition table(对小于2T磁盘进行分区) 创建一个新的空的Dos分区表 p print the partition table 显示分区信息 q quit without saving changes 不保存退出 t change a partition‘s system id 显示分区系统编号 u change display/entry units w write table to disk and exit 保存退出

输入n 创建 p主分区 e扩展分区 ? 分区开始不用设置 ? 分区结束需要设置:+NK +NM +NG ? 输入p 进行查看 ? 分区确认后进行保存 ? w 保存分区表信息

1.2运维需要了解的网络相关知识

 

1.2.1DNS解析过程

首先,客户端发出 DNS 请求翻译 IP 地址或主机名。DNS 服务 器在收到客户机的请求后:

(1)检查 DNS 服务器的缓存,若查到请求的地址或名字,即 向客户机发出应答信息;

(2)若没有查到,则在数据库中查找,若查到请求的地址或 名字,即向客户机发出应答信息;

(3)若没有查到,则将请求发给根域 DNS 服务器,并依序从 根域查找顶级域,由顶级查

找二级域,二级域查找三级,直至找到要解析的地址或名字, 即向客户机所在网络的 DNS

服务器发出应答信息,DNS 服务器收到应答后现在缓存中存 储,然后,将解析结果发给客

户机。

(4)若没有找到,则返回错误信息。

1.2.2简述TCP/IP协议

TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。

 #OSI七层模型               #TCP/IP四层模型
 第一层  #物理层 第一层 #网络接口层
 第二层  #数据链路层 第二层 #网络层IP
 第三层  #网络层 第三层 #运输层(TCP/UDP)
 第四层  #传输层         第四层 #应用层
 第五层  #会话层
 第六层  #表示层
 第七层  #应用层
  • 1、物理层:

    主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。   

    2、数据链路层:

    定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。   

    3、网络层:

    在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。   

    4、运输层:

    定义了一些传输数据的协议和端口号(WWW端口80等),如: TCP(transmission control protocol –传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据) UDP(user datagram protocol–用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。   

    5、会话层:

    通过运输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)   

    6、表示层:

    可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。   

    7、应用层:

    是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务

1.2.3 ICMP协议

IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。ICMP不是高层协议,而是IP层的协议。

当传送IP数据包发生错误。比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因。

1.2.4 ARP协议

ARP(地址解析)协议是一种解析协议,本来主机是完全不知道这个IP对应的是哪个主机的哪个接口,当主机要发送一个IP包的时候,会首先查一下自己的ARP高速缓存(就是一个IP-MAC地址对应表缓存)。

如果查询的IP-MAC值对不存在,那么主机就向网络发送一个ARP协议广播包,这个广播包里面就有待查询的IP地址,而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一个主机发现自己符合条件,那么就准备好一个包含自己的MAC地址的ARP包传送给发送ARP广播的主机。

而广播主机拿到ARP包后会更新自己的ARP缓存(就是存放IP-MAC对应表的地方)。发送广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作。

1.2.4 UDP协议

无连接协议,也称透明协议,也位于传输层。

UDP与TCP区别:

1) TCP提供面向连接的传输,通信前要先建立连接(三次握 手机制); UDP提供无连接的传输,通信前不需要建立连 接。 ? 2) TCP提供可靠的传输(有序,无差错,不丢失,不复); UDP提供不可靠的传输。 ? 3) TCP面向字节流的传输,因此它能将信息分割成组,并在 接收端将其重组; UDP是面向数据报的传输,没有分组开 销。 ? 4) TCP提供拥塞控制和流量控制机制; UDP不提供拥塞控制 和流量控制机制。

1.2.5 HTTP协议

HTTP长连接和短连接本质上是TCP长连接和短连接。

1.2.6 网转报错状态码介绍
状态码原因短语中文描述
100 Continue 继续
101 Switching Protocols 切换协议
200 OK 成功
201 Created 已创建
202 Accepted 接受
203 Non-Authoritative information 非权威信息
204 No Content 无内容
205 Reset Content 重置内容
206 Partial Content 部分内容
300 Multiple Choices 多个选择
301 Moved Permanently 永久移动
302 Found 发现
303 See Other 见其它
304 Not Modified 没有改变
305 Use Proxy 使用代理
307 Temporary Redirect 临时重发
400 Bad Request 坏请求
401 Unauthorized 未授权的
402 Payment Required 必需的支付
403 Forbidden 禁用
404 Not Found 没有找到
405 Method Not Allowed 方法不被允许
406 Not Acceptable 不可接受的
407 Proxy Authentication Required 需要代理验证
408 Request Timeout 请求超时
409 Confilict 冲突
410 Gone 不存在
411 Length Required 长度必需
412 Precondition Failed 先决条件失败
413 Request Entity Too Large 请求实体太大
414 Request-URI Too Long 请求URI太长
415 Unsupported Media Type 不支持的媒体类型
416 Requested Range Not Satisfiable 请求范围不被满足
417 Expectation Failed 期望失败
500 Internal Server Error 内部服务器错误
501 Not Implemented 服务端没有实现
502 Bad Gateway 坏网关
503 Service Unavailable 服务不能获得
504 Gateway Timeout 网关超时
505 HTTP Version Not Supported HTTP协议版本不支持

 

2. 服务与重要目录配置文件

2.1 iptables 防火墙软件管理

  • iptables工作流程

    • 防火墙是层层过滤的,实际上是按照配置规则的顺序从上到下,从前到后进行过滤的。

    • 如果匹配上规则,就执行该规则通过或禁止,如果没有匹配到规则则向下执行,如果都没有匹配到,则使用默认规则同意访问通过

  • 四表五链

     
    fiter 实现防火墙功能的:准许或拒绝端口
    nat 网络地址转发 1.共享上网 2.端口/ip映射
    raw 决定数据包是否被状态跟踪机制处理
    mangle 修改数据包的服务类型、TTl、并且可以配置实现路由QQS
    作用
    INPUT链 进来的数据包应用此规则链中的策略
    OUTPUT 外出的数据包应用此规则链中的策略
    FORWAPO 转发数据包时应用此规则链中的策略
    PREROUTING链 对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
    POSTROUTING链 对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)
  • iptables 命令参数

    参数含义
    -L 显示表中的所有规则
    -n 不要把端口或ip反向解析为名字
    -t 指定表
    -A append 追加规则追加到最后 准许ACCEPT
    -D delete 删除
    -I insert拒绝的规则放在最上面
    参数含义
    -p protocal 协议 tcp/udp/icmp/all
    -dport 目标端口
    -sport 源端口
    -d -destination 目标ip
    -s --source 源ip
    -m 指定模块
    -j jump 满足条件后的动作: DROP(拒绝)、ACCEPT(准许)。REJECT(拒绝)
    -F 清除所有规则
  • iptables允许端口转发功能配置文件

    • 首先写入规则

       iptables  -t -nat -A POSTROUTING -s 172.16.1.7 -j -SNAT --to-source 10.0.0.61
    • 关闭公网ip 设置内网转发eth1

       #添加
       GATMWAY=###公网ip
    • 更改防火墙机器 打开端口转发功能

       echo ‘net.ipv4.ip_forward=1‘ >>/etc/sysctl.conf

2.2 tomcat 服务

2.2.1 tomcat简单介绍
  • jvm:Java virtual machine Java虚拟机

    • 可移植性 一份代码多个平台使用

    • 关注CPU和内存

  • jdk:Java development kit Java开发环境

    • 存放Java命令

    • jvm环境

  • tomcat : 存放Java代码

2.2.2 tomcat开机自启动
  • 开机启动故障

    • 需要重新读取 /etc/profile 在/etc/rc.d/rc.log中写入 /etc/profile

  • tomcat连接后端数据库

    • (tomcat站点目录下)/webapps/jpress/WE-INF/classses/db.properties

  • tomcat 存储迁移

    • tomcat站点目录下)/webapps/jpress//attachment 用nfs挂载到存储服务器上

  • tomcat查看Java负载

    • jstack pid 显示出Java进程信息

    • lmap -heap 显示jvm内存使用情况

    • jmap -dump:format=b,file=/tmp/jvm.bin 进程号

      将指定Java进程导出使用信息至/tmp

    • mat 分析信息工具

2.3 lvs负载均衡服务

  • lvs-arp ip(3层)—>mac(2层) 工作在哪层? 3层协议工作在2层. lvs 常见模式 dr nat tun(隧道) full nat 项目:负载均衡选型项目 lvs+keepalived 面试: 技能: 精通 熟练掌握 熟悉 了解 熟练掌握 Shell编程 书写服务管理脚本.监控备份脚本.日常维护. 熟练掌握 负载均衡维护和优化 项目:负载均衡选型项目 云服务器 故障案例: 推出havip 给keepalived使用vip.现在无法使用. 只能使用slb 故障案例: 实现内网服务器上外网(共享上网) iptables 使用阿里云的 nat网关.

2.3.1 ipvsadm环境搭载
 #web01 web02
 curl 10.0.0.7
 web01
 curl 10.0.0.8
 web02
 #lb01
 yum install -y ipvsadm
 #####配置 负载均衡lb01
 ip addr add 10.0.0.3/24 dev eth0 lebel eth0:0
 ipvsadm -C #clear清除
 ipvsadm --set 30 5 60 #设置tcp 超时时间
 ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20
 ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
 ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1
 ipvsadm -ln
 [root@lb01 ~]# lsmod |grep ip_vs
 [root@lb01 ~]# ipvsadm
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port Forward Weight
 ActiveConn InActConn
 [root@lb01 ~]# lsmod |grep ip_vs
 ip_vs 145497 0
 nf_conntrack 133095 1 ip_vs
 libcrc32c 12644 3 xfs,ip_vs,nf_conntrack
 #######ib01负载均衡
 #添加vip keepalived生成 havip
 ip addr add 10.0.0.3/24 dev eth0 lebel eth0:0
 ipvsadm -C #clear清除
 ipvsadm --set 30 5 60 #设置tcp 超时时间
 #创建 upstream web_pools
 #-t tcp
 #-s 轮询算法 wrr 加权轮询
 #-p 会话保持时间 默认300s
 ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20
 #upstream server server
 # -a 添加server rs服务器
 # -t tcp
 # -r 指定rs服务器ip:port
 # -g --gatewaying 直接路由模式 dr模式
 # -w weight 权重
 ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
 ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1
 ipvsadm -ln
 [root@lb01 ~]# ipvsadm -ln
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port Forward Weight
 ActiveConn InActConn
 [root@lb01 ~]# ipvsadm --set 30 5 60
 [root@lb01 ~]# ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20
 [root@lb01 ~]# ipvsadm -a -t 10.0.0.3:80 -r
 10.0.0.7:80 -g -w 1
 [root@lb01 ~]# ipvsadm -a -t 10.0.0.3:80 -r
 10.0.0.8:80 -g -w 1
 [root@lb01 ~]# ipvsadm -ln
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port Forward Weight
 ActiveConn InActConn
 TCP 10.0.0.3:80 wrr persistent 20
 -> 10.0.0.7:80 Route 1 0
 -> 10.0.0.8:80 Route 1 0
 0
 [root@lb01 ~]# ip a |grep 0.3
 inet 10.0.0.3/32 scope global eth0
 upstream web_pools {
 server 10.0.0.7:80 weight=1 ;
 server 10.0.0.8:80 weight=1 ;
 }
 proxy_pass xxx
 #ipvsadm 规则的备份与恢复
 [root@lb01 ~]# ipvsadm-save -n >/root/ipvs.txt
 [root@lb01 ~]# ipvsadm -ln
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port Forward Weight
 ActiveConn InActConn
 TCP 10.0.0.3:80 wrr persistent 20
 -> 10.0.0.7:80 Route 1 0
 0
 -> 10.0.0.8:80 Route 1 0
 0
 [root@lb01 ~]# ipvsadm -C
 [root@lb01 ~]# ipvsadm -ln
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port Forward Weight
 ActiveConn InActConn
 [root@lb01 ~]# ipvsadm-restore </root/ipvs.txt
 [root@lb01 ~]# ipvsadm -ln
 [root@lb01 ~]# ipvsadm -ln
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port Forward Weight
 ActiveConn InActConn
 TCP 10.0.0.3:80 wrr persistent 20
 -> 10.0.0.7:80 Route 1 0
 0
 -> 10.0.0.8:80 Route 1 0
 0
 73
 74
 75
 76
 #lo网卡绑定 vip
 #ip addr add 10.0.0.3/32 dev lo label lo:1
 [root@web01 ~]# cat /etc/sysconfig/networkscripts/
 ifcfg-lo:1
 DEVICE=lo:1
 IPADDR=10.0.0.3
 NETMASK=255.255.255.255
 ONBOOT=yes
 NAME=loopback
 [root@web01 ~]# systemctl restart network
 [root@web02 ~]# ip a s lo
 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
 state UNKNOWN group default qlen 1000
 link/loopback 00:00:00:00:00:00 brd
 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet 10.0.0.3/32 brd 10.0.0.3 scope global lo:1
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host
 valid_lft forever preferred_lft forever
 #抑制arp解析
 cat >>/etc/sysctl.conf<<EOF
 net.ipv4.conf.all.arp_ignore = 1
 net.ipv4.conf.all.arp_announce = 2
 net.ipv4.conf.lo.arp_ignore = 1
 net.ipv4.conf.lo.arp_announce = 2
 EOF
 sysctl -p

 

2.3.2 lpvsadm与keepalive配合
 keepalived
 配置文件
 #GLOBAL CONFIGURATION 全局定义部分
 global_defs {
 1
 2
 老男孩教育-Linux学院
 router_id lb02 #keepalived身份 id 每个
 keepalived 不同
 }
 #VRRPD CONFIGURATION vrrp实例部分 虚拟路由冗余协议
 ##vrrp
 vrrp_instance oldboy { #实例名称 在同1对主备之间 要一
 
 state BACKUP #MASTER BACKUP
 interface eth0 #指定网卡 公网网卡
 virtual_router_id 62 #虚拟路由id 同1对 主备之间要一
 
 priority 100 #优先级 主>备
 advert_int 1 #interval 间隔 心跳间隔
 authentication { #认证
 auth_type PASS #简单认证
 auth_pass 1234
 }
 virtual_ipaddress { #vip
 10.0.0.3/24 dev eth0 label eth0:0
 #ip addr add 10.0.0.3/24 dev eth0 label eth0:0
 }
 }
 #ip addr add
 [root@lb01 ~]# ip a a 10.0.0.4/24 dev eth0 label
 eth0:0
 [root@lb01 ~]# ifconfig add eth0 10.0.0.5/24 up
 #LVS CONFIGURATION 管理lvs
 ##ipvsadm 通过命令
 ##keepalived 通过 配置文件控制lvs
 # vip 端口
 #ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20
 virtual_server 10.0.0.3 80 {
 delay_loop 6
 lb_algo wrr #轮询算法 lc least conn
 最小连接数
 # wlc
 #weighted round robin
 lb_kind DR # lvs DR模式
 nat_mask 255.255.255.0 #vip对应的子网掩码
 persistence_timeout 50 #会话保持时间 -p
 protocol TCP #协议 -t
 #ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
 real_server 10.0.0.7 80 { #rs服务器的配置
 weight 1 #权重
 TCP_CHECK { #-t TCP_CHECK 检查 传输层
 tcp/udp 端口
 #三次握手 建立连接 与你的
 端口建立连接
 #四次挥手
 # 或者 指定url进行http检查
 HTTP_GET
 connect_timeout 8
 nb_get_retry 3 #number of get retry 重
 试的次数
 delay_before_retry 3 #每次检查之前 等待3秒
 connect_port 80 #检查端口
 }
 }
 #nginx负载均衡
 #upstream web_pools {
 #server 10.0.0.7:80 wegiht=1 max_fails=3
 fail_timeout=30s ;
 #}
 real_server 10.0.0.8 80 {
 weight 1
 TCP_CHECK {
 connect_timeout 8
 nb_get_retry 3
 delay_before_retry 3
 connect_port 80
 }
 }
 }

2.4 zabbix监控

2.4.1zabbix监控体系
硬件温度 风扇转速 raid状态
系统 CPU 内存 磁盘 负载 网络
服务 状态 端口 进程 curl
应用程序 app 页面 php mysql
osi7层模型  
用户访问网站流程进行监控  
2.4.2自定义监控
 #存放配置ker键值对文件
 /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf  #自定义ker键值对 通过命令或者脚本进行监控

2.5 git代码上线

2.5.1 devops理念
  • 开发 运维 测试 共同协作 提高产品更新速度提高用户体验

  • devops 实现:设计架构框架规划-代码的存储-构建-测试-预生产-部署,监控

2.5.2 git目录结构
  • 名字含义 branches 分支目录 config 定义项目特有的配置选项 description 仅供git web程序使用 HEAD 指示当前的分支 hooks 包含git钩子文件 info 包含一个全局排除文件(exclude文件) objects 存放所有数据内容,有info和pack两个子文件夹 refs 存放指向数据(分支)的提交对象的指针 (位置 ) index 保存暂存区信息,在执行git init的时候,这个文件还没

2.5.3 git 常用命令
 git pull        #从远程仓库下载到本地仓库并合并代码
 git push -u #上传到远程仓库
 git clone (添加远程仓库地址) #下载到想要下载的目录中
 git remote add #添加远程仓库
 git add. #保存代码到缓存index中
 git rm --cached #删除缓存区文件
 git init #初始化仓库
 git status #查看缓存区状态
 git commit #把缓存区文件上传到本地仓库 -m #添加注释 -a #把修改了的文件(已经存在于本地仓库)直接存放到本地仓库
 git reset HEAD #清空缓存区
 git reset --hard #从本地仓库中某个状态恢复
 git log -p #显示详细的提交日志(commit)
 git branch #创建或删除分支 -d #删除
 git checkout #切换分支
 git checkout -b #创建并切换到该分支
 git show #查看指定标签详细信息
 git tag -a 标签名称 id号  #添加标签
 git tag #查看所有标签
2.5.4 github 配置
  • 打开官网 创建新的远程仓库 并本地连接远程仓库 创建ssh密钥对可供读写

2.5.5 gitlab安装部署
  • 打开gitlab网站 安装依赖

  • 修改配置文件/etc/gitlab/gitlab.rc

    • 修改地址为本机地址

  • gitlab-ctl reconfigure 启动程序

总结:git是操作本地仓库的 github操作远程共有仓库 一般企业都用的gitlab 因为gitlab拥有自己的私有仓库 比起GitHub更完善 更易于操作

2.6 Jenkins部署与搭建2.176版本

  • Jenkins存放密码文件启动Jenkins是可见目录

  • Jenkins插件可以先下载好并解压到/var/lib/jenkins/plugins/目录下 并移出解压目录下所有文件到当前目录 mv plugins/* .

  • 进程能够以何种身份调用一个文件,取决于这个用户身份对这个文件有没有权限 Jenkins默认用户为Jenkins需要修改为root用户才可以去调用别的文件

     vim /etc/sysconfig/jenkins

     

2.6.1持续集成与交付
2.6.2jenkins实现tag上线与回溯功能
 [root@jenkins /scripts]# cat html_deploy_tag_rollback.sh 
 #!/usr/bin/bash
 host="10.0.0.8 10.0.0.7"
 DATE=$(date +%F_%H-%M)
 Name=${DATE}-${git_version}
 ?
 ?
 get_code() {
  cd ${WORKSPACE}
  tar czf /opt/web-${Name}.tar.gz ./*
 }
 ?
 scp_web(){
 for i in $host
 do
  scp -r /opt/web-${Name}.tar.gz root@$i:/opt/
  ssh root@$i "rm -rf /code/web &&
                      mkdir -p /code/web-${Name} &&
                      tar xf /opt/web-${Name}.tar.gz -C /code/web-${Name} &&
                      ln -s /code/web-${Name} /code/web"
 done
 }
 ?
 back(){
 for i in $host
 do
  back_version=$(ssh root@${i} find /code/ -maxdepth 1 -type d -name "*-${git_version}")
  ssh root@$i "rm -f /code/web &&
                      ln -s ${back_version} /code/web"
 done
 }
 ?
 ?
 deploy(){
  get_code
  scp_web
 }
 ?
 ?
 if [ $deploy_env == "deploy" ];then
  if [ ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ];then
  echo "该版本 ${git_version} 已部署"
  exit
  else
  deploy
 
  fi
 elif [ $deploy_env == "rollback" ];then
  back
 fi

 

2.6.3 Jenkins + tomcat代码上线与回溯
  • Java项目需要先编译 源码包 > maven >jar包 > war包

    • jar包:

      • 可以独立运行 通过Java直接就可以启动 xxx.jar

      • 可以被其他软件依赖

  • 手动部署的思路?

    • 1.写一个java的项目?

    • 2.将代码推送到gitlab托管?

    • 3.本地jenkins服务器拉取gitlab上的java项目?

    • 4.修改项目连接数据库的信息?

    • 4.使用maven对该项目进行编译? (jar-->国外仓库 调整国内的仓库下载)

      • 安装java

      • 安装maven

      • yum install java maven -y (一定要安装在jenkins这台服务器)

        • 更改maven中eplo源指向国内源网站,下载连带关系更开

        • 通过maven下载代码连带关系

           mvn dean package -Dmaven.test.skip=true

           

      • 打包完整的war包 传递到远程仓库并做好标记版本

      • 连接远程数据库 并传递开发所给sql文件到远程数据库中

    • 5.清理web节点上/soft/tomcat/webapps/*

    • 6.将war推送到tomcat上,重命名为ROOT.war,然后重启tomcat (停止时需要等待3s)

    • 6.测试访问 over

  • jenkins部署java项目?

    • 1.创建一个maven的项目? --->插件 Maven Integration plugin

    • 2.在jenkins填写gitlab的项目地址?

    • 3.添加编译参数?

    • 4.配置jenkins集成jdk maven (告诉jenkins jdk maven在哪?)

    • 5.测试jenkins与java项目的集成?

    • 6.编写上线的shell脚本?

    • zrblog

    • jeesns -->安装向导

2.6.4 Jenkins部署是否成功钉钉通知
  • jenkins下载钉钉模块 输入机器人发送码

2.6.5 jenkins + sonarqube 完成代码扫描
  • 1.安装sonarqube

     #1.安装mysql
     [root@sonarqube ~]# yum localinstall mysql-community-*
     #2.启动mysql
     [root@sonarqube ~]# systemctl start mysqld
     #3.配置密码
     [root@sonarqube ~]# mysqladmin password ‘123456‘
     #4.创建库
     [root@sonarqube ~]# mysql -uroot -p123456 -e "create database sonar charset utf8;"
     ?
     ####sonarqube
     [root@sonarqube ~]# yum install java -y
     [root@sonarqube ~]# unzip sonarqube-7.0.zip -d /usr/local/
     [root@sonarqube ~]# ln -s /usr/local/sonarqube-7.0/ /usr/local/sonarqube
     ?
     #2.配置sonarqube连接数据库
     [root@sonarqube ~]# grep ‘^[a-Z]‘ /usr/local/sonarqube/conf/sonar.properties
     sonar.jdbc.username=root
     sonar.jdbc.password=123456
     sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
     ?
     #3.启动sonarqube
     [root@sonarqube ~]# useradd sonar
     [root@sonarqube ~]# chown -R sonar.sonar /usr/local/sonarqube-7.0/
     [root@sonarqube ~]# su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start"
     ?
     #4.登录sonarqube
      用户: admin
      密码: admin
     
     #5.导入插件
     [root@sonarqube ~]# mv /usr/local/sonarqube/extensions/{plugins,plugins_bak}
     [root@sonarqube ~]# tar xf sonar_plugins.tar.gz -C /usr/local/sonarqube/extensions/
     ?
     #6.重启sonarqube
     [root@sonarqube ~]# su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh restart"
     ?
     #7.让sonarqube开启验证
     配置-->配置-->权限 Force user authentication

     

  • 2.手动分析代码

     #1.安装sonar-scanner
     [root@jenkins ~]# unzip sonar-scanner-cli-4.0.0.1744-linux.zip -d /usr/local/
     [root@jenkins ~]# ln -s /usr/local/sonar-scanner-4.0.0.1744-linux/ /usr/local/sonar-scanner
     [root@jenkins ~]# vim /usr/local/sonar-scanner/conf/sonar-scanner.properties
     ?
     #2.配置sonar-scanner
     [root@jenkins ~]# cat /usr/local/sonar-scanner/conf/sonar-scanner.properties
     #----- Default SonarQube server #需要配置hosts解析
     sonar.host.url=http://sonar.oldxu.com:9000
     sonar.login=6b10565c085c63e589b8f82c3c1d459756f95318
     #----- Default source code encoding
     sonar.sourceEncoding=UTF-8
     ?
     #3.扫描代码
     /usr/local/sonar-scanner/bin/sonar-scanner
       -Dsonar.projectKey=html
       -Dsonar.sources=.
       
     mvn sonar:sonar
       -Dsonar.host.url=http://sonar.oldxu.com:9000
       -Dsonar.login=6b10565c085c63e589b8f82c3c1d459756f95318
  • jenkins + sonarqube集成

    • jenkins安装sonarqube插件

    • jenkins需要知道sanar客户端命令在哪里?系统管理>系统设置>全局工具配置->SonarQube Scanner

    • jenkins需要知道sonar服务器在哪里? 系统管理-->系统设置-->SonarQube servers

    • 改造项目支持sonarqube的扫描?

      • cms maven方式 #java项目

      • monitor sonar-scanner 方式 #html项目

      • hello-world sonar-scanner 方式 # java项目

2.6.6 分布式jenkins构建
  • master上有的除了jenkins其他都需要有

  • 点击创建节点

  • 保证slave可以和web集群与gitlab jenkins互通密钥

  • jenkins脚本上有的也必须要有并且保证脚本名称路径一致 才能保证正常运转

3.MySQL数据库

 

以上是关于运维之路梳理———未完,待更的主要内容,如果未能解决你的问题,请参考以下文章

always on 之路实践(未完)

mysql8.0 运维相关新特性(未完待续)

Python之路第一课Day6--随堂笔记(面向对象编程进阶...未完待续 )

Python之路第一课Day9--随堂笔记之一(堡垒机实例以及数据库操作)未完待续....

Tengine/Nginx/Openresty性能优化及杂谈(未完待续)

从零开始手写Tomcat的教程---未完待续