Abusing Linux’s firewall: the hack that allowed us to build Spectrum(译文)

Abusing Linux’s firewall: the hack that allowed us to build Spectrum

深度使用Linux防火墙:允许我们构建Spectrum的黑客行为

Today we are introducing Spectrum: a new Cloudflare feature that brings DDoS protection, load balancing, and content acceleration to any TCP-based protocol.

今天我们来介绍spectrum:一项Cloudflare新业务,可为任何基于TCP协议的服务提供DDoS防护、负载均衡和内容加速功能。

Continue reading »

多可用区部署

应用场景说明:

1、多可用区部署,避免单可用区故障;

2、考虑到阿里云ELB负载均衡(产品)按QPS转发性能收费,多ELB负载均衡实例部署能节省成本,平摊到单台实例承载请求量免费版即可满足需求。

架构说明:

采用智能DNS(DNSpod企业版按区域解析)同时开启D监控(设置A记录对应IP 1分钟内不可达暂停解析,ok时自动开启)。

双活负载均衡架构

组件:HAproxy+Keepalived

说明:

1、双VIP机制,正常情况下VIP1<—>HA1,VIP2<—>HA2,如其中一台HA服务器宕机,则两个VIP都将绑定在另外那台正常的HA服务器;

2、HA1和HA2同时部署应用程序,最少单机双实例,以防后端服务器全部宕机时,HA服务器可应急。

keepalived安装详解

kernel version:2.6.32-696.16.1.el6.x86_64
keepalived version:1.4.2

备注:之前我多次尝试编译安装1.3.6~1.3.9,make报错,在GitHub提交issues后,项目维护者: pqarmitage回复, 为了让keepalived构建,必须使用–disable-libipset配置选项。他不确定这是否是由于RedHat将Linux 2.6.39的ipset功能反向移植到2.6.32,或者是否需要修复keepalived,同时他提交6cdd015(git版本tag)尝试解决这个问题,得到反馈后再试问题还没得到彻底解决,最终他再次提交e941d1b,已完全修复了使用ipset构建的问题,因此不再需要–disable-libipset选项。 链接:https://github.com/acassen/keepalived/issues/703#issuecomment-346334627 Continue reading »

节假日值班安排-模板

亲爱的各位同事: 大家好!假期即将来临之际,为保证公司线上业务在春节期间持续稳定的运行,XX部有设立电话值班机制,如下为具体安排:

日期(农历)值班人员电话
邮箱
请假情况
02-15(年三十)
02-16(年初一)
02-17(年初二)
02-18(年初三)
  其中值班小组服务监督负责人:XXX 本人在此提前祝各位伙伴春节愉快,阖家欢乐!同时感谢大家一直以来对运维部的信赖与支持!

CentOS7系统服务脚本编写

    最近开始把玩CentOS 7,发现之前的部分服务启动脚本在新版OS中运行异常(报错),特意摸索了下,个人感觉7的服务自启动脚本编写非常简单方便。
# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx – high performance web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/usr/sbin/nginx -s stop
[Install]
WantedBy=multi-user.target
# systemctl status nginx.service 查看服务当前状态
# systemctl enable nginx.service 设置开机自启动
# systemctl list-units –type=service 查看所有已启动的服务

Continue reading »

Linux服务器后期添加单独swap配置说明

1、创建用于交换分区的文件:
# dd if=/dev/zero of=/mnt/swap bs=block_size count=number_of_block
注:block_size、number_of_block大小可自定义,比如bs=1M count=1024代表设置1G大小swap分区。
2、设置交换分区文件:
# mkswap /mnt/swap
3、立即启用交换分区文件
# swapon /mnt/swap
注:如果在 /etc/rc.local 中有 swapoff -a 需要修改为 swapon -a
4、设置开机时自启用 SWAP 分区:
需要修改文件 /etc/fstab 中的 SWAP 行,添加
# vim /etc/fstab
修改或添加如下行:
/mnt/swap swap swap defaults 0 0
注:/mnt/swap 路径可以修改,可以根据创建的 SWAP 文件具体路径来配置。
5、修改 swpapiness 参数
在 Linux 系统中,可以通过查看 /proc/sys/vm/swappiness 内容的值来确定系统对 SWAP 分区的使用原则。当 swappiness 内容的值为 0 时,表示最大限度地使用物理内存,物理内存使用完毕后,才会使用 SWAP 分区。当 swappiness 内容的值为 100 时,表示积极地使用 SWAP 分区,并且把内存中的数据及时地置换到 SWAP 分区。
查看修改前为 0,需要在物理内存使用完毕后才会使用 SWAP 分区:
# cat /proc/sys/vm/swappiness
可以使用下述方法临时修改此参数,假设我们配置为空闲内存少于 10% 时才使用 SWAP 分区:
# echo 10 >/proc/sys/vm/swappiness
若需要永久修改此配置,在系统重启之后也生效的话,可以修改 /etc/sysctl.conf 文件,并增加以下内容:
# vim /etc/sysctl.conf
vm.swappiness=10
# sysctl -p

通过Redis Warning日志展开的学习探索

1、Redis aof持久化遇到Can’t open the append-only file: Permission denied:
这是因为Redis aof持久化生成的文件appendonly.aof默认为只读,首先基于安全考虑,个人建议redis数据目录赋权属组为redis(尽量避免使用root),644权限。
2、WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.
解决方法:
# echo 1 >  /proc/sys/vm/overcommit_memory  无需重启临时生效
# echo “vm.overcommit_memory=1” >> /etc/sysctl.conf  && sysctl -p永久生效需重启服务器,一般与临时方法一起执行。
overcommit_memory参数说明:
设置内存分配策略(可选,根据服务器的实际情况进行设置)
/proc/sys/vm/overcommit_memory
可选值:0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何;
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存。

Continue reading »

内网后端服务器通过Squid代理方式yum更新

场景描述:后端RDS、Hadoop集群是与外网物理隔离的,需用到yum公共源解决一些软件安装依赖;
原理:通过squid代理来间接yum安装或更新相关组件;
(1)、在拥有公网访问权限的服务器上执行:
# yum install squid  #因是一次性使用,为图便捷采用yum安装
# cp /etc/squid/squid.conf /etc/squid/squid.conf_bak
# vim /etc/squid/squid.conf
 通过搜索找到http_access deny all将其修改为http_access allow all
http_port 3128修改为http_port LAN_IP:3128
# squid -k parse
# squid -z
# service squid start    #以上三步为启动squid 代理过程
# netstat -nlpt    #确认启动状态和监听端口
# iptables -A INPUT -m state –state NEW -m tcp -p tcp -s LAN网段 –dport 22 -j ACCEPT    #须在便捷和安全性方面做权衡
或是iptables -A INPUT -i bond0 -j ACCEPT    #太多时候,我们对内网是完全放行(可信)。
(2)、在不能访问外网的机器上执行:
# export http_proxy=http://LAN_IP:3128    #临时有效
# echo “proxy=http://LAN_IP:3128” >> /etc/yum.conf    #永久有效
# yum update    #验证

CentOS6配置CollabNet Subversion Edge

1、安装jdk并配置环境变量(略)
2、安装python
# tar -zxf Python-3.6.2.tgz
# cd Python-3.6.2
# ./configure
# make
# make install
3、安装Subversion Edge
3.1、建立svn用户组和成员csvn,并为csvn设置密码
# groupadd svn
# useradd -g svn csvn
# passwd csvn
3.2、赋予csvn用户sudo权限
# vim /etc/sudoer或# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
后添加
csvn    ALL=(ALL)       ALL
## Same thing without a password
%svn        ALL=(ALL)       NOPASSWD: ALL
赋予用户csvn sudo权限
强制保存并退出
3.3、创建存放Subversion Edge安装文件的目录并赋权
# mkdir /data/subversion;chown -R csvn:svn /data/subversion
3.4、下载安装包
3.5、解压缩
# tar zxf CollabNetSubversionEdge-5.2.2_linux-x86_64.tar.gz
# mv csvn/ /data/subversion
3.6、配置csvn(#root用户下执行)
# chown root:svn /data/subversion/csvn/lib/httpd_bind/httpd_bind
# chmod u+s /data/subversion/csvn/lib/httpd_bind/httpd_bind
# cd /data/subversion/csvn
# sudo bin/csvn-httpd install   #svn服务端
# sudo -E bin/csvn install   #web页面
3.7、启动
# cd bin/
# sh csvn start    #启动
#如果使用start启动失败,可以使用
# sh csvn console #此命令会在控制台输出启动日志,便于排查。
如果做完上述操作,还不可以远程访问,检查iptables规则
http://ip:3343/csvn
默认账号密码:admin/admin
登陆OK就可创建用户和版本库并给创建的用户选择角色等,都是通过web界面设置,很简单故本文略过。