赞一下Vultr的客服

今晚遇到的奇葩事情也是多。刚才在Vultr的两台VPS之间正通过private network传输数据呢
突然后悬挂(大雾)就断了,然后就再也ping不通对方了。
ifup,ifconfig eth1 up都试了也没有用。就差报警了。
这时机智的我去Support发了一个ticket。
没想到不到两分钟客服就回了

Hello,

This is a known issue. We have implemented updates to our network
infrastructure and would like to refresh your existing instance(s) to
resolve the underlying issue. This will require us to restart your
instance so just let us know when we can do this for you.

PLEASE NOTE: You may not perform this restart yourself; we must
perform this for you and the restart window should be less than five
minutes in length for any given instance.

Jeff Benfer Systems Administrator

卧槽,基础设施历史遗留问题,要重启。还不能自己来。这么坑。
好吧看来只能重启了。进服务器收拾收拾东西,发了个

Ok,you can restart it now,I’ve stopped the important services.

又是不到两分钟,服务器重启好了0.0 卧槽速度好快。完全没有感觉,检查了一下确实是重启了。
这时发现,private network还是不能用啊,ifconfig了一下。没有eth1。 ifup eth1 报错

Device eth1 does not seem to be present, delaying initialization.

哎哟卧槽看这情况是给我换了个虚拟网卡啊。
赶紧cat /etc/udev/rules.d/70-persistent-net.rules一发压压惊

# PCI device 0x1af4:0x1000 (virtio-pci)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="不给看", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# PCI device 0x1af4:0x1000 (virtio-pci)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="不给看", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x1af4:0x1000 (virtio-pci)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="不给看", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"

eth1和2都有是什么鬼,又发ticket问一下小哥,三分钟后小哥回复了

Hello,

eth2 should work for you. Please let us know if it does not.

Jeff Benfer Systems Administrator

那就把eth1的配置转移到eth2上试试吧。ifup eth2.顺利完成,互相ping了一下对面,终于通了。泪流满面

赶紧把必要的服务开启了一下,docker该开的也都开好了,MYSQL的主从同步检查了一下,还是连不上master啊

然而突然想到iptables的配置里写的3306端口只开放给eth1。赶紧去改了又show slave status\G一下。终于OK了。

然而说了这么多,除了分享网络配置和这RP不好遇到的奇葩问题以外,严重赞一下Vultr的ticket客服,凌晨两三点能在两分钟左右就回复我的ticket简直是业界良心,还能迅速解答我的问题。相比之下Digitalocean的10-20分钟略慢。国内的服务商就更不用说了。动辄一两天慢得要死不说,搞来搞去完全不专业。

最后的最后,放一下Vultr和Do的带Aff链接,虽然没人会用

Vultr
Digitalocean

zabbix监控MYSQL主从复制

保存这个脚本为sh文件
#!/bin/bash
/usr/local/mysql/bin/mysql -uzabbix -e ‘show slave status\G’ |grep -E “Slave_IO_Running|Slave_SQL_Running”|awk ‘{print $2}’|grep -c Yes
在zabbix_agentd.conf中下方加入以下一条语句:

UserParameter=mysql.slavestatus,/etc/zabbix/mysqlms.sh

重启zabbix-agent,在Zabbix-Server所在服务器执行以下语句,测试是否成功:

zabbix_get -s 192.168.1.106 -k  mysql.slavestatus

折腾了一天服务器

前几天因为要用到namespace等特性,把PHP升级了一下,今天索性把Nginx,PHP和MYSQL都升级到最新。
期间遇到了各种奇怪的问题包括mysql编译时候gcc版本太低,编译最新版gcc时又遇到了服务器swap不足等各种问题。
然后就是无尽的编译过程,3个小时过去了。
终于都搞定了
听说PHP5.5以后有集成Zend Opcache,在编译的时候就开启了–enable-opcache,
完成安装以后在php.ini中加入了

[opcache]
zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/opcache.so"
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=64
opcache.interned_strings_buffer=4
opcache.max_accelerated_files=4000
opcache.max_wasted_percentage=5
opcache.revalidate_freq=60
opcache.fast_shutdown=1

然后重启phpfpm。在phpinfo中就可以看到Zend Opcache了。
https://gist.github.com/ck-on/4959032这里get了一个脚本可以查看命中率。看起来还不错

PHP升级

刚刚把PHP升级到最新的5.6.6,本想升级到PHP7,但是由于没get到源码作罢。
升级完毕后部分文件显示access denied。
在stackoverflow上发现了几个解决方案,

In your php-fpm www.conf set security.limit_extensions to .php or
.php5 or whatever suits your environment. For some users, completely
removing all values or setting it to FALSE was the only way to get it
working.

In your nginx config file set fastcgi_pass to your socket address
(e.g. unix:/var/run/php-fpm/php-fpm.sock;) instead of your server
address and port.

Check your SCRIPT_FILENAME fastcgi param and set it according to the
location of your files.

In your nginx config file include fastcgi_split_path_info
^(.+.php)(/.+)$; in the location block where all the other fastcgi
params are defined.

都无效,最后发现是php.ini里cgi.fix_pathinfo的值为0,造成pathinfo的部分文件没法用,修改为1重启php后解决问题。

服务器定时备份

1.linux上安装dropbox

32位linux

wget -O dropbox.tar.gz http://www.dropbox.com/download?plat=lnx.x86

64位linux

wget -O dropbox.tar.gz http://www.dropbox.com/download?plat=lnx.x86_64

解压:

tar xzvf dropbox.tar.gz

第一次运行生成host_id

~/.dropbox-dist/dropboxd &

生成id后,将host_id替换下面链接后面的字符在浏览器打开,输入你的帐号密码就绑定机器了.
https://www.dropbox.com/cli_link?host_id=XXXXXXXXXXXXXXXXXXX

2.建立连接备份网站
正式开始同步你的网站,通过ln软链接你所有要备份的目录,例如:

cd ~/Dropbox

ln -s /home/wwwroot/html

ln -s /home/wwwroot/htdocs

开始运行同步

~/.dropbox-dist/dropboxd &

3.为了节省资源,可以不使用实时同步,只定时打开同步一天的文件再关掉以节省资源.
先关掉同步:

killall dropbox

编写定时同步脚本:

vi backup.sh

代码如下:

#!/bin/sh
start() {
echo starting dropbox
/root/.dropbox-dist/dropboxd &
}

stop() {
echo stoping dropbox
pkill dropbox
}

case “$1” in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;

esac

定时运行和关闭:

chmod +x backup.sh

#crontab -e

每天4点开始同步,5点关闭同步.如果一般每天更新数据不多不用打开这么长时间,这个根据各人每天更新的数据量自己来设置.也可以一直开启同步。

0 4 * * * sh /root/backup.sh restart

0 5 * * * sh /root/backup.sh stop

4.备份数据库的脚本用

vi bakmysql.sh

脚本如下:

#!/bin/bash
DBName=修改为数据库名
DBUser=修改为数据库用户名
DBPasswd=修改为数据库密码
BackupPath=/root/Dropbox/ #保存到同步目录

LogFile=/root/db.log
DBPath=/usr/local/mysql/var/ #备份的数据库目录
#BackupMethod=mysqldump
#BackupMethod=mysqlhotcopy
#BackupMethod=tar

NewFile=“$BackupPath"db$(date +%y%m%d).tgz
DumpFile=”$BackupPath"db$(date +%y%m%d)
OldFile=“$BackupPath"db$(date +%y%m%d --date=‘5 days ago’).tgz #自动删除5天前的备份
echo “-------------------------------------------” >> $LogFile
echo $(date +”%y-%m-%d %H:%M:%S") >> $LogFile
echo “--------------------------” >> $LogFile
#Delete Old File
if [ -f $OldFile ]
then
rm -f $OldFile >> $LogFile 2>&1
echo “[$OldFile]Delete Old File Success!” >> $LogFile
else
echo “[$OldFile]No Old Backup File!” >> $LogFile
fi
if [ -f $NewFile ]
then
echo “[$NewFile]The Backup File is exists,Can’t Backup!” >> $LogFile
else
case $BackupMethod in
mysqldump)
if [ -z $DBPasswd ]
then
mysqldump -u $DBUser --opt $DBName > $DumpFile
else
mysqldump -u $DBUser -p$DBPasswd --opt $DBName > $DumpFile
fi
tar czvf $NewFile $DumpFile >> $LogFile 2>&1
echo “[$NewFile]Backup Success!” >> $LogFile
rm -rf $DumpFile
;;
mysqlhotcopy)
rm -rf $DumpFile
mkdir $DumpFile
if [ -z $DBPasswd ]
then
mysqlhotcopy -u $DBUser $DBName $DumpFile >> $LogFile 2>&1
else
mysqlhotcopy -u $DBUser -p $DBPasswd $DBName $DumpFile >>$LogFile 2>&1
fi
tar czvf $NewFile $DumpFile >> $LogFile 2>&1
echo “[$NewFile]Backup Success!” >> $LogFile
rm -rf $DumpFile
;;
*)
service mysql stop >/dev/null 2>&1
tar czvf $NewFile $DBPath$DBName >> $LogFile 2>&1
service mysql start >/dev/null 2>&1
echo “[$NewFile]Backup Success!” >> $LogFile
;;
esac
fi
echo “-------------------------------------------” >> $LogFile


按上面的方法设置备份数据库的bakmysql.sh文件定时为3点备份,4点关闭执行。因为是在同步目录里,在打包之前,数据就开始上传了,而没打包的数据是不需要上传的,所以数据库备份不能一直开启同步。

5.删除卸载dropbox方法:

killall dropbox

rm -rf .dropbox .dropbox-dist Dropbox dropbox.tar.gz dbmakefakelib.py dbreadconfig.py