原文:http://www.percona.com/blog/2014/01/28/10-mysql-settings-to-tune-after-installation/


当我们被聘请去做MYSQL性能审计时,我们被期望审查MYSQL配置文件并提出改进建议。在大多数情况下很多人都感到惊奇,因为我们仅仅在成百上千的变量中改变了很少的一部分。这篇文章的目的就是告诉你一些至关重要的设置项。
我们在几年前曾经在博客中给出过一些建议,但从那之后MYSQL的世界发生了很多改变!

阅读全文

新增一台HA节点192.168.0.155,虚拟IP192.168.0.160,其它IP见上文。

安装KEEPALIVE:yum install keepalived

分别在151和155 安装完成后,修改/etc/keepalived/keepalived.conf,我使用151作为主节点,155为备节点。

151配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
! Configuration File for keepalived
global_defs {
notification_email {
test@xxx.net.cn
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
###########
vrrp_script chk_ha {
script "/opt/chk_ha.sh"
interval 2
weight 2
}
###########
vrrp_instance VI_1 {
state MASTER # 主节点
interface eth0 #根据实际情况修改
virtual_router_id 51
mcast_src_ip 192.168.0.151 # 本机ip
priority 100 # 这里要大于备节点
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_ha
}
virtual_ipaddress {
192.168.0.160 # 注意这里改成虚拟IP
}
}

155配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
! Configuration File for keepalived
global_defs {
notification_email {
test@xxx.net.cn
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
###########
vrrp_script chk_ha {
script "/opt/chk_ha.sh"
interval 2
weight 2
}
###########
vrrp_instance VI_1 {
state BACKUP # 备份节点
interface eth0 #根据实际情况修改
virtual_router_id 51
mcast_src_ip 192.168.0.155 # 本机ip
priority 95 # 这里要小于主节点
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_ha
}
virtual_ipaddress {
192.168.0.160 # 注意这里改成虚拟IP
}
}

其中,chk_ha是用于检测HAPROXY是否存活的脚本,内容如下:

1
2
3
4
5
6
7
8
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
/etc/init.d/haproxy start
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
/etc/init.d/keepalived stop
fi

添加执行权限后,给151和155 分别添加虚拟IP:ifconfig eth0:0 192.168.0.160 netmask 255.255.255.0 up

添加后结果如下

1
2
3
4
5
[root@test5 ~]# ifconfig eth0:0
eth0:0 Link encap:Ethernet HWaddr AE:A9:9C:02:C3:28
inet addr:192.168.0.160 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:17

155上的HA配置完全和151一样,但这里注意把listen status改成虚拟IP的192.168.0.160:8080。

启动KEEPALIVED服务:

1
2
[root@test5 ~]# service keepalived start
Starting keepalived: [ OK ]

由于有chk_ha这个脚本存在所以ha服务会自动启动。

此时,即便151的HA节点故障,155将自动接替151的工作。

参考资料:

  1. http://blog.chinaunix.net/uid-25266990-id-3989321.html
  2. http://www.cnblogs.com/dkblog/archive/2011/07/06/2098949.html
  3. http://blog.chinaunix.net/uid-25267728-id-3874670.html

评论和分享

RMBP我的记录

发布在 Mac

不出意料的,2015计划单中首先完成了“其它”——换台新电脑。新电脑已经入手半个多月了,记录一下这段时间我是怎么折腾的。

作为一名忠实的键盘党,感觉MBP的触控板简直爽爆了,在告别鼠标的道路上又进一步,而且“合盖就走,无需关机”这点也让我很喜欢。最初的时候可能需要重新熟悉一下os x的快捷键(不改键盘键位映射的情况下),command键取代了ctrl键的大部分功能,比如复制、粘贴、切换输入法一类的。再比如网页刷新是command+r而非F5,这里推荐第一款软件——cheatsheet。

这个小东西的作用就是当你长按command键时显示常用快捷键,不仅是系统级别的,而且还包含了软件层面的。

第二个推荐的软件就是alfred,相信使用os x的没有不知道这个的吧?绝对是os x下的第一效率神器。

另外,虽说os x也算是*unix家族的成员,但从习惯了linux的强大的包管理功能后还是希望能在ox s中也有类似功能,于是请出os x下的包管理大师——homebrew。

执行下面的命令即可安装

1
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

安装完成后,使用brew install/uninstall/search/等命令就可以安装相应的程序了,和Linux下一样。另外使用brew list命令可以查看当前安装了哪些东西。

说到终端,虽说自带的bash已经很好了,不过有一个被称为终极shell的,就是zsh和oh-myzsh这对好基友。os x已经自带了zsh,安装oh-myzsh使用如下命令:

1
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

至于有多强大和使用问题,这里就不多说了,参见 http://zhuanlan.zhihu.com/mactalk/19556676

另外,这个东西在linux和win下也是可以使用的。

至于再具体到某个程序下的,比如chrome的vimum插件、switchsharp插件、vim的vumdle、autojump、taglist、the-nerd-tree都是我每台电脑都会安装的东西,这里不展开了。

最后多说一句,rmbp i5 8g玩dota2默认特效下fps在40左右可以流畅玩耍,唯一不足就是小地图字体很模糊,建议改成图标。

评论和分享

这是翻译系列的第一篇,如有不足希望大家指出。 原文:http://www.acunetix.com/blog/articles/choosing-a-web-vulnerability-scanner/


评估一个网站漏洞扫描器的好坏并不容易,随着大量的开源或商业的扫描器不断涌出,它们都声称自己提供了最好的扫描功能,所以选择一个好的扫描器是一个重要而又艰难的决定。在这篇文章中,我们提供了几个当您选择扫描器时可以考虑的关键之处。

易用

漏洞扫描早就不再是一件容易的事情,虽然(希望)很多人都了解如SQL注入、XSS一类的基础知识,但并不是所有操作扫描器的人都是相关专家。理想情况下,你的大部分时间应该用于修复扫描器发现的漏洞而不是学习如何使用扫描器。

有广泛的安全测试

漏洞扫描器应该能识别出更多的漏洞。尽管现在大多数的扫描器都能识别出一些基本、常见的漏洞,但你选择的扫描器最好也能识别出那些不太常见的漏洞。

能识别漏洞变种

一个好的扫描器除了能识别出大量的漏洞外,应该也能识别检测出这些漏洞的相关变种。用XSS举例来说,开发者可能修复了基本的XSS漏洞,但却不能防止经过编码后XSS漏洞攻击。

覆盖更多的网络技术

(PS:应该是指更加新一些的扫描器) 漏洞扫描的第一步是抓取网站页面,爬虫将识别所有组成页面的表单以及元素。但随着网站动态技术的发展,这个目标并不像想象中那么简单了。特别是越来越多的网站使用如:javascrept、HTML5、类似Google Web Toolkit 一类的网络框架、单一页面程序或其他前沿的技术。 记住,漏洞扫描器只能识别出在爬虫阶段被确定的页面或元素,所以你应该选择那些能够识别目标网站使用什么技术的漏洞扫描器,并且开发者能够频繁的更新以便于跟上最新的技术。

智能扫描

我们可以把每项扫描看成是一个孤岛,这也就意味着每项扫描结果和其他的扫描是不相关的。在某些理想情况下,一项扫描的结果应该可以当作另一扫描的输入。 举个例子来说,在扫描过程中识别出了一个邮箱地址,在理想过程中这个邮箱地址应该在扫描过程中被使用,就像用于网站中的登录表单中。再举个例子,扫描过程中发现了某些开发工具,比如版本控制工具(GIT或者SVN),网站也会尝试解析这些控制工具的内容,而这些内容中常常包含一些敏感信息。

覆盖内容管理系统

很多的组织使用内容管理系统(CMS)去频繁的发布文章等内容,常见的CMS包括WordPress, Joomla, Drupal等。它们每一个都包含相应的漏洞,目标网站也许就使用其中的一个,因此漏洞扫描器应该能够检查它们的配置错误以及漏洞。

支持移动终端

(PS:检测那些支持移动端的网站而不是这个扫描器有手机版) 现在很多网站对移动终端提供了相应的版本,它们将在智能手机或平板上自动加载,并且提供了和PC版一样的功能。这些移动版本或许存在漏洞,确保你的扫描器也能扫描这些移动版本的网站程序。

灰盒测试

很多漏洞扫描器提供了黑盒测试以便于在没有源码的情况下进行漏洞扫描,而灰盒测试则在扫描时在扫描器和网站之间安装了一层代理。灰盒测试通过更加完全的覆盖以及准许扫描者自定义更多的漏洞验证、特征码等信息来增加扫描的成功率。比如一段存在漏洞的后端源码或者包含SQL注入的SQL语句。

手工测试工具

扫描器在完成一个扫描前是不能停止的,在某些情况下你可能需要修改扫描出的某些东西。理想情况下扫描器在产品中集成了某些工具,准许你在手工测试时候简单的重新利用自动测试产生的结果。

警惕零误报

尽管现在多数的漏洞扫描器都很诚实并且工作的很好,但你仍然需要注意扫描器没扫描出任何漏洞的情况。一种常见的想法是认为扫描器应该达到零误报的情况,然而零误报的扫描器是没有多大用处的,事实是任何漏洞扫描器都达不到100%的准确率。如果一个扫描器声称自己零误报,要么是它们没作出全面的检测,要么是没全部展示。 2015年是Acunetix Web Vulnerability Scanner10周岁生日,10年来我们不断的对其开发并优化,使其成为了扫描器市场中的领跑者。 (PS:这广告是原文中的…)

评论和分享

最近公司有个异地多机房数据同步需求,mysql原生支持双主同步,所以只能另寻他法,于是找到了Percona XtraDB Cluster。这个可以理解为给Mysql打了个补丁,以便支持多主同步。

测试环境:centos 6.5

IP分配:

  1. 192.168.0.154(DB)
  2. 192.168.0.152(DB)
  3. 192.168.0.153(DB)
  4. 192.168.0.151(HA)
    首先安装Percona XtraDB Cluster的源:
    yum install http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

然后
yum install Percona-XtraDB-Cluster-56

安装完毕后,修改/etc/my.cnf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[mysqld]
server_id=4
datadir=/var/lib/mysql
user=mysql
# Path to Galeralibrary
wsrep_provider=/usr/lib64/libgalera_smm.so
# Cluster connectionURL contains the IPs of node#1, node#2 and node#3----所有节点的ip
wsrep_cluster_address=gcomm://192.168.0.152,192.168.0.154,192.168.0.153
# In order for Galerato work correctly binlog format should be ROW
binlog_format=ROW
# MyISAM storageengine has only experimental support
default_storage_engine=InnoDB
# This changes howInnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2
# Node #1 address----本机ip
wsrep_node_address=192.168.0.154
# SST method----节点间同步的方式
wsrep_sst_method=xtrabackup-v2
# Cluster name
wsrep_cluster_name=my_centos_cluster
# Authentication forSST method----来做节点间数据同步的账号密码
wsrep_sst_auth="root:asdasd"
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log

注意,修改不同节点的server_id以及 wsrep_node_address。

然后在192.168.0.152上执行/etc/init.d/mysql bootstrap-pxc

网上有些文章说需要修改 wsrep_cluster_address=gcomm://,在新版本中不需要了,上面这句就是初始化集群。结果如下:

1
2
[root@localhost ~]# /etc/init.d/mysql bootstrap-pxc
Bootstrapping PXC (Percona XtraDB Cluster)Starting MySQL (Percona XtraDB Cluster).. SUCCESS!

然后根据配置文件修改用于同步的用户名和密码,由于是实验环境我偷懒直接使用root了:

1
mysqladmin -u root password asdasd

进入mysql终端后可以看当前信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> show status like 'wsrep%';
+----------------------------+--------------------------------------+
| Variable_name | Value |
+----------------------------+--------------------------------------+
| wsrep_local_state_uuid | c2883338-834d-11e2-0800-03c9c68e41ec |
...
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
...
| wsrep_incoming_addresses | 192.168.0.152:3306 |
| wsrep_cluster_size | 1 |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
...
| wsrep_ready | ON |
+----------------------------+--------------------------------------+

当第一个节点成功启动后,启动其他节点,注意此时命令是

1
/etc/init.d/mysql start

正常情况下很快就会启动完成,如果启动了很长时间后出现如下提示:

1
2
3
4
Shutting down MySQL (Percona XtraDB Cluster)..... SUCCESS!
Starting MySQL (Percona XtraDB Cluster).................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................... ERROR!
ERROR! MySQL (Percona XtraDB Cluster) server startup failed!
ERROR! Failed to restart server.

但日志里没相关错误信息,那么请 检查selinux是否关闭以及防火墙4444和4567端口 !!!(我就忘了防火墙的原因纠结了好久)

启动成功提示如下:

1
2
3
4
5
6
7
8
9
10
11
[root@test4 ~]# service mysql start
Starting MySQL (Percona XtraDB Cluster)...... SUCCESS!
[root@test4 ~]# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 963/sshd
tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 5184/mysqld
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1041/master
tcp 0 0 192.168.0.154:22 192.168.0.37:38500 ESTABLISHED 1080/sshd
tcp 0 0 192.168.0.154:4567 192.168.0.153:53681 ESTABLISHED 5184/mysqld
tcp 0 0 192.168.0.154:59348 192.168.0.152:4567 ESTABLISHED 5184/mysqld

可以看出,4567端口也处于监听状态。此时,在任意机器上进行数据库操作其他2个也会自动同步了。

此时,手动关闭152,然后在154上插入数据,153也同步了,同时自动把152从集群中删除了:

1
| wsrep_incoming_addresses     | 192.168.0.154:3306,192.168.0.153:3306 |

再启动152后,数据也自动同步了。

如果非常非常不幸,集群中所有节点都挂掉了,修复后需要在最后挂掉的节点上执行bootstrap-pxc命令,这样才能拯救多一些的数据。

如果重启时候报错:

1
2
3
4
5
6
[root@test3 ~]# service mysql start
ERROR! MySQL (Percona XtraDB Cluster) is not running, but lock file (/var/lock/subsys/mysql) exists
Stale sst_in_progress file in datadir
Starting MySQL (Percona XtraDB Cluster)State transfer in progress, setting sleep higher
.. ERROR! The server quit without updating PID file (/var/lib/mysql/test3.pid).
ERROR! MySQL (Percona XtraDB Cluster) server startup failed!

直接删除/var/lock/subsys/mysql即可。还有一点需要注意的,数据库表需要使用INNODB而不是MYISAM引擎,否则会出现表结构同步了而数据无法同步的情况。

安装HAproxy:yum install haproxy

修改配置文件,位于/etc/haproxy/haproxy.cfg:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#---------------------------------------------------------------------
# Example configuration for a possibleweb application. See the
# full configuration options online.
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option tothe SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like thefollowing can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option tcplog
option dontlognull
# option http-server-close
# option forwardfor except127.0.0.0/8
option redispatch
retries 3
maxconn 2000
timeout connect 5s
timeout client 50s
timeout server 50s
# timeout http-keep-alive 10s
timeout check 10s
listen mysql-cluster 0.0.0.0:3306
mode tcp
balance roundrobin
server node1 192.168.0.152:3306 check
server node2 192.168.0.153:3306 check
server node3 192.168.0.154:3306 check
listen status 192.168.0.151:8080
stats enable
stats uri /status
stats auth admin:admin
stats realm (haproxy\ statistic)

启动服务后,访问192.168.0.151:8080/status登录即可看到界面。对外则使用192.168.0.151:3306访问数据库即可。

—-20150120更新—-

对于上面的HA配置,默认是监控第4层,换言之如果由于某情况下3306端口开放而MYSQL实际并没提供服务时,HA就无法解决这种情况。为了模拟这种情况,停止某个节点的MYSQL服务后,使用NC监听3306端口,成功欺骗了HA。为了解决这中情况,我们就需要针对应用层进行监控。

首先在节点上安装xinetd:yum install -y xinetd

然后编辑/etc/services,添加

1
mysqlchk        9200/tcp

然后编辑/usr/bin/clustercheck,修改

1
2
MYSQL_USERNAME="${1-root}"
MYSQL_PASSWORD="${2-asdasd}"

这里我偷懒使用root,大家根据实际情况修改。保存后启动xinetd服务

1
2
[root@test4 ~]# /etc/init.d/xinetd start
Starting xinetd: [ OK ]

此时9200端口应该已经处于了监听状态,执行检测命令:

1
2
3
4
5
6
[root@test5 ~]# clustercheck
HTTP/1.1 200 OK
Content-Type: text/plain
Connection: close
Content-Length: 40
Percona XtraDB Cluster Node is synced.

接下来修改HA节点的配置文件,修改成:

1
2
3
4
5
6
7
listen mysql-cluster 0.0.0.0:3306
mode tcp
balance roundrobin
option httpchk
server node1 192.168.0.152:3306 check port 9200 inter 12000 rise 3 fall 3
server node2 192.168.0.153:3306 check port 9200 inter 12000 rise 3 fall 3
server node3 192.168.0.154:3306 check port 9200 inter 12000 rise 3 fall 3

保存后重启HAPROXY即可,如果使用了KEEPALIVE(这里)把备份HA配置也修改成一样的。此时就是基于应用层的监控了。

评论和分享

你好,2015!

发布在

翻出去年写的年度计划,发现14年的完成度一般,还需努力啊!

完成事项:

  1. 毕业证
  2. 驾照
  3. 户口

语言方面:

  1. 英语略有进步,粤语毫无建树……

身体方面:

  1. 早起早睡坚持的不错。
  2. 回校答辩期间以及天气变冷后锻炼计划泡汤,啤酒肚趋势略发明显……

生活方面:

  1. 厨艺部分,除了抽风一样下过几次厨之外,基本处于停滞状态……
  2. 练字?貌似都很久不写字了……
  3. 旅游计划彻底破产……

经济方面:

  1. 由于5-7月回校答辩、考驾照,故本年度收入减少,但支出却大幅增长。其中信用卡消费占比将近80%,需要引起警惕。

阅读方面:

  1. 去年一共阅读书籍18本(耗时2天+的),其中技术类8本,小说3本,经济2本,其它类5本,较全职学生时代大幅度减少。

交际方面:

  1. 都说程序员“钱多话少死的早”,从个人角度来说,“钱多”没看出来,“话少”倒是真的。有些时候居然能一天都不和任何人说话,这点急需改善。

工作方面:

  1. 虽说是个开发,但这一年大部分工作都是围绕运维展开的,仅编写2套程序也都是和服务器部署、监控有关的。不过运维也为我打开了另一个窗口,收获颇丰,努力发展成运维+后台的复合人才。

最有成就的事:

  1. 2个月时间精读完了《思考,快与慢》这个砖头。总结一句话就是:大部分时间不要相信直觉!
  2. 某一天老大不在,公司服务器故障导致全公司业务停止。在2小时内修复问题减少公司几万美金损失(话说是不是该申请个奖金神码的哈哈)

最挫败的事:

  1. 英语被香港大妈完爆好几条街……让我哭一会先……

总结:

综上所述,2014年还是比较平庸的。虽说学无止境,但这也是社会学意义上“学生时代”终结的一年。其中很多目标虽然定下,但却是无法量化的,比如语言学习类、健身厨艺等。故在2015年这个真正完全步入社会的一年,定下可量化目标如下:

经济方面:

  1. 改变记账方式,将每一笔信用卡支出都详细记录,而不是全部混杂在一起。同时开源节流并行,寻找副业机会以及减少非必要支出,争取早日摆脱信用卡泥潭。
  2. 争取募集的种子资金达到年10%收益率。

语言方面:

  1. 阅读2本英文原著,学习5首英文歌,其中至少一首可以去KTV秀一下的。
  2. 每个月看1部粤语电影。

身体方面:

  1. 增重10斤的同时保持腹部的平坦。
  2. 每星期抽出30分钟进行冥想。

交际方面:

  1. 每天都要和家人朋友扯淡10分钟以上。

阅读方面:

  1. 简单的书每周一本,技术类或需要精读的书争取每个月一本。

生活方面:

  1. 学习糖醋鸡蛋做法。
  2. 先去把欢乐谷的刺激项目玩一圈,有机会的话去蹦极。

其他:

  1. 换台新电脑。

你好!本命咩咩年!

评论和分享

  • 第 1 页 共 1 页
作者的图片

Roy

微信公众号:hi-roy


野生程序猿


China