CentOS 6/7 x86_64更换4.9版本内核,支持Google BBR拥塞控制算法

该脚本内核由本人编译,脚本特点:
1、无需手动修改grub启动项;
2、已经默认设置拥塞算法为BBR,无需额外设置,重启即可用;
3、更新至4.9正式版

OpenVZ的就不要试了,不可用

注意,本人编译的内核bbr不是模块化的,通过lsmod|grep bbr是查不到结果的,fq也是。

安装步骤:

wget -O- http://soft.wellphp.com/scripts/install_bbr_centos.sh | bash

安装结束之后,重启:

reboot

重启之后验证是否已经成功:

sysctl net.ipv4.tcp_congestion_control net.core.default_qdisc

结果如下:

net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq

如果不幸失败,可以通过VNC修改启动项到老的内核。

6步骤实现CentOS系统环境精简优化

随着VPS主机使用的深化,老左从开始使用面板工具操作VPS,再到后来的一键安装包,现在基本上能自学自用VPS管理网站/备份网站维护。但是需要深入的运维还需要时日,比如刚才看到一篇CentOS系统环境精简优化的文章还是值得分享的。但是在操作之前,最好建议在我们安装系统之后操作,而不要在有网站运行之后操作,以免系统出现问题。

随着VPS主机使用的深化,老左从开始使用面板工具操作VPS,再到后来的一键安装包,现在基本上能自学自用VPS管理网站/备份网站维护。但是需要深入的运维还需要时日,比如刚才看到一篇CentOS系统环境精简优化的文章还是值得分享的。但是在操作之前,最好建议在我们安装系统之后操作,而不要在有网站运行之后操作,以免系统出现问题。

第一步、删除不必要的自带软件包

yum remove Deployment_Guide-en-US finger cups-libs cups ypbind
yum remove bluez-libs desktop-file-utils ppp rp-pppoe wireless-tools irda-utils
yum remove sendmail* samba* talk-server finger-server bind* xinetd
yum remove nfs-utils nfs-utils-lib rdate fetchmail eject ksh mkbootdisk mtools
yum remove syslinux tcsh startup-notification talk apmd rmt dump setserial portmap yp-tools
yum groupremove "Mail Server" "Games and Entertainment" "X Window System" "X Software Development"
yum groupremove "Development Libraries" "Dialup Networking Support"
yum groupremove "Games and Entertainment" "Sound and Video" "Graphics" "Editors"
yum groupremove "Text-based Internet" "GNOME Desktop Environment" "GNOME Software Development"

第二步、升级centos系统

yum update #更新系统
yum clean all #清理全部缓存文件

第三步、禁用seLinux

sestatus #先执行看seLinux状态,如果不是disabled,就需要执行下面步骤,否则不要执行
vi /etc/selinux/config
SELINUX=disabled #禁用SeLinux
SELINUX=enforcing #使用SeLinux

第四步、禁止IPV6(执行后需要reboot重启)

vi /etc/modprobe.conf #打开文件,把下面两行加到最后
alias net-pf-10 off
alias ipv6 off

第五步、初始化防火墙

touch /etc/sysconfig/iptables
iptables -F
iptables -X
iptables -Z
service iptables save
service iptables restart

第六步、禁止无用服务

#! /bin/bash
service acpid off
service atd stop
service auditd stop
service avahi-daemon stop
service avahi-dnsconfd stop
service bluetooth stop
service conman stop
service cpuspeed stop
service cups stop
service dnsmasq stop
service dund stop
service firstboot stop
service hidd stop
service httpd stop
service ibmasm stop
service ip6tables stop
service irda stop
service kdump stop
service lm_sensors stop
service mcstrans stop
service messagebus stop
service microcode_ctl stop
service netconsole stop
service netfs stop
service netplugd stop
service nfs stop
service nfslock stop
service nscd stop
service ntpd stop
service oddjobd stop
service pand stop
service pcscd stop
service portmap stop
service psacct stop
service rdisc stop
service restorecond stop
service rpcgssd stop
service rpcidmapd stop
service rpcsvcgssd stop
service saslauthd stop
service sendmail stop
service setroubleshoot stop
service smb stop
service vncserver stop
service winbind stop
service wpa_supplicant stop
service xfs stop
service ypbind stop
service yum-updatesd stop
chkconfig acpid off
chkconfig atd off
chkconfig auditd off
chkconfig avahi-daemon off
chkconfig avahi-dnsconfd off
chkconfig bluetooth off
chkconfig conman off
chkconfig cpuspeed off
chkconfig cups off
chkconfig dnsmasq off
chkconfig dund off
chkconfig firstboot off
chkconfig hidd off
chkconfig httpd off
chkconfig ibmasm off
chkconfig ip6tables off
chkconfig irda off
chkconfig kdump off
chkconfig lm_sensors off
chkconfig mcstrans off
chkconfig messagebus off
chkconfig microcode_ctl off
chkconfig netconsole off
chkconfig netfs off
chkconfig netplugd off
chkconfig nfs off
chkconfig nfslock off
chkconfig nscd off
chkconfig ntpd off
chkconfig oddjobd off
chkconfig pand off
chkconfig pcscd off
chkconfig portmap off
chkconfig psacct off
chkconfig rdisc off
chkconfig restorecond off
chkconfig rpcgssd off
chkconfig rpcidmapd off
chkconfig rpcsvcgssd off
chkconfig saslauthd off
chkconfig sendmail off
chkconfig setroubleshoot off
chkconfig smb off
chkconfig vncserver off
chkconfig winbind off
chkconfig wpa_supplicant off
chkconfig xfs off
chkconfig ypbind off
chkconfig yum-updatesd off

这样通过上述6步骤,就可以完成对centos精简和优化。

CentOS使用NFS共享目录

一、服务端安装NFS服务

  • 1、安装所需软件包
yum install nfs-utils
  • 2、启用服务
systemctl enable nfs-server 
systemctl start nfs-server
  • 3、设置需要被共享的目录,编辑/etc/exports(vi /etc/exports),添加下面一行(/data/dir是被共享的目录)
/data/dir 客户端IP(rw,sync,no_root_squash,no_all_squash)
  • 4、设置防火墙
firewall-cmd --permanent --zone=public --add-service=nfs
firewall-cmd --reload

二、客户端设置目录映射

  • 1、安装所需软件包
yum install nfs-utils
  • 2、创建挂载到的目录
mkdir /data/dir
  • 3、挂载
mount -t nfs 服务端IP:/data/dir /data/dir/

三、Enjoy!

CentOS 7安装proftpd并添加虚拟用户

最近需要在CentOS 7上配置proftpd,在防火墙设置方面费了点周折,花了半个多小时才全部搞好,特此记录。

  • 1、yum安装proftpd
yum install -y proftpd proftpd-utils
  • 2、修改配置,核心配置如下:
Port 21001 
PassivePorts 60000 65535 
DefaultRoot ~ 
AuthOrder mod_auth_file.c 
AuthUserFile /etc/proftpd.passwd 
AllowRetrieveRestart on 
AllowStoreRestart on 
RequireValidShell off
  • 3、添加虚拟用户
ftpasswd --file=/etc/proftpd.passwd --home=/data/xxx \ 
       --shell=/bin/false --name=www --uid=888 --gid=888 --passwd
  • 4、放行防火墙

服务端口:

firewall-cmd --zone=public --add-port=21001/tcp --permanent

数据端口:

firewall-cmd --zone=public --add-port=21000/tcp --permanent

PASV端口:

firewall-cmd --zone=public --add-port=60000-65535/tcp --permanent

重新加载:

firewall-cmd --reload
  • 5、重启服务
systemctl restart proftpd

CentOS 7 安装MySQL 5.7

听闻MySQL5.7较之前的版本有重大性能提升,打算安装试试,网上找的教程大多过于繁琐,另外对于默认密码更是鲜有提示,所以撰文一篇,简要记录安装过程。

  • 1、安装MySQL官方yum源
rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm

来源:http://dev.mysql.com/downloads/repo/yum/

  • 2、yum安装MySQL
yum install -y mysql-community-server

这一步会自动替换本机安装的MariaDB

  • 3、启用MySQL并启动MySQL
systemctl enable mysqld
systemctl start mysqld

首次启动MySQL的时候系统会进行初始化,包括设置初始密码

  • 4、获取MySQL初始密码
grep "A temporary password is generated” /var/log/mysqld.log

root@localhost:后面就是初始密码

  • 5、修改MySQL密码并进行简单安全设置
mysql_secure_installation

首先输入初始密码,然后可以选择修改密码,必须同时包含大小写数字和特殊字符;然后基本上全部输入Y回车即可。

  • 6、测试MySQL连接
mysql -uroot -p

此处输入上一步设置的密码

  • 7、Enjoy!

VPS通过SSH、Grub和VNC无盘安装CentOS7

1、下载initrd.img、vmlinuz到/boot目录

cd /boot
wget http://mirrors.usc.edu/pub/linux/distributions/centos/7.2.1511/os/x86_64/images/pxeboot/initrd.img -O initrd-7.img
wget http://mirrors.usc.edu/pub/linux/distributions/centos/7.2.1511/os/x86_64/images/pxeboot/vmlinuz vmlinuz-7

2、保存好机器的IP、子网掩码(netmask)、网关(gateway)、DNS信息
3、修改/etc/grub2/grub.cfg
在### BEGIN /etc/grub.d/10_linux ###下面新增

menuentry 'CentOS 7 VNC' {
	linux16 /boot/vmlinuz-7 vnc vncpassword=abcd1234 ip=IP netmask=子网掩码 gateway=默认网关 dns=8.8.4.4 ksdevice=eth0 method=http://mirrors.usc.edu/pub/linux/distributions/centos/7.2.1511/os/x86_64/ lang=en_US keymap=us
	initrd16 /boot/initrd-7.img
}

4、连接好VNC,笔者使用的是Mac下的Chicken,方法不赘述
5、重启VPS,并且密切关注VNC窗口,等到重启时快速按上下方向键,直到停留在grub界面

reboot

6、在grub界面,选中CentOS 7 VNC,回车

7、等到界面提示连接VNC时连接,进行正常安装
IP:VPS的IP
端口:1或者5901
密码:abcd123456
8、Enjoy!

PS:内存太小可能不会成功

openwrt collect ip traffic

#!/bin/sh
# @Create on 2013-12-01

#!/bin/sh

# @Create on 2013-12-01

echo "Collecting data…"

echo ""

cat /proc/net/arp | grep : | grep ^172.16.100 | grep -v 00:00:00:00:00:00| awk ‘{print $1}’> mac-ip

iptables -N UPLOAD

iptables -N DOWNLOAD

while read line;do iptables -I FORWARD 1 -s $line -j UPLOAD;done < mac-ip

while read line;do iptables -I FORWARD 1 -d $line -j DOWNLOAD;done < mac-ip

sleep 10

echo "Download speed:"

echo ""

iptables -nvx -L FORWARD | grep DOWNLOAD | awk ‘{print $2/1024/10" KB/s ",$1/10" packets/s", $9}’ | sort -n -r

echo ""

echo "Upload speed:"

echo ""

iptables -nvx -L FORWARD | grep UPLOAD | awk ‘{print $2/1024/10" KB/s ",$1/10" packets/s", $8}’ | sort -n -r

while read line;do iptables -D FORWARD -s $line -j UPLOAD;done < mac-ip

while read line;do iptables -D FORWARD -d $line -j DOWNLOAD;done < mac-ip

iptables -X UPLOAD

iptables -X DOWNLOAD

网站广告联盟代码速度优化

现在绝大部分广告联盟的广告代码都是使用document.write方式载入到页面中,这种方式很方便,但是可能会阻塞页面剩余内容的加载。
由于广告服务商技术水平参差不齐以及客户端网络的差异,特别在广告位比较多的情况下,有可能导致广告代码引起的用户体验下降。
所以引出本文的优化,其核心思想是重写document.write函数,借鉴了某未知同胞的代码。

1、在全局JS里面增加代码

<script type="text/javascript">
var loadScript = ( function() {
	var adQueue = [], adQueueTmp = [], dw = document.write, dwl = document.writeln;

	function LoadADScript(url, charset, container, init, callback) {
		this.url = url;
		this.charset = charset;
		this.containerObj = ( typeof container == 'string' ? document.getElementById(container) : container);
		this.init = init ||
		function() {
		};

		this.callback = callback ||
		function() {
		};

	}

	LoadADScript.prototype = {
		startLoad : function() {
			var script = document.createElement('script'), _this = this;

			_this.init.apply();

			if(script.readyState) {//IE
				script.onreadystatechange = function() {
					if(script.readyState == "loaded" || script.readyState == "complete") {
						script.onreadystatechange = null;
						_this.startNext();
					}
				};
			} else {//Other
				script.onload = function() {
					_this.startNext();
				};
			}
			document.write = function(ad) {
				ad = ad.replace(/&lt;script.*?src=('|")(.*?)('|").*?&gt;/, function(a0, a1, a2, a3){
						var charsetMatch = a0.match(/charset=('|")(.*?)('|")/);
						var charset = '';
						if(charsetMatch) charset = charsetMatch[2];
						var idd = '_rand_'+Math.random();
						adQueueTmp.unshift({
								url: a2,
								container: idd,
								callback: $.noop,
								charset: charset
						});
						return '<span id="'+idd+'"></span>';
				});
				$(_this.containerObj).append($(ad));
			};
			document.writeln = document.write;

			script.src = _this.url;
			script.type = 'text/javascript';
			if(_this.charset) script.charset = _this.charset;
			document.getElementsByTagName('head')[0].appendChild(script);
		},
		finished : function() {
			document.write = this.dw;			
			document.writeln = this.dwl;
		},
		startNext : function() {
			adQueue.shift();
			$.each(adQueueTmp, function(_, script){
				loadScript.add(script, true);
			});
			adQueueTmp = [];
			this.callback.apply();
			if(adQueue.length &gt; 0) {
				adQueue[0].startLoad();
			} else {
				this.finished();
			}
		}
	};

	return {
		add : function(adObj, insert) {
			if(!adObj)
				return;

			adQueue[insert ? 'unshift' : 'push'](new LoadADScript(adObj.url, adObj.charset, adObj.container, adObj.init, adObj.callback));
			return this;
		},
		execute : function() {
			if(adQueue.length &gt; 0) {
				adQueue[0].startLoad();
			}
		}
	};
}());
</script>

2、在需要显示广告的地方加html占位符,如(id要唯一)

<span id="placeholder"></span>

3、在页面尾部添加对应广告js代码

<script type="text/javascript">
loadScript.add({
	init: function(){
	},	
	url: 'http://e.7clink.com/cpc.php?c=xxxxxxxxxxxxxxxxxxxxxx',	
	container: 'da_200',	
	charset: 'utf-8',	
	callback: $.noop
});
</script>

4、多个广告重复2和3的操作,最后在页面最尾部添加js代码:

<script type="text/javascript">
loadScript.execute();
</script>