分类: 技术

  • 查看linux接口进出口流量的命令;linux 网络监控;流量监控

    1、nload,左右键切换网卡

    2、sudo iftop

    3、sudo iptraf 按连接/端口查看流量

    4、sudo nethogs: 按进程查看流量占用

    5、ss: 连接查看工具

    6、dstat -nf

  • mysql开发使用规范

    本规范旨在帮助开发人员逐步建立合理使用数据库的意识,对数据库相关的资源申请、业务规范使用等提供规范性的指导,从而为公司业务系统稳定、健康地运行提供保障。

    以下所有规范会按照【强制】、【建议】两个级别进行标注,对于【强制】级别的设计需强制修改调整。


    [TOC]

    开发规范

    对象命名

    命名规范的对象,是指数据库SCHEMA、表TABLE、字段COLUMN、索引INDEX、约束CONSTRAINTS等

    • 【强制】凡是需要命名的对象,其标识符不能超过30个字符
    • 【强制】名称必须以英文字母开头,不得以 _(下划线) 作为起始和终止字母
    • 【强制】所有名称的字符范围为:a-z, 0-9 和_(下划线),禁用大写、特殊符号、保留字、汉字和空格
    • 【强制】所有名称统一使用小写,并采用下划线 _ 分割
    • 【强制】名称应该清晰明了,能够准确表达事物的含义,最好可读,遵循“见名知意”的原则
    • 【建议】数据库账户,一定要做到权限划分明确,读写帐号分离,并且有辨识度,能区分具体业务
      dba内部账户以dba_开头;
      应用账户以user_开头:如user_upc、user_upc_r 分别代表读写、只读账号;
      读写分离不提供额外账户,统一使用应用账户;
      所有账户必须都在主库创建,只读查询只能从非候选上操作;
      
    • 【建议】若按日期时间分表,必须符合 _YYYY[MM][DD] 格式
    • 【建议】若按HASH进行分表,库表名后缀使用十进制数,下标从0开始、下划线分隔、需要补0、每个库的表名相同,比如:
      db_00{table_00 - table_31}
      db_01{table_00 - table_31}
      db_02{table_00 - table_31}
      db_03{table_00 - table_31}
      
    • 【建议】备份用的库、表名须以bak为前缀,以日期yyyymmdd为后缀,比如 bak_order_20160425,便于查找和知道有效期
    • 【建议】临时用的库、表名须以tmp为前缀,以日期yyyymmdd为后缀,比如 tmp_order_20160425,正常业务用到的临时表、中间表,前后缀尽量不要包含 tmp 以免造成歧义

    库表设计

    • 【强制】生产/UAT环境建库建表,请参考《mysql建库建表规范》
    • 【强制】单实例的库数量不得超过20个,再多考虑拆分实例
    • 【强制】单库的表数量不得超过100个,再多考虑拆分库
    • 【强制】单表的字段数量不得超过30个,再多考虑垂直分表
    • 【强制】单表的数据量控制在2000万或数据容量超过10G以内,否则考虑归档或分库分表
    • 【强制】单表的分表数量不得超过256个
    • 【建议】如无特殊需求,必须使用Innodb存储引擎
      解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高;
    • 【建议】如无特殊需求,必须使用utf8mb4字符集,排序规则使用utf8mb4_unicode_ci
      解读:万国码,无需转码,无乱码风险,节省空间,utf8mb4更可保存emoj表情(utf8不行);
    • 【强制】新建的库表必须添加注释
      解读:N年后鬼知道这个r1,r2,r3字段是干嘛的
    • 【建议】表都必须要显式指定主键,推荐自增id主键
      解读:
      a)主键递增,数据行写入可以提高插入性能,可避免page分裂,减少表碎片提升空间和内存的使用
      b)主键要选择较短的数据类型,Innodb引擎普通索引都会保存主键的值,较短的数据类型可以有效的减少索引的磁盘空间,提高索引的缓存效率
      c)无主键的表删除,在row模式的主从架构,会导致备库夯住
      
    • 【强制】禁止使用外键,外键功能请在应用层实现
      解读:外键使得表之间相互耦合,影响update/delete等SQL性能,有可能造成死锁,高并发情况下容易成为数据库瓶颈
    • 【建议】日志类型的表必须提前规划轮转机制或者选择定期清理/归档 或者选择合适的db,比如hbase/mongodb
    • 【建议】建议将大字段,访问频度低的字段拆分到单独的表中存储,分离冷热数据
    • 【强制】数据库中不允许存储明文密码
    • 【建议】如果对时间精度有要求,建表的时候请注意一下时间精度,比如 timestamp 与 timestamp(3);
    • 【强制】无特殊需求,严禁使用分区表

    字段设计

    • 【强制】各表之间相同意义的字段必须同名
    • 【建议】字段类型在满足需求条件下越小越好,使用unsigned存储非负整数 ,实际使用时候存储负数场景不多
    • 【建议】数值类型优于字符类型,所以能使用数值类型的尽量不要使用字符类型
    • 【强制】小数类型应选择精确度高的decimal等类型,禁止使用float和double
      解读:浮点数(float和double)在存储的时候,超过指定精度后会四舍五入,这是浮点数特有的问题。因此在精度要求比较高的应用中(比如货币)要使用定点数(decimal)而不是浮点数(float和double)来保存数据。
    • 【建议】合理选择char、varchar、text等字符串类型
      对于长度基本固定的小字符类型,如果该列恰好更新又特别频繁,适合char
      不固定长度的大字符类型,应选择varchar类型,varchar(N),N代表的是字符数,N尽可能的小
      varchar虽然存储变长字符串,UTF8最多能存21844个汉字,或65532个英文
      
    • 【强制】禁止使用BLOB和TEXT字段。如要使用,尽可能把text/blob拆到独立的表中,用PK与主表关联;
    • 【强制】禁止在数据库中存储大文件,例如图片、文件等;
    • 【建议】合理选择bit、int、tinyint、decimal等数字类型
      使用tinyint来代替 enum和boolean
      使用Decimal 代替float/double存储精确浮点数
      建议使用 UNSIGNED 存储非负数值
      int使用固定4个字节存储,int(11)与int(4)只是显示宽度的区别
      列禁止使用bit类型,请用tinyint类型替代。bit类型加了索引可能会导致sql结果不准。
      
    • 【建议】合理选择timestamp与datetime等时间类型
      timestamp可以在insert/update行时,自动更新时间字段;
      列为timestamp类型,必须指定默认值,要么current_timestamp,要么'1970-01-02 01:01:01',不要设置为''或0;
      解读:DATETIME和TIMESTAMP都可用来表示YYYY-MM-DD HH:MM:SS类型的日期。两种都保存日期和时间信息,毫秒部分最高精确度都是6位数。建议使用TIMESTAMP(3)。
      A. TIMESTAMP占用4字节,DATETIME占用8字节,当保存毫秒部分时两者都使用额外的空间 (1-3 字节)。
      B. TIMESTAMP的取值范围比DATETIME小得多,不适合存放比较久远的日期。TIMESTAMP只能存储从 '1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999' 之间的时间。而DATETIME允许存储从 '1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999' 之间的时间。
      C. TIMESTAMP的插入和查询受时区的影响。如果记录的日期需要让不同时区的人使用,最好使用 TIMESTAMP。
      
    • 【建议】如无特殊需要,字段建议使用NOT NULL属性,可用默认值代替NULL。如果是索引字段,一定要定义为not null。因为null值会影响cordinate统计和优化器对索引的选择
    • 【强制】禁止在列上配置字符集
    • 【建议】使用unsigned int存储IPv4,不要使用char(15)
      解读:ip转int使用 INET_ATON 函数,int转ip使用 INET_NTOA 函数,比如:select inet_aton(‘192.168.1.1’),inet_ntoa(3232235777);
    • 【建议】使用varchar(20)存储手机号,不要使用整数
      解读:
      1)涉及到国家代号,可能出现+/-/()等字符,例如+86
      2)手机号不会用来做数学运算
      3)varchar可以模糊查询,例如 like '138%'
      

    索引设计

    • 【强制】单表索引的数量不得超过5个,否则增加维护负担、降低写入性能、占用更多空间
    • 【建议】建立的索引能覆盖80%主要的查询,不求全,解决问题的主要矛盾
    • 【建议】主键应选择不重复、长度小的列,没有特殊要求,使用自增id作为主键
    • 【建议】自增列的名字固定为id,指定unsigned,类型2选1(int/bigint),自增列的值必须从1开始
    • 【建议】主键禁止使用字符类型,禁止使用联合主键,推荐使用唯一索引来替代
    • 【建议】业务上具有唯一特性的字段,必须创建唯一索引
    • 【建议】不建议在频繁更新的字段上建立索引
    • 【建议】索引尽量建在选择性高的列上,不在低基数列上建立索引,例如性别、类型
      选择性的计算方式为: select count(distinct(col_name))/count(*) from tb_name
      如果结果小于0.2,则不建议在此列上创建索引,否则大概率会拖慢SQL执行
      
    • 【建议】合理利用覆盖索引,联合索引,避免过多的单列索引,合理使用索引来避免排序和临时表的使用
    • 【建议】对超过30个字符长度的列创建索引时,考虑使用前缀索引,比如 idx_cs_guid2 (f_cs_guid(26)) 表示截取前26个字符做索引,既可以提高查找效率,也可以节省空间
      解读:前缀索引的缺点是,如果在该列上 ORDER BY 或 GROUP BY 时无法使用索引,也不能把它们用作覆盖索引(Covering Index)
    • 【建议】blob列不能作为key
    • 【建议】bit类型字段禁止单独加索引,或者做联合索引的第一列
    • 【建议】尽量使用Btree索引,不要使用其它类型索引
    • 【建议】DML和order by和group by字段要建立合适的索引

    关于组合索引的几点建议

    • 【强制】组合索引的字段数量不得超过5个
      解读:如果5个字段还不能极大缩小row范围,八成是设计有问题
    • 【建议】组合索引 – 选择性高的永远在左边
    • 【建议】组合索引 – 避免冗余索引,比如:(a,b,c)、(a,b)、(a),后二者为冗余索引
    • 【建议】组合索引的最左匹配原则:数据库引擎使用组合索引时,从左向右(并非where条件顺序)匹配,遇到范围查询(>、<、between、like)则会停止索引匹配,无法用到后续的索引列。where条件里面字段的顺序与索引顺序无关,优化器会自动调整顺序。
      比如索引idx_a_b_c(a,b,c),相当于创建了(a)、(a,b)、(a,b,c)三个索引,后二者为冗余索引:
      ①where a=?                  用到(a)        ⑦where c=?           用不到
      ②where b=? and a=?          用到(a,b)      ⑧where b=? and c=?   用不到
      ③where a=? and c=?          用到(a)
      ④where a>? and b=?          用到(a)
      ⑤where a=? and b=? and c>?  用到(a,b,c)
      ⑥where a=? and b>? and c=?  用到(a,b)
      

    SQL设计

    • 【强制】禁止使用游标、存储过程、视图、触发器、自定义函数、event
      解读:高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。数据库擅长存储与索引,涉及CPU计算的还是放到应用服务器上吧
    • 【建议】建议将复杂的计算和逻辑操作放到程序端处理,而不是使用SQL语句处理,因为程序端方便扩容,数据库端扩容能力有限
    • 【建议】数据结构设计时,可以适当设计冗余字段,减少查询的复杂度,提高查询的性能
    • 【强制】禁止在数据库中存储大文件,例如图片、文件等,可以将大文件存储在对象存储系统,数据库中存储路径
    • 【强制】禁止使用全文检索(Full Text Search),后续有这种需求使用搜索引擎处理
    • 【强制】禁止在没有匹配索引的表上进行for update这类的操作,会锁定整个表
    • 【强制】未经过DBA同意,禁止在程序端大批量更新或者删除数据,因为这样操作很可能造成复制的大量阻塞和延时,批量归档/删除,可以向dba发邮件提需求,由dba来处理
    • 【强制】禁止在生产/线上环境进行代码逻辑或SQL语句性能的测试,这类操作应在开发或者测试环境进行
    • 【建议】减少锁等待和竞争,避免大事务,使用短小事务
    • 【建议】尽量避免使用子查询,使用join来代替
    • 【强制】禁止使用order by rand()
    • 【建议】多行数据需要做处理时,建议批量处理,而不是一条条来处理
    • 【强制】单表的数据量控制在2000万或数据容量超过10G以内,否则考虑归档或分库分表
    • 【强制】避免大表join,禁止3个大表的join,join字段类型需保持绝对一致,关联字段必须有索引
    • 【建议】线上业务修改或删除数据,务必根据主键来实现
    • 【建议】禁止使用 SELECT * ,必须明确指定列
    • 【建议】insert必须指定字段,禁止使用 insert into xxx values()
      解读:指定字段插入,在表结构变更时,能保证对应用程序无影响
    • 【建议】能确定返回结果只有一条时,使用 limit 1
    • 【建议】避免隐式类型转换
    • 【建议】禁止在where条件列上使用函数
    • 【建议】限制使用like模糊匹配,禁止使用左模糊或者全模糊,%不要放首位
    • 【建议】涉及到复杂sql时,务必先参考已有索引设计,先explain
    • 【建议】考虑使用union all,少使用union,注意考虑去重
    • 【建议】IN的内容尽量不超过200个
    • 【建议】建议在每条查询语句后面加上Limit关键字,控制返回的数据量,防止不可控的返回大量的数据
    • 【建议】禁止大批量的查询数据结果,如果需要返回大量数据,请使用分页的方式处理,遇到分页有大的offset查询,可以使用延迟关联来解决
    • 【建议】分页优化
      SELECT * FROM tel_record t1 INNER JOIN (SELECT id FROM tel_record WHERE qiye_id = xxx ORDER BY id DESC LIMIT 999900,100) t2 ON t1.f_id = t2.f_id;
      程序端保留当前页的最小id、最大id(id是主键),降序情况下,每次提取下一页的数据时,id < min_id order by id desc limit 100; 上一页 id > max_id order by id desc limit 100
      
    • 【建议】大表count是消耗资源的操作,甚至会拖慢整个库,查询性能问题无法解决的,应从产品设计上进行重构。例如当频繁需要count的查询,考虑使用汇总表
    • 【建议】数据库的隔离级别默认为READ-COMMITTED,如不能满足业务需求,可在session层面做相应调整(必须清楚相应的隔离级别带来的锁影响)
    • 【建议】数据库默认的sql_mode为严格模式(STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION),在此模式下任何不支持的语法或者数据校验不合格的,都将直接返回错误
    • 【建议】日志类数据不建议存储在MySQL上,优先考虑mongodb,如需要存储请找DBA评估使用压缩表存储
    • 【建议】禁止使用ENUM,可使用TINYINT代替
      解读:增加新的ENUM值要做DDL操作;ENUM的内部实际存储就是整数而非字符串;
    • 【建议】禁止使用OR条件,必须改为IN查询,并注意in的个数小于200
      解读:旧版本mysql的OR查询是不能命中索引的,即使能命中索引,为何要让数据库耗费更多的CPU帮助实施查询优化呢? 补充:通常情况下,如果条件中有or,即使其中有条件带索引也不会使用,所以除非每个列都建立了索引,否则不建议使用OR。在多列OR中,建议用UNION ALL替换。
    • 【建议】所有连接的SQL必须使用 join … on … 方式进行连接,而不允许直接通过普通的where条件关联方式。外连接的SQL语句,可以使用left join on的join方式,且所有外连接一律写成left join,而不要使用right join
    • 【建议】避免使用否定条件。
      例如,where 条件里面有<>、not in 、not exists的时候,即便是在这些判断字段上加有索引,也不会起作用。
    • 【建议】有NULL值的字段查询
      解读:
      A.不要使用count(列名)或者count(常量)来替代 count(*),count(*)是SQL92定义的标准统计行数的语法,跟数据库无关,跟null和非null无关。count(*)会统计值为null的行,而count(列名)不会统计此列为null的行。
      B.count(distinct col)计算该列除null之外不重复的行数。count(distinct col1, col2),如果其中一列全为null,那么即使另一列有不同的值,也返回0
      C.当某一列的值全为null,count(col)的返回结果为0,但sum(col)的返回结果为null,因此使用sum()时需要注意空指针异常的问题。可以使用ISNULL()来判断是否为NULL值: SELECT IF(ISNULL(SUM(g)), 0, SUM(g)) FROM table;
      
    • 【建议】SQL合并,主要是指的DML时候多个value合并,减少和数据库交互

    使用规范

    开发行为规范

    • 【强制】推广活动或上线新功能必须提前通知DBA进行流量评估
    • 【强制】禁止在线上环境申请个人账号,只能申请业务使用的账号
    • 【强制】超过10w条的大批量更新,如修复数据、导入导出,避开高峰期,并通知DBA。可直接执行的sql由DBA操作
    • 【建议】及时处理已下线业务的SQL
    • 【建议】复杂sql要主动上报DBA评估,比如多表join/count/group by等
    • 【建议】重要项目的数据库方案选型和设计必须提前通知DBA参与
    • 【建议】对单表的多次alter操作必须合并为一次操作
    • 【强制】分库分表情况下,确保所有库表字段顺序一致
    • 【强制】所有数据库账号必须在主库创建
    • 【强制】禁止在数据库中存放业务逻辑SQL
    • 【建议】对特别重要的库表,提前与DBA沟通确定维护和备份优先级
    • 【建议】维护脚本须部署在关联实例机器上,切勿乱放,比如归档,拉数据等
    • 【建议】线上大批量delete和update,为了降低锁影响和减少从库延迟,必须批量执行,思路参考pt-archiver
    • 【强制】线上业务不允许申请truncate、drop权限,如果需要删除表,请提交工单并由dba操作
    • 【建议】线上不允许建立业务相关数据库JOB,业务逻辑在代码层实现
    • 【建议】线上不允许使用长事务,慎用set autocommit=0或者begin,推荐使用set autocommit=1,超时5秒的事务,DBA JOB会自动kill

    线上变更规范

    • 【强制】生产系统变更数据,请参考《线上变更规范》
    • 【建议】数据变更流程,可参考下图:

    mysql-upd-eflow

  • 应用软件安装·版本指导

    关于应用软件版本的选择,推荐使用官方、最新的LTS版(长期支持版本)。

    注:LTS(Long-Term Support)版本被认为是最稳定的版本,它经历了广泛的测试,并且大多包含了多年积累的改进。
    注:此文更新日期 2023-09-08

    操作系统

    • 关于操作系统的选择,考虑到 CentOS 7.9 将于 2024-07-30 停止更新,企业服务则推荐 Redhat Enterprise 8.6(有授权费用),免费系统则推荐 Oracle Linux 7.9,阿里云则推荐 Alibaba Linux 3.2104 LTS
    • 信创场景,推荐 银河麒麟 Server V10 SP3,若华为服务器则推荐 EulerOS 2.5
    • 免费场景,推荐 Ubuntu 22.04
    系统名称 推荐的版本 发布日期 官方地址
    CentOS CentOS 7.9 2014-06-10 https://www.centos.org/centos-linux
    Red Hat Red Hat Enterprise Linux release 8.6 2022-05-10 https://developers.redhat.com/products/rhel/download
    银河麒麟 Kylin Server V10 SP3 2023-04-28 https://www.kylinos.cn
    Ubuntu Ubuntu 22.04.2 LTS 2023-02-23 https://cn.ubuntu.com/download/server/step1
    openEuler openEuler 22.03 LTS SP2 2022-04-15 https://www.openeuler.org/zh/download
    Oracle Linux Oracle Linux 9.3 2024-04-23 https://yum.oracle.com/oracle-linux-isos.html
    Windows Windows Server 2022 2021-11-05 https://www.microsoft.com/zh-CN/windows-server
    虚拟化 Proxmox VE 7.4-1 2023-03-23 https://pve.proxmox.com/wiki/Downloads
    VMware 服务端 VMware vSphere Hypervisor (ESXi) 8.0U1a 2023-06-01 https://customerconnect.vmware.com/en/downloads
    VMware 个人版 VMware Workstation 17.0.2 Pro 2023-04-25 https://www.vmware.com/products/workstation-pro.html
    VirtualBox 7.0.12 2023-10-17 https://www.virtualbox.org/wiki/Downloads

    运维相关

    软件名称 当前最新的版本 发布日期 官方地址
    Docker 24.0.1 2023-05-19 https://download.docker.com/linux/static/stable/x86_64
    docker-compose v2.18.1 2023-05-17 https://github.com/docker/compose/releases
    Harbor v2.8.1 2023-05-12 https://github.com/goharbor/harbor/releases
    Rancher 2.7.1 2023-04-14 https://ranchermanager.docs.rancher.com/getting-started/overview
    Kubernetes 1.25.13 2023-08-24 https://kubernetes.io/releases/download https://github.com/kubernetes/kubernetes/releases
    Istio 1.17.2 2023-04-05 https://istio.io/latest/docs/setup/getting-started/#download
    Jenkins 2.387.3 LTS 2023-05-03 https://www.jenkins.io/download
    Gitlab 16.0 2023-05-22 https://about.gitlab.com/releases
    Zabbix 6.4 2023-05-30 https://www.zabbix.com/download
    Prometheus 2.44.0 2023-05-13 https://prometheus.io/download
    SkyWalking 9.4.0 2023-03-11 https://archive.apache.org/dist/skywalking
    Sentinel 1.8.6 2022-10-25 https://github.com/alibaba/Sentinel/tags
    Gluster 11.0 2023-02-07 https://download.gluster.org/pub/gluster/glusterfs
    openssl 3.1.2 2023-08-01 https://ftp.openssl.org/source
    openssh 9.7p1 2024-03-11 https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable

    DBA相关

    软件名称 当前最新的版本 发布日期 官方地址
    Redis 7.0.11 2023-04-17 https://redis.io/download
    MySQL 8.0.32 2023-03-20 https://www.percona.com/downloads https://downloads.mysql.com/archives
    MongoDB 6.0.6 2023-05-12 https://www.mongodb.com/try/download/community https://www.mongodb.com/try/download/shell
    PostgreSQL 15.3 2023-05-11 https://www.postgresql.org/download
    SQL Server 2022 2022-11-16 https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads
    SSMS 19.1 2023-05-24 https://docs.microsoft.com/en-us/sql/ssms
    Oracle 21c 2021-08-13 https://docs.oracle.com/en/database/oracle/oracle-database/index.html
    TiDB 7.1.0 2023-05-31 https://docs.pingcap.com/zh/tidb/stable/release-notes
    Couchbase 7.6.0 2024-03 https://www.couchbase.com/downloads
    Memcached 1.6.30 2024-09-05 https://memcached.org/downloads
    Archery v1.9.1 2022-10-07 https://github.com/hhyo/archery/releases
    sqle v2.2304.0 2023-04-28 https://github.com/actiontech/sqle/releases
    Yearning v3.1.4 2023-04-24 https://github.com/cookieY/Yearning/releases

    开发相关

    软件名称 当前最新的版本 发布日期 官方地址
    JDK 1.8.0_381 2023-03-21 https://www.oracle.com/java/technologies/downloads
    OpenJDK 20.0.2 2023-06-14 https://jdk.java.net/archive (开源jdk,但也是oracle维护)
    Python 3.11.3 2023-04-05 https://www.python.org/downloads
    Node.js v20.12.1 2024-04-03 https://nodejs.org/en/download
    Nginx 1.25.0 2023-05-23 https://nginx.org/en/download.html
    Apache httpd 2.4.57 2023-04-06 https://httpd.apache.org/download.cgi
    Apache Tomcat 10.1.9 2023-05-19 https://tomcat.apache.org
    Apache Log4j 2.20.0 2023-02-17 https://logging.apache.org/log4j/2.x/download.html
    OpenSSL 3.1.0 2023-03-14 https://www.openssl.org/source
    MinIO RELEASE.2023-09-07 2023-09-07 https://min.io/download#/linux https://dl.min.io/server/minio/release
    MinIO Client RELEASE.2023-09-07 2023-09-07 https://dl.min.io/client/mc/release
    xxl-job 2.4.0 2023-03-23 https://github.com/xuxueli/xxl-job/releases
    ZooKeeper 3.8.1 2023-01-30 https://zookeeper.apache.org/releases.html
    ElasticSearch 8.7.1 2023-05-03 https://www.elastic.co/cn/downloads/elasticsearch
    org.kie/drools 8.39.0.Final 2023-05-25 https://www.drools.org/download/download.html
    Go 1.20.5 2023-02-01 https://golang.google.cn/dl
    Maven 3.9.3 2023-06-26 https://maven.apache.org/download.cgi https://maven.apache.org/docs/history.html
    Metabase 0.50.6 2024-06-19 https://github.com/metabase/metabase/releases
    antd 5.8.6 2023-09-02
    element-ui 2.15.4 2021-08-03
    dva 2.6.0-beta.19 2019-11-21
    umi 4.0.79 2023-09-01
    react 18.2.0 2022-06-15
    react-dom 18.2.0 2022-06-15
    webpack 5.88.2 2023-07-13

    大数据相关

    软件名称 当前最新的版本 发布日期 官方地址
    Hadoop 3.3.5 2023-03-22 https://hadoop.apache.org/releases.html
    Hive 3.1.3 2022-04-08 https://hive.apache.org/general/downloads
    HBase 2.5.4 2023-04-14 https://hbase.apache.org/downloads.html
    Spark 3.4.0 2023-04-13 http://spark.incubator.apache.org/downloads.html
    azkaban 4.0.0 2021-03-18 https://github.com/azkaban/azkaban/tags
    Oozie 5.2.1 2022-07-18 https://archive.apache.org/dist/oozie
    DolphinScheduler 3.1.7 2023-05-25 https://dolphinscheduler.apache.org/zh-cn/download
    Flume 1.11.0 2022-10-24 https://flume.apache.org/releases/index.html
    Sqoop 1.4.7 2020-07-06 https://archive.apache.org/dist/sqoop
    DataX v202303 2023-03-23 https://github.com/alibaba/DataX/releases
    Flink 1.17.0 2023-03-23 https://flink.apache.org/downloads
    Storm 2.4.0 2022-03-25 https://storm.apache.org/downloads.html
    Kafka 3.4.0 2023-02-07 https://kafka.apache.org/downloads
    Erlang 26.0.1 2023-06-08 https://www.erlang.org/downloads https://github.com/rabbitmq/erlang-rpm/releases
    RabbitMQ 3.12.1 2023-06-26 https://www.rabbitmq.com/download.html https://www.rabbitmq.com/news.html

    微服务技术栈

    软件名称 当前最新的版本 发布日期 官方地址
    Nacos 2.2.4 2023-06-20 https://github.com/alibaba/nacos/tags
    seata v2.0.0 2023-11-24 https://github.com/seata/seata/tags
    Spring Cloud Alibaba 2022.0.0.0 2023-07-25 https://sca.aliyun.com/zh-cn/version/version
    vue 2.7.14 2022-11-09
    vuex 3.6.2 2021-01-26
    vue-router 3.6.5 2022-09-06
    apisix
    Apollo
    Sentinel

    好用的镜像站

    分类 网站用途 下载地址
    linux 基于linux的rpm下载 http://rpm.pbone.net
    linux 基于linux的rpm下载-推荐 https://rpmfind.net/linux/rpm2html/search.php
    ubuntu 基于ubuntu的deb下载-官方-推荐 https://packages.ubuntu.com
    ubuntu 基于ubuntu的deb下载 https://launchpad.net/ubuntu
    不限os系统 华为云-镜像库 https://mirrors.huaweicloud.com/repository
    不限os系统 清华大学-开源软件镜像站 https://mirrors.tuna.tsinghua.edu.cn
    信创-麒麟 麒麟V10的rpm源 https://update.cs2c.com.cn/NS/V10
    信创-鲲鹏 华为云-镜像库-鲲鹏系统 https://mirrors.huaweicloud.com/kunpeng
    python 基于python的package下载 https://pypi.org
    python 基于Wheel格式的python包下载 https://www.lfd.uci.edu/~gohlke/pythonlibs
    工具 i tell you 工具资源下载 https://msdn.itellyou.cn/
    Copyright © www.sqlfans.cn 2023 All Right Reserved
  • 常用软件快速安装

    [TOC]

    基础环境

    安装 docker 24.0.1

    • 适用于:Centos 7.9、Kylin V10、EulerOS 2.5、Ubuntu 20.04、Oracle Linux 7.9
    curl -sL 'http://iso.sqlfans.cn/docker/install_docker_2401.sh' | bash
    docker --version
    

    安装 docker-compose 2.18.1

    • 适用于:Centos 7.9、Kylin V10、EulerOS 2.5、Ubuntu 20.04、Oracle Linux 7.9
    curl -sL 'http://iso.sqlfans.cn/docker/install_docker_compose_2181.sh' | bash
    docker-compose --version
    

    安装 jdk 20.0.2

    • 适用于:Centos 7.9、Kylin V10、EulerOS 2.5、Ubuntu 20.04、Oracle Linux 7.9
    curl -sL http://iso.sqlfans.cn/jdk/install_openjdk_2002.sh | bash
    source /etc/bashrc
    java -version
    

    安装 jdk 1.8.0_391

    • 适用于:Centos 7.9、Kylin V10、EulerOS 2.5、Ubuntu 20.04、Oracle Linux 7.9
    curl -sL http://iso.sqlfans.cn/jdk/install_jdk_8u391.sh | bash
    source /etc/bashrc
    java -version
    

    安装 node.js 16.20.2

    • 适用于:Centos 7.9、Kylin V10、EulerOS 2.5、Ubuntu 20.04、Oracle Linux 7.9,请使用与glibc兼容的node.js版本
    curl -sL http://iso.sqlfans.cn/linux/install_nodejs_16202.sh | bash
    node -v
    

    安装 gcc 4.8.5

    • 适用于:Centos 7.9、Kylin V10、EulerOS 2.5、Oracle Linux 7.9,不支持 Ubuntu
    #.在线安装
    # yum install -y gcc
    
    #.离线安装
    curl -L http://iso.sqlfans.cn/linux/gcc-4.8.5.tar.gz -o /opt/gcc-4.8.5.tar.gz
    tar xvf /opt/gcc-4.8.5.tar.gz -C /opt/
    rpm -Uvh /opt/gcc-4.8.5/*.rpm --nodeps --force
    gcc --version
    

    安装 python 3.12.3

    • 适用于:Centos 7.9、Kylin V10、EulerOS 2.5、Oracle Linux 7.9,不支持 Ubuntu
    #.安装gcc及zlib这2个必要依赖
    yum install -y gcc zlib zlib-devel
    
    #.开始安装
    curl -sL 'http://iso.sqlfans.cn/python/install_python_3123.sh' | bash
    python3 --version
    pip3 --version
    

    安装 pip 19.3.1

    • 适用于:Centos 7.9、Kylin V10、EulerOS 2.5、Oracle Linux 7.9,不支持 Ubuntu
    #.基于 Python 2.7.5
    curl -sL 'http://iso.sqlfans.cn/python/install_pip_1931.sh' | bash
    pip --version
    

    常用中间件

    安装 nginx 1.25.0

    • 适用于:Centos 7.9、Kylin V10、EulerOS 2.5、Oracle Linux 7.9,不支持 Ubuntu
    #.开始安装
    cd /opt
    wget -c http://iso.sqlfans.cn/linux/zlib-1.2.11.tar.gz
    wget -c http://iso.sqlfans.cn/linux/pcre-8.44.tar.gz
    wget -c http://iso.sqlfans.cn/linux/openssl-1.1.1g.tar.gz
    wget -c http://iso.sqlfans.cn/linux/nginx-1.25.0.tar.gz
    wget -c http://iso.sqlfans.cn/linux/nginx_openssl_conf.conf
    wget -c http://iso.sqlfans.cn/linux/install_nginx_1250.sh
    bash install_nginx_1250.sh
    
    #.确认版本
    /usr/local/nginx/sbin/nginx -version
    

    安装 mysql 5.7.44

    • 适用于:Centos 7.9、Kylin V10、Oracle Linux 7.9,不支持 Ubuntu
    #.ubuntu请改为:apt install -y libaio1 libaio-dev
    
    #.开始安装
    cd /opt
    curl -L http://iso.sqlfans.cn/mysql/percona-server-5.7.44-48.tar.gz -o /opt/percona-server-5.7.44-48.tar.gz
    curl -sL http://iso.sqlfans.cn/mysql/config/5.7/my_innodb.cnf -o /opt/my_innodb.cnf
    curl -sL http://iso.sqlfans.cn/mysql/install_percona_5744.sh -o /opt/install_percona_5744.sh
    bash install_percona_5744.sh /opt /data 3306
    
    #.登录测试
    mysql -udba_admin -pcf_rB1NKCzbaQuPH -S /tmp/mysql_3306.sock -e"select host,user,plugin,account_locked from mysql.user;"
    

    安装 mysql 8.0.32

    • 适用于:Centos 7.9、Kylin V10、Oracle Linux 7.9,不支持 Ubuntu
    #.开始安装
    cd /opt
    curl -L http://iso.sqlfans.cn/mysql/percona-server-8.0.32-24.tar.gz -o /opt/percona-server-8.0.32-24.tar.gz
    curl -sL http://iso.sqlfans.cn/mysql/config/8.0/my_innodb.cnf -o /opt/my_innodb.cnf
    curl -sL http://iso.sqlfans.cn/mysql/install_percona_8032.sh -o /opt/install_percona_8032.sh
    bash install_percona_8032.sh /opt /data 3306
    
    #.登录测试
    mysql -udba_admin -pcf_rB1NKCzbaQuPH -S /tmp/mysql_3306.sock -e"select host,user,plugin,account_locked from mysql.user;"
    

    安装 mysql 8.4.0

    • 适用于:Centos 7.9、Kylin V10、Oracle Linux 7.9,不支持 Ubuntu
    #.开始安装
    cd /opt
    curl -L http://iso.sqlfans.cn/mysql/percona-server-8.4.0-1.tar.gz -o /opt/percona-server-8.4.0-1.tar.gz
    curl -sL http://iso.sqlfans.cn/mysql/config/8.4/my_innodb.cnf -o /opt/my_innodb.cnf
    curl -sL http://iso.sqlfans.cn/mysql/install_percona_8401.sh -o /opt/install_percona_8401.sh
    bash install_percona_8401.sh /opt /data 3306
    
    #.登录测试
    mysql -udba_admin -pcf_rB1NKCzbaQuPH -S /tmp/mysql_3306.sock -e"select host,user,plugin,account_locked from mysql.user;"
    

    安装 redis 6.2.5

    • 适用于:Centos 7.9、Kylin V10、Ubuntu 20.04、Oracle Linux 7.9,在 EulerOS 2.5 会遇到 Permission denied 问题
    #.开始安装
    cd /opt/
    wget -c http://iso.sqlfans.cn/redis/redis-6.2.5.tar.gz
    wget -c http://iso.sqlfans.cn/redis/install_redis_625.sh
    bash install_redis_625.sh /data 6379
    
    #.登录测试
    echo "info keyspace" | /usr/local/bin/redis-cli -a RbY9k2_NBf1QWy8I -c -p 6379 2>/dev/null
    

    安装 redis 7.0.11

    • 适用于:Centos 7.9、Kylin V10、Ubuntu 20.04、Oracle Linux 7.9,在 EulerOS 2.5 会遇到 Permission denied 问题
    #.开始安装
    cd /opt/
    wget -c http://iso.sqlfans.cn/redis/redis-7.0.11.tar.gz
    wget -c http://iso.sqlfans.cn/redis/install_redis_7011.sh
    bash install_redis_7011.sh /data 6379
    
    #.登陆测试
    echo "info keyspace" | /usr/local/bin/redis-cli -a RbY9k2_NBf1QWy8I -c -p 6379 2>/dev/null
    

    安装 mongodb 6.0.6

    • 适用于:Centos 7.9、Kylin V10、EulerOS 2.5、Oracle Linux 7.9,不支持 Ubuntu
    #.从5.0开始要求CPU必须支持AVX指令集,执行如下命令若无返回则表示不支持adx
    cat /proc/cpuinfo | grep avx
    
    #.开始安装
    cd /opt
    wget -c http://iso.sqlfans.cn/linux/numactl-2.0.12-5.el7.x86_64.rpm
    wget -c http://iso.sqlfans.cn/linux/openssl-1.0.2k-26.el7_9.x86_64.rpm
    wget -c http://iso.sqlfans.cn/mongodb/mongodb-linux-x86_64-rhel70-6.0.6.tgz
    wget -c http://iso.sqlfans.cn/mongodb/mongosh-1.6.0-linux-x64.tgz
    wget -c http://iso.sqlfans.cn/mongodb/install_mongodb_606.sh
    bash install_mongodb_606.sh /data 3717
    
    #.登陆测试
    echo "db.system.users.find();" | /usr/local/mongodb/bin/mongosh -u dba_admin -p 1_yyJnwRD48CbSql --authenticationDatabase admin --host 127.0.0.1 --port 3717 admin
    

    安装 postgresql 10.12-1

    • 适用于:Centos 7.9、Kylin V10、Oracle Linux 7.9,在 EulerOS 2.5 会遇到 Permission denied 问题
    #.开始安装
    cd /opt/
    wget -c http://iso.sqlfans.cn/postgresql/postgresql-10.12-1-linux-x64-binaries.tar.gz
    wget -c http://iso.sqlfans.cn/postgresql/install_pgsql_1012.sh
    wget -c http://iso.sqlfans.cn/postgresql/my_pgsql.conf
    bash install_pgsql_1012.sh /opt /data 1921
    
    #.登陆测试
    /opt/pgsql/bin/psql -h 127.0.0.1 -p 1921 -U postgres -d postgres -c "SELECT * FROM pg_shadow;"
    

    安装 oracle 11g

    • 适用于:Centos 7.9、Kylin V10、Oracle Linux 7.9
    #.开始安装
    cd /opt/
    wget -c http://iso.sqlfans.cn/oracle/p13390677_112040_Linux-x86-64_1of7.zip
    wget -c http://iso.sqlfans.cn/oracle/p13390677_112040_Linux-x86-64_2of7.zip
    wget -c http://iso.sqlfans.cn/oracle/install_oracle_11g.sh
    bash install_oracle_11g.sh
    
    #.登陆测试
    su - oracle -c "sqlplus / as sysdba"
    SQL> select * from v
    $version
    ;
    

    安装 minio 2023-06-29

    • 适用于:Centos 7.9、Kylin V10、EulerOS 2.5、Ubuntu 20.04、Oracle Linux 7.9
    #.开始安装
    mkdir -p /data/minio_9000/{data,logs}
    curl -L http://iso.sqlfans.cn/linux/minio.2023-06-29 -o /data/minio_9000/minio
    chmod +x /data/minio_9000/minio
    
    export MINIO_ROOT_USER
    =minioadmin
    export MINIO_ROOT_PASSWORD
    =Admin_147
    nohup /data/minio_9000/minio server /data/minio_9000/data --console-address=
    ":9100" > /data/minio_9000/logs/minio.log 2>
    &1 &
    
    #.登录测试
    地址:http://{ip}:9100
    账号:minioadmin
    密码:Admin_147
    

    安装 elasticsearch 7.10.1

    • 适用于:Centos 7.9、Kylin V10、Oracle Linux 7.9
    #.开始安装
    curl -sL 'http://iso.sqlfans.cn/linux/install_elasticsearch_7101.sh' | bash
    /data/elasticsearch_9200/bin/elasticsearch --version
    
    #.登陆测试
    curl http://127.0.0.1:9200/_cat/indices?v
    
    Copyright © www.sqlfans.cn 2023 All Right Reserved
  • mysql究竟是否适合运行在docker容器中

    目前,容器和 Docker 依旧是技术领域最热门的词语,无状态的服务容器化已经是大势所趋,同时也带来了一个热点问题被大家所争论不以:数据库 MySQL 是否需要容器化?

    [TOC]

    认真分析大家的各种观点,发现赞同者仅仅是从容器优势的角度来阐述 MySQL 需要容器化,几乎没有什么业务场景进行验证自己的观点

    反过来再看反对者,他们从性能、数据安全等多个因素进行阐述 MySQL不需要容器化,也举证了一些不适合的业务场景。

    下面,我们就聊一下 Docker 不适合跑 MySQL 的 N 个原因!

    数据安全问题

    不要将数据储存在容器中,这也是 Docker 官方容器使用技巧中的一条。容器随时可以停止、或者删除。当容器被rm掉,容器里的数据将会丢失。

    为了避免数据丢失,用户可以使用数据卷挂载来存储数据。但是容器的 Volumes 设计是围绕 Union FS 镜像层提供持久存储,数据安全缺乏保证。如果容器突然崩溃,数据库未正常关闭,可能会损坏数据。另外,容器里共享数据卷组,对物理机硬件损伤也比较大。

    性能问题

    大家都知道,MySQL 属于关系型数据库,对IO要求较高。当一台物理机跑多个时,IO就会累加,导致IO瓶颈,大大降低 MySQL 的读写性能。

    在一次Docker应用的十大难点专场上,某国有银行的一位架构师也曾提出过:“数据库的性能瓶颈一般出现在IO上面,如果按 Docker 的思路,那么多个docker最终IO请求又会出现在存储上面。现在互联网的数据库多是share nothing的架构,可能这也是不考虑迁移到 Docker 的一个因素吧”。

    其实也有相对应的一些策略来解决这个问题,比如:

    1)数据库程序与数据分离

    如果使用Docker 跑 MySQL,数据库程序与数据需要进行分离,将数据存放到共享存储,程序放到容器里。如果容器有异常或 MySQL 服务异常,自动启动一个全新的容器。

    2)跑轻量级或分布式数据库

    Docker 里部署轻量级或分布式数据库,Docker 本身就推荐服务挂掉,自动启动新容器,而不是继续重启容器服务。

    3)合理布局应用

    对于IO要求比较高的应用或者服务,将数据库部署在物理机或者KVM中比较合适。目前腾讯云的TDSQL和阿里的Oceanbase都是直接部署在物理机器,而非Docker 。

    状态问题

    在 Docker 中水平伸缩只能用于无状态计算服务,而不是数据库。

    Docker 快速扩展的一个重要特征就是无状态,具有数据状态的都不适合直接放在 Docker 里面,如果 Docker 中安装数据库,存储服务需要单独提供。

    目前,腾讯云的TDSQL(金融分布式数据库)和阿里云的Oceanbase(分布式数据库系统)都直接运行中在物理机器上,并非使用便于管理的 Docker 上。

    资源隔离方面

    资源隔离方面,Docker 确实不如虚拟机KVM,Docker是利用Cgroup实现资源限制的,只能限制资源消耗的最大值,而不能隔绝其他程序占用自己的资源。如果其他应用过渡占用物理机资源,将会影响容器里 MySQL 的读写效率。

    需要的隔离级别越多,获得的资源开销就越多。相比专用环境而言,容易水平伸缩是Docker的一大优势。然而在 Docker 中水平伸缩只能用于无状态计算服务,数据库并不适用。

    难道 MySQL 不能跑在容器里吗?

    MySQL 也不是全然不能容器化。以下几种场景还是适合的。

    • 对数据丢失不敏感的业务(例如用户搜索商品)就可以数据化,利用数据库分片来来增加实例数,从而增加吞吐量。
    • docker适合跑轻量级或分布式数据库,当docker服务挂掉,会自动启动新容器,而不是继续重启容器服务。
    • 数据库利用中间件和容器化系统能够自动伸缩、容灾、切换、自带多个节点,也是可以进行容器化的。

    典型案例:同程旅游、京东、阿里的数据库容器化都是不错的案例,大家可以自行去查看。

  • 云原生之使用Docker部署开源Leanote蚂蚁笔记

    一、Leanote蚂蚁笔记介绍

    1.Leanote简介

    Leanote 蚂蚁笔记是一款云笔记工具,蚂蚁笔记(又名LeaNote)就是一款国产开源的私有云笔记软件。它支持普通格式笔记、Markdown语法、专业数学公式编辑、和思维脑图,常见的笔记相关功能它都拥有,同时也支持 vim&emacs 输入,持私有本地部署。

    2.Leanote功能

    • Markdown 语法支持
    • 无干扰写作模式
    • Vim和Emacs编辑模式
    • 将笔记导出为 PDF
    • 批注操作
    • 可定制的博客主题
    • 思维导图功能
    • Docker快速本地化部署

    二、本次实践介绍

    1. 本次实践简介

    1.本次实践部署环境为个人测试环境,生产环境请谨慎; 2.本次实践为快速使用docker部署开源Leanote蚂蚁笔记。

    2. 本地环境规划

    本次实践环境规划:
    hostname
    IP地址
    Leanote镜像版本
    操作系统版本
    jeven
    192.168.3.166
    latest
    centos 7.6

    三、检查本地Docker环境

    1. 检查本地Docker版本

    检查Docker版本
    代码语言:shell
    复制
    [root@jeven ~]
    # docker version
    Client: Docker Engine - Community
     Version:           20.10.17
     API version:       1.41
     Go version:        go1.17.11
     Git commit:        100c701
     Built:             Mon Jun  6 23:05:12 2022
     OS/Arch:           linux/amd64
     Context:           default
     Experimental:      true
    
    Server: Docker Engine - Community
     Engine:
      Version:          20.10.17
      API version:      1.41 (minimum version 1.12
    )
      Go version:       go1.17.11
      Git commit:       a89b842
      Built:            Mon Jun  6 23:03:33 2022
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.6.6
      GitCommit:        10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
     runc:
      Version:          1.1.2
      GitCommit:        v1.1.2-0-ga916309
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0

    2. 检查Docker服务状态

    检查Docker服务状态,确保Docker服务正常运行。
    代码语言:shell
    复制
    [root@jeven ~]
    # systemctl status docker
    ● docker.service - Docker Application Container Engine
       Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
       Active: active (running) since Mon 2023-05-15 20:34:37 CST; 9h ago
         Docs: https://docs.docker.com
     Main PID: 10133 (dockerd)
        Tasks: 25
       Memory: 1.1G

    四、下载Leanote镜像

    本次使用Leanote容器镜像从dockerhub拉取,版本为latest版本。
    代码语言:shell
    复制
    [root@node ~]
    # docker pull axboy/leanote
    Using default tag: latest
    latest: Pulling from axboy/leanote
    23884877105a: Pull complete 
    bc38caa0f5b9: Pull complete 
    2910811b6c42: Pull complete 
    36505266dcc6: Pull complete 
    a4d269900d94: Pull complete 
    5e2526abb80a: Pull complete 
    d3eece1f39ec: Pull complete 
    358ed78d3204: Pull complete 
    1a878b8604ae: Pull complete 
    978c572f0440: Pull complete 
    35a600ffcf6a: Pull complete 
    fa9f812cdfe6: Pull complete 
    7a8109e27110: Pull complete 
    e7cb12a43d53: Pull complete 
    98477f6eb1fd: Pull complete 
    Digest: sha256:9542a462043c9d293e8eda12e1b48ada77ae411121583631c5fa94083a730ef5
    Status: Downloaded newer image for axboy/leanote:latest
    docker.io/axboy/leanote:latest

    五、部署Leanote应用

    1.创建数据目录

    创建Leanote容器挂载的数据目录
    代码语言:shell
    复制
    [root@node ~]
    # mkdir -p /data/leanote/{db,conf,files,upload}
    [root@node ~]
    # cd /data/leanote/
    [root@node leanote]
    # 

    2.创建Leanote容器

    使用docker-cli命令快速创建Leanote容器。
    代码语言:shell
    复制
    docker run -d -p 9800:9000 \
        -e "TZ=Asia/Shanghai"
    \
        --restart
    =always\
        -v /data/leanote/db:/data/db \
        -v /data/leanote/conf/:/data/leanote/conf \
        -v /data/leanote/files:/data/leanote/files \
        -v /data/leanote/upload:/data/leanote/public/upload \
        -m 50M --oom-kill-disable --memory-swap=-1\
        --name leanote \
        axboy/leanote
    image.png
    image.png

    3.查看Leanote容器状态

    检查Leanote容器状态状态
    代码语言:shell
    复制
    [root@node leanote]
    # docker ps
    CONTAINER ID   IMAGE                                                   COMMAND                  CREATED          STATUS          PORTS                                                                                                                             NAMES
    587ff7c0b1c7   axboy/leanote                                           "docker-entrypoint.s…"   18 seconds ago   Up 14 seconds   27017/tcp, 0.0.0.0:9800->
    9000/tcp, :::9800->
    9000/tcp                                                                              leanote

    4.查看Leanote占用资源

    检查Leanote容器所在系统资源。
    代码语言:shell
    复制
    [root@node leanote]
    # docker stats --no-stream leanote 
    CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT   MEM %     NET I/O     BLOCK I/O       PIDS
    587ff7c0b1c7   leanote   0.30%     31.5MiB / 50MiB     63.01%    656B / 0B   541MB / 904MB   43

    六、访问Leanote首页

    直接访问:http://192.168.3.166:9800/ 进入Leanote首页
    image.png
    image.png

    七、Leanote基本操作

    1.设置简体中文

    选择语言为简体中文
    image.png
    image.png

    2.登录Leanote

    user1 username: admin, password: abc123 (管理员, 只有该用户才有权管理后台, 请及时修改密码)
    user2 username: demo@leanote.com, password: demo@leanote.com (仅供体验使用)
    image.png
    image.png
    image.png
    image.png

    3.新建笔记

    image.png
    image.png

    4. 后台管理

    进入Leanote蚂蚁笔记的后台管理
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    八、Leanote的博客功能

    1. 设置笔记为公开博客

    将个人笔记设置为公开博客
    在这里插入图片描述
    在这里插入图片描述

    2. 查看个人博客页面

    选择“我的博客”功能模块,进入个人博客页面。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3. 博客设置

    选择博客设置,进入博客管理页面。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4. 更换博客主题

    在博客管理页面,选择个人喜欢的主题。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表
  • 免费的异地组网神器Docker搭建教程-ZeroTiger

    v2-51c5c3590efa6bfbc4f4db36053da73c_1440w

    ZeroTiger是一个国外的服务商所提供的基于P2P的组网方案,它可以通过软件的形式实现将我们需要组网的设备加入到一个虚拟的局域网中,从而实现数据的交换。

    组网逻辑:

    1.组网设备接入Zerotier,并通过ID加入指定的虚拟网络。

    2.当设备之间发生数据交换时,网络调度设备间尝试P2P直连。

    3.失败时,从网络中寻找moon服务器作为中转。

    我们使用自己的云服务自建Moon服务器加入Zerotier网络,当P2P失败时,数据始终通过我们自建的私有根服务器作为中转。私有网络需要认证才可以加入,具有一定的安全性。

    1.搭建Zerotier根服务器

    依然使用我们的老伙计docker来实现,创建很简单,一条命令创建即可。

    docker run --restart=on-failure:3 -d --name ztncui -e HTTP_PORT=4000 -e HTTP_ALL_INTERFACES=yes -e ZTNCUI_PASSWD=admin@123 -p 4000:4000 keynetworks/ztncui
    
    v2-50aeecc54c9895c8574b0a4165221526_1440w

    2.搭建Moon服务器

    前面也介绍过了,使用Zerotier在一定程度上是可以P2P打洞成功的,不成功的时候就可以使用我们的Moon服务器来进行中转,保证完成组网。此服务需要占用tcp及udp的9993端口

    # 创建一个持久化存放文件的目录
    mkdir -p /opt/docker/moon
    # 获得云服务器的公网ip
    public_ip=`curl ip.sb`
    # 建立moon服务器
    docker run --name zerotier-moon -d -p 9993:9993 -p 9993:9993/udp -v /opt/docker/moon:/var/lib/zerotier-one jonnyan404/zerotier-moon -4 $public_ip
    
    v2-377be9d8bf36de4ac5160a44f9a8d913_1440w

    到此我们的服务端就搭建好了。查看一下日志,记录一下moon id,后面加入会用到。

    docker logs -f zerotier-moon
    
    v2-248e447426ba45b47f8e359bd955bb98_1440w

    3.创建网络

    使用我们云服务器 ip:4000访问,ip为云服务器的公网ip,打开配置页。

    v2-9bfa097eeda8bb540a7ddc22ce94381d_1440w

    点击右上角的login登录。

    v2-ab0dbc5c15a5416a8067f147e609fdfc_1440w

    使用默认用户名和密码登录: admin/admin@123,登录完成后根据提示修改密码。

    v2-ee9ba5ccd5a0ca521cefe77d2b87540a_1440w

    设置完成后,切换到Add network选项卡,任意为网络起一个名字。

    v2-197807d2b2360b9f5e8307fac2b18f49_1440w

    点击Create Network

    v2-90b862a8d1c0e22baaabf43fb19fe321_1440w

    这样我们的网络就设置好了,请记录创建好的网络id。

    v2-a999e77c5536b34cc3e067f1bcad6d9e_1440w

    回到上一级页面,最后在network上,设置网段,可以点击自动生成,然后提交。

    v2-be17385a59254559fa9e2c998834484c_1440w
    v2-6914898a38247435e41e136fb1b15019_1440w

    4.搭建客户端

    为了方便演示不同平台,我这里以一台Linux和一台Windows为例子演示组网过程。

    • Windows:

    首先到官方网站上下载Windows客户端:

    https://www.zerotier.com/download/
    

    安装很简单,下一步即可。完成后,在开始菜单中可以找到安装的ZeroTier软件,右下角会多出图标,打开面板。把之前记下的网络填入下方,点击Join Network。

    v2-90b6b0635b64ad049b3f0059efb7f38a_1440w

    回到网页上授权,并定义一个友好的名字,方便辨认。

    v2-9f1bd0316bb04179d7f23a607f4513b2_1440w

    客户端上,状态显示成功时,表示搭建成功。

    v2-b27cba8357f35f29e3ab031350ce8648_1440w

    最后在配置一下加入moon服务器,打开cmd。

    cd C:\ProgramData\ZeroTier\One
    zerotier-cli orbit [moon_id] [moon_id]
    

    将之前记录的moon id填进去后执行。

    v2-383e302d78e5e2ec40d3684af61da546_1440w

    查看是否加入monn节点:

    zerotier-cli listpeers
    

    可以看到其中包含我们自建moon服务器的公网ip地址。

    v2-025e0f9ee4bb76ec529a9b5e82cdab30_1440w
    • Linux:

    拉取镜像:

    docker pull bltavares/zerotier
    

    配置镜像:

    docker run -d --device=/dev/net/tun \
    --name zerotier-one \
    --net=host \
    --restart=always \
    --cap-add=NET_ADMIN \
    --cap-add=SYS_ADMIN \
    -v /var/lib/zerotier-one:/var/lib/zerotier-one \
    bltavares/zerotier:latest
    
    v2-648882187c5913ad9777c114626082d2_1440w

    加入zerotier网络

    docker exec zerotier-one zerotier-cli join [网络ID]
    
    v2-5142e213bdf1362dca2a78aee6b9b3e1_1440w

    显示 200 join ok 即添加成功。同样的需要在网页上去授权此节点。可以看到已经有虚拟ip生成,可以测试下两台主机之间的联通性。

    v2-e98306bed8240d3ca8f6ab351e8d4286_1440w

    发现已经可以使用p2p建立虚拟网络了,一台四川的服务器和一台北京的阿里云服务器,延迟大概40ms左右,效果还是很不错的。

    v2-16b12d71bb25015344ab47c125ad11f3_1440w

    最后再加入moon服务器,同样的需要把moon_ID的值修改为自建moon服务器的id。

    #加入moon服务器
    docker exec zerotier-one zerotier-cli orbit [moon_ID] [moon_ID]
    #确认是否加入
    docker exec zerotier-one zerotier-cli listpeers 
    
    v2-20043a27bed063d5f09ecb53d7728d62_1440w

    至此~

  • 删除linux网卡命令

    在Linux操作系统中删除网络接口的命令是ifconfigip命令。下面将详细说明如何使用这两个命令来删除Linux网卡。

    使用ifconfig命令删除网卡:

    1. 打开终端或控制台窗口。
    2. 输入ifconfig命令,查看当前系统中的网卡接口列表,确认要删除的网卡接口的名称,一般以ethenp开头。
    3. 输入以下命令以删除网卡接口: “ sudo ifconfig down # 关闭网卡接口 sudo ifconfig del # 删除网卡接口 “ 请将“替换为要删除的网卡接口的名称。
    4. 输入密码(如果有)以确认操作。

    使用ip命令删除网卡:

    1. 打开终端或控制台窗口。
    2. 输入ip link show命令,查看当前系统中的网卡接口列表,确认要删除的网卡接口的名称,一般以ethenp开头。
    3. 输入以下命令以删除网卡接口: “ sudo ip link set down # 关闭网卡接口 sudo ip link delete # 删除网卡接口 “ 请将“替换为要删除的网卡接口的名称。
    4. 输入密码(如果有)以确认操作。

    需要注意的是,删除网卡接口后将无法使用该接口进行网络连接。请确保在执行删除操作之前备份重要数据,并确保不会影响系统的正常运行。

    此外,还可以通过编辑/etc/network/interfaces文件或/etc/sysconfig/network-scripts/ifcfg-文件来删除网卡接口的配置信息,但这种操作比较复杂,需要对网络配置文件有一定的了解。强烈建议在进行此类操作之前备份相关配置文件,以防止意外数据丢失。

  • rpm 安装教程

    下面讲解一下,如何使用 rpm 命令对 RPM 二进制包进行安装、卸载和升级操作。我们以安装 apache 程序为例。

    RPM包默认安装路径

    通常情况下,RPM 包采用系统默认的安装路径,所有安装文件会按照类别分散安装到下表所示的目录中。

    RPM 包默认安装路径
    安装路径 含 义
    /etc/ 配置文件安装目录
    /usr/bin/ 可执行的命令安装目录
    /usr/lib/ 程序所使用的函数库保存位置
    /usr/share/doc/ 基本的软件使用手册保存位置
    /usr/share/man/ 帮助文件保存位置

    RPM 包的默认安装路径是可以通过命令查询的。

    除此之外,RPM 包也支持手动指定安装路径,但此方式并不推荐。因为一旦手动指定安装路径,所有的安装文件会集中安装到指定位置,且系统中用来查询安装路径的命令也无法使用(需要进行手工配置才能被系统识别),得不偿失。

    与 RPM 包不同,源码包的安装通常采用手动指定安装路径(习惯安装到 /usr/local/ 中)的方式。既然安装路径不同,同一 apache 程序的源码包和 RPM 包就可以安装到一台 Linux 服务器上(但同一时间只能开启一个,因为它们需要占用同一个 80 端口)。

    实际情况中,一台服务器几乎不会同时包含两个 apache 程序,管理员不好管理,还会占用过多的服务器磁盘空间。

    RPM 包的安装

    安装 RPM 的命令格式为:

    [root@localhost ~]# rpm -ivh 包全名

    注意一定是包全名。涉及到包全名的命令,一定要注意路径,可能软件包在光盘中,因此需提前做好设备的挂载工作。

    此命令中各选项参数的含义为:

    • -i:安装(install);
    • -v:显示更详细的信息(verbose);
    • -h:打印 #,显示安装进度(hash);

    例如,使用此命令安装 apache 软件包,如下所示:

    1. [root@localhost ~]# rpm -ivh \
    2. /mnt/cdrom/Packages/httpd-2.2.1515.el6.centos.1.i686.rpm
    3. Preparing…
    4. ####################
    5. [100%]
    6. 1:httpd
    7. ####################
    8. [100%]

    注意,直到出现两个 100% 才是真正的安装成功,第一个 100% 仅表示完成了安装准备工作。

    此命令还可以一次性安装多个软件包,仅需将包全名用空格分开即可,如下所示:

    [root@localhost ~]# rpm -ivh a
    .rpm b
    .rpm c
    .rpm

    如果还有其他安装要求(比如强制安装某软件而不管它是否有依赖性),可以通过以下选项进行调整:

    • -nodeps:不检测依赖性安装。软件安装时会检测依赖性,确定所需的底层软件是否安装,如果没有安装则会报错。如果不管依赖性,想强制安装,则可以使用这个选项。注意,这样不检测依赖性安装的软件基本上是不能使用的,所以不建议这样做。
    • -replacefiles:替换文件安装。如果要安装软件包,但是包中的部分文件已经存在,那么在正常安装时会报”某个文件已经存在”的错误,从而导致软件无法安装。使用这个选项可以忽略这个报错而覆盖安装。
    • -replacepkgs:替换软件包安装。如果软件包已经安装,那么此选项可以把软件包重复安装一遍。
    • -force:强制安装。不管是否已经安装,都重新安装。也就是 -replacefiles 和 -replacepkgs 的综合。
    • -test:测试安装。不会实际安装,只是检测一下依赖性。
    • -prefix:指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。

    apache 服务安装完成后,可以尝试启动:

    [root@localhost ~]# service 服务名 start|stop|restart|status

    各参数含义:

    • start:启动服务;
    • stop:停止服务;
    • restart:重启服务;
    • status: 查看服务状态;

    例如:

    [root@localhost ~]# service httpd start #启动apache服务

    服务启动后,可以查看端口号 80 是否出现。命令如下:

    1. [root@localhost ~]# netstat -tlun | grep 80
    2. tcp 0 0 :::80 :::* LISTEN

    RPM包的升级

    使用如下命令即可实现 RPM 包的升级:

    [root@localhost ~]# rpm -Uvh 包全名

    -U(大写)选项的含义是:如果该软件没安装过则直接安装;若已经安装则升级至最新版本。

    [root@localhost ~]# rpm -Fvh 包全名

    -F(大写)选项的含义是:如果该软件没有安装,则不会安装,必须安装有较低版本才能升级。

    RPM包的卸载

    RPM 软件包的卸载要考虑包之间的依赖性。例如,我们先安装的 httpd 软件包,后安装 httpd 的功能模块 mod_ssl 包,那么在卸载时,就必须先卸载 mod_ssl,然后卸载 httpd,否则会报错。

    软件包卸载和拆除大楼是一样的,本来先盖的 2 楼,后盖的 3 楼,那么拆楼时一定要先拆除 3 楼。

    如果卸载 RPM 软件不考虑依赖性,执行卸载命令会包依赖性错误,例如:

    1. [root@localhost ~]# rpm -e httpd
    2. error: Failed dependencies:
    3. httpd-mmn = 20051115 is needed by (installed) mod_wsgi-3.21.el6.i686
    4. httpd-mmn = 20051115 is needed by (installed) php-5.3.33.el6_2.8.i686
    5. httpd-mmn = 20051115 is needed by (installed) mod_ssl-1:2.2.1515.el6.
    6. centos.1.i686
    7. httpd-mmn = 20051115 is needed by (installed) mod_perl-2.0.410.el6.i686
    8. httpd = 2.2.1515.el6.centos.1 is needed by (installed) httpd-manual-2.2.
    9. 1515.el6.centos.1 .noarch
    10. httpd is needed by (installed) webalizer-2.21_023.3.el6.i686
    11. httpd is needed by (installed) mod_ssl-1:2.2.1515.el6.centos.1.i686
    12. httpd= 0:2.2.1515.el6.centos.1 is needed by(installed)mod_ssl-1:2.2.1515.el6.centos.1.i686

    RPM 软件包的卸载很简单,使用如下命令即可:

    [root@localhost ~]# rpm -e 包名

    -e 选项表示卸载,也就是 erase 的首字母。

    RPM 软件包的卸载命令支持使用“-nocteps”选项,即可以不检测依赖性直接卸载,但此方式不推荐大家使用,因为此操作很可能导致其他软件也无法征程使用。

  • 正则表达式 – 修饰符

    正则表达式中常用的模式修正符有i、g、m、s、U、x、a、D、e 等。它们之间可以组合搭配使用。

    修饰符 含义 描述
    i ignore – 不区分大小写 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。
    g global – 全局匹配 查找所有的匹配项。
    m more – 多行匹配 使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。
    s 特殊字符圆点 . 中包含换行符 \n 默认情况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。

    i 不区分(ignore)大小写

    例如: /abc/i 可以匹配 abc、aBC、Abc

    g 全局(global)匹配

    如果不带g,正则过程中字符串从左到右匹配,找到第一个符合条件的即匹配成功,返回

    如果带g,则字符串从左到右,找到每个符合条件的都记录下来,知道字符串结尾位置

    例如:

    var str = ‘aaaaaaaa’

    var reg1 = /a/; str.match(reg1) // 结果为:[“a”, index: 0, input: “aaaaaaaa”]

    var reg2 = /a/g; str.match(reg2) // 结果为:[“a”, “a”, “a”, “a”, “a”, “a”, “a”, “a”]

    m 多(more)行匹配

    若存在换行\n并且有开始^或结束$符的情况下,和g一起使用实现全局匹配,

    因为存在换行时默认会把换行符作为一个字符任务匹配字符串是个单行,

    g只匹配第一行,添加m之后实现多行,每个换行符之后就是开始

    var str = “abcggab\nabcoab”;

    var preg1 = /^abc/gm; str.match(preg1) // 结果为:[“abc”, “abc”]

    var preg2 = /ab$/gm; str.match(preg2) // 结果为:[“ab”, “ab”]

    s 特殊字符圆点 . 中包含换行符

    默认的圆点 . 是 匹配除换行符 \n 之外的任何单字符,加上s之后, . 中包含换行符

    $str = “abggab\nacbs”;

    $preg = “/b./s”;

    preg_match_all($preg, $str,$matchs);

    print_r($matchs);//Array ( [0] => Array ( [0] => bg [1] => b [2] => bs ) )

    U 只匹配最近的一个字符串;不重复匹配;

    $mode=”/a(.*?)c/”;

    $preg=”/a.*c/U”;//这两个正则返回相同的值

    $str=”abcabbbcabbbbbc” ;

    preg_match($mode,$str,$content); echo $content[0];//abc

    preg_match($preg,$str,$content); echo $content[0];//abc

    修正符:x 将模式中的空白忽略; 修正符:A 强制从目标字符串开头匹配; 修正符:D 如果使用$限制结尾字符,则不允许结尾有换行; 修正符:e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行;