python3: error while loading shared libraries: libpython3.5m.so.1.0

编程语言采菊篱下 回复了问题 • 2 人关注 • 1 个回复 • 2 次浏览 • 31 分钟前 • 来自相关话题

编译php的imagick模块报错

编程语言采菊篱下 回复了问题 • 2 人关注 • 1 个回复 • 17 次浏览 • 1 天前 • 来自相关话题

nfs共享目录挂载错误

运维技术采菊篱下 回复了问题 • 2 人关注 • 1 个回复 • 18 次浏览 • 5 天前 • 来自相关话题

OTPUB知识课堂:​Oracle RDA工具简介

数据库OT学习平台 发表了文章 • 0 个评论 • 46 次浏览 • 2017-09-15 15:46 • 来自相关话题

Oracle RDA英文全称叫做“Oracle Remote Diagnostic Agent”。它是Oracle用来收集、分析数据库信息的工具,它是用perl编写的,包含非常丰富的诊断脚本,使用它科技非常便捷的采集到Oracle数据库服务器系统配置和数据库的详细信息,运行该工具不会改变系统的任何参数。
RDA收集的相关数据非常全面,可以简化我们日常监控、分析数据库的工作。Oracle Support也建议我们在反馈相关问题时,提供RDA收集的数据,这样可以为快速解决问题提供一个有力的保证。
Oracle作为目前行业最成熟的商业数据库管理系统软件,Oracle开发出很多有助于系统调试和运维的工具。借助这些优秀的免费工具,可以大大方便我们日常运维和管理工作。
无论是作为专业DBA,还是第三方支持人员,数据库巡检都是日常工作中不可缺少的工作内容。巡检项目通常是设置好的项目内容,有时候我们还会准备一些脚本或者命令作为手机手段。
巡检项目类型也会包括从操作系统,硬性文件系统,到数据库内存配置等广泛的内容,可能大多人员都会借助于AWR报告,同时,我们还可以借助Oracle提供的RDA来完成。
RDA全称Oracle Remote Diagnostic Agent(RDA)-RDA文档索引,RDA是Oracle用来收集,分析数据库的工具,运行该工具不会改变系统的任何参数,RDA收集的相关数据非常全面,这个Oracle诊断工具是用perl编写的,包含非常丰富的诊断脚本,使用它可以分成便利的采集到oracle数据库服务器系统配置和数据库的详细信息。可以简化我们的日常监控、分析数据库的工作。一般Oracle原厂的巡检也是使用RDA工具,不过一般国内的DBA巡检时很少使用这个工具,一般都是通过AWR或者自己整几个脚本跑一下,分析一下就OK了。
通过RDA可以快速的了解系统的状况,将会大大的缩短问题处理的周期,避免信息的反复采集。RDA不会更改数据库服务器的任何配置,仅仅是采集信息。
想要更详细的了解Oracle RDA工具的使用方法,请进入OTPUB技术课堂:http://www.otpub.com/Course/detail/index/id/210.html 查看全部
Oracle RDA英文全称叫做“Oracle Remote Diagnostic Agent”。它是Oracle用来收集、分析数据库信息的工具,它是用perl编写的,包含非常丰富的诊断脚本,使用它科技非常便捷的采集到Oracle数据库服务器系统配置和数据库的详细信息,运行该工具不会改变系统的任何参数。
RDA收集的相关数据非常全面,可以简化我们日常监控、分析数据库的工作。Oracle Support也建议我们在反馈相关问题时,提供RDA收集的数据,这样可以为快速解决问题提供一个有力的保证。
Oracle作为目前行业最成熟的商业数据库管理系统软件,Oracle开发出很多有助于系统调试和运维的工具。借助这些优秀的免费工具,可以大大方便我们日常运维和管理工作。
无论是作为专业DBA,还是第三方支持人员,数据库巡检都是日常工作中不可缺少的工作内容。巡检项目通常是设置好的项目内容,有时候我们还会准备一些脚本或者命令作为手机手段。
巡检项目类型也会包括从操作系统,硬性文件系统,到数据库内存配置等广泛的内容,可能大多人员都会借助于AWR报告,同时,我们还可以借助Oracle提供的RDA来完成。
RDA全称Oracle Remote Diagnostic Agent(RDA)-RDA文档索引,RDA是Oracle用来收集,分析数据库的工具,运行该工具不会改变系统的任何参数,RDA收集的相关数据非常全面,这个Oracle诊断工具是用perl编写的,包含非常丰富的诊断脚本,使用它可以分成便利的采集到oracle数据库服务器系统配置和数据库的详细信息。可以简化我们的日常监控、分析数据库的工作。一般Oracle原厂的巡检也是使用RDA工具,不过一般国内的DBA巡检时很少使用这个工具,一般都是通过AWR或者自己整几个脚本跑一下,分析一下就OK了。
通过RDA可以快速的了解系统的状况,将会大大的缩短问题处理的周期,避免信息的反复采集。RDA不会更改数据库服务器的任何配置,仅仅是采集信息。
想要更详细的了解Oracle RDA工具的使用方法,请进入OTPUB技术课堂:http://www.otpub.com/Course/detail/index/id/210.html

最近看到好多推荐OVM社区虚拟化软件的,谁用过,性能如何?

大数据/云计算虚拟化老兵 回复了问题 • 3 人关注 • 2 个回复 • 101 次浏览 • 2017-09-13 14:11 • 来自相关话题

免费虚拟化OVM与 OpenStack对比

大数据/云计算虚拟化老兵 发表了文章 • 0 个评论 • 168 次浏览 • 2017-09-13 14:06 • 来自相关话题

OpenStack作为一款全球化的开源软件,其设计之初的定位就是对于大中型企业,因为这些企业可以派出丰富而强大的技术团队进行深度开发与维护,而对缺乏软件开发和运维能力的传统企业及中小企业来说,易思捷OVM是100%更好的选择。(技术服务qq
群22265939)[b]OVM是开箱即用的一站式解决方案[/b]OpenStack的开源软件安装部署对于很多运维人员来说都不陌生,企业大多只提供安装包和简单的安装文档,而这些安装过程大多会涉及到数据库、redis、rabbitmq、ruby等环境的配置,这些配置也要求运维人员学习以上软件的安装部署,否则一步配置错误就会导致整体的安装部署失败,从而造成整个安装部署少则2-3天多则1-2周才能完成的窘境,复杂的安装部署过程让运维人员疲惫不堪。Openstack作为开源产品也不例外,并且 OpenStack可下载的厂商定制版本就有20多个,客户根本不知道应选择哪个版本,更不要说在不同厂商版本之间组合、混搭、迁移了,对于IT投入较小且缺乏专业人才的中小企业而言只能望洋兴叹。
而OVM是面向数据中心的一款开箱即用的免费服务器虚拟化软件,有别于传统的开源软件,OVM安装部署全部(包括管理平台和计算节点)采用一键式的ISO方式,整个安装过程就像是在安装一个Centos操作系统一样的简单,只用花费10-20分钟的过程就可以完成。即使是运维小白,通过OVM提供的ISO镜像也可在1小时内完成整个产品的安装部署。

[b]OVM的稳定性经得起考验[/b]
OVM从架构设计之初就充分考虑到产品的稳定性,并把稳定性放在了第一位。因为作为一款Iaas级的虚拟化管理软件,它不仅仅是一个软件,更是连接用户数据中心的中枢(包括物理机、存储、网络、防火墙、灾备等)。在架构设计上,OVM同时具备了开源软件和商业软件的优点,首先保证产品无单点故障,即管理平台高可用;其次支持分布式部署,将不可预估因素造成的损失降到最小。OVM架构包括分布式和插件式,这两个特点既允许用户将不同的模块和服务部署在同一台Server上面,也可以将其分开部署在多台Server上,大大了提高了部署的灵活性,同时也可将单点故障的风险降到最小。另外OVM引入了Zookeeper、Pacemaker等软件来为OVM提供高可用性,避免单点故障的发生。OVM的每个版本均经过严格的内测,再正式对外发布,每一个环节我们都严把质量关,将稳定性自始至终贯穿到OVM产品的每个环节。
而OpenStack每半年升级一次,每次升级都需要花费大量时间修复bug。根据www.51cto.com做的一项关于OpenStack的用户调查, 33.33%的用户认为OpenStack还不够稳定而且修改难度大。

[b]OVM升级更轻松简单[/b]对于一个产品来说,迭代升级是必然的事情,未来产品研发规划中, OVM将考虑如何让用户不费吹灰之力就可以升级使用最新版本。最终做到与UI无缝结合,用户只需点击WEB管理平台中的一键升级按钮便可轻松实现版本的快速升级,并且不会影响到业务的正常运行。而OpenStack的Nova,Swift,Cinder和Neutron分别使用各自的数据库存储配置信息,
要升级就要修改多个数据库schema,做不到热升级。再如,HP作为OpenStack的白金会员在部署网络服务(Neutron)时,遇到了噩梦般的经历,不得不重写网络组件的代码才能达到大规模应用的要求。OpenStack还有一个问题就是半年快速迭代,发布新产品,速度太快,老版本跟不上,理论上,新版本向下兼容,但当一些版本改动较大,加入新功能时,如果企业已经深度应用了旧版本,可能面临技术无法升级,或者需要重度开发的问题。由此说明,OpenStack在集成性、扩展性和实用性上还不足,如果要选用,需要一支专家队伍帮助实施。

[b]OVM可以提供端到端的服务[/b]

易思捷OVM社区作为OVM产品唯一的服务商,提供统一的产品功能和技术服务,以用户需求为导向来提供产品功能,也可以为用户提供端到端的服务保障。
而OpenStack不能提供端到端的服务保障。云平台必备的自动化部署、自动化运维、状态监控、设备管理、可用性检测、安全性、可靠性和平台自修复功能在OpenStack中或者缺失,或者散落在单独产品中。客户拿到手的只是散落的“骨架“,必须通过专业技术人员手工将多厂商、多版本的逐个功能集成起来,这对于中小企业来说显然难度很大。

[b]OVM的架构和性能更优[/b]

与OpenStack笨重的架构对比,OVM更加的轻量级,对于产品初期的按照及后期的运维都要简单得多。众所周知,OpenStack大小模块和组件加起来会有好几十个,要想真正搞懂每个组件,一两个人是无法完成的,是必须要有一个强大的技术团队才能支撑起来的。而且直接使用开源的OpenStack会存在很多bug,无法规模化商用,所以很多企业只能选择商业公司封装的OpenStack版本。另外需要着重说明的是,OpenStack不是产品,只是架构,在开源社区开发的各类版本,只有在“封装”之后才可以使用。一般的企业不具备这种技术实力,需要IT公司帮助实施、运维、开发等工作,这样无疑又加重了企业的总体成本。
综上,与OpenStack相比,易思捷OVM产品架构的设计严格按照商业产品架构的高标准要求,始终把产品的稳定性、易用性、可扩展性,以及产品的高性能放在第一位,秉承“用户是上帝”的理念,为用户提供优质的服务和高品质的产品,让大家共同来使用和见证中国人自己的虚拟化产品!
(技术服务qq群22265939) 查看全部
    OpenStack作为一款全球化的开源软件,其设计之初的定位就是对于大中型企业,因为这些企业可以派出丰富而强大的技术团队进行深度开发与维护,而对缺乏软件开发和运维能力的传统企业及中小企业来说,易思捷OVM是100%更好的选择。(技术服务qq
群22265939)
[b]OVM是开箱即用的一站式解决方案[/b]
OpenStack的开源软件安装部署对于很多运维人员来说都不陌生,企业大多只提供安装包和简单的安装文档,而这些安装过程大多会涉及到数据库、redis、rabbitmq、ruby等环境的配置,这些配置也要求运维人员学习以上软件的安装部署,否则一步配置错误就会导致整体的安装部署失败,从而造成整个安装部署少则2-3天多则1-2周才能完成的窘境,复杂的安装部署过程让运维人员疲惫不堪。Openstack作为开源产品也不例外,并且 OpenStack可下载的厂商定制版本就有20多个,客户根本不知道应选择哪个版本,更不要说在不同厂商版本之间组合、混搭、迁移了,对于IT投入较小且缺乏专业人才的中小企业而言只能望洋兴叹。
而OVM是面向数据中心的一款开箱即用的免费服务器虚拟化软件,有别于传统的开源软件,OVM安装部署全部(包括管理平台和计算节点)采用一键式的ISO方式,整个安装过程就像是在安装一个Centos操作系统一样的简单,只用花费10-20分钟的过程就可以完成。即使是运维小白,通过OVM提供的ISO镜像也可在1小时内完成整个产品的安装部署。

[b]OVM的稳定性经得起考验[/b]
OVM从架构设计之初就充分考虑到产品的稳定性,并把稳定性放在了第一位。因为作为一款Iaas级的虚拟化管理软件,它不仅仅是一个软件,更是连接用户数据中心的中枢(包括物理机、存储、网络、防火墙、灾备等)。在架构设计上,OVM同时具备了开源软件和商业软件的优点,首先保证产品无单点故障,即管理平台高可用;其次支持分布式部署,将不可预估因素造成的损失降到最小。OVM架构包括分布式和插件式,这两个特点既允许用户将不同的模块和服务部署在同一台Server上面,也可以将其分开部署在多台Server上,大大了提高了部署的灵活性,同时也可将单点故障的风险降到最小。另外OVM引入了Zookeeper、Pacemaker等软件来为OVM提供高可用性,避免单点故障的发生。OVM的每个版本均经过严格的内测,再正式对外发布,每一个环节我们都严把质量关,将稳定性自始至终贯穿到OVM产品的每个环节。
而OpenStack每半年升级一次,每次升级都需要花费大量时间修复bug。根据www.51cto.com做的一项关于OpenStack的用户调查, 33.33%的用户认为OpenStack还不够稳定而且修改难度大。

[b]OVM升级更轻松简单[/b]
对于一个产品来说,迭代升级是必然的事情,未来产品研发规划中, OVM将考虑如何让用户不费吹灰之力就可以升级使用最新版本。最终做到与UI无缝结合,用户只需点击WEB管理平台中的一键升级按钮便可轻松实现版本的快速升级,并且不会影响到业务的正常运行。
而OpenStack的Nova,Swift,Cinder和Neutron分别使用各自的数据库存储配置信息,
要升级就要修改多个数据库schema,做不到热升级。再如,HP作为OpenStack的白金会员在部署网络服务(Neutron)时,遇到了噩梦般的经历,不得不重写网络组件的代码才能达到大规模应用的要求。OpenStack还有一个问题就是半年快速迭代,发布新产品,速度太快,老版本跟不上,理论上,新版本向下兼容,但当一些版本改动较大,加入新功能时,如果企业已经深度应用了旧版本,可能面临技术无法升级,或者需要重度开发的问题。由此说明,OpenStack在集成性、扩展性和实用性上还不足,如果要选用,需要一支专家队伍帮助实施。

[b]OVM可以提供端到端的服务[/b]

易思捷OVM社区作为OVM产品唯一的服务商,提供统一的产品功能和技术服务,以用户需求为导向来提供产品功能,也可以为用户提供端到端的服务保障。
而OpenStack不能提供端到端的服务保障。云平台必备的自动化部署、自动化运维、状态监控、设备管理、可用性检测、安全性、可靠性和平台自修复功能在OpenStack中或者缺失,或者散落在单独产品中。客户拿到手的只是散落的“骨架“,必须通过专业技术人员手工将多厂商、多版本的逐个功能集成起来,这对于中小企业来说显然难度很大。

[b]OVM的架构和性能更优[/b]

与OpenStack笨重的架构对比,OVM更加的轻量级,对于产品初期的按照及后期的运维都要简单得多。众所周知,OpenStack大小模块和组件加起来会有好几十个,要想真正搞懂每个组件,一两个人是无法完成的,是必须要有一个强大的技术团队才能支撑起来的。而且直接使用开源的OpenStack会存在很多bug,无法规模化商用,所以很多企业只能选择商业公司封装的OpenStack版本。另外需要着重说明的是,OpenStack不是产品,只是架构,在开源社区开发的各类版本,只有在“封装”之后才可以使用。一般的企业不具备这种技术实力,需要IT公司帮助实施、运维、开发等工作,这样无疑又加重了企业的总体成本。
综上,与OpenStack相比,易思捷OVM产品架构的设计严格按照商业产品架构的高标准要求,始终把产品的稳定性、易用性、可扩展性,以及产品的高性能放在第一位,秉承“用户是上帝”的理念,为用户提供优质的服务和高品质的产品,让大家共同来使用和见证中国人自己的虚拟化产品!
(技术服务qq群22265939)

【直播预告】Sophos云服务助力快速组网VPN网络

互联网资讯OT学习平台 发表了文章 • 0 个评论 • 52 次浏览 • 2017-09-11 15:56 • 来自相关话题

VPN一般指虚拟专用网络,是一种在公用网络上建立的专用网络,进行加密通讯,在企业网络中有广泛应用。

VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问。VPN有多种分类方式,主要是按协议进行分类。VPN可通过服务器、硬件、软件等多种方式实现。

随着应用市场的需求,多分支计算机应用已经越来越广泛,但对于多分支点的计算机管理还存在着诸多挑战。

传统分支点管理的痛点

1、网点非常多

2、地域广

3、网点增长快

4、计算机少

5、无法跟上高增长节奏的有限的IT资源

总部IT部门无法有效进行管理

1、无法统一安全策略

2、运维效率低下

3、持续投入的人员成本

分支点的计算机管理通常是总部 IT 的恶梦。然而以上这些恶梦,通过VPN组建即可轻松化解。

如果您的企业设有较多的小微型分支机构,利用Sophos公司独特的VPN设备——RED,快速组建一个免配置、免维护的星型VPN网络。便于您简单经济地实现分支机构与总部的连接,并确保安全的 Internet 访问。

敬请关注,9月14日14:00,“Sophos云服务助力快速组网VPN网络”直播活动,专家与您分享,VPN快速搭建的方法.

直播间地址:“Sophos云服务助力快速组网VPN网络​” 查看全部
VPN一般指虚拟专用网络,是一种在公用网络上建立的专用网络,进行加密通讯,在企业网络中有广泛应用。

VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问。VPN有多种分类方式,主要是按协议进行分类。VPN可通过服务器、硬件、软件等多种方式实现。

随着应用市场的需求,多分支计算机应用已经越来越广泛,但对于多分支点的计算机管理还存在着诸多挑战。

传统分支点管理的痛点

1、网点非常多

2、地域广

3、网点增长快

4、计算机少

5、无法跟上高增长节奏的有限的IT资源

总部IT部门无法有效进行管理

1、无法统一安全策略

2、运维效率低下

3、持续投入的人员成本

分支点的计算机管理通常是总部 IT 的恶梦。然而以上这些恶梦,通过VPN组建即可轻松化解。

如果您的企业设有较多的小微型分支机构,利用Sophos公司独特的VPN设备——RED,快速组建一个免配置、免维护的星型VPN网络。便于您简单经济地实现分支机构与总部的连接,并确保安全的 Internet 访问。

敬请关注,9月14日14:00,“Sophos云服务助力快速组网VPN网络”直播活动,专家与您分享,VPN快速搭建的方法.

直播间地址:“Sophos云服务助力快速组网VPN网络​”

MySQL主从同步那点事儿

数据库Rock 发表了文章 • 0 个评论 • 64 次浏览 • 2017-09-10 22:06 • 来自相关话题

一、前言​
关于mysql主从同步,相信大家都不陌生,随着系统应用访问量逐渐增大,单台数据库读写访问压力也随之增大,当读写访问达到一定瓶颈时,将数据库的读写效率骤然下降,甚至不可用;为了解决此类问题,通常会采用mysql集群,当主库宕机后,集群会自动将一个从库升级为主库,继续对外提供服务;那么主库和从库之间的数据是如何同步的呢?本文针对MySQL 5.7版本进行下面的分析,下面随笔者一起探究一下mysql主从是如何同步的。
 
二、MySQL主从复制原理
为了减轻主库的压力,应该在系统应用层面做读写分离,写操作走主库,读操作走从库,下图为MySQL官网给出的主从复制的原理图,从图中可以简单的了解读写分离及主从同步的过程,分散了数据库的访问压力,提升整个系统的性能和可用性,降低了大访问量引发数据库宕机的故障率。




 
三、binlog简介
MySQL主从同步是基于binlog文件主从复制实现,为了更好的理解主从同步过程,这里简单介绍一下binlog日志文件。

binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改,它是以二进制的形式保存在磁盘中。我们可以通过mysql提供的查看工具mysqlbinlog查看文件中的内容,例如 mysqlbinlog mysql-bin.00001 | more,这里注意一下binlog文件的后缀名00001,binlog文件大小和个数会不断的增加,当MySQL停止或重启时,会产生一个新的binlog文件,后缀名会按序号递增,例如mysql-bin.00002、mysql-bin.00003,并且当binlog文件大小超过 max_binlog_size系统变量配置时也会产生新的binlog文件。
 
(一)binlog日志格式
(1) statement : 记录每一条更改数据的sql;
优点:binlog文件较小,节约I/O,性能较高。缺点:不是所有的数据更改都会写入binlog文件中,尤其是使用MySQL中的一些特殊函数(如LOAD_FILE()、UUID()等)和一些不确定的语句操作,从而导致主从数据无法复制的问题。
 
(2) row : 不记录sql,只记录每行数据的更改细节
优点:详细的记录了每一行数据的更改细节,这也意味着不会由于使用一些特殊函数或其他情况导致不能复制的问题。缺点:由于row格式记录了每一行数据的更改细节,会产生大量的binlog日志内容,性能不佳,并且会增大主从同步延迟出现的几率。
 
(3) mixed:一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。
 
(二)binlog日志内容




 
(三)binlog事件类型
MySQL binlog记录的所有操作实际上都有对应的事件类型的,譬如STATEMENT格式中的DML操作对应的是QUERY_EVENT类型,ROW格式下的DML操作对应的是ROWS_EVENT类型,如果想了解更多请参考官方文档,有关binlog日志内容不在这里过多赘述,简单介绍一下是为了更好的理解主从复制的细节,下面我们进入正题。
 
 
四、MySQL主从复制原理
mysql主从复制需要三个线程,master(binlog dump thread)、slave(I/O thread 、SQL thread)。
 
 
Master
(1)binlog dump线程:当主库中有数据更新时,那么主库就会根据按照设置的binlog格式,将此次更新的事件类型写入到主库的binlog文件中,此时主库会创建log dump线程通知slave有数据更新,当I/O线程请求日志内容时,会将此时的binlog名称和当前更新的位置同时传给slave的I/O线程。
 
Slave
(2)I/O线程:该线程会连接到master,向log dump线程请求一份指定binlog文件位置的副本,并将请求回来的binlog存到本地的relay log中,relay log和binlog日志一样也是记录了数据更新的事件,它也是按照递增后缀名的方式,产生多个relay log( host_name-relay-bin.000001)文件,slave会使用一个index文件( host_name-relay-bin.index)来追踪当前正在使用的relay log文件。
 
(3)SQL线程:该线程检测到relay log有更新后,会读取并在本地做redo操作,将发生在主库的事件在本地重新执行一遍,来保证主从数据同步。此外,如果一个relay log文件中的全部事件都执行完毕,那么SQL线程会自动将该relay log 文件删除掉。
 
下面是整个复制过程的原理图:




 
四、主从同步延迟
mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的I/O线程到主库取日志,效率也比较高,但是,slave的SQL线程将主库的DDL和DML操作在slave实施。DML和DDL的IO操作是随即的,不是顺序的,成本高很多,还可能存在slave上的其他查询产生lock争用的情况,由于SQL也是单线程的,所以一个DDL卡住了,需要执行很长一段事件,后续的DDL线程会等待这个DDL执行完毕之后才执行,这就导致了延时。当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受的范围,延时就产生了,除此之外,还有可能与slave的大型query语句产生了锁等待导致。
 
由于主从同步延迟是客观存在的,我们只能从我们自己的架构上进行设计, 尽量让主库的DDL快速执行。下面列出几种常见的解决方案:
业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。服务的基础架构在业务和mysql之间加入memcache或者Redis的cache层。降低mysql的读压力;使用比主库更好的硬件设备作为slave;sync_binlog在slave端设置为0;–logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志。禁用slave的binlog
 
五、参考资料
https://dev.mysql.com/doc/refman/5.7/en/replication.html  
http://www.linuxidc.com/Linux/2014-05/101450.htm  
http://blog.csdn.net/xiongping_/article/details/49907095  
http://www.cnblogs.com/martinzhang/p/3454358.html  
“本文转载自 linkedkeeper.com (文/张松然)”地址:http://www.linkedkeeper.com/detail/blog.action?bid=1028   查看全部
一、前言​
关于mysql主从同步,相信大家都不陌生,随着系统应用访问量逐渐增大,单台数据库读写访问压力也随之增大,当读写访问达到一定瓶颈时,将数据库的读写效率骤然下降,甚至不可用;为了解决此类问题,通常会采用mysql集群,当主库宕机后,集群会自动将一个从库升级为主库,继续对外提供服务;那么主库和从库之间的数据是如何同步的呢?本文针对MySQL 5.7版本进行下面的分析,下面随笔者一起探究一下mysql主从是如何同步的。
 
二、MySQL主从复制原理
为了减轻主库的压力,应该在系统应用层面做读写分离,写操作走主库,读操作走从库,下图为MySQL官网给出的主从复制的原理图,从图中可以简单的了解读写分离及主从同步的过程,分散了数据库的访问压力,提升整个系统的性能和可用性,降低了大访问量引发数据库宕机的故障率。
mysqlrep.png

 
三、binlog简介
MySQL主从同步是基于binlog文件主从复制实现,为了更好的理解主从同步过程,这里简单介绍一下binlog日志文件。

binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改,它是以二进制的形式保存在磁盘中。我们可以通过mysql提供的查看工具mysqlbinlog查看文件中的内容,例如 mysqlbinlog mysql-bin.00001 | more,这里注意一下binlog文件的后缀名00001,binlog文件大小和个数会不断的增加,当MySQL停止或重启时,会产生一个新的binlog文件,后缀名会按序号递增,例如mysql-bin.00002、mysql-bin.00003,并且当binlog文件大小超过 max_binlog_size系统变量配置时也会产生新的binlog文件。
 
(一)binlog日志格式
(1) statement : 记录每一条更改数据的sql;
  • 优点:binlog文件较小,节约I/O,性能较高。
  • 缺点:不是所有的数据更改都会写入binlog文件中,尤其是使用MySQL中的一些特殊函数(如LOAD_FILE()、UUID()等)和一些不确定的语句操作,从而导致主从数据无法复制的问题。

 
(2) row : 不记录sql,只记录每行数据的更改细节
  • 优点:详细的记录了每一行数据的更改细节,这也意味着不会由于使用一些特殊函数或其他情况导致不能复制的问题。
  • 缺点:由于row格式记录了每一行数据的更改细节,会产生大量的binlog日志内容,性能不佳,并且会增大主从同步延迟出现的几率。

 
(3) mixed:一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。
 
(二)binlog日志内容
binlog.png

 
(三)binlog事件类型
MySQL binlog记录的所有操作实际上都有对应的事件类型的,譬如STATEMENT格式中的DML操作对应的是QUERY_EVENT类型,ROW格式下的DML操作对应的是ROWS_EVENT类型,如果想了解更多请参考官方文档,有关binlog日志内容不在这里过多赘述,简单介绍一下是为了更好的理解主从复制的细节,下面我们进入正题。
 
 
四、MySQL主从复制原理
mysql主从复制需要三个线程,master(binlog dump thread)、slave(I/O thread 、SQL thread)。
 
 
Master
(1)binlog dump线程:当主库中有数据更新时,那么主库就会根据按照设置的binlog格式,将此次更新的事件类型写入到主库的binlog文件中,此时主库会创建log dump线程通知slave有数据更新,当I/O线程请求日志内容时,会将此时的binlog名称和当前更新的位置同时传给slave的I/O线程。
 
Slave
(2)I/O线程:该线程会连接到master,向log dump线程请求一份指定binlog文件位置的副本,并将请求回来的binlog存到本地的relay log中,relay log和binlog日志一样也是记录了数据更新的事件,它也是按照递增后缀名的方式,产生多个relay log( host_name-relay-bin.000001)文件,slave会使用一个index文件( host_name-relay-bin.index)来追踪当前正在使用的relay log文件。
 
(3)SQL线程:该线程检测到relay log有更新后,会读取并在本地做redo操作,将发生在主库的事件在本地重新执行一遍,来保证主从数据同步。此外,如果一个relay log文件中的全部事件都执行完毕,那么SQL线程会自动将该relay log 文件删除掉。
 
下面是整个复制过程的原理图:
mysqlab.png

 
四、主从同步延迟
mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的I/O线程到主库取日志,效率也比较高,但是,slave的SQL线程将主库的DDL和DML操作在slave实施。DML和DDL的IO操作是随即的,不是顺序的,成本高很多,还可能存在slave上的其他查询产生lock争用的情况,由于SQL也是单线程的,所以一个DDL卡住了,需要执行很长一段事件,后续的DDL线程会等待这个DDL执行完毕之后才执行,这就导致了延时。当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受的范围,延时就产生了,除此之外,还有可能与slave的大型query语句产生了锁等待导致。
 
由于主从同步延迟是客观存在的,我们只能从我们自己的架构上进行设计, 尽量让主库的DDL快速执行。下面列出几种常见的解决方案:
  1. 业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。
  2. 服务的基础架构在业务和mysql之间加入memcache或者Redis的cache层。降低mysql的读压力;
  3. 使用比主库更好的硬件设备作为slave;
  4. sync_binlog在slave端设置为0;
  5. –logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志。
  6. 禁用slave的binlog

 
五、参考资料
https://dev.mysql.com/doc/refman/5.7/en/replication.html  
http://www.linuxidc.com/Linux/2014-05/101450.htm  
http://blog.csdn.net/xiongping_/article/details/49907095  
http://www.cnblogs.com/martinzhang/p/3454358.html  
“本文转载自 linkedkeeper.com (文/张松然)”地址:http://www.linkedkeeper.com/detail/blog.action?bid=1028  

Go Web框架gin vs echo

编程语言koyo 发表了文章 • 0 个评论 • 61 次浏览 • 2017-09-10 20:36 • 来自相关话题

Web框架类型

web框架的主流,是采用轻量级的中间件式框架,把网站变成只有api的一个个小服务,其他都扔到cdn之类的地方处理。

这种方式,开发快速、拼装能力强,要什么就加什么,不要的就不加,就像是乐高玩具,大受欢迎。

问题在于,这种框架有一堆,到底该选哪个。

Gin vs Echo

在golang中,这种杰出代表,有2个:gin 和 echo。

这两个框架,在同类中,路由性能最高,超出其他框架一大截。google了一大堆英文站,也没有找到这两个框架的比较。于是,在我们实际使用后,提供个比较。

先说结论:
如果你代表企业,最好选择gin,无痛开发。如果是个人,开发个轻量服务,哪怕echo有点小问题,你也觉得没啥,那么,就用echo。
 
下面是开始进行比较。

框架成熟度

gin完胜
gin拥有详尽的出错信息,极为方便调试。这非常关键。团队项目,这个更加重要。echo在这方面,就略微逊色。使用框架的第一天,就遇到了明明路由语法写错了,却不报错、不给结果,也没有任何提示的情况。
 

路由性能

gin微弱小胜
gin的卖点,是所有web框架中,路由性能最好。echo的卖点,是它的路由性能,比gin还好10%。
 
国外实际测试结果是:echo只在空路由时,性能比gin好10%。而常用的各种带参数路由,echo其实要输给gin约5-10%。

echo给出和其他框架的对比




最新详尽对比:https://github.com/gin-gonic/gin/issues/329  
 

路由便利、灵活性

一回事,都有点小不便:
两个路由采用同一种算法,这种算法性能很高,但有个缺点: 不支持路由排序,会认为是路由冲突。比如: 路由Get("/name")和 Get("/:id") ,一般来说,只要把Get("/name")放在Get("/:id")前面,就是不冲突的。路由模块,会先尝试匹配前面那个,没匹配上,再去匹配后面的。而 gin和echo用的路由模块,会认为这两个路由是冲突的。gin会给出提醒,不让编译通过;echo完全不提醒,冲突就冲突了。。。
这给路由起名、设计,带来了一些麻烦。

框架的可持续发展

两个都不够好。
gin的主创是2个大学生。每年寒暑假就频繁更新,快到期末考试了,就完全不更新了。两人不在的时候,有网友在帮忙热情的维护,但主要是修bug、整理中间件。框架本身的发展,还是靠主创寒暑假爆发。就是这样的框架,连csico都在用。。。好在,gin的代码注释量大,易读性高,便于其他人参与。而且包装中间件,也超级容易。作者本人的态度是,对于一个在github上,start达到5000+的项目,他怎么可能会不去维护。请大家放心使用,到寒暑假了,他自然会去更新。。。echo则是主创当前处于活跃状态,并且乐呵呵的想要开发2.0版。由于主创活跃,它自带了一些流行功能,比如websocket, http2, jwt授权。用gin的话,这些功能要自己包装个中间件,虽然也很容易就是了。但echo的问题在于,它的代码毫无注释。作者现在是在劲头上,等3-6个月,在路上看到个穿超短的妹子,热情转移了,很快就会忘记当时代码是怎么写的。没有注释,不但别人不方便接手,自己也懒得再去看,于是慢慢就永不再更新。缺少注释的开源包,大部分都有这个问题。echo最终会不会变成这个结局,我们无从得知。
 

总结

综上
echo的状态是当下主创本人活跃,框架还不太成熟,适合最轻量级服务;gin则是整体成熟、易于调试,但可以预期,框架本身发展不会太快,除非主创大学毕业,从事和golang相关的工作。echo的使用方式、命名,都参考了gin,两者很接近,切换框架很容易,所以不用担心选错。
 
更新
由于echo的路由冲突频繁且没有调试信息,目前不是合理选择。等作者补上了路由冲突检测,那么就还不错。
 
如果想要回避这种框架的路由冲突,又想享受类似的优秀,neo框架目前最接近.
 
原文地址:https://www.golangtc.com/t/56a38761b09ecc083100010c  查看全部


Web框架类型


web框架的主流,是采用轻量级的中间件式框架,把网站变成只有api的一个个小服务,其他都扔到cdn之类的地方处理。

这种方式,开发快速、拼装能力强,要什么就加什么,不要的就不加,就像是乐高玩具,大受欢迎。

问题在于,这种框架有一堆,到底该选哪个。


Gin vs Echo


在golang中,这种杰出代表,有2个:gin 和 echo。

这两个框架,在同类中,路由性能最高,超出其他框架一大截。google了一大堆英文站,也没有找到这两个框架的比较。于是,在我们实际使用后,提供个比较。

先说结论:
  • 如果你代表企业,最好选择gin,无痛开发。
  • 如果是个人,开发个轻量服务,哪怕echo有点小问题,你也觉得没啥,那么,就用echo。

 
下面是开始进行比较。


框架成熟度


gin完胜
  • gin拥有详尽的出错信息,极为方便调试。
  • 这非常关键。团队项目,这个更加重要。
  • echo在这方面,就略微逊色。使用框架的第一天,就遇到了明明路由语法写错了,却不报错、不给结果,也没有任何提示的情况。

 


路由性能


gin微弱小胜
  • gin的卖点,是所有web框架中,路由性能最好。
  • echo的卖点,是它的路由性能,比gin还好10%。

 
国外实际测试结果是:echo只在空路由时,性能比gin好10%。而常用的各种带参数路由,echo其实要输给gin约5-10%。

echo给出和其他框架的对比
GoAPI.png

最新详尽对比:https://github.com/gin-gonic/gin/issues/329  
 


路由便利、灵活性


一回事,都有点小不便:
  • 两个路由采用同一种算法,这种算法性能很高,但有个缺点: 不支持路由排序,会认为是路由冲突。
  • 比如: 路由Get("/name")和 Get("/:id") ,一般来说,只要把Get("/name")放在Get("/:id")前面,就是不冲突的。路由模块,会先尝试匹配前面那个,没匹配上,再去匹配后面的。
  • 而 gin和echo用的路由模块,会认为这两个路由是冲突的。gin会给出提醒,不让编译通过;echo完全不提醒,冲突就冲突了。。。

这给路由起名、设计,带来了一些麻烦。


框架的可持续发展


两个都不够好。
  • gin的主创是2个大学生。每年寒暑假就频繁更新,快到期末考试了,就完全不更新了。两人不在的时候,有网友在帮忙热情的维护,但主要是修bug、整理中间件。框架本身的发展,还是靠主创寒暑假爆发。就是这样的框架,连csico都在用。。。
  • 好在,gin的代码注释量大,易读性高,便于其他人参与。而且包装中间件,也超级容易。
  • 作者本人的态度是,对于一个在github上,start达到5000+的项目,他怎么可能会不去维护。请大家放心使用,到寒暑假了,他自然会去更新。。。
  • echo则是主创当前处于活跃状态,并且乐呵呵的想要开发2.0版。由于主创活跃,它自带了一些流行功能,比如websocket, http2, jwt授权。用gin的话,这些功能要自己包装个中间件,虽然也很容易就是了。
  • 但echo的问题在于,它的代码毫无注释。作者现在是在劲头上,等3-6个月,在路上看到个穿超短的妹子,热情转移了,很快就会忘记当时代码是怎么写的。没有注释,不但别人不方便接手,自己也懒得再去看,于是慢慢就永不再更新。
  • 缺少注释的开源包,大部分都有这个问题。echo最终会不会变成这个结局,我们无从得知。

 


总结


综上
  • echo的状态是当下主创本人活跃,框架还不太成熟,适合最轻量级服务;
  • gin则是整体成熟、易于调试,但可以预期,框架本身发展不会太快,除非主创大学毕业,从事和golang相关的工作。
  • echo的使用方式、命名,都参考了gin,两者很接近,切换框架很容易,所以不用担心选错。

 
更新
由于echo的路由冲突频繁且没有调试信息,目前不是合理选择。等作者补上了路由冲突检测,那么就还不错。
 
如果想要回避这种框架的路由冲突,又想享受类似的优秀,neo框架目前最接近.
 
原文地址:https://www.golangtc.com/t/56a38761b09ecc083100010c 

Postfix小技巧和故障诊断命令

运维技术Ansible 发表了文章 • 0 个评论 • 76 次浏览 • 2017-09-03 23:27 • 来自相关话题

下面列举出来的一些小技巧在邮件管理员的日常中会经常用到,如果有什么错误,请留言交流。
 
打印邮件队列:# postqueue –p# mailq
如果队列数较大可以配合tail查看:# mailq | tail
刷新队列:# postqueue -f
立即为队列中domain.com的域名的邮件发送:# postqueue -s domain.com
删除队列中所有邮件:# postsuper -d ALL
删除一个特定的信息:# postsuper -d messageid
重新发送特定的邮件:# postfix -r msgid
查看postfix邮件版本:# postconf -d mail_version
mail_version = 2.6.6

英文原文: https://techarena51.com/blog/postfix-configuration-and-explanation-of-parameters/  查看全部
下面列举出来的一些小技巧在邮件管理员的日常中会经常用到,如果有什么错误,请留言交流。
 
打印邮件队列:
# postqueue –p
# mailq

如果队列数较大可以配合tail查看:
# mailq | tail

刷新队列:
# postqueue -f

立即为队列中domain.com的域名的邮件发送:
# postqueue -s domain.com

删除队列中所有邮件:
# postsuper -d ALL

删除一个特定的信息:
# postsuper -d messageid

重新发送特定的邮件:
# postfix -r msgid

查看postfix邮件版本:
# postconf -d mail_version
mail_version = 2.6.6


英文原文: https://techarena51.com/blog/postfix-configuration-and-explanation-of-parameters/