标签归档:Linux

近期工作随记

身心体会


确实啊,这近一个月来就自己而言跟打战似的,各种忙碌、通宵熬夜导数据。前要盯流量看监控,后要顾集群服务存储兼干DBA活;左边答疑技术支持,右边请教开发确认机制;对外细到服务销售/客户上传数据,对内还需受命服务于两边项目;说白基本是“白天作战UpYUN,晚上转移Huaban”、“白天要跑机房,晚上得理配置,半夜上岗无证DBA临时工”的节奏一点不够分。其实领导会上所言的关于老大事情交接,其实不过是岗位的交接罢了,某种程度并不包括工作内容任务。

这样也不算什么坏事…而且也不是说仅仅是忙累而才不爽。小公司就是这么点优势—只要主动多去参与你就可以学习更多积累更多。其实不爽的地方关键在于:那些整天喊着“共同创业,共事”的领导们就只会口头忽悠说着些多好听的话,而实际上对于员工而言基本是看不到自己所创造的价值所在(最基本的业务销售情况无人知晓);做基础服务不舍得投入基础设施,一心只想考虑看要在技术人/程序服务上榨干所有,倒是很舍得投入找来各种摆饰好看撑场面的“展示品”,需要有这样的阶段没错,但关键至少目前还没到吧!如今一定程度上必备基本的容量规划预估是值得考虑,多少次都是被动的等项目迫在眉睫才到处要资源的,适当的冗余备置批资源想必还抵不上一个“展示品”一个月的费用吧?!

身为领导们很正常的一贯都只喜好那些好被自己降服、唯命是从、时刻追随自己等方面的人。可惜自己情商低下,属比较不正常的另类,言论随心、直言不讳、单刀直入、不降服于任何人,不想压抑内心不爽、不想虚假处事,只想做真实自己,哪怕自己知晓这样最终受伤的是自己。

其实就公司目前而言,管理方式及氛围而言都相当令人不敢苟同啊。

最后,只能用朋友曾给的一条共勉评论—“要么忍,要么滚”来终结身心体会,以这样方式记录下自己人生的点滴就好。

无证上岗DBA临时工


毕业至今多年,经历过的几家公司部门貌似都没有专职的DBA这岗位角色,可能自己处过都是小公司吧,这样的好处就是运维可以负责兼顾DBA维护的角色,学习到更多实战东西,之前在厦门就是如此,可惜自从来杭州后新接触更多是CDN的东西,所以后端DB基本就没再碰过,没想到这近一个月来能再次捡起几次熬夜都和数据库维护有关啊。

主要包括是 MySQL 维护及版本升级以及 Redis 服务实例的迁移分离,都是由于业务规模的速度增长而做的完善或扩充:MySQL 之前配置考虑不够周到及业务量增长触发到版本的某个BUG;花瓣 Redis 集群服务内存告警做相应的扩容迁移分离。

MySQL维护:共享表空间–>独享表空间;版本升级5.5.19–>5.5.31


共享表空间—>独享表空间


上次迁移更新数据库还是一年多前,当时自己就只负责安装配置数据库所需的平台环境(回想起那时都是泪啊!),至于 MySQL 的参数配置还是老大来,当时也没有考虑太周到,采取的是共享表空间方式。(时间的推移发现磁盘空间回收释放成一个问题),故决定重整调整配置开启设置使用独享表空间,方便后续对单表做表分析回收释放空间。(采用重新导出导入数据方式来做变更),主要配置修改:

    vi /etc/my.cnf
    innodb_file_per_table =1

至于共享表空间和独享表空间的比较,个人无权评论,因为自己是个无证上岗的DBA临时工,建议可以请教相关专职DBA或也可以看看MySQL 独立表空间 VS 共享表空间

升级 MySQL 数据库版本:5.5.19—>5.5.31


当时主要有2个疑问需事先确认:

  1. 数据需不需要重新导出导入
  2. 升级后同现有的相对较低版本与升级后高版本的同步兼容性问题

为了确认验证上面这两个问题,找了2台之前下线的服务器(事先已经有部署有 MySQL5.5.19版本)做了下基本逻辑的测试:对于第一个问题,测试大致

  • 安装部署新版本 MySQL5.5.31
    tar zxf mysql-5.5.31-linux2.6-x86_64.tar.gz
    /usrl/local/mysql/bin/mysqladmin -uroot -p shutdown #关闭旧版本MySQL服务
    mv /usr/local/mysql /usr/local/mysql5.5.19
    mkdir /usr/local/mysql
    mv mysql-5.5.31-linux2.6-x86_64/* /usr/local/mysql/
    mkdir /usr/local/mysql/log
    chown -R mysql.mysql /usr/local/mysql
  • 启动新版本 MySQL 服务
    /usr/local/mysql/bin/mysqld_safe --user=mysql&

    mysql> select version();
    +------------+
    | version()  |
    +------------+
    | 5.5.31-log |
    +------------+
    1 row in set (0.00 sec)
  • 执行 mysql_upgrade 调整修复数据兼容性 (按规范流程来做事)
    [root@hadoop01 local]# /usr/local/mysql/bin/mysql_upgrade -uroot -p
    Enter password:
    Looking for 'mysql' as: /usr/local/mysql/bin/mysql
    Looking for 'mysqlcheck' as: /usr/local/mysql/bin/mysqlcheck
    Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/tmp/mysql.sock'
    Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/tmp/mysql.sock'
    mysql.columns_priv                                 OK
    mysql.db                                           OK
    mysql.event                                        OK
    mysql.func                                         OK
    mysql.general_log                                  OK
    mysql.help_category                                OK
    mysql.help_keyword                                 OK
    mysql.help_relation                                OK
    mysql.help_topic                                   OK
    mysql.host                                         OK
    mysql.ndb_binlog_index                             OK
    mysql.plugin                                       OK
    mysql.proc                                         OK
    mysql.procs_priv                                   OK
    mysql.proxies_priv                                 OK
    mysql.servers                                      OK
    mysql.slow_log                                     OK
    mysql.tables_priv                                  OK
    mysql.time_zone                                    OK
    mysql.time_zone_leap_second                        OK
    mysql.time_zone_name                               OK
    mysql.time_zone_transition                         OK
    mysql.time_zone_transition_type                    OK
    mysql.user                                         OK
    Running 'mysql_fix_privilege_tables'...
    OK

后来了解到 mysql_upgrade 这命令所做的事情主要是包括:

  1. mysqlcheck –check-upgrade –all-databases –auto-repair
  2. mysql_fix_privilege_tables
  3. mysqlcheck –all-databases –check-upgrade –fix-db-names –fix-table-names

故是建议每一次的升级过程中,mysql_upgrade这个命令最好也应该去执行,通过mysqlcheck命令检查表是否兼容新版本的数据库同时作出修复,还有个很重要的作用就是使mysql_fix_privilege_tables命令去升级权限表。

更多详细升级帮助说明详见:MySQL 官网升级文档

对于第二个疑问:升级后同现有的相对较低版本间的同步兼容性问题,做如下测试:

先在刚刚已经升级的 MySQL 版本为5.5.31 server1 和先前下架但未升级版本对应 MySQL 版本为5.5.19 的server2,这 2 台配置为互为主主。测试如下操作:

  1. 在 server1 的 test 库创建一张表 t1 字段为 id / name ,查看 server2 上的 test 库表情况,正常;
  2. 在 server1 刚创建的 t1 表 插入一条记录 ,到 server2 上查询,结果正常;
  3. 在 server2 上删除刚刚在 server1 上插入的记录,到 server1 上查看,结果正常;

查看前后 slave status 变化是否正常,MySQL自身log日志记录情况,可以判断确定同步疑问也是没问题的。

注:随手分享篇关于 Linux performance tuning tips for MySQL


Redis 实例分离迁移


Redis目前还没有成熟的集群方案,虽说2.8版本已经支持且标记为Stable版本,但一直还是处于更新迭代阶段,拿来线上环境使用还是显得不是很靠谱,个人的看法是:适当追新是应该的没错,但感觉还是不要太够于激进追新,那样只会是更冒险且是小白鼠吧。这次迁移分离主要是随Huaban项目redis服务内存占用增长使得之前每台分配的实例数显得紧张,到了必要的扩容分离处理(不大不小阶段吧)。主要备录几点刚接触过程了解到的点:

  1. 迁移分离方式–复制功能,一定要用到内存快照,所以需要充当master库所在服务器相等量的内存容量闲置;
  2. master和slave断开后重新建立连接都得重新完整的将整个快照做一次同步传输,没有类似MySQL的位置标记概念(增量备份);
  3. 从2.6版本后,slave角色默认是开启只读的,这个如果没有事先使用 config set slave-read-only no 关闭的话,在做分离迁移完后应用端切换到新的上面后,会遇到 redis slave read only 的提示,以致新的写入失败丢失;
  4. 确保本地磁盘空间足够(基本不会遇到但是不好说),因为内存快照过程redis进程是会dump一份临时的temp.rdb文件到磁盘再传输到slave服务器上加载进内存中,如果master磁盘不足的话会出现快照恶性循环失败启动新的slave进程;
  5. so,用前需要事先做好业务的预估容量规划及后期的扩容问题。

还是那句话,个人始终只是临时工就只了解些外表的一些皮毛而已,对于看得懂源码的人想了解可以读读源码去,哈哈。这里随手分享一两篇个人觉得写得不错的牛人微博或文章大家可以看看—田琪的微博Redis复制与可扩展集群搭建

最近还尝试接触了个新老玩意—TCPCopy


不忘生活


工作在忙在累,也不能忘周末的休闲骑行生活,工作最终都是为了享受生活,故不能忘。就如自己的一个愿望是:哪一天可以申请回老家乡下远程办公,看似很简单的愿望却至今未能遇到有一家公司肯批准(很多都觉得不放心、会偷懒;成为特例影响他人,但自己要求想法就是如此另类,因为个人觉得完全没任何问题。)所以一直坚持着和小伙伴们一起踩着脚踏车到周边游逛。有骑行随记图文有证据分享,如:

  1. 萧山无人村挑战盘山而上
  2. 奔杨家赏银杏
  3. 甘岭水库,长乐林场

近年来各地污染指数各种爆表,搞得本来要去徒步爬山都不能……

2009-11-05

    今天确实是好囧好监介啊,傍晚下班竟然搭错车,错得离谱啊,没记错的话应该是有史以来第一次,人生啊。也许是太累了吧,昨晚三点半才睡,早上六点半就醒来后就没能再入睡过,只是动弹不得赖床到八点才懒懒的硬爬起来。。。结果本想带包咖啡过去公司泡泡喝下以便看能不能提神,没想到竟然忘了。。。sigh/// 最近上班都不务正业,确实没半点激情做事啊,总是过一天是一天的应付似的。。。
    ==================分==割==线=====================
    Ubuntu9.10发布也有几天了,之前一直只在公司的虚拟机上体验了下,直到昨天想想还是直接硬盘安装个用用吧,毕竟如今的已经对桌面支持甚好够完善啦~可惜自己电脑没光驱,以前都是使用grubfordos引导U盘安装的,这次看到有个更好的措施就是耳闻已久却未曾实践过的Live USB引导安装。早上向同事借了个1G左右的量产U盘,却死活没办法清楚里面winPE的东西,网上论坛找了下工具措施竟然只有注册方可下载,注册却还需要邀请码,实在是BS啊 一气之下懒得折腾了。。。直接找客服MM借了个SD卡先用用吧。使用公司的限速网速wget -c了三四个小时才将一个CD ISO大小的镜像下载下来 真TMD不容易啊 马上到SF下载工具制作Live USB,主要是使用UNetBootin 该工具加载进U盘制成Live USB优盘。结果在公司电脑上测试要么识别不到(可能接触不良)要么就是无法安装而出现超出屏幕频率而花屏的现象,真是汗啊。。。还好刚刚在自己住宿试安装了下挺顺利的也挺快的。。。确实是方便啊  决定明天再将其美化装扮一番///
    下班走在路上时手机上网在微博上看到好多人说地震了,但自己始终没任何感觉到啊,也许跟自己边玩手机边听摇滚音乐有关了,自然就感觉不到,也许也因为这样害得竟然莫名其妙也不知道怎么会搭错车上了39路公交,本来想发短信问下坦克看下班回来了没有刚好可以到莲花三村下车一起吃顿饭再转车回来,结果没回应只好再晕乎乎的转中巴525路回国贸新城了 哎 感觉好尴尬好囧  如此错误也能发生在自己身上。。。。
    一个月没回家 也近一个月未曾见过老大  直到昨天突然接到电话说又要出差去广西–南宁做什么需求调查  归期待定  好吧 Bless   其实对于自己的亲戚家人有太多的愧疚与不孝啊  Sorry  因为自己也很累也很迷茫 什么路才是属于自己呢  真的不知道。。。

随便更新一点

   很久没记录更新这个自言自语之地了。。。因为一个人的生活快乐是自欺的,无趣是难免的~有时怀念学校的生活,至少热闹,虽然不属于自己。无眠可以随便喊上个人夜游,孤寂时可以喊上一群人瞎扯,郁闷时可以找王导喝酒,。。。

   其实最近生活也还算有规律吧,偶尔的失眠的习惯反正免不了,别人是晚上睡不着,早上起不来,而自己确实晚上睡不着,天微亮就醒。上班空调吹多了,人容易晕呼呼哉。最近总是会胡乱大胆的去想象一些应该说很有难度基本不大可能,但自己觉得还是有那么可能性存在的想法!然后跟同事闲聊时提起得到对方的回应总是“你想太多了”。。。囧~也许自己想多太够自动化吧~想偷懒吧~好听点说想试试能否效率点。

   上周把原来号召很久重建集美学村BBS的事情稍稍起步下,折腾了下OS及bbs的简单框架。第一天晚上刻盘安装未遂,第二天过去还是折腾了一小会后决定使用本地搭建Web方式使用网络安装方式(NetInstall)引导安装,结果刻录的是Centos5.3的Live CD 而另一个ISO镜像是5.2的DVD 是否引导不起,想必不一致缘故吧!最后一气之下直接使用centos.ustc.edu.cn的镜像在线安装,速度还可以接受,75分钟吧!(比预料的还要快)还得考虑后续的各项考虑事项 如数据的备份、系统的监控等系统维护问题    哎 这几天发现觉得有些事情一个人总是不能考虑得够全面,各个细节方面确实是容易被忽视掉而可能带来不必要的隐患。

   最近临近天朝六十大寿啦~ 一切都管得很严,各地的网安要求提供商务必一定得在服务器上安装至少一套的安全监控系统,不管win或是linux,其实早在五月时厦门这边的就已经要求安装上一套所谓“厦门网安监控系统” 实时扫描相关的协议、关键词吧!上周又收到广州那边要求必须至少安装华盾或蓝盾,结果华盾又收钱,蓝盾又会测试后会搞得win的IIS挂掉!被逼之下,只好试用华盾,安装完后查看下感受到,所谓的安全监控系统只能说只想对网安而言罢了,实际上是系统隐患的漏洞。

   尚未搞定问题:一方面、出于对于E文的不感冒,所以一直想用把man文档搞成可视中文,结果折腾了很久还是没找到在zh_CN.utf_8下如何显示中文man帮助文档,哎! 另一方面、刚搭建的bbs系统使用ssh方式莫名其妙的每个一段时间就会掉线。继续找原因ing

   好吧,明天又是周五周末了。。。每一到周末自己就不知道该何去何从了。。。话说这周终于必须得回家休息区了。。。岛内将降压停水,貌似就为了一个福厦铁路搞得水管要迁移。

   ps:晚上不知道为什么的觉得决定把QQ空间Qzone彻底的关闭一段时间吧。那一群貌似也渐渐形成一群一群的!各自不大往来交流,所以上周衡量之下把波波群退掉了!一方面人员基本都是重复的;再者,话题不合不相为谋,难以融合! 嗯