第一天-date相关

1、修改当前时间为明天日期

  1. date -s 20210830

2、 把当前目录file文件复制到/home 显示格式如下 file.2020-09-24

  1. cp /file /home/file.$(date +%Y-%m-%d)

3、实时同步时间实操题

  1. 0 12 * * *
  2. #分 时 日 月 周
  3. */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null

4、软硬链接的区别

软连接是连接到一个虚拟目录用多少占用多少空间
硬链接是直接链接到一个和原始文件一样大小的目录

删除的时候 rm /usr/local 这样只删除软连接; rm /usr/local/ 则带源文件一起删除

5、使用find 查看当前目录下以a.开头的所有文件

  1. find . -name "a.*"

6、查看/etc/passwd的第六行 使用head和tail

  1. head -n 7 /etc/passwd | tail -n 1

7、查看已使用总内存

  1. echo "剩余内存:free -mh| awk "NR==2" | awk '{print $3}'"

8、echo 3 >/proc/sys/vm/drop_caches 是什么意思

把一个字符3输入到drop_caches里面覆盖模式

9、MySQL的默认端口号是啥

3306

10、在/linux目录下查找权限为644的文件,并移动到/tmp目录下

  1. -type f 只查询文件
  2. xargs 把管道前边的值传递给一个过滤器
  3. mv -t destdir sourcedir sourcedir所有文件移动到 destdir目录
  4. find /usr/local -perm 644 -type f | xargs mv -t /tmp/

11、用sed修改test.txt的第十行的Linux为test

  1. sed -i '10 s/Linux/text/' test.txt

12、给一个文件a.sh 加一个执行权限

  1. chmod +x a.sh

第二天-常用技巧

快捷方式的使用方法

  1. ctrl+e 将光标快速移动到行尾
  2. ctrl+?? ?? 将光标按单词快速左右移动
  3. ctrl+w 将空格分隔的一个字符串整体进行删除(剪切)
  4. ctrl+u 将光标所在位置到行首内容进行删除(剪切)
  5. ctrl+k 将光标所在位置到行尾内容进行删除(剪切)
  6. ctrl+y 粘贴剪切的内容
  7. ctrl+s xshell进入到了锁定状态 suo
  8. ctrl+q 解除锁定状态 quit推出锁定状态

1、Linux改密码方法 centos7

重启的时候出现centos选项到时候按e

找到Linux16开头的再末尾加上init=/bin/sh

按快捷键ctrl+x进入单用户 输入mount -o remount,rw /

输入passwd 输入新的密码

输入touch /.autorelabel 输入exec /sbin/init等待重启

2、vi使用技巧

vi 文件信息

i —- 进入编辑模式

ESC —- 退出编辑模式

:wq —- 保存并退出

:wq!—- 强制保存退出

:q! —- 强制退出

3、更改yum源 为阿里云源 写出方法并实战

  1. 把原来的yum源重命名不以repo结尾
  2. curl -o /etc/yum.repos.d/aliyun.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  3. yum clean all && yum makecache

4、一个软件安装好了,如何利用rpm命令进行卸载

安装:rpm -ivh 软件名 卸载:rmp -e 软件名

5、如何创建多个用户(创建100个用户 zk1..zk100)

  1. #!/bin/bash
  2. for((i=1;i<101;i++));do
  3. useradd "zk${i}"
  4. done

6、已知一个服务的名称,请告知服务的端口号是什么

netstat -ano | grep 服务名

7、编辑一个测试文件

  1. [root@oldboyedu ~]# cat >> /oldboy/test.txt <<EOF
  2. zh01
  3. zk01
  4. olddog01
  5. zk02
  6. oldgirl02
  7. olddog02
  8. EOF

7.1、请筛选出有oldboy的信息
  1. cat test.txt | grep 'oldboy'

7.2、筛选有oldgirl的信息,但是要有oldgirl信息的下一行信息也显示
  1. cat test.txt | grep -A 1 'oldgirl'

7.3、修改test.txt文件内容 将所有oldboy信息修改替换为 python
  1. sed -i 's/oldboy/python' test.txt

7.4、修改test.txt文件内容 将所有python信息修改替换为 oldboy 使用tr
  1. cat test.txt | tr "python" "oldboy" > test.txt

8、如何将一个目录中以.txt结尾的文件,统一进行压缩处理

  1. find ./ -name "*.txt" | xargs zip txt.zip

9、如何找出/data目录中.txt结尾的文件,将找出的文件进行统一删除

  1. find /data -name "*.txt" | xargs rm -rf

10、如何找出/data目录中.txt结尾的文件,将找出的文件进行批量复制/移动到/tmp目录中

  1. find /tmp -name "*.sh" | xargs mv -t /usr/local

11、centos6里面如何用uid区分不同的用户类型

id 用户名称

ID=0 系统管理员

ID=1~499 系统服务相关

ID=500~65535 用户使用

12、总结linux系统中常用的压缩和解压命令 tar zip rar

tar -zxvf tar包名 || tar -czvf tar包名 待打包的文件

zip zip包名 待打包的文件 || unzip zip包名

rar a rar包名 待打包的文件 || rar x rar包名

13、查找服务器.doc文件结尾的文件找到并删除

  1. find / -name "*.doc" | xargs rm -rf

14、权限说明

  1. rwx -- 700
  2. rw--w---x 621
  3. rwx-wx--- 730
  4. r---wx-w- 432

15、修改服务器22端口为30002并禁止使用密码登录使用秘钥认证登录

  1. 修改端口:
  2. vim /etc/ssh/sshd_config
  3. port 22改为30002 保存退出
  4. systemctl restart sshd
  5. 使用密钥登录:
  6. 1a服务器登录b服务器 使用秘钥连接
  7. 执行:ssh-keygen -t rsa
  8. 这时.ssh目录下会生成私钥和公钥的键值对id_rsaid_rsa.pub
  9. [root@a ~]# scp /root/.ssh/id_rsa.pub root@192.168.1.101:/root/.ssh/authorized_keys
  10. [root@b ~]# chmod 600 /root/.ssh/authorized_keys
  11. [root@a ~]# ssh -l root 192.168.1.101
  12. 也可以这样:
  13. 输入命令:ssh-keygen,一直按回车,直至完成操作
  14. ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.100.11
  15. 2ab互相免密连接
  16. 执行:ssh-keygen -t rsa
  17. cd /root/.ssh
  18. mv id_rsa.pub authorized_keys
  19. scp -r /root/.ssh 192.168.100.11:/root
  20. 3windows 服务器产生秘钥 使用xhsell 使用公钥远程连接服务器
  21. 使用xshell 生成一对key
  22. 公钥复制到linux 服务器上 /root/.ssh/authorized_keys
  23. sed -i "s/PasswordAuthentication yes/PasswordAuthentication no/" /etc/ssh/sshd_config
  24. systemctl restart shhd

第三天-查找统计压缩

1、find使用方法:

1.1、根据文件大小查找命令:
  1. find ./ -type f -size 0

1.2、根据文件权限查找数据:
  1. find ./ -type f -perm 777

2、把 abc压缩成格式如 2020-09-29.abc.tar.gz

  1. tar -czvf $(date +%Y-%m-%d).abc.tar.gz abc

3、解压如上文件

  1. tar -zxvf 2021*.tar.gz

4、美元符号:$ 表达什么:

  1. $() 变量<br /> ! 作用:history历史命令里 !序号或者开头单词 可以直接执行相应的历史命令<br /> | 作用:左边的输出为右边的参数 ||则是左边失败后执行右边<br /> xargs 作用:相当于过滤器 给参数加一个执行的组合命令配合|

5、查找指定数据信息进行复制 查找出*.txt文件,批量复制到/tmp目录

  1. find ./ -name "*.txt" -exec cp {} /tmp \;

6、查找指定数据信息进行移动 查找出*.txt文件,批量移动到/tmp目录

  1. find ./ -name "*.txt" -exec mv {} /tmp \;

7、将以abc开头的行找出来?

  1. cat a.txt | grep "^abc"

8、将以linux结尾的行找出来?

  1. cat a.txt | grep "linux$"

9、将全部内容显示,但不要显示空行

  1. cat a.txt | grep -Ev "^$"

10、利用linux什么命令真正统计目录的大小?

  1. du -hs 目录名

第四天-进程之类

1、说一些你比较常用linux指令

  1. find top cat ls grep awk wc cd date ps -ef vim net stat

2、查看进程(例:如何查看所有xx进程)

  1. ps -ef | grep nginx

3、杀掉进程

  1. kill -9 进程号

4、启动/停止服务

  1. systemctl start 服务名
  2. systemctl stop 服务名
  3. 或者services

5、查看日志

  1. cat /var/log/具体日志名

6、查看端口:(如查看某个端口是否被占用)

  1. netstat -ano | grep 端口号

7、查找文件

7.1、查找大小超过xx的文件:
  1. find ./ -type f -size xxM

7.2、通过文件名:
  1. find ./ -type f -name "文件名"

8、vim(vi)编辑器

  1. :wq 保存退出
  2. :q 不保存退出
  3. GG 跳转到最后一行
  4. gg 跳转到开始
  5. yy 复制一行
  6. p 粘贴
  7. o 在当前行的下面新建一行
  8. i 编辑
  9. :set nu 显示行号
  10. /关键字 查找关键字 n下一个关键字位置

第五天-awk

1、用awk 打印整个test.txt (以下操作都是用awk工具实现,针对test.txt)

  1. awk '$0' test.txt

2、查找所有包含 ‘bash’ 的行

  1. awk '/bash/' test.txt

3、用 ‘:’ 作为分隔符,查找第三段等于0的行

  1. awk -F ":" '$3=="0" {print $0}' test.txt

4、用 ‘:’ 作为分隔符,查找第一段为 ‘root’ 的行,并把该段的 ‘root’ 换成 ‘toor’ (可以连同sed一起使用)

  1. awk -F : '$1=="root" {print $0}' test.txt | sed -r 's/root/toor/g'

5、用 ‘:’ 作为分隔符,打印最后一段

  1. awk -F : '{print $NF}' test.txt

6、打印列数大于20的所有行

  1. awk -F : 'NF > 20 {print $0}' test.txt

7、查出实时 哪个IP地址连接最多 哪个ip 访问大于 1000次 截取出来

  1. netstat -natlp|grep ESTABLISHED|awk '{print$5}'|awk -F : '{print$1}'|uniq -c|sort -rn|awk '{if($1>1)print $2}'

第六天-find

1.找出/tmp目录下,属主不是root,且文件名不以f开头的文件

  1. find /tmp -type f -not -user root -not -name "^f"

2.查找/etc/目录下,所有.conf后缀的文件

  1. find /etc/ -type f -name "*.conf"

3.查找/var目录下属主为root,且属组为mail的所有文件

  1. find /var -user root -group mail

4.查找/var目录下7天以前,同时属主不为root,也不是postfix的文件

  1. find /var ! -user root ! -user postfix -mtime -7

5.查找/etc目录下大于1M且类型为普通文件的所有文件

  1. find /etc -type f -size +1M -perm 644

6.查找/etc目录下所有用户都没有写权限的文件

  1. find /etc -type f ! -perm 222

**7.查找/目录下最后创建时间是3天前,后缀是.log的文件

  1. find / -type f -name "*.log" -mtime -3

8.查找/目录下文件名包含txt的文件**

  1. find / -type -name "txt"

9.查找/目录下属主是oldboy并且属组是oldboy的文件

  1. find / -type f -user oldboy -group oldboy

10.查找/目录下属主是oldboy但是属组不是oldboy的文件

  1. find / -type f -user oldboy ! -group oldboy

第七天-sed

1、利sed 取出ifconfIg ens33命令中本机的IPv4地址 可以百度扩展 了解即可

  1. ip addr | grep ens |grep inet |sed 's/^.*inet//'| sed 's/\/24.*//'

2、把/etc/passwd 复制到/root/test.txt,用sed打印所有行

  1. cp /etc/passwd /root/test.txt | sed

3、打印test.txt的3到10行

  1. sed -n '3,10p' test.txt

4、打印test.txt 中包含 ‘root’ 的行

  1. sed -n '/root/p' test.txt

5、删除test.txt 的15行以及以后所有行

  1. sed -n '15,$p' test.txt

6、删除test.txt中包含 ‘bash’ 的行

  1. sed -n '/bash/p' test.txt

7、替换test.txt 中 ‘root’ 为 ‘ha’

  1. sed -n 's/root/ha/p' test.txt

8、替换test.txt中 ‘/sbin/nologin’ 为 ‘/bin/login’

  1. sed -n 's#\/sbin\/nologin#\/bin\/login#p' test.txt

9、打印/etc/passwd的奇数行?

  1. sed -n '1~2p' /etc/passwd

10、打印/etc/passwd的偶数行?

  1. sed -n '0~2p' /etc/passwd

11、把/etc/httpd/conf/httpd.conf?件内的Linsten 80改为Listen 8081 sed 完成

  1. sed -n '/Linsten 80/Listen 8081/p' /etc/httpd/conf/httpd.conf

第八天-firewalld

1、查看默认zone

  1. firewall-cmd --get-default-zone

2、修改默认zone

  1. firewall-cmd --set-default-zone=work

3、在public区域添加协议

  1. firewall-cmd --add-service=ftp --zone=public

4、把http协议永久加入到public 区域

  1. firewall-cmd --zone=pubilc --add-service=http --permanent

5、 拒绝某一个IP 访问

  1. firewall-cmd --add-rich-rule="rule family 'ipv4' source address='192.168.0.4/24'"

6、开放端口服务演示

  1. firewall-cmd --permanent --zone=public --add-port=8080/tcp

6.1、删除端口:
  1. firewall-cmd --permanent --zone=public --remove-port=8080/tcp

6.2、永久生效:
  1. firewall-cmd --permanent --zone=public --add-port=8080/tcp --permanent

6.3、批量添加端口:
  1. firewall-cmd --permanent --zone=public --add-port=8080-8089/tcp

7、屏蔽ip和 删除异常ip 查看屏蔽ip:

  1. firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=屏蔽IP reject"
  2. firewall-cmd --permanent --remove-rich-rule ="rule family=ipv4 source address=屏蔽IP reject"
  3. firewall-cmd --lis-rich-rules

8、端口流量转发

  1. 检查是否允许伪装IP
  2. firewall-cmd --query-masquerade
  3. 永久允许防火墙伪装ip
  4. firewall-cmd --add-masquerade --permanent
  5. 3000端口流量转发到192.168.100.1081端口上:
  6. firewall-cmd --add-forward-port=port=3000:proto=tcp:toaddr=192.168.100.10:toport=81 --permanent

第九天

1、查询file.txt 以abc结尾的行

  1. cat file.txt | grep "abc$"

2、删除file.txt文件中的空行

  1. sed -ir '/(^$)/d' file.txt

3、打印file.txt 文件中的第10行

  1. sed -n '10p' file.txt

4、对MySQL数据库test进行备份和恢复

  1. mysqldump -u用户名 -p密码 数据库名字 test > backup.sql

5、在11月份,每天的早上6点到12点中,每隔2个小时执行一次/usr/bin/httpd.sh 怎么实现

  1. crontab -e
  2. * 6-12/2 * 11 * sh /usr/bin/httpd.sh

6、iptables和firewalld 都学习下 禁止 ip 10.10.10.1 访问本地80端口

  1. iptables -I INPUT -s 10.10.10.1/32 -ptcp --dport 80 -j DROP (-l禁止-D允许)
  2. firewall-mcd --permanent --add-rich-rule="rule family="ipv4" source address = "10.10.10.1" port protocol="tcp" port="80" reject" reject禁止accept允许 也可以remove移除相应规则)

7、查看http的并发请求数及其tcp连接数

  1. netstat -an | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'

8、统计80端口连接数

  1. netstat -anp | grep -i "80" | wc -l

9、统计已经链接上的,状态为established

  1. netstat -tn | grep "ESTABLISHED" | wc -l

10、查出哪个IP地址连接最多

  1. netstat -an | grep "ESTABLISHED" | grep -Ev "::" | awk '{print $5}' | awk -F : '{print $1}' | uniq -c | sort -rn | awk "NR == 1" | awk '{print $2}'

11、统计apache的access.log中访问量最多的ip

  1. cat access.log |awk '{print $5}' | uniq -c | sort -nr | head -1

12、如何查看占用端口8080的进程

  1. lsof -i:8080

第十天-cron定时任务

1、实战测试每隔3天 夜里2点 执行数据备份

  1. * 02 */3 * * /bin/cp

2、每5分钟用ping命令测试www.wanmei.com网站100次,并将结果保存到/root/network.log

  1. */5 * * * * ping -c 100 www.wanmei.com >> /root/network.log 2>&1
  2. 2>&1 标准错误重定向到标准输出

3、每天凌晨3:05 执行脚本tongji.sh并将输出的信息追加到/dev/null

  1. 05 03 * * * sh /usr/local/tongji.sh >> /dev/null 2>&1

4、crontab里0 2 1 /data/postmall/shell/a.sh

  1. 每周一凌晨2点会执行a.sh

5、00 22 rm -rf /test/ >>/tmp/log 2>&1

  1. 每天晚上22点会清空/test/的目录,并把输入日志和错误信息追加到/tmp/log

6、50 16 rm -rf /abc/ >>/dev/null 2>&1

  1. 每天下午450分会清空/abc/的目录,并把结果追加到/dev/null

7、50 17 1 tar zcf ./backup-date +%Y%m%d.tar.gz /data >/dev/null 2>&1

  1. 每周一下午550份会将/data目录下的数据打包到./backup.tar.gz中间会按时间区分,并把信息导出到/dev/null

8、15 03 6 sh /home/shell/collect.pl >/dev/null 2>&1

  1. 每周六凌晨315分会执行collect.pl脚本并把信息导入到/dev/null

9、00 00 1 tar zcf /tmp/etc-date +%F.tar.gz /etc

  1. 每天的零点零分打包/etc/目录到/tmp/下并按照时间保存

10、00 06-18/3,13 10 sh /opt/backup.sh

  1. 10月的6点-18点每隔3个小时,以及下午13点,执行/opt/backup.sh

第十一天

LVS与nginx的区别

LVS用于4层传输层,nginx用于7层应用层
LVS应用广泛几乎支持所有应用负载,而nginx则能对具体的http请求做异步负载,这一点是lvs所不具备的,所以目前常用的是lvs做前端负载,nginx做后端负载,结合使用提高了nginx网络流量带宽集中的瓶颈,也解决了lvs同步负载单一服务器出问题则全网瘫痪的缺陷

DNS轮询的作用?

DNS服务器将解析请求按照A记录的顺序,逐一分配到不同的IP上,这样就完成了简单的负载均衡
主要是为域名提供多个IP地址

递归查询和迭代查询分别是什么意思

递归是查询到最后返回所需要查询的具体内容,而迭代是告诉你下一次查询是找哪个域名服务器查询(也就是递归能查到底,迭代只能查一级)

企业文件目录增量实时同步 删除不同步 工作用inotify+rsync实时同步实现 实现演示下 %100熟练
都是修改inotify或者sersync的配置来监控指定目录下的读 写 更新 新增等操作在backup机器上做同样的操作
在改动配置文件的时候一定要注意相应的细分,比如增 该放到同一个事件,防止rsync多次同步影响效率和速度

公司web 服务器 突然 挂了,或者服务器被攻击了,如何快速解决

首先确定有没有错误代码 没有看日志,或者wershare抓包定位是到哪个IP出问题根据相应的IP定位服务器然后在检查具体的配置

第十二天-数据库

写出工作数据库常用指令

  1. --单表
  2. select * from where 条件 limit 行数
  3. --多表
  4. select * from 1
  5. join 2
  6. on 1=表2
  7. join 3
  8. on 2=表3
  9. where 条件
  10. group by 排序条件

公司单机数据库延伸主从架构 实施

  1. 主库修改my.cnf开启二进制日志 重启后创建同步用户slave并授予相应权限
  2. 从库用主库创建的slave用户登录测试 mysql -uslave -pslave123 -h172.16.0.7
  3. 从库开启二进制日志 并重启数据库
  4. 从库执行同步语句:change master to master_host="192.168.0.7",
  5. master_user="slave",
  6. master_password="slave123",
  7. master_port=3306,
  8. master_log_file="mysql-bin.000001",
  9. master_log_pos=587;
  10. 启动 start slave;
  11. 启动完看 show slave \G;主要是看masterslave两个线程状态

主主模式实战演示

  1. 在主从的基础上修改my.cnf配置文件为主主配置,双端都重启数据库
  2. 从库创建同步用户,主库测试 测完主库进mysql执行同步操作
  3. start slave启动线程后 show slave \G;主要是看masterslave两个线程状态

数据库MHA 高可用实施

  1. 环境:111从+mha
  2. 三台机器做ssh分发密钥,保证后边便捷操作
  3. mha主:
  4. 修改mysql的主配值文件;安装mhamanager管理端和manager客户端,修改mha配置/etc/mha/app1.cnfserver1一般是master机器,server2一般是slave机器,server3一般是mha机器;需要注意好server块的binlog路径要与mysqlddata路径一致,其他路径保证存在,没有的手动创建;ssh以及用户名密码配置要正确;安装nohub启动yum install coreutils
  5. mha从:
  6. 修改mysql主配置文件;安装mhamanager客户端,创建对应的mha用户(另外需要一台开启一个虚拟IP 需要与mhaIP漂移脚本的IP一致,网卡信息要写当前网络上已有的网卡)
  7. 都做的操作:
  8. 主和从都要开启软连接
  9. ln -s /usr/local/mysql-5.7.26/bin/mysqlbinlog /usr/local/bin/mysqlbinlog
  10. ln -s /usr/local/mysql-5.7.26/bin/mysql /usr/local/bin/mysql
  11. 做完后
  12. mha主启动:nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
  13. 查看集群状态:masterha_check_status --conf=/etc/mha/app1.cnf

数据库架构延伸 实施读写分离 一个主库负责写 一个从库负责读取

  1. 主从的基础上找一台做mycat管理服务器
  2. 主从:
  3. 创建一个mycat授权的用户
  4. mycat配置:
  5. 解压后修改mycatschemaserver配置项
  6. schema主要定义逻辑库和真实库的对照,以及接下来server配置的用户名密码(上面主从配置好的授权用户)
  7. server主要配置schema定义的逻辑用户和逻辑库
  8. 启动 ./bin/mycat start
  9. 查看默认端口8806是否启用

给开发建立一个用户kf 密码Hello88 授权只能select读取权限

  1. 7.0
  2. grant select on *.* to kf@'%' identified by "Hello88";
  3. 8.0
  4. create user kf@"%" identified by "Hello88"
  5. grant select on *.* to cao@'192.168.0.%';
  6. flush privileges;

数据库备份命令

  1. mysqldump -uroot -p123 -A > /backup/full.sql
  2. 面试问道你公司备份怎么做的?
  3. 月定时备份全备 故障恢复一般全量+binlog

数据库项目经验:要实战出来 都可以写到自己简历上

项目 1:数据库故障恢复项目: 会出现到简历上

  1. 背景环境:
  2. 正在运行的网站系统, 数据库版本 5.6.38,数据量 120G , 日业务增长 2M 备份策略:每天 23.00 执行计划备份
  3. 故障时间点: :
  4. 故障演练:模拟周三上午 10 点删除数据库恢复思路:
  5. 1.停止业务,避免数据二次损坏
  6. 2.找一个临时库恢复周三之前数据使用全备
  7. 3.截取周三 0 点到 9:59 数据转换,转换 sql, 进行恢复临时库
  8. 4.测试可用性和完整性
  9. 5.使用临时库顶替生产库
  10. 6.开启业务

项目2 :MySQL 数据库高可用解决方案项目背景:

  1. 在公司故障模拟演练中,发现目前主从复制架构,切换需要较长时间(15-30 分钟)。随着公司对用户体验的提升,目前的架构出现故障时,业务的实时性,已经不能很好的满足需求。所以,向 公司建议在原有架构的基础上进行改造,进一步提升用户体验。
  2. 责任职责:
  3. 1.负责调研企业主流高可用架构。
  4. 2.经过研究选择 MHA 高可用架构。
  5. 3.搭建部署 MHA 高可用架构。
  6. 4.搭建一主四从集群,一从库为延时从库(3h),一个从库作为级联从库连接到一个只读从库,用来提供数据分析。
  7. 项目结果:
  8. 通过搭建 MHA 高可用集群,使业务在主库故障情况下,在 15-30 秒业务恢复正常。通过延迟从库,防止逻辑人为的误删。

项目方案 3:Mysql 读写分离架构实施项目背景:

  1. 公司业务随着用户不断增加,数据库无法抗住大并发,经常会造成 mysql 锁表情况发生,为了更好提升用户的体验,对数据库架构进行调整
  2. 项目实施:
  3. 1、在原有的 mysql 主从架构基础,进行调整。
  4. 2、新增服务器一台安装 mycat,进行读写分离配置
  5. 3、测试环境测试没有问题时候,在业务量低谷的时候,修改代码连接 mycat
  6. 4、实现业务读写分离项目结果:
  7. 好处:增加数据库服务器,压力随之分摊到几个服务器中,减小数据库压力通过读写分离架构实施,解决用户量大造成数据库有压力问题,业务效率大大提高坏处:硬件成本大 数据库主从问题哈希一致性问题 单点故障问题

第十三天-redis集群

你们为什么使用redis?

  1. 数据库主要用的是MySQL,数据库已经支撑不住如此高的并发,于是引入了缓存中间件,市面上的中间件redismemcached我们有过了解, redis相比memcached来说用拥有更多的数据结构和支持更丰富的数据操作。 所以像我们公司设计复杂的结构和操作,我们选择了redis
  2. 内存上redis可以采用hash结构来做key-value 存储,由于其组合式的压缩使其利用率高于memcached
  3. 性能上, redis只使用单核,而memcached 可以使用多核,所以平均每一个核上的redis在存储小数据时比memcached性能要高。
  4. 数据持久化支持上,redis提供了两种持久化策略,分别是RDB快照和AOF日志,而memcached 不支持数据持久化操作

redis有哪些数据类型

  1. 字符串string,字典hash,列表list,集合set , 有序集合 SortedSet,因为公司涉及到高并发,所以还接触过Bloom Filter,以及支持全文搜索的RediSearch等。

redis是怎么做持久化的?

  1. 持久化有两种方式RDBAOF
  2. RDB做镜像全量持久化,AOF做增量持久化。 我们公司一般RDBAOF会配合起来使用。 redis实例重启的时候,会使用RDB持久化文件重构内存,在使用AOF重放近期的操作指令来恢复重启前的状态。
  3. 当然reids的机制是AOF开启且存在AOF文件时候,优先加载AOF文件。 AOF关闭或者AOF文件不存在的时候,加载RDB文件。
  4. 大流量的时候不要开AOF,开RDB即可
  5. 如果服务器突然断电,可以使用AOF恢复,AOF日志有sync属性配置,在高性能场景下使用定时sync,比如1s1次,这样即使断电最多丢失1s的数据。

redis集群你们怎么做的?

  1. 1 主从模式,一主多从。虽然redis单机的qps可以达到10W+,但是在某些高访问场景下依然不够用,一般通过读写分离来增加slave,减少主机压力。
  2. 这种方式需要用户自行开发主从切换功能,也就是使用哨兵去探测每个实例的健康状况,然后通过指令进行集群状态的改变。 当集群规模变大可以加入类似zk的主动通知功能,降低风险。一般可以维护几千个redis节点。
  3. 2 redis cluster是社区提供的亲生集群方案,官方当前推荐的方案, 主要特点是去中心化,不需要proxy代理。主要的用途是实现数据分片(Data Sharding),同样可以实现HA
  4. redis cluster 采用了hash槽的概念,集群会预先分配16384个槽,并将这些槽分配给具体的服务节点,通过Key进行CRC16(KEY)%16384 运算得到对应的槽是哪一个,从而将读写操作转发到该槽对应的服务节点。当有新的节点加入或者一处的时候,再来迁移这些槽以及对应的数据。 更方便的动态扩容和缩容。

redis有哪些应用场景

  1. 1、键过期:缓存,session会话,优惠劵过期
  2. 2、列表:排行榜
  3. 3、天然计数器:帖子浏览数,视频播放数,评论留言数
  4. 4、集合:兴趣标签,广告投放
  5. 5、消息队列:ELK

一个字符串类型的值能存储的最大容量是多少?

  1. 512M(官网数据)