作者: houlijiang

  • NetHogs——Linux下按进程实时统计网络带宽利用率

    网上有很多适用于Linux操作系统的开源网络监视工具.比如说,你可以用命令iftop来检查带宽使用情况. netstat用来查看接口统计报告,还有top监控系统当前运行进程.但是如果你想要找一个能够按进程实时统计网络带宽利用率,那么NetHogs就是你所需要的唯一工具.

    080844ph0m069f1w4e9mj0

    1

    NetHogs – 网络带宽监控

    什么是NetHogs?

    NetHogs 是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率.

    来自NetHogs项目网站:

    NetHogs是一个小型的’net top’工具,不像大多数工具那样拖慢每个协议或者是每个子网的速度而是按照进程进行带宽分组.NetHogs NetHogs不需要依赖载入某个特殊的内核模块. 如果发生了网络阻塞你可以启动NetHogs立即看到哪个PID造成的这种状况.这样就很容易找出哪个程序跑飞了然后突然占用你的带宽.

    这篇文章为你讲解了如何在Unix/Linux操作系统下如何安装和使用NetHogs按进程监控网络带宽使用率。

    在RHEL,CentOS和Fedora下安装NetHogs:

    要安装NetHogs,你必须要启用你所用Linux下的EPEL源.然后运行下面的yum命令下载安装NetHogs包.

    1. [ root@tecmint ~]# yum y install nethogs
    2.  
    3. Loaded plugins : fastest mirror , refresh packagekit
    4. Loading mirror speeds from cached hostfile
    5. * base : mirrors . hns . net . in
    6. * epel : mirror . nus . edu . sg
    7. * extras : mirrors . hns . net . in
    8. * rpmfusion free updates : mirrors . ustc . edu . cn
    9. * rpmfusion nonfree updates : mirror . de . leaseweb . net
    10. * updates : mirrors . hns . net . in
    11. Setting up Install Process
    12. Resolving Dependencies
    13. –> Running transaction check
    14. —> Package nethogs . i6860 : 0.8 . 0 1.el6 will be installed
    15. –> Finished Dependency Resolution
    16.  
    17. Dependencies Resolved
    18.  
    19. ===========================================================================================================
    20. Package                  Arch                  Version                      Repository                      Size
    21. ===========================================================================================================
    22. Installing :
    23. nethogs                i686                 0.8 . 0 1.el6                 epel                         28k
    24.  
    25. Transaction Summary
    26. ===========================================================================================================
    27. Install        1 Package ( s )
    28.  
    29. Total download size : 28k
    30. Installed size : 50k
    31. Downloading Packages :
    32. nethogs 0.8 . 0 1.el6.i686.rpm                                                          |    28kB      00 : 00
    33. Running rpm_check_debug
    34. Running Transaction Test
    35. Transaction Test Succeeded
    36. Running Transaction
    37.    Installing : nethogs 0.8 . 0 1.el6.i686                                                            1 / 1
    38.    Verifying    : nethogs 0.8 . 0 1.el6.i686                                                            1 / 1
    39.  
    40. Installed :
    41.   nethogs . i6860 : 0.8 . 0 1.el6
    42.  
    43. Complete !

    在Ubuntu, Linux mint和Debian下安装NetHogs:

    键入apt-get命令安装NetHogs包

    1. $ sudo apt-get install nethogs

    样例输出

    1. tecmint@tecmint :~ $ sudo apt-get install nethogs
    2. [ sudo ] password fortecmint :
    3. Reading package lists Done
    4. Building dependency tree
    5. Reading state information Done
    6. The following NEW packages will be installed :
    7. nethogs
    8. 0 upgraded , 1 newly installed , 0 to remove and 318 not upgraded .
    9. Need to get 27.1kB of archives .
    10. After this operation , 100kB of additional disk space will be used .
    11. Get : 1 http : //in.archive.ubuntu.com/ubuntu/ quantal/universe nethogs i386 0.8.0-1 [27.1 kB]
    12. Fetched 27.1kB in 1s ( 19.8kB / s )
    13. Selecting previously unselected package nethogs .
    14. ( Reading database 216058 files and directories currently installed .)
    15. Unpacking nethogs ( from …/ nethogs_0 . 8.0 1 _i386 . deb )…
    16. Processing triggers forman db
    17. Setting up nethogs ( 0.8 . 0 1 )…

    NetHogs用法

    在基于RedHat系统下键入如下命令启动NetHogs工具.

    要执行NetHogs你必须拥有root权限,即如图所示用sudo命令

    1. $ sudo nethogs

    样例预览:

    080846zf0ef7bgautccuxx

    2

    CentOS 6.3 下的NetHogs预览

    080847mojvxe9h92jxr79h

    3

    Ubuntu 12.10 下的NetHogs预览

    正如上图所示, send列和received列显示的是按照每个进程的流量统计.总的收发数据带宽在最下方,而且可以用交互命令控制排序,下面将要讨论这些交互命令:

    NetHogs 命令行参数

    以下就是NetHogs命令行的参数,用’-d’来添加刷新频率参数,device name 用来检测给定的某个或者某些设备的带宽(默认是eth0).例如:设置5秒钟的刷新频率,键入如下命令即可:

    如果只用来监视设备(eth0)的网络带宽可以使用如下命令:

    1. $ sudo nethogs eth0

    如果要同时监视eth0和eth1接口,使用以下命令即可:

    1. # nethogs eth0 eth1

    其他参数和用法

    NetHogs 交互控制

    以下是NetHogs的一些很有用的交互控制(键盘快捷键)

    想要NetHogs命令行工具的完整参数列表请参考NetHogs的手册,使用方法是在终端里输入‘man nethogs‘ 或者 ‘sudo man nethogs‘,更多信息请参考NetHogs项目主页.

  • 查看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腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表
  • 肝豆儿童哪里治疗更好,如何控制病情,为什么那么多从小确诊依然加重的?

    作者:月亮弯弯 链接:https://www.zhihu.com/question/580341649/answer/2864506595 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    肝豆儿童的治疗不在乎权威医生权威医院,只要懂肝豆病的医生都能治疗,自己懂哪里都能治,因为肝豆病的病理本质低层逻辑很简单,就是无法正常排铜而已,治疗不复杂(手动借助用药帮我们排),费用也不贵(青间歇性吃+锌长期吃有效抑制铜吸收+日常监测),特别是我们肝豆儿童发现得早,大多都是因转氨酶异常而发现肝豆病,这些都是铜造成的轻微肝损伤,是属于无症状的肝豆病人,这个时候那么我们可以先用锌剂治疗,锌的作用又是什么呢?锌剂可诱导肠黏膜细胞产生 金属硫蛋白, 金属硫蛋白对铜的亲合 力强, 易于与肠黏膜细胞内的铜结合。 与金属硫蛋白结合的铜不能被 吸收,随脱落的肠黏膜细胞排出体外。体内的铜可经大量胃肠液进入胃肠道,进入胃肠道后不能被重吸收,实现铜的负平衡。服用锌的作用在于抑制身体对于铜的吸收,锌剂的长期疗效可靠, 但其作用缓慢,治疗1~3个月才能起效。吃锌期间我们可以测尿锌来判断锌剂是否足量,单锌尿锌至少大于2视为锌剂足量,只有足量锌剂才能有效抑制铜的吸收。那么我们肝豆儿童如果体内铜不多,单锌治疗观察几个月各项指标(肝肾功能血脂血尿常规血脂腹部B超)就能正常恢复,相反的,如果单锌治疗1-6月的时间指标仍然异常,或是尿铜>40微克/24h,证明单锌已经控制不住病情的,它已经尽到责尽到它的力了,本来锌剂治疗就有它的局限性,这个时候我们就要考虑加上青霉胺清除体内沉积铜了,两种药联合使用了,至到足量青霉胺(足量青霉胺公式:体重kg*20mg/125mg)连测三次尿铜稳定降至200-250之间,证明体内铜不多了,就可以停青转为单锌,这样由此往复,铜多就排,铜少单锌,双线尿铜监对比调整用药.长期保持体内铜不多,病情就不会发展更不会加重,就一直是无症状的肝豆病人,与正常人无异,更不会受肝豆病影

     

    作者:铜娃娃 链接:https://www.zhihu.com/question/580341649/answer/2996611409 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    从WD患者疾病分型、照顾者性别、年龄、就业情况是照顾者负担影响因素分析出发,去探讨肝豆状核变性(WD)患者照顾者负担现状及其影响因素,以提高社会支持可改善照顾者负担。

    v2-45b188d24aeb881e4e18af989396f4a7_720w
    v2-45b188d24aeb881e4e18af989396f4a7_720w
    v2-9c1a0f72dad4b217d6ed15e80a4867ae_720w
    v2-9c1a0f72dad4b217d6ed15e80a4867ae_720w
    v2-c866dc1d2b03b488b0ab9c4b5e091202_720w
    v2-c866dc1d2b03b488b0ab9c4b5e091202_720w
    v2-3c85de3519eb5ba25b7eca3bcabedb37_720w
    v2-3c85de3519eb5ba25b7eca3bcabedb37_720w
  • 来自俩个肝豆孩子妈妈的自述

    《转自肝豆宝宝QQ群(444197355)江西安安妈2022年2月27日之分享篇》#肝豆状核变性

    v2-611defdd97f419c7513f238167cc8006_1440w