LINUX集群部署LVS
- 格式:pdf
- 大小:418.37 KB
- 文档页数:33
百万用户在线网络游戏服务器架构实现一、前言事实上100万游戏服务器,在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高效率的编程语言、高性能的数据库、还有高性能的架构模型。
但是除了这几个方面,还没法根本解决面临的高负载和高并发问题。
当然用户不断地追求更高的机器性能,而升级单一的服务器系统,往往造成过高的投入和维护成本,性价比大大低于预期。
同时全天候的可用性的要求也不能满足要求,如果服务器出现故障则该项服务肯定会终止。
所以单独追求高性能的服务器不能满足要求,目前基本的解决方案是使用集群技术做负载均衡,可以把整体性能不高的服务器做成高可扩展性,高可用性,高性能的,满足目前的要求。
目前解决客户端和服务器进行底层通讯的交互的双向I/O模型的服务器的成熟方案。
1.windows下,比较成熟的技术是采用IOCP,完成端口的服务器模型。
2.Linux下,比较成熟的技术是采用Epoll服务器模型, Linux 2.6内核中提供的System Epoll为我们提供了一套完美的解决方案。
目前如上服务器模型是完全可以达到5K到20K的同时在线量的。
但5K这样的数值离百万这样的数值实在相差太大了,所以,百万人的同时在线是单台服务器肯定无法实现的。
而且目前几个比较成熟的开发框架,比如ICE,ACE等。
这样,当采用一种新的通信技术来实现通信底层时,框架本身就不用做任何修改了(或修改很少),而功能很容易实现,性能达到最优。
目前采用的ace框架个不错的选择方案,可以不受操作系统的影响,移植比较方便。
对于数据库选择可有许多成熟的方案,目前大多数选择的mysql Master/slave模式,以及oracle RAC方案。
基本可以满足目前的要求,但具体的瓶颈不是在数据库本身,应该还是硬件磁盘I/O的影响更大些。
建议使用盘阵。
这有其他成熟的方案,比如采用NAS解决分布数据存储。
其实最为关键的是服务器的架构和实现,数据流量的负载均衡,体系的安全性,关键影响度,共享数据的处理等等多个方面对100万用户的数据处理有影响,所以都要全面的考虑。
LVS+Keepalived实现高可用集群一、基础介绍 (2)二、搭建配置LVS-NA T模式 (2)三、搭建配置LVS-DR模式 (4)四、另外一种脚本方式实现上面LVS-DR模式 (6)五、keepalived + LVS(DR模式) 高可用 (8)六、Keepalived 配置文件详细介绍 (11)一、基础介绍(一)根据业务目标分成三类:High Availability 高可用Load Balancing 负载均衡High Performance 高性能(二)实现集群产品:HA类:rhcs、heartbeat、keepalivedLB类:haproxy、lvs、nginx、f5、piranhaHPC类:/index/downfile/infor_id/42(三)LVS 负载均衡有三种模式:LVS-DR模式(direct router)直接路由模式进必须经过分发器,出就直接出LVS-NAT模式(network address translation)进出必须都经过分发器LVS-TUN模式(ip tunneling)IP隧道模式服务器可以放到全国各地二、搭建配置LVS-NAT模式1 、服务器IP规划:DR服务器添加一张网卡eth1,一个网卡做DIP,一个网口做VIP。
设置DIP、VIP IP地址:DIP的eth1和所有RIP相连同一个网段CIP和DIP的eth0(Vip)相连同一个网段Vip eth0 192.168.50.200Dip eth1 192.168.58.4客户机IP:Cip 192.168.50.32台真实服务器IP:Rip1 192.168.58.2Rip2 192.168.58.32 、R ealServer1配置:mount /dev/xvdd /media/vi /var/www/html/index.html写入:this is realserver1启动httpdvi /etc/sysconfig/network-scripts/ifcfg-eth0设置RIP,子网掩码必须设置成DIPIPADDR=192.168.58.2NETMASK=255.255.255.0GA TEWAY=192.168.58.43 、R ealServer2 配置:vi /var/www/html/index.html写入:this is realserver2启动httpdvi /etc/sysconfig/network-scripts/ifcfg-eth0设置RIP,子网掩码必须设置成DIPIPADDR=192.168.58.3NETMASK=255.255.255.0GA TEWAY=192.168.58.44 、在DR服务器上做以下设置:开启IP数据包转发vi /etc/sysctl.confnet.ipv4.ip_forward = 0 ##0改成1 ,此步很重要查看是否开启:sysctl -p5 、安装LVS服务:ipvsadmyum -y install ipvsadmlsmod |grep ip_vsTurbolinux系统没有带rpm包,必须下载源码安装:#ln -s /usr/src/kernels/2.6.18-164.el5-x86_64/ /usr/src/linux##如果不做连接,编译时会包错#tar zxvf ipvsadm-1.24.tar.gz#cd ipvsadm-1.24#make && make install运行下ipvsadm ,就加到ip_vs模块到内核了lsmod | grep ip 可以看到有ip_vs模块了6 、配置DR服务器,添加虚拟服务ipvsadm -L -n 查询信息ipvsadm -A -t 192.168.50.200:80 -s rr #添加集群服务、调度算法,rr为调度算法ipvsadm -a -t 192.168.50.200:80 -r 192.168.58.2 -m -w 1 # -m代表net模式,-w代表权重ipvsadm -a -t 192.168.50.200:80 -r 192.168.58.3 -m -w 2ipvsadm -L -n 再次查看是就有了realserverservice ipvsadm save 保存配置iptables -L 关闭或者清空防火墙watch -n 1 'ipvsadm -L -n' 查看访问记录的数显示如下:-> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 192.168.50.200:80 rr-> 192.168.58.2:80 Masq 1 0 13-> 192.168.58.3:80 Masq 2 0 12ActiveConn是活动连接数,也就是tcp连接状态的ESTABLISHED;InActConn是指除了ESTABLISHED以外的,所有的其它状态的tcp连接.7 、测试:http://192.168.58.200配完后若想修改算法:ipvsadm -E -t 192.168.58.200:80 -s wlc修改Rip的权重:ipvsadm -e -t 192.168.58.200:80 -r 192.168.58.2 -m -w 1ipvsadm -e -t 192.168.58.200:80 -r 192.168.58.3 -m -w 5三、搭建配置LVS-DR模式lo:1 回应客户端,lo:1上的IP跟机器有关,跟网卡没有关系arp_announce 对网络接口上本地IP地址发出的ARP回应作出相应级别的限制arp_ignore 定义对目标地址为本地IP的ARP询问不同的请求一、3台服务器IP配置规划:DIP:eth0:1 192.168.58.200/32 (VIP)eth0 192.168.58.3/24 (DIP)RIP1 lo:1 192.168.58.200/32 (VIP)eth0 192.168.58.4/24RIP2 lo:1 192.168.58.200/32 (VIP)eth0 192.168.58.5/24 .................................................................RIP n lo:1 192.168.58.200/32 (VIP)eth0 192.168.58.N/24二、每台realserver都加上下面四个步骤配置:1 、配置每台rip的IP、http,web页面2 、关闭每台rip服务器的ARP广播:echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/lo/arp_announceecho 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/all/arp_announce3 、配置VIPifconfig lo:1 192.168.58.200 netmask 255.255.255.255 broadcast 192.168.58.200 up4 、配置网关route add -host 192.168.58.200 dev lo:1三、DR上的配置(DR模式下Dip不用开启转发):1 、配置DIP,在eth0上添加一个子VIP接口:添加VIP:ifconfig eth0:1 192.168.58.200 broadcast 192.168.58.200 netmask 255.255.255.255 up2 、配置网关:route add -host 192.168.58.200 dev eth0:1route -n3 、安装ipvsadm(方法见文档上面)yum -y install ipvsadmlsmod |grep ip_vs4 、配置LVS集群:ipvsadm -A -t 192.168.58.200:80 -s rr #添加集群服务、调度算法,rr为调度算法ipvsadm -a -t 192.168.58.200:80 -r 192.168.58.3 -g -w 1 # -g代表DR模式,-w代表权重ipvsadm -a -t 192.168.58.200:80 -r 192.168.58.2 -g -w 2service ipvsadm saveipvsadm -L -n 查看信息四、测试:http://192.168.58.200四、另外一种脚本方式实现上面LVS-DR模式IP规划:Dip eth0 192.168.58.139VIP:192.168.58.200RIP1:192.168.58.2RIP2:192.168.58.31 、D R服务器上安装ipvsadm#yum -y install ipvsadm#lsmod | grep ip_vs 查看没有输出#modprobe ip_vs 安装即可2 、配置DIP服务器、LVS这里也是个写脚本为了方便vim /etc/init.d/lvsdr#!/bin/bash#lvs of DRVIP=192.168.58.200RIP1=192.168.58.2RIP2=192.168.58.3case "$1" instart)echo "start lvs of DR"/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.0 up echo "1" > /proc/sys/net/ipv4/ip_forward/sbin/iptables -C/sbin/ipvsadm -A -t $VIP:80 -s rr/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g/sbin/ipvsadm;;stop)echo "stop lvs of DR"echo "0" > /proc/sys/net/ipv4/ip_forward/sbin/ipvsadm -C/sbin/ifconfig eth0:0 down;;*)echo "Usage :$0 {start|stop}"exit1esacexit 0#chmod o+x /etc/init.d/lvsdr启动脚本:#service lvsdr start3 、2台RIP服务器都配置这里我们也都可以写成脚本开启2台RIP的httpd服务。
LINUX集群-DR直接路由VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器上。
而真实服务器将响应直接返回给客户。
VS/DR技术可极大地提高集群系统的伸缩性。
这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持的IP隧道协议的要求,但是要去调度器与真实服务器都有一块网卡连在同一物理网段上。
VS/DR,直接路由模式如上图,客户向VIP发送请求,LVS通过改写mac地址,将请求提交到web server(真实的),然后web server将用户的请求直接返回给客户(中间不在经过LVS,这样减少LVS的负担,而VS/NAT模式web server返回给客户的请求也要经过LVS)设置VIP脚本(LVS服务器)Directorserver 222.90.88.30VIP=222.90.88.88Realserver 222.90.88.10Realserver 222.90.88.20gw 222.90.88.1### Directorserver Configure VIP######ifconfig eth0:0 222.90.88.88 broadcast 222.90.88.88 netmask 255.255.255.255 uproute add -host 222.90.88.88 dev eth0:0######setup ipvs######ipvsadm -A -t 222.90.88.88:80 -s rr (rr:轮叫模式)ipvsadm -a -t 222.90.88.88:80 -r 222.90.88.10 -g (-g:dr模式)ipvsadm -a -t 222.90.88.88:80 -r 222.90.88.20 -gipvsadmWeb Server1和2配置脚本######realserver######ifconfig lo:0 222.90.88.88 broadcast 222.90.88.88 netmask 255.255.255.255 uproute add -host 222.90.88.88 dev lo:0 (这边是通过改写MAC地址)echo “1” > /proc/sys/net/ipv4/conf/lo/arp_ignore (关闭arp的发包和广播)echo “2” > /proc/sys/net/ipv4/conf/lo/arp_announceecho “1” > /proc/sys/net/ipv4/conf/all/arp_ignoreecho “2” > /proc/sys/net/ipv4/conf/all/arp_announcesysctl -p操作:设置VIP脚本(LVS服务器)#vim /etc/init.d/vip.shifconfig eth0:0 222.90.88.88 broadcast 222.90.88.88 netmask 255.255.255.255 up(设置虚拟IP)route add -host 222.90.88.88 dev eth0:0 (给IP加上路由)ipvsadm -Cipvsadm -A -t 222.90.88.88:80 -s rripvsadm -a -t 222.90.88.88:80 -r 222.90.88.10 -gipvsadm -a -t 222.90.88.88:80 -r 222.90.88.20 -gipvsadm#chmod 777 /etc/init.d/vip.shWeb Server1和2配置脚本#vim /etc/init.d/lvs.shifconfig lo:0 222.90.88.88 broadcast 222.90.88.88 netmask 255.255.255.255 uproute add -host 222.90.88.88 dev lo:0echo “1” > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho “2” > /proc/sys/net/ipv4/conf/lo/arp_announceecho “1” > /proc/sys/net/ipv4/conf/all/arp_ignoreecho “2” > /proc/sys/net/ipv4/conf/all/arp_announcesysctl -p(注:eth0,eth1,eth2……代表网卡一,网卡二,网卡三……lo代表127.0.0.1,即localhost)#chmod 777 lvs.sh#vim /var/www/html/index.html(Web Server 1)this is sev1#service httpd start#vim /var/www/html/index.html(Web Server 2)this is sev2#service httpd start客户端用http://222.90.88.88访问web服务,间隔产生this is sev1和this is sev2LVS--ipvsadm命令参数ipvsadm的用法和格式如下:ipvsadm -A|E -t|u|f virtual-service-address:port[-s scheduler] [-p timeout] [-M netmask]ipvsadm -D -t|u|f virtual-service-addressipvsadm -Cipvsadm -Ripvsadm -S [-n]ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight]ipvsadm -d -t|u|f service-address -r server-addressipvsadm -L|I [options]ipvsadm -Z [-t|u|f service-address]ipvsadm --set tcp tcpfin udpipvsadm --start -deamon state [--mcast -interface interface] ipvsadm --stop-deamonipvsadm -h。
IP:Eth0:192.168.100.115Eth1:192.168.100.215Vi /etc/init.d./lvs#!/bin/sh## lvs Start lvs## chkconfig: 2345 08 92# description: Starts, stops and saves lvs#SNS_VIP=192.168.100.215SNS_RIP1=192.168.100.114SNS_RIP2=192.168.100.113. /etc/rc.d/init.d/functions#logger $0 called with $1retval=0start(){#set squid vip/sbin/ipvsadm --set 30 5 60#/sbin/ifconfig eth0:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP up#/sbin/route add -host $SNS_VIP dev eth0:0/sbin/ipvsadm -A -t $SNS_VIP:80 -s rr/sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP1 -g/sbin/ipvsadm -a -t $SNS_VIP:80 -r $SNS_RIP2 -gtouch /var/lock/subsys/ipvsadm > /dev/null 2 >&1echo "ipvsadm started"}stop(){/sbin/ipvsadm -C/sbin/ipvsadm -Z#ifconfig eth0:0 down#route del $SNS_VIPrm -rf /var/lock/subsys/ipvsadm > /dev/null 2 >&1echo "ipvsadm stoped"}status(){if [ ! -e /var/lock/subsys/ipvsadm ];thenecho "ipvsadm stoped"exit 1elseecho "ipvsadm OK"fi}case "$1" instart)start;;stop)stop;;status)status;;restart)stopstart;;*)echo $"Usage: $0 {start|stop|status}"retval=1esacexit $retvalkeepalvivedtar xf keepalived-1.2.7.tar.gzcd keepalived-1.2.7./configure --prefix=/ --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/kernels/2.6.32-279.el6.x86_64Makemake installcd /etc/keepalived/mv keepalived.conf keepalived.conf.default chkconfig --add keepalivedchkconfig keepalived onvim /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {notification_email {root@localhost}notification_email_from root@localhost smtp_server 127.0.0.1smtp_connect_timeout 30router_id Director1}#VRRP(虚拟路由冗余协议)实例配置vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 150advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.122.254/24 eth1}}#LVS配置virtual_server 192.168.100.215 80 {delay_loop 3lb_algo rrlb_kind DRnat_mask 255.255.255.0# persistence_timeout 50protocol TCPreal_server 192.168.100.113 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 10nb_get_retry 3delay_before_retry 3}}real_server 192.168.100.114 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 10nb_get_retry 3delay_before_retry 3}}}}LVS-realserverIp 192.168.100.113Ip 192.168.100.114Vi /etc/init.d/rsup#!/bin/bashVIP=192.168.100.215ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up #route add –host $VIP dev lo:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announce#sysctl –pIp 192.168.100.122(nfs)Ip 192.168.100.113Ip 192.168.100.114#安装zlibtar xzvf zlib-1.2.3.tar.gzcd zlib-1.2.3./configuremake && make install#安装pcretar zxvf pcre-7.9.tar.gzcd pcre-7.9./configure --prefix=/usr/local/pcremake && make installwget /download/nginx_mod_h264_streaming-2.2.7.tar.gztar -zxvf nginx_mod_h264_streaming-2.2.7.tar.gzunzip nginx_upstream_check_module-master.zipmv ./nginx_upstream_check_module-master /root/healthtar -xvf nginx-1.4.1.tar.gz -C /usr/src/useradd nginxcd /usr/src/nginx-1.4.1patch -p1 < /root/health/check_1.2.6+.patch./configure --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_flv_module --add-module=../nginx_mod_h264_streaming-2.2.7 --with-pcre=/softw are/pcre-7.9 --with-zlib=/software/zlib-1.2.3 --prefix=/usr/local/nginx --add-module=/root/healthmake && make install/usr/local/nginx/sbin/nginx开机自动启动vi /etc/init.d/nginx#!/bin/bash## nginx - this script starts and stops the nginx daemin# chkconfig: - 85 15# description: Nginx is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server# processname: nginx# config: /usr/local/nginx/conf/nginx.conf# pidfile: /usr/local/nginx/logs/nginx.pid# Source function library.. /etc/rc.d/init.d/functions# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ "$NETWORKING" = "no" ] && exit 0nginx="/usr/local/nginx/sbin/nginx"prog=$(basename $nginx)NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"lockfile=/var/lock/subsys/nginxstart() {[ -x $nginx ] || exit 5[ -f $NGINX_CONF_FILE ] || exit 6echo -n $"Starting $prog: "daemon $nginx -c $NGINX_CONF_FILEretval=$?echo[ $retval -eq 0 ] && touch $lockfilereturn $retval}stop() {echo -n $"Stopping $prog: "killproc $prog -QUITretval=$?echo[ $retval -eq 0 ] && rm -f $lockfilereturn $retval}restart() {configtest || return $?stopstart}reload() {configtest || return $?echo -n $"Reloading $prog: "killproc $nginx -HUPRETVAL=$?echo}force_reload() {restart}configtest() {$nginx -t -c $NGINX_CONF_FILE }rh_status() {status $prog}rh_status_q() {rh_status >/dev/null 2>&1 }case "$1" instart)rh_status_q && exit 0$1;;stop)rh_status_q || exit 0$1;;restart|configtest)$1;;reload)rh_status_q || exit 7$1;;force-reload)force_reload;;status)rh_status;;condrestart|try-restart)rh_status_q || exit 0;;*)echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"exit 2esac############################################################################## 改权限chmod 755 /etc/init.d/nginxchkconfig nginx onchkconfig --list nginxnginx 0:off 1:off 2:on 3:on 4:on 5:on 6:offservice nginx startservice nginx stopservice nginx restartservice nginx reload/etc/init.d/nginx start/etc/init.d/nginx stop/etc/init.d/nginx restart/etc/init.d/nginx reloadNginx 配置文件vi /usr/local/nginx/conf/nginx.conf#user nginx nginx;worker_processes 12;error_log /usr/local/nginx/logs/error.log crit;pid /usr/local/nginx/logs/nginx.pid;worker_rlimit_nofile 65535;events{use epoll;worker_connections 204800;}http{include mime.types;default_type application/octet-stream;charset utf-8;server_names_hash_bucket_size 128;client_header_buffer_size 2k;large_client_header_buffers 4 4k;client_max_body_size 8m;sendfile on;tcp_nopush on;keepalive_timeout 60;fastcgi_cache_path /usr/local/nginx/fastcgi_temp levels=1:2keys_zone=TEST:10minactive=5m;fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;fastcgi_buffer_size 1638;fastcgi_buffers 16 16k;fastcgi_busy_buffers_size 16k;fastcgi_temp_file_write_size 16k;fastcgi_cache TEST;fastcgi_cache_valid 200 302 1h;fastcgi_cache_valid 301 1d;fastcgi_cache_valid any 1m;fastcgi_cache_min_uses 1;fastcgi_cache_use_stale error timeout invalid_header http_500;open_file_cache max=204800 inactive=20s;open_file_cache_min_uses 1;open_file_cache_valid 30s;tcp_nodelay on;gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.0;gzip_comp_level 2;gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on;upstream nginx_server {ip_hash;server 192.168.100.122:80;}upstream web_server {ip_hash;server 192.168.100.131:9001;server 192.168.100.132:9001;server 192.168.100.133:9001;server 192.168.100.134:9001;check interval=3000 rise=2 fall=5 timeout=1000;}upstream napi_server {ip_hash;server 192.168.100.131:9002;server 192.168.100.132:9002;server 192.168.100.133:9002;server 192.168.100.134:9002;server 192.168.100.131:9003;server 192.168.100.132:9003;server 192.168.100.133:9003;server 192.168.100.134:9003;server 192.168.100.131:9004;server 192.168.100.132:9004;server 192.168.100.133:9004;server 192.168.100.134:9004;check interval=3000 rise=2 fall=5 timeout=1000;}upstream oapi_server {ip_hash;server 192.168.100.131:9005;server 192.168.100.132:9005;server 192.168.100.133:9005;server 192.168.100.134:9005;server 192.168.100.131:9006;server 192.168.100.132:9006;server 192.168.100.133:9006;server 192.168.100.134:9006;check interval=3000 rise=2 fall=5 timeout=1000;}server {listen 80;server_name localhost;location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|html|mp3|wma|wmv)${root /usr/wodm/;proxy_pass http://nginx_server;}location ~ .*\.(js|css)?${expires 1h;}location /NginxStatus{stub_status on;access_log on;auth_basic "NginxStatus";#auth_basic_user_file conf/htpasswd;}location /nstatus {check_status;access_log off;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}log_format access '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for';access_log /usr/local/nginx/logs/access.log access;include /usr/local/nginx/conf/vhost/*.conf;}Nginx(nfs)Nginx.conf#user nginx nginx;worker_processes 16;#worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;error_log /usr/local/nginx/logs/error.log crit;pid /usr/local/nginx/logs/nginx.pid;worker_rlimit_nofile 204800;events{use epoll;worker_connections 204800;}http{include mime.types;default_type application/octet-stream;charset utf-8;server_names_hash_bucket_size 128;client_header_buffer_size 2k;large_client_header_buffers 4 4k;client_max_body_size 8m;sendfile on;tcp_nopush on;keepalive_timeout 60;fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2keys_zone=TEST:10minactive=5m;fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;fastcgi_buffer_size 1638;fastcgi_buffers 16 16k;fastcgi_busy_buffers_size 16k;fastcgi_temp_file_write_size 16k;fastcgi_cache TEST;fastcgi_cache_valid 200 302 1h;fastcgi_cache_valid 301 1d;fastcgi_cache_valid any 1m;fastcgi_cache_min_uses 1;fastcgi_cache_use_stale error timeout invalid_header http_500;open_file_cache max=204800 inactive=20s;open_file_cache_min_uses 1;open_file_cache_valid 30s;tcp_nodelay on;gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.0;gzip_comp_level 2;gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on;server{listen 80;server_name localhost;index index.php index.htm;root /usr/wodm/;location /status{stub_status on;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|html|mp3|wma|wmv)${expires 30d;}}log_format access '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for';access_log /usr/local/nginx/logs/access.log access;标准字符集vi /etc/sysconfig/i18nLANG="zh_CN.UTF-8" SYSFONT="latarcyrheb-sun16" SUPPORTED="zh_CN.UTF-8:zh_CN:zh"LANG="zh_CN.GB18030"SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"打开文件数vi /etc/security/limits.conf* soft nofile 65535* hard nofile 65535vi /etc/pam.d/loginsession required /lib/security/pam_limits.songinx 日志按天分割vi nginx_log.sh#!/bin/bashlogs_path="/usr/local/nginx/logs/"pid_path="/usr/local/nginx/nginx.pid"mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").logkill -USR1 `cat ${pid_path}`chmod 755 nginx_log.shcrontab –e0 0 * * * bash /usr/local/nginx/nginx_log.shTomcat memcachetar xf libevent-1.4.11-stable.tar.gzcd libevent-1.4.11-stable./configuremakemake installcd ../tar xf memcached-1.4.5.tar.gzcd memcached-1.4.5./configuremakemake install/usr/local/bin/memcached -d -m 10 -u root -l 192.168.1.113 -p 11211 -c 1024 -P /tmp/memcached.pidMemcache+tomcat 共享session后续计划尚未配置。
Linux负载均衡一、LVS概述及原理LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡。
LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。
LVS集群采用IP负载均衡技术和基于内容请求分发技术。
调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。
整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。
为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。
一般来说,LVS集群采用三层结构,其主要组成部分为:1) 负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
2) 服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
3) 共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
调度器是服务器集群系统的唯一入口点(Single Entry Point),它可以采用IP 负载均衡技术、基于内容请求分发技术或者两者相结合。
在IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。
当客户请求到达时,调度器只根据服务器负载情况和设定的调度算法从服务器池中选出一个服务器,将该请求转发到选出的服务器,并记录这个调度;当这个请求的其他报文到达,也会被转发到前面选出的服务器。
在基于内容请求分发技术中,服务器可以提供不同的服务,当客户请求到达时,调度器可根据请求的内容选择服务器执行请求。
因为所有的操作都是在Linux操作系统核心空间中将完成的,它的调度开销很小,所以它具有很高的吞吐率。
RHEL 5.4下IPVS安装配置一.安装环境:RHEL 5.4 ipvsadm-1.24.tar.gz二.拓扑图:三.安装过程:1.从官方网站下载ipvsadm:下载地址:/software/kernel-2.6/下载ipvsadm-1.24.tar.gz,因为最新版ipvsadm-1.25这个版本只支持2.6.28以上的内核,RHEL 5.4内核版本达不到要求,所以选择安装前一个版本。
2.创建一个连接文件,其命令为:ln -sv /usr/src/kernels/2.6.18-92.el5PAE-i686 /usr/src/linux注意一定要与当前的运行的内核相一致,因为/usr/src/kernels目录下可能有多个目录。
如果不创建这个连接文件,在编译时会出错,从而不能继续进行安装。
3.解包。
#tar zxvf ipvsadm-1.244.编译并安装。
#cd ipvsadm-1.24#make#make install可执行文件被安装到/sbin/ipvsadm5.检验ipvsadm是否被正确安装(1) 执行ipvsadm,看是否有如下输出。
IP Virtual Server version 1.2.1 (size=4096)Port LocalAddress:Port Scheduler Flags->RomoteAddress:PortForward Weight ActiveConn InActConn(2) 检查当前加载的内核模块,看是否存在ip_vs模块。
[root@hd-4 ipvsadm-1.24]# lsmod | grep ip_vsip_vs 77569 0注1:只有执行ipvsadm以后,才会在内核加载ip_vs模块。
注2:不能以查进程的方式判断ipvs是否运行。
注3:如果下载最新的ipvsadm-1.25.tar.gz这个版本,在创建连接文件/usr/src/linux后,执行编译时,可能需要修改/boot/grub/grub.conf启动内核名称。
lvs 和f5 实现原理全文共四篇示例,供读者参考第一篇示例:随着互联网应用的不断发展和普及,网络负载均衡技术已经成为保障网站可用性和性能的重要手段。
在负载均衡技术中,LVS(Linux Virtual Server)和F5分别代表着开源和商业两种不同的实现方式,它们在原理和使用中有着不同的特点和优势。
本文将就LVS和F5的实现原理进行探讨与比较。
LVS(Linux Virtual Server)是一种基于Linux操作系统的负载均衡技术,它充分利用了Linux内核的功能和特性来实现高效的负载均衡。
LVS通常采用四层负载均衡的方式,即在传输层上进行负载均衡,它通过IP地址和端口号进行请求的转发,实现对后端服务器的负载均衡。
LVS的实现原理主要包括三个组件:调度器、数据包转发和后端服务器。
调度器是LVS的核心组件,它负责根据负载均衡策略来选择合适的后端服务器进行请求的转发。
LVS采用了多种不同的负载均衡算法,如轮询、加权轮询、源地址散列等,根据具体的业务需求和场景选择合适的负载均衡算法。
调度器会根据请求的特性和当前后端服务器的负载情况来选择合适的后端服务器,从而实现负载均衡。
数据包转发是LVS的另一个关键组件,它负责接收客户端的请求并将请求转发给选定的后端服务器。
数据包转发通常采用Linux内核的IPVS模块来实现,通过在内核空间进行数据包的处理和转发,从而提高负载均衡的效率和性能。
数据包转发还可以支持连接的持久化和会话的保持,以确保客户端的请求在整个会话过程中都能顺利访问到同一台后端服务器。
后端服务器是LVS的最终目的地,它负责接收转发过来的请求并响应客户端的请求。
LVS通常将后端服务器配置成一个服务器集群,通过多台服务器共同处理客户端的请求来提高网站的可用性和性能。
后端服务器可以根据具体的业务需求来配置,如多个应用服务器、数据库服务器、文件服务器等,以满足不同的业务需求。
与LVS相比,F5是一家领先的应用交付控制公司,其产品包括硬件负载均衡器、应用交付控制器等。
背景当今计算机技术已进入以网络为中心的计算时期。
由于客户/服务器模型的简单性、易管理性和易维护性,客户/服务器计算模式在网上被大量采用。
在九十年代中期,万维网(World Wide Web)的出现以其简单操作方式将图文并茂的网上信息带给普通大众,Web也正在从一种内容发送机制成为一种服务平台,大量的服务和应用(如新闻服务、网上银行、电子商务等)都是围绕着Web进行。
这促进Internet用户剧烈增长和Internet流量爆炸式地增长,图1显示了1995至2000年与Internet连接主机数的变化情况,可见增长趋势较以往更迅猛。
Internet的飞速发展给网络带宽和服务器带来巨大的挑战。
从网络技术的发展来看,网络带宽的增长远高于处理器速度和内存访问速度的增长,如100M Ethernet、A TM、Gigabit Ethernet等不断地涌现,10Gigabit Ethernet即将就绪,在主干网上密集波分复用(DWDM)将成为宽带IP的主流技术[2,3],Lucent已经推出在一根光纤跑800Gigabit的WaveStar?OLS800G 产品[4]。
所以,我们深信越来越多的瓶颈会出现在服务器端。
很多研究显示Gigabit Ethernet 在服务器上很难使得其吞吐率达到1Gb/s的原因是协议栈(TCP/IP)和操作系统的低效,以及处理器的低效,这需要对协议的处理方法、操作系统的调度和IO的处理作更深入的研究。
在高速网络上,重新设计单台服务器上的网络服务程序也是个重要课题。
比较热门的站点会吸引前所未有的访问流量,例如根据Yahoo的新闻发布,Yahoo已经每天发送6.25亿页面。
一些网络服务也收到巨额的流量,如American Online的Web Cache 系统每天处理50.2亿个用户访问Web的请求,每个请求的平均响应长度为5.5Kbytes。
与此同时,很多网络服务因为访问次数爆炸式地增长而不堪重负,不能及时处理用户的请求,导致用户进行长时间的等待,大大降低了服务质量。
Linux lvs—TUN模式IP:Director:eth0=192.168.100.100tunl0=192.168.100.50(虚拟出来的IP)Real-server-1:eth0=192.168.100.110tunl0=192.168.100.50(虚拟出来的IP)Real-server-2:eth0=192.168.100.110tunl0=192.168.100.50(虚拟出来的IP)第一步:配置相关网卡的虚拟接口ip地址(vip)。
Director:[root@zhangc ~]#ifconfig tunl0 192.168.100.50 broadcast 192.168.100.50netmask 255.255.255.255 upReal-server-1:[root@zhangc ~]#ifconfig tunl0 192.168.100.50 broadcast 192.168.100.50netmask 255.255.255.255 upReal-server-2:[root@zhangc ~]#ifconfig tunl0 192.168.100.50 broadcast 192.168.100.50netmask 255.255.255.255 up第二步:配置director中的相关服务,搭建director.DIRECTOR:[root@zhangc ~]# mount /dev/cdrom /media【挂载光盘】[root@zhangc ~]#cd /media/CentOS【打开安装目录】[root@zhangcCentOS]#rpm –ivhipvsadm【安装ipvsadm服务】[root@zhangc ~]# chkconfigipvsadm on【将ipvsadm设置为开机自启动】[root@zhangc ~]# ipvsadm -A -t 192.168.100.50:80 -s rr【添加ipvsadm条目,-s rr 表示使用轮询算法,-t表示使用tcp协议,-A表示追加条目】[root@zhangc ~]# ipvsadm -a -t 192.168.100.50:80 -r 192.168.100.110 –i【-a表示追加规则,-t表示使用tcp协议,-r表示real-server,-g表示使用dr模型】[root@zhangc ~]# ipvsadm -a -t 192.168.100.50:80 -r 192.168.100.120 –i[root@zhangc ~]# service ipvsadm save【保存写好的ipvsadm规则】[root@zhangc ~]# service ipvsadm restart【重新启动ipvsadm服务】第三步:配置Real-server-1以及相关服务[root@zhangc ~]# echo "1" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore[root@zhangc ~]# echo "2" >/proc/sys/net/ipv4/conf/tunl0/arp_announce[root@zhangc ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore[root@zhangc ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce[root@zhangc ~]#sysctl–p添加路由功能[root@zhangc ~]# route add -host 192.168.100.50 dev tunl0安装httpd服务[root@zhangc ~]# yum install -y httpd【安装httpd服务】[root@zhangc ~]# cd /var/www/html/【进入目录,编写测试文件index.html】[root@zhangc html]# echo "web1" >>index.html[root@zhangc html]# service httpd start【启动apache服务】第四步:配置Real-server-2以及相关服务(与real-server 1配置方法相同,不再赘述)[root@zhangc ~]# echo "1" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore[root@zhangc ~]# echo "2" >/proc/sys/net/ipv4/conf/tunl0/arp_announce[root@zhangc ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore[root@zhangc ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce[root@zhangc ~]#sysctl–p添加路由功能[root@zhangc ~]# route add -host 192.168.100.50 dev tunl0安装httpd服务[root@zhangc ~]# yum install -y httpd[root@zhangc ~]# cd /var/www/html/[root@zhangc html]# echo "web2" >>index.html[root@zhangc html]# servicehttpd start第五步:测试Elinks–dump http://192.168.100.50只能在做web服务中测试不能在做了lvs服务上测试。
软件研发与应用SOFTWARE DEVELOPMENT&APPLICATIONLinux集群运维平台用户权限管理与日志审计吴若冰(广西电力职业技术学院,南宁530001)摘要:Linux集群运维平台的建立与运行是目前业务增加的必要要求,运行中能够有效满足公司业务拓展要求,运维平台管理的重要內容为安全问题,要求Linux集群运维平台加强对用户日志的审计以及用户权限的管理,从这两个层面进行了探讨。
关键词:Linux集群;用户权限管理;日志审计随着公司业务量的逐渐增加,可建立Linux集群运维平台,以此高效地调度整个任务,建立相应的服务版操作系统,以此优化服务器平台设计,并重视平台运行中的信息安全。
1Linux集群运维平台Linux集群运维平台的运用适应了相关单位当前逐渐增多的业务发展需求,Linux集群平台包括一系列成本较低的电脑,使用成本较低、稳定性能较好且扩展性较为良好,在互联网公司以及相关单位中具有较为广泛的运用价值。
Linux集群运维平台运行中包含多个层面,包括任务调度监控、配置管理、用户访问质量统计、日志平台、自动化监控、自动化部署、机器管理、集群用户权限管理等多个层面,其中的重点内容为用户权限管理以 及日志审计。
在扩展的同时要求充分重视安全问题,加强对用户权限以及日志审计安全性的管理。
Linux集群运维平台主机定义如图1所示。
72.0.0.1localhost localhost.localdomain localhost4localhost4.localdomain4::1localhost localhost.localdomain localhost6localhost6.localdomain6172.49.1.1dell1172.49.1.2dell2172.49.1.3dell3172.49.1.4dell4172.49.1.5dell5172.49.1.6dell6172.49.1.7dell7172.49.1.8dell8172.49.1.9dell9172.49.1.10 dell10172.49.1.11dell11172.49.1.12 dell12172.49.1.13dell13172.49.1.14 dell14172.49.1.15dell15172.49.1.16 dell16172.49.1.17 dell17172.49.1.18 dell18172.49.1.19 dell19172.49.1.20 dell20172.49.1.21dell21172.49.1.22 dell22172.49.1.23dell23图1Linux集群运维平台主机定义图LDAP/Kerberos认证时并未建立统一的数据搜集、分析与处理方式,而是在本地存储器中添加各自认证结果,这种处理方式难以达到良好的安全性管理要求,为此可以在运维平台中构建Rsyslogd服务,以此搜集日志记录信息以及LDAP/Kerberos认证信息等,Rsyslogd 服务运行中能够同时支持多项数据库,但是在输入与存储上存在一定的瓶颈,要求使用的机器具有较强的性能。