从问题的角度梳理知识
LINUX基础技能
1 计算机的组成和功能
按照冯诺依曼的计算机理论,计算机分为硬件和软件两部分,硬件中分为5块,运算器,控制器(CPU),存储器(内存),输入设备(键盘鼠标等),输出设备(显示器,打印机等),软件主要是底层操作系统和系统上安装的运行软件。
按照传统分类,主要是CPU,内存,硬盘,主板,鼠标,键盘,显示器等。
2 常用的LINUX发行版
linux是由linus torvalds,在1991年发布的类unit操作系统
发行版指的是预先继承好的linux操作系统和各种应用软件,不需要用户重新编译,只需要在使用的时候做一些设置即可。
发行版一般分为:
- 社区版
- 商业版
现在主要使用的是社区办,免费
- RedHat系列
- Redhat
- CentOS
- Fedora
- Slakware系列
1,suse
2,opensuse
- Debian系列
- Deepin
- debin
- ubuntu
各个系列的主要区别是:
包类型不同:
- 红帽系列的rpm包
- Debian系列的dpkg包
包管理工具不同:
- 红帽系列的yum
- Debian系列的apt-get
3 主要用的是那个版本
服务器上主要用的CentOS7.6 7.8
客户端或者桌面主要用Ubuntu
CentOS6系列和7系列的使用区别:
1,systemctl程序管理方式
2,iptables和firewalld防火墙
3,默认文件系统更不一样,6是ext4文件系统,7是xfs
4,内核升级,6是2.6内核,7是3.10,不过都可以通过升级内核来升级
5,数据库,6默认yum是安装的mysql,7默认安装的是mariadb
6,一些配置文件不一样了,比如主机名更改等
7,一些命令不同了,比如ifconfig,ip a ss -nltp
4 LINUX的设计思想
一切皆文件
所有的资源抽象为文件形式,包括硬件设备,比如物理终端console,虚拟终端tty1-6,伪终端pts
单一目的
一个程序只做一件事
多个小程序完成组合任务
多个小程序组合起来,来完成复杂的任务
避免交互
程序设计为少交互模式,方便用户调用和实现自动化操作
5 LINUX的命令
什么是linux命令,其实就是一些静态的二进制程序,在执行的时候,内核将这个二进制的命令运行为一个进程,然后进程来实现具体的功能
所以,命令其实是一个二进制格式的程序文件
普通命令:一般在/bin /usr/bin /usr/local/bin下面
管理命令:一般在/sbin /usr/sbin /usr/local/sbin下面
库文件是命令执行的过程中需要调用的一些库文件
32位的库:/lib /usr/lib /usr/local/lib
64位的库:/lib64 /usr/lib64 /usr/local/lib64
常用命令
ifconfig 查看网络
echo 显示内容,通常用在脚本里面
export 设置环境变量
pwd 显示当前目录
history 显示历史命令
shutdown 关机
reboot 重启
date 显示时间
hwclodk 硬件时钟
man 帮助手册
help 命令帮助
whoami 显示当前的登录用户名
w 显示当前所有的登录用户名 终端名 登录时间 登录的来源 当前在做什么
sort排序 常用sort -n 安装数字排序,sort -r 倒序
uniq去重 uniq -c 显示重复次数,经常用来日志统计访问次数
grep筛选
sed修改文件 sed -i 直接修改文件
6 各目录作用
/ 根目录,所有文件树的顶端
/bin目录,系统命令存放目录
/usr目录,系统程序存放地方
/var目录,日志目录
/sbin目录,系统管理命令目录
/root目录,root用户家目录
/home目录,普通用户家目录
/etc目录,系统配置文件目录
/dev目录,设备存储目录
/boot目录,内核和启动引导文件存放目录
/lib目录,库文件目录
/opt目录,可以把需要安装的软件装在这里
/mnt目录,一般用来挂载外接设备
/proc目录,系统运行信息和内核信息
7 Centos系统安装要点
- 分配目录/boot 1G ,swap 1G ,/ 其他所有空间
- 语言,主机名,网络等信息设置
- 安装软件,可以根据需要选择
8 文件管理
mkdir创建目录
~]# mkdir -pv /a/b/c/d
递归创建/a/b/c/d,并显示创建详细结果
rmdir删除目录
~]# rmdir -pv /tmp/a/b/c
递归删除/tmp/a/b/c,直到非空目录为止,并显示删除详细结果
tree显示树形结构
~]# tree /etc -L 2
以树状结构显示/etc/目录的目录结构,限定最多显示两个层级
cp文件复制
mv移动和重命名
rm删除文件
9 用户管理
用户分三类:
- 超级用户root
- 虚拟用户,满足linux运行自动创建的,不能登录,centos6是从1-499,centos7是1-999
- 普通用户,自己建立的用户centos6是500以上,7是1000以上
/etc/passwd 用户及其属性信息
/etc/group 组及其属性信息
/etc/shadow 用户密码及其相关属性
/etc/gshadow 组密码及其相关属性
useradd
-u uid 创建用户时指定uid
-g gid 指明用户所属基本组
-c 用户的注释信息
-M 不建家目录
-s 指定用户的默认shell
-e 用户过期时间
-G 为用户指明附加组,组须事先存在
usermod
-u UID: 新UID
-g GID: 新主组
-G 新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-s 新的默认SHELL
-c 新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字
-L: lock指定用户,在/etc/shadow 密码栏的增加!
-U: unlock指定用户,将/etc/shadow 密码栏取消!centos7不可以解锁
userdel
-r 删除用户时,连同其家目录,mail一同删除
id
-u: 显示UID
-g: 显示GID
-G: 显示用户所属的组的ID
-n: 显示名称,需配合ugG使用
su 切换用户或以其他用户身份执行命令
1、su 非登录式切换,不会读取目标用户的部分配置文件,不改变当前工作目录
2、su – 登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
3、root使用su切换至其他用户无须密码,其他用户之间切换或者切换到root需要密码
passwd 修改指定用户的密码,仅root用户权限
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
–stdin:从标准输入接收用户密码
groupadd
-g 创建指定gid的组
-r 创建系统组 CentOS 6: ID<500
CentOS 7: ID<1000
groupmod
-n newgrpname oldgrpname 修改组名
-g newgid groupname 修改gid
groupdel
groupdel 组名 删除组
gpasswd
-a user 将user添加至指定组中
-d user 从指定组中移除用户user
groupmems[options] [action]
options
-g 更改为指定组
actions
-a 指定用户加入组
-d 从组中删除用户
-p 从组中清除所有成员
-l 显示组成员列表
groups 查看用户所属组列表
[root@centos7 ~]#groups ma
ma : ma
root@centos7 ~]#groups zhu
zhu : zhu
通过ls -li可查看文件的长格式信息,我们取出一个进行解释
[root@centos7 /]#ls -li
64 dr-xr-xr-x. 4 root root 4.0K Jul 14 11:33 boot
第1列:inode号
第2列:第1个字符代表文件的类型(-是普通文件,d是目录等等)
第2-10个字符代表文件权限,前三个是用户的权限、中间三个用户组的、后面其他用户的权限
第11个字符.与SELINUX相关,暂时不做描述
第3列:文件的硬连接数
第4列:文件对应的属主或者用户
第5列:文件对应的属组或者用户组
第6列:文件大小
第7列:文件最后的修改的时间
第8列:文件名
修改文件属主和属组
chown 修改文件的属主(也可以改组)
用户 文件或者目录 <==仅仅授权用户
:组 文件活目录 <==仅仅授权组
用户:组 文件或目录 <==表示授权用户和组
-R 递归
–reference=源文件 目标文件
chgrp 修改文件的属组(只能改组)
—-reference=源文件 目标文件
-R 递归
文件权限
普通文件
r:可以读取文件的内容
w:可以追加或者覆盖文件的内容
x:可以执行改文件,需要和r配合
目录文件
r:可以查看目录下有哪些文件,不能查看文件的详细信息
w:可以在目录中创建和删除文件,需要x配合
x:可以cd进入该目录
文件权限可以用八进制来表示
r:4
w:2
x:1
例如:rwx=4+2+1=7
默认权限umask
真实用途,从对应的位中将umask指定权限去除
全局设置:/etc/bashrc
用户设置:~/.bashrc
新建目录权限=777-umask
新建文件权限=666-umask 看结果,有寄数,对位+1
无寄数 偶数不变,最终结
10 正则表达式
基本正则匹配选项必须用”“起来:
<^> 匹配字符串的开始
<$> 匹配字符串的结束。
<.>匹配除了换行符任意字符
<+> 匹配重复1次或更多次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
<或者\b 词首锚定 >或者\b词尾锚定
(xxx) 分组:将一个或多个字符绑定在一起进行处理注意匹配到的(内容而非正则本身)会被正则表达式引擎记录与内部变量中,可被后续调用\1,\2
| 或者:a|b a或b
[:alnum:] 字母和数字
[:alpha:] 任何大小写字符A-Z a-z
[:digit:] 十进制数[:xdigit:] 十六进制
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符
[:punct:] 标点符号
[任意要匹配的字符] 会递归取出
扩展正则:匹配选项必须用”“起来
<\b>单词的开头或结尾,单词的分界处。举例:hi后面跟着lucy,\bhi\b.*\blucy\b \bx{n次}\b
<*>匹配任意次0次或多次,前面的内容可以连续重复使用任意次以使整个表达式得到匹配
<\d>匹配一位数字,为了避免重复可以使用\d{n}必须连续重复n次–只有python正则支持
<\w> 匹配字母或数字或下划线或汉字。
<\s> 匹配任意的空白符-
<^> 匹配字符串的开始
<$> 匹配字符串的结束。
<.>匹配除了换行符任意字符
<+> 匹配重复1次或更多次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
[任意要匹配的字符] 会递归取出
11 VIM编辑器
编辑模式 i当前行 o启一个新行输入
保存欧式,输入:然后wq保存退出,q!是不保存退出
[[ 第一行
]] 最后一行
G 最后一行
gg 第一行
/word 搜索word这个字符
dd 删除所在行
12 脚本
- 脚本声明
#!/bin/bash
# ! /usr/bin/python
#!/usr/bin/perl
- 注释
井号是表示注释内容
- 写入脚本内容
- 保存退出
bash -x a.sh ,调试脚本
语法:
while
case
if
else
等等
13 查找命令
1、查找/var目录下属主为root,且属组为mail的所有文件
find /var -user root -group mail
2、查找/var目录下不属于root、lp、gdm的所有文件
find /var -not \( -user root -o -user lp -o -user gdm \)
#\( \) 与字符之间要有空格
3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
find /var -mtime -7 -not \( -user root -o -user postfix \)
4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
find / \( -nouser -o -nogroup \) -atime -7
5、查找/etc目录下大于1M且类型为普通文件的所有文件
find /etc/ -size +1M -type f
6、查找/etc目录下所有用户都没有写权限的文件
find /etc/ -not -perm +222
#都没有= -not 至少有一个
7、查找/etc目录下至少有一类用户没有执行权限的文件
find /etc/ -not -222
8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
find /etc/init.d -perm -113
14 文件安装
RPM 安装
rpm -ivh 1.rpm
YUM安装
yum install nginx -y
15 文件编译安装
C C++ 程序编译
- ./config编译makefile文件
- make 使用make方式,查找makefile文件,来编译程序
- make install 复制文件到相应路径
16 RAID
RAID0:条带卷(striping)
至少需要两块磁盘,做RAID分区的大小最好是相同的(也可以用相同大小的 两块磁盘直接做 RAID);把数据分割成若干个相同大小的chunk,依次均匀的存储在不同的磁盘 上,在读写的时候可以实现并发,所以读、写性能好;但是没有容错功能,任何一块磁盘损坏,将导 致全部数据的损坏。磁盘利用率100%。
RAID1:镜像卷(mirroring),至少需要两块硬盘,raid大小等于两个raid分区中最小的容量(最好将分区 大小分为一样),磁盘利用率50%;数据有冗余,在存储时同时写入两块硬盘,实现了数据备份;但 相对降低了写入性能,但是读取数据时可以并发,几乎类似于raid0的读取效率。
RAID5:最少需要三块硬盘,可以提供热备盘实现故障的恢复;采用异或运算,可靠性强,允许损坏一块磁盘,只有同时 损坏两块硬盘时数据才会完全损坏,只损坏一块硬盘时,系统会根据存储的异或校验位重建数据,临时提供服务;此 时如果磁盘阵列中有备用盘,系统会自动在备用盘上重建故障磁盘上的数据。
17 网络基础
1、某公司申请到一个C 类IP 地址,但要连接6 个的子公司,最大的一个子公司有26 台计算机,每个子公司在一个网段中,则子网掩码应设为?
C类地址是 192.168.0.0-192.168.255.255,C类地址的意思是用前24位表示网络,后8位表示主机位
可用网段数量是2 的24次方
每个网段可用主机是2的8次方,255个
分析:首先先看需要几个网段,这里是6个子公司,需要至少6个网段,2的几次方大于6,这里可以得到是3,也就是8个网络
这样,网络位是3个,剩余5个作为主机位,每个网段的主机数量是2的5次方,需要减去全0和全1的地址,就是30个可用的主机位
这样网段可以使
特殊地址:
0.0.0.0:不是一个真正意义上的IP地址。它表示一个集合:所有不清楚的主机和目的网络。
255.255.255.255:限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机
127.0.0.1~127.255.255.254:本机回环地址,主要用于测试。在传输介质上永远不应该出现目的地址为“ 127.0.0.1”的 数据包。
224.0.0.0到239.255.255.255:组播地址, 224.0.0.1特指所有主机, 224.0.0.2特指所有路由器。
224.0.0.5:指OSPF 路由器,地址多用于一些特定的程序以及多媒体程序
169.254.x.x:如果Windows主机使用了DHCP自动分配IP地址,而又无法从DHCP服务器获取地址,系统会为主机分配这样地址。
18 centos启动流程
这里以centos7为例来说明
1,bios加电自检,检查硬件,从boot 引导顺序中找第一个引导位置
2,读取硬盘上的boot loader,也就是MBR引导分区
3,加载linux 内核grub,加载驱动
4,加载根文件系统
5,切换到root用户系统
6,执行初始化命令init程序,/usr/llb/systemd/system
LINUX常见服务
1 CA证书原理
2 DNS服务
会使用bind来搭建自建DNS服务器
view VIEW_NAME {
zone
zone
zone
}
view internal {
match-clients { 172.16.0.0/8; };
zone "rookie.com" IN {
type master;
file "rookie.com/internal";
};
};
view external {
match-clients { any; };
zone "rookie.com" IN {
type master;
file rookie.com/external";
};
};
3 ftp服务和文件同步rsync
linux下proftpd服务的安装和配置
rsync文件同步服务
4 iptables
需要连接iptables的白名单和黑名单
实际操作是指默认策略是拒绝一切端口
然后添加允许策略在最前面
在最后加一条拒绝不匹配的规则
这样的好处是在清空防火墙策略等误操作下,保证默认策略允许,才能ssh连接,不会出现那种远程无法连接的情况
5 LAMP架构
WEB服务器
apache
nginx
tomcat
lighted
可以分离为3个设备
1,一台apahce
2,一台php-fpm
3,一台mysql
6 LVS+Keepalived
lvs可以实现自动调度,负载均衡
keepalived可以实现ip自动飘移,自动切换
7 负载均衡值lvs,nginx,haproxy
Nginx:专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 。它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。
LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器,具有很好的可伸缩性(Scalability)、可靠性(Reliablity)和可管理性(Manageability)
HAProxy:提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上
nginx特点:
1、工作在网络7层之上,可针对http应用做一些分流的策略,如针对域名、目录结构,它的正规规则比HAProxy更为强大和灵活,所以,目前为止广泛流行。
2、Nginx对网络稳定性的依赖非常小,理论上能ping通就能进行负载功能。
3、Nginx安装与配置比较简单,测试也比较方便,基本能把错误日志打印出来。
4、可以承担高负载压力且稳定,硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS小。
5、Nginx可以通过端口检测到服务器内部的故障,如根据服务器处理网页返回的状态码、超时等,并会把返回错误的请求重新提交到另一个节点。
6、不仅仅是优秀的负载均衡器/反向代理软件,同时也是强大的Web应用服务器。LNMP也是近些年非常流行的Web架构,在高流量环境中稳定性也很好。
7、可作为中层反向代理使用。
8、可作为静态网页和图片服务器。
9、Nginx社区活跃,第三方模块非常多,相关的资料在网上比比皆是。
lvs特点
1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低。
2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率。
3、工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案,如LVS+Keepalived,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived。
4、无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。
5、应用范围比较广,因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http、数据库、在线聊天室等等。
haproxy
1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段)
2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。
3、HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡。
区别分析
1,lvs是工作在OSI四层主要是网络转发,nginx和ha都是可以七层
2,ha和ng支持url转发和目录转发,实际应用较多
3,大并发可以选lvs,或者haproxy,一般并发可以选择nginx
简单地不负责任地说,性能上LVS>HA>Nginx,功能性和便利性上Nginx>HA>LVS
选型思考:
1,如果是web服务,建议用nginx,因为本身提供web服务,也可以向后端转发
2,如果是高并发,高流量业务,建议用lvs,因为网络流量本身消耗不大,效率高
3,如果是考虑功能性和支持虚拟主机,追求较高的负载速度,可以用ha
8 keepalived
主要做高可用,可以虚拟vip,同时支持检测设备状态在出现故障的时候,自动飘移虚拟ip地址到正常工作的节点上。
LINUX自动化技术
1 ansible
Ansible语法使用ansible <pattern_goes_here> -m <module_name> -a
-m NAME,–module-name=NAME:指定执行使用的模块
-u USERNAME,–user=USERNAME:指定远程主机以USERNAME运行命令
-C -check只检查不实际执行
-e EXTRA_VARS,引用外部参数
–list-hosts,列出执行主机列
将需要管理的主机写入host文件中,支持分组和起标签名
指定需要执行的模块,然后执行
ansible-playbook就是把一些需要执行的操作写入一个操作列表,然后调用这个列表来按照步骤执行,比如执行lamp的安装,lnmp的安装
ansible role,按照一定的目录结构,通过定义的role角色功能,来执行相关的操作,比如nginx role可以直接安装nginx服务全过程
LINUX之CI/CD
1 GIT
熟悉git的原理和基本使用
2 GITLab
一个类似github的代码管理工具,构建于服务器上,用于代码的版本控制,主要熟悉安装,管理,用户,项目,安全等管理和备份恢复
3 Jenkins
自动化流程控制工具,通过定义的工作流,实现自动调用,自动拉取代码,自动分析代码,自动编译,自动上线服务器
4 Jenkins-pipeline
jenkins流水线脚本,是一个高级点的控制流,通过流水线语法,grovy语法,可以实现较快捷方便的自动化工作。比如传统的脚本方式的优势是,层次分明,结构清晰,使用简单
LINUX之监控
1 Zabbix
比较流行的监控工具,支持分布式监控,比较适合低于1000节点的服务器集群监控方案,基于lnmp,lamp或者lnmpostgresql等方式构建,配置简单,支持自动监控,支持脚本方式监控,主动和被动模式监控等
这个是目前使用较多的监控方式
2 prometheus+grafana
golang语言开发的监控工具,使用metric值的key-value方式获取监控数据,可以直接在prometheus中查看监控指标和图形,但是结合grafana可以以美观的图形化展示页面显示监控信息,作为云计算方向最适合的监控工具应用,在监控docker,k8s等环境中,比较适合。
LINUX之数据库
1 oracle数据库
连接oralce的简单使用,和rac模式的原理,和网络架构原理
2 mysql数据库
熟悉mysql数据的安装和简单操作,这里主要用了5.7和8.0两个版本
5.7是上一代的稳定版本
8.0是新一代的稳定版本
mysql数据库的集群方式:
- 主从复制,可以一个master多个slave,基于binlog原理
- 读写分离,基于主从复制,前端加入读写分离控制组件,比如mycat等,当然也可以通过前端程序控制
- 高可用方案
1,keepalived虚拟vip,双主vip
2,MHA,日本公司出的一个技术,实现可以自动检测mysql状态,实现自动切换,缺点是切换后,如果恢复了不会自动恢复,需要手动调整
8.0比5.6的优势
1,安全级别更高了,比如更强的密码策略
2,默认innodb引擎,支持更大的数据量,支持事务,最大64TB的存储限制,行级锁,但是较myisam来说写入速度慢了,空间使用和资源使用较多了
3,支持json数据类型
4,支持在线增加主键,在线扩容varchar字段长度,在线重命名索引
5,全文索引增强
6,动态修改innodb的缓存池的大小
7,支持表空间数据加密
8,跳过锁等待如果更新或者查询遇到锁,直接报错返回,不会等待执行
6,架构层面可以支持多主 分表同步,比如从2个主master上,同步不同的库到一个slave方便在多个数据库的环境中,通过一个slave数据库进行备份
3 达梦数据库
国产的类oracle数据,收费,可以实现软件层面的高可用和负载均衡
4 postgresql数据库
新型的关系型数据库,国产有些数据库基于这个开源数据库进行修改发布,效率高,支持函数,支持事务,OLAP和OLTP效率都比较高,有慢慢赶超mysql的趋势
5 分布型数据库TiDB
国内pingcap公司开源的一款分布式数据库,基于功能分块,节点分布等逻辑,把sql查询,sql分析解释,数据存储进行分层规划,底层数据经过raft算法,保证数据一致性。
特点是:
1,分布式,速度快
2,扩容方便
6 内存性数据库Redis
基于内存的键值型数据库,可以用于数据前端缓存,高热数据读取等
Redis的最大特点当然就是key-value存储所带来的简单和高性能了。所谓key-value存储,就是每一条记录只包含一个用于查询数据的Key,以及与之对应的存储数据的value,而且redis是把数据存储在内存中,在nosql领域比mongo的速度快,而且支持数据持久化到硬盘中,比memcache等缓存技术强。
Redis牺牲了常规数据库中的数据表、复杂查询等功能,换来了很大的性能提升,特别适合那些对读写性能要求极高,且数据表结构简单(key-value、list、set之类)、查询条件也同样简单的应用场景。如果你的数据表结构还挺复杂,你还经常需要做一些复杂查询操作,那你最好还是老老实实用MongoDB或者SQL吧
7 MongoDB
nosql中的老大,有很多优点,当然也有缺点。
优点:
1,数据存储灵活
mogo中的数据存储实际上是把数据转化为json字符串存入,不像mysql有表,结构等概念,mogo中你可以将各种数据一股脑存进去,不用考虑结构,mysql相当于填空题,给了空格,必须按照空格的要求来填入,mongo像填空题,里面写什么内容自己来选择。
缺点:
1,事务操作不方便
就是因为没有明确的表结构,无法多表连接查询,而且复杂的事务操作非常复杂,对数据一致性和事务性要求较高的,还是用关系型数据库,mysql,oracle等
适用场景:
MongoDB很适合那些表结构经常改变,数据的逻辑结构没又没那么复杂不需要多表查询操作,数据量又比较大的应用场景
比如一个游戏,有各种角色,有各种技能,各种属性,等各种信息
如果用mysql:需要定义角色表,技能表,属性表,信息表,装备表等各种表,然后查询的时候,需要连接可能很多表才能查出来结果
如果用mogodb:只需要一个表,我可以把所有属性作为json存入进去
比如{
name:fashi
jineng: sharen
shuxing: niubi
.....
}
8 Nosql数据库选型
这个前提是nosql数据类型,就是对事物要求不高的数据。
如果你对数据的读写要求极高,并且你的数据规模不大,也不需要长期存储,选redis;
如果你的数据规模较大,对数据的读性能要求很高,数据表的结构需要经常变,有时还需要做一些聚合查询,选MongoDB;
如果你需要构造一个搜索引擎或者你想搞一个看着高大上的数据可视化平台,并且你的数据有一定的分析价值或者你的老板是土豪,选ElasticSearch;
如果你需要存储海量数据,连你自己都不知道你的数据规模将来会增长多么大,那么选HBase。
LINUX之云计算
1 Docker
熟练docker在window和linux平台下的安装使用,docker命令的使用操作
2 K8S
容器调度平台,用于调度容器,管理容器等
k8s的安装是个老大难的问题,主要的难点在证书这块,建议通过手动方案进行安装部署,可以熟悉证书的操作方式
熟悉k8s的操作命令
熟悉k8s的使用
3 Harbor
容器仓库,自建企业私有容器仓库,方便容器发布和管理
4 基于k8s的应用
1,构建k8s下的prometheus监控
2,构建k8s下的dashboad图形化操作页面
3,构建k8s下的jenkins和cicd操作
4,构建k8s下的helm容器管理
5 openstack和Cloudstack
均为开源的云计算底层软件,可以构建企业自建的私有云,cloudstack之前使用过,有web操作界面,方便的创建和维护虚拟机,底层使用xenserver, kvm,vmware等来构建虚拟机
综合网上的各种文章分析有以下特点:
1,cloudstack比较简单,适合企业内部自建私有云,构建方便,不依赖底层,支持虚拟化方案比较多
2,openstatck可以定制开发,适合有技术实力的大企业自研改造,比如华为云,金山云,腾讯云,京东云,苏宁云,阿里云是自研的飞天平台,底层不一样
6 虚拟化之vmware
目前使用过vmware的esxi技术,基于裸机构建底层虚拟化平台,在上面构建虚拟机,目前没有出现过什么问题。
7 云平台使用
目前没有用过华为云,七牛云,使用过腾讯云和阿里云
LINUX之虚拟化技术
1 硬件级别虚拟化
直接在物理硬件上运行,它控制硬件并管理虚拟机,又叫裸机虚拟机管理程序
redhat的KVM技术
基于内核的虚拟化,开源虚拟化平台,将linux的内核作为虚拟机管理程序,因此可以直接访问硬件
Vmware ESXI技术
直接在物理机逻辑上安装的虚拟机系统,类似linux系统,可以ssh连接操作,通过web页面来安装,配置虚拟机
思杰xen技术
开源的虚拟化平台,支持X86平台、IA64、ARM及其他CPU架构,提供了高效安全的功能特性
微软Hyper-V
半虚拟化技术
2 软件级别虚拟化
vmware workstations
桌面版的虚拟化软件
virtual box
oracle的桌面版虚拟化软件
云计算和虚拟化的区别
云计算是一种业务形态,比如iaas基础设置即服务器,pass平台即服务, sass软件即服务
虚拟化是一种具体的实现技术,比如vmware,xen,kvm,hyper-v等
LINUX之Python开发
1 python基础
熟悉python的数据类型,输入输出,运算符,判断,循环,函数,类,进程,线程,闭包,装饰器,文件操作,错误判断,正则表达式
2 python应用
- 运维方面,主要是ansible
- web开发方面,主要是flask框架和Django框架
- 爬虫方面,基于requeset ,beautifulsoup ,selnium等进行数据爬取分析
- 其他如机器学习testflow,数据分析,人工智能等方面
LINUX之golang开发
了解golang的开发语法,和python有些类似,但是也有很多区别,比如变量声明类型,输出语法,判断,强制对齐,缩进,指针,模块管理,跨平台等方便。
学习golang主要是因为现在主流的云计算领域的技术,比如docker,k8s,prometheus等都是基于golang语言的,是未来服务器端会比较流行的语言,因其执行效率高,使用方便,要给命令就可以运行,比较酷。
1 docker
开源的容器虚拟化技术,基于操作系统上的,目前主流的容器化技术
2 K8S
谷歌开源的容器编排系统,云计算领域的明星
3 prometheus
云计算领域的开源监控软件,效率高,速度快,支持大规模部署,未来会成为主流监控系统
4 grafana
图形化展示工具
5 etcd
分布式键值存储系统,k8s的核心组件
6 container
类似docker的容器工具
LINUX之大数据
1 Hadoop
大数据基础,比较复杂,目前未研究
2 kafka
消息队列系统
3 zookeeper
消息协调工具,结合kafka使用
LINUX之数据分析
ELK
ELK是Elasticsearch,Logstash,Kibana的简称,这三个工具组合形成了一套实用、易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台。
ES的特点,正如其名,那就是搜索。严格的说,ES不是一个数据库,而是一个搜索引擎,ES的方方面面也都是围绕搜索设计的。ES支持全文搜索,这里简单解释下什么是全文搜索:对于“我在北京的一家互联网公司工作”这样的数据,如果你搜索“北京”、“互联网”、“工作”这些关键词都能命中这条数据的话,这就是全文搜索,你每天都在用的百度、Google都属于全文搜索。值得一提的是,ES的全文搜索对中文也有很好的支持(单是中文分词器就有很多种),绝对能够满足国内大多数人的全文搜索需求。
缺点:对资源消耗非常大,64G内存+SSD是起步配置,因为很多索引需要占用资源,比mongodb占用资源大的多,适合财大气粗的,对查询效率要求较高的公司。
Elasticsearch是一个机遇lucene的搜索服务器,基于分布式全文搜索引擎,基于restful web接口,使用java开发的
Logstash是日志手机,转换,解析工具
Kibana前端显示框架,可以将日志转化为各种图表
Filebeat替代logstash的工具,比较轻量,因为logstash比较耗费资源
ELK是基于Elasticsearch 加上其他组件的日志搜索分析架构。
LINUX之必备技能神图
图示
解释
文本三剑客之grep,文本筛选
文本三剑客之sed,文本修改
文本三剑客之awk,文本行筛选
rsync 数据同步
inotify文本变化侦测
supervisor进程管理
screen 后台进程
性能分析 top free df iftop vmstat sar等
网络服务 vsftpd ftp服务
nfs 网络文件系统
samba 文件共享服务
bind DNS服务
dhcp 动态地址分配服务
postfix 邮件服务
web服务,nginx服务,apache服务,tomcat服务
数据库,mysql,mariadb,pgsql,oracle
nosql,redis,MongoDB文本数据库
消息中间件,rabbitMQ,activeMQ
程序版本控制,svn和git
缓存服务,squid,cdn缓存技术
负载均衡,lvs,haproxy,nginx
高可用,keepalived,HB
自动化集中管理,ansible,puppet
容器化和集群,docker,k8s,rancher,openshift
自动装机,kickstart,cobbler
抓包,tcpdump,wireshark
CI/CD,jenkins,gitlab
mysql代理,mysqlproxy,mycat,altas
压力测试,ab,sysbench
日志分析,ELK
监控,zabbix,prometheus,open-falcon
分布式文件系统,minio,mfs,ceph,glusterfs
WEB全栈工程师技能需求
行业应用分析
银行
根据和银行的朋友沟通了解,银行的技术一般为如下
底层:虚拟化技术,ESXI虚拟化技术,收费的
系统:LINUX系统,无版权风险
应用服务器:Weblogic或者websphere,均为按照cpu收费的模式
数据库:oracle数据库,按照cpu来收费的模式
总结:银行的系统,因为对数据的准确性和安全性要求较高,所有的组件均为收费模式,因为有人兜底
*
根据在*工作的经验了解,*的技术一般如下
底层:云计算,中原数据云,或者政务云,大数据局统一牵头建设的,各*组织经过审批来使用资源
系统:window和linux均有,但是感觉windowserver居多,因为一线操作人员熟悉windows系统
语言:.net 语言,java语言均有
应用服务器:iis,tomcat,apache,nginx均有
数据库:oralcle或者达梦,金仓等国产数据库
互联网公司
免费,无版权风险,是互联网公司的选型宗旨
1,底层:自采购服务器,或者采用云平台,阿里云,腾讯云,华为云
2,语言:java,python,go均有
3,系统:linux居多
4,应用服务器:nginx,tomcat,docker,k8s,均有
5,数据库:mysql,pgsql,oracle,redis,mongodb等均有
6,缓存:squid
均是采用比较新的技术选型