设为首页 收藏本站
查看: 1206|回复: 0

[经验分享] 系统优化与lvs详解配置、haproxy

[复制链接]

尚未签到

发表于 2019-1-2 06:58:52 | 显示全部楼层 |阅读模式
  涉及内容比较杂乱,请耐心阅读,为自己阅读实践过程中摘要
  

  设备:
  服务器IBM x3850 x6
         戴尔 R720
  防火墙,华为 USG5120
  交换机 (机房) 华为5700 二层,48GE电口
  路由器 H3c ER3180G
  交换机 s1048(办公司网络)
  

  

  

  

  报错集合:
  一、程序僵死:获取url或者是业务记忆,找出nginx的出口和location。看nginx.comf和upstream,获取真实的real server。原来是server问题(1、数据库用户改密码报错。2、)
  二、nginx:nginx前期要main属性和location访问参数配置。
             main:  worker_processes  工作内核占用
             access.log        访问日志
     error_log         错误日志
     limit_rate        限速模块
     gzip              数据压缩
  
             location :expires          客户端浏览器缓存时间
                proxy_set_header 完整获取客户端ip与服务端realserver ip
    还有if判断嵌套   ----因为涉及到dcn的ip,只有dcn的ip而且端口为80才,,,,if host=10.**.**.***
    client_max_body_size 配置上传文件大小
  
  测试环境,nginx服务器10次链接中有一次404
  在web服务器log中未找到报错,信息,排除tomcat,重点在nginx
  在nginx服务器上curl我的tomcat链接,无错
  原来是在nginx.conf中设置了limit,limit_conn
  
  
  

  linux系统优化
  基本的,如果不设计端口转发,我会关了【防火墙】,【selinux】
  关闭【sendmail】等一些工具,关闭【图形化界面】,【字符集】
  应用服务器优化:
  基本的+
    【处理器子系统调优】:开启超线程,处理器,重要性不言而喻,cpu性能经常是瓶颈,Hyper-Threading(超线程功能,基于SMP 内核),
    Hyper-Threading 在操作系统里将一颗处理器虚拟化为两颗使用,使得处理器,同一时刻,可以执行两个线程或进程,
    配置Linux 内核如何更新dirty buffers 到磁盘,磁盘缓冲区用于暂存磁盘的数据,磁盘缓冲区速度
    内核优化中的opnefile(65535)
  web服务器优化:
    linux内核参数调优/etc/sysctl.conf
  关闭如下参数可以防止***对服务器IP 地址的***(器忽略来自被列入网关的服务器的重定向,只接受可靠的重定向)
           sysctl -w net.ipv4.eth0.secure_redirects=0
           sysctl -w net.ipv4.lo.secure_redirects=0
           sysctl -w net.ipv4.default.secure_redirects=0
           sysctl -w net.ipv4.all.secure_redirects=0
  拒绝接受广播风暴或者smurf***
     sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
    忽略所有的ucmp包或者ping
           sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1
    针对tcp与UDP的调优,支持time-wait套接字, 每个TCP 传输都包含远程客户端的协议信息缓存,所以有利于提高性能
         忽略所有icmp与ping
           sysctl -w net.ipv4.tcp_tw_reuse=1
    避免因为死套接字造成内存溢出 (套接字:Socket通信协议 ,目标ip和端口,tcp套接字通信必须保持一直链接)
           sysctl -w net.ipv4.tcp_fin_timeout=1
    keepalive检测tcp链接,链接缺省时候,丢掉,防止内存过度使用
           tcp_keepalive_time   启用keepalive,建立连接而未发送数据,防止空连接***,(可写20分钟)+
       sysctl -w net.ipv4.tcp_keepalive_time=1800
    对于所有协议的队列,设置系统最大发送缓存,接受缓存到8m
           sysctl -w net.core.wmem_max=8388608
   sysctl -w net.core.rmem_max==8388608
    忽略所有icmp与ping
           sysctl -w net.ipv4.tcp_tw_reuse=1
  

  
  linux内核参数调优/etc/sysctl.conf
  echo 1 > /proc/sys/net/ipv4/ip_forward  开启路由转发
  /proc/sys/net/ipv4/tcp_wmem  最大tcp数据接收-发送缓存
  shmmax  共享内存段的最大尺寸,oracle应该为2G
  open_files
  net.ipv4.ip_local_port_range = 1024 65000  向外连接端口的范围
  tcp_keepalive_time   启用keepalive,建立连接而未发送数据,防止空连接***,(可写20分钟)
  
  

  关于perlpuppet
  

  
  echo 1 > /proc/sys/net/ipv4/ip_forward  开启路由转发
  /proc/sys/net/ipv4/tcp_wmem             最大tcp数据接收-发送缓存
  shmmax                                  共享内存段的最大尺寸,oracle应该为2G
    TCP SYN cookies                         保护服务器避免受syn-flood ***      (我对这些乱七八糟的***没有研究,反正对于web服务器我会注意到这些系统自带的防***)
  
  

  

  

  【tomcat】启动一般会所在用户的环境变量
  如果tomcat本身指定的话:vi bin/setclasspath.sh
  JAVA_HOME=/mall/jdk/jdk1.7.0_80
  JRE_HOME=/mall/jdk/jdk1.7.0_80/jre
  为httpsession安全性考虑,防止客户端脚本读取session cookie内容诸如进行CSRF/XSS恶意http***,可在tomcat6的
  conf/context.xml配置文件中配置  为自定义cookie及属性添加HttpOnly属性,在set-Cookie头部信息设置时可以添加"httponly"
  

  tomcat访问url不需要加项目名,直接IP+port
  
  

  

  【raid】
  raid0 :两块硬盘以上,合成一块,提高读写速度
  raid1:两块硬盘,又称为镜像方式,数据冗余,只有一半磁盘空间有效,另一半用来冗余,相比raid0,容量减半,速度不变,
  raid5:raid0月raid1的折中方案,主流,至少三块硬盘,读取速度≈raid0  写入速度<单个磁盘,但是raid5的磁盘利用率大于raid1,数据写入时,按照一块硬盘的方式直接写入这块硬盘,
  同时写入校验信息,读取写入的时候,分别从三块硬盘上读取数据,再通过校验信息进行校验,一块硬盘顺坏,其他两块会计算出那一块的硬盘内容,raid5:只允许一块硬盘损坏
  当顺坏时候,替换上去新硬盘,raid自动利用奇偶校验信息重建此硬盘上的数据,保持raid5的高可靠性
  存储:只占用一个磁盘容量,应该三块硬盘一样大,否则以最小为准。
  raid0+1:又称raid10,至少4块硬盘,简单的理解,多个磁盘组成raid0阵列,再进行冗余
  
  boot:linux text 字符型安装界面
  boot:linux rescue 系统修复
  touch -a 1.sh 将文件的访问时间改为当前时间
  touch -m 1.sh 将文件的修改时间改为当前时间
  

  cat /proc/cpuinfo |grep "physical" 物理cpu个数
  cat /proc/cpuinfo |grep "process" 逻辑cpu个数
  cat /proc/cpuinfo |grep "cpu.cores" |uniq 每个物理cpu中core的个数(核数)
  配置服务器应用时,应以逻辑cpu的个数为准,物理cpu*核数=逻辑cpu个数 ,不等的话,则服务器支持超线程技术
  

  dd if = /dev/cdrom of = /root/cdrom_bak.iso
  备份整个分区:dd if=/dev/sda2 of=/opt/bak/sda2.bak
  恢复 dd if=/opt/bak/sda2.bak of=/dev/sda2
  查询软件包 rpm -qf /bin/bash
  

  抓包  从本地eth0到172
  
  crontab
  * * * * * /mall/web/tomcat/bin/start.sh
  分 时 日 月 周
  1 8-23 * * * 每天8点到23点的每小时一分钟执行(相当于每小时执行)  或者 * 8-23/1 * * *
  

  

  icmp  是tcp/UDP协议的子协议,是internet控制报文协议,用于传输出错报告控制信息
  

  内存分配及使用情况可以通过jmap、jstat命令查看
  

  rsync+inotify(同步+立即同步)
  

  0000 0001 - 0111 1111: A类,1-127
  1000 0000 - 1011 1111:B类, 128-191
  1100 0000 - 1101 1111: C类,192-223
  1110 0000 - 1110 1111:D类, 224-239
  1111 0000 - 1111 1111: E类, 240 -255
  

  A: 126个
  每个网络中可以容纳的主机数:2^24-2
  B: 2^14
  每个网络中可以容纳的主机数:2^16-2
  C: 2^21
  每个网络中可以容纳的主机数:2^8-2
  

  [root@jsjx ~]$
  [root@jsjx ~]$
  [root@jsjx ~]$
  [root@jsjx ~]$ shutdown -h now
  Error: Too many open files
  

  task_`date +%Y%m%d`.log
  

  netstat -nat |grep -i "80"
  查看80端口的链接状态
  netstat -nat|grep ':80\>'
  

  

  PS1=[\u@\h \W]\$
  

  【redis】
  tomcat之间session的共享
  redis是一个高可用的key-value存储系统,能够作为缓存框架和队列
  redis可以缓存在disk与mem上,memcache只能缓存在mem
  app sever与数据库都是cpu密集型:cpu bond 占用cpu资源比较大
  

  memcache
  http请求数据,检查数据存在memcache中,不是的话,查询数据库and返回给客户端,再缓存到memcache中每当变下次查询
  更新数据时候,同事更新memcache中数据,保持一致
  

  

  

  

  1.只查看该进程:ps -ef | grep 11345
  2.查看该进程打开的文件:lsof -p 11345
  3.查看内存分配:lcat /proc/11345/maps
  4.查看堆栈:pstack 11345
  5.查看发出的系统调用:strace -p 11345
  6.查看调用库函数:ltrace -p 11345
  

  用top -H -p pid命令查看进程内各个线程占用的CPU百分比
  top -H -p 14094
  top中可以看到有107个线程,但是下面9个线程占用CPU很高,下面以线程14086为主,分析其为何high CPU
  

  使用gstack命令查看进程中各线程的函数调用栈
  #gstack 14094 > gstack.log
  

  僵死进程  ps -elf|grep Z
  

  cd /proc/9301/
  11   查看pid进程的程序在哪    cwd -> /mall/web/tomcat-client-life-circle/bin
  

  挂载U盘  mount -t vfat(ext4) /dev/sda1 /mnt/usb
  挂载光盘 mount -t iso9660 /dev/hda /mnt/cdrom
  挂载软盘 mount -t msdos /dev/fdo /mnt/floppy
  

  nas 挂载
  mount 172.18.41.200:/vx/sm02 /data -o nolock
  mount 172.18.41.201:/vx/bak /backup -o nolock
  

  

  more /etc/login.defs 创建用户UID范围与口令
  more /etc/default/useradd 创建用户默认设置
  

  groupadd -g 10086 mygroup
  useradd -g chen -G mygroup -d /opt/myhome
  -s /bin/bash -u 10086
  usermod -L newchen oldchen
  usermod -d /home/chen chen 修改
  

  :set termencoding=gbk 中文乱码
  

  tar -zcvf --exclude
  
  LVM是建立在磁盘分区和文件系统之间的一个逻辑层,管理员利用LVM可以在磁盘不用重新分区的情况下动态的调整分区的大小,
  如果系统新增了一块硬盘,通过LVM就可以将新增的硬盘空间直接扩展在原来的磁盘分区上
  把/home的分区大小改为100M,不能损坏原有的数据。
  df -h
  umount /home/
  e2fsch -f /dev/sda2
  sizezfs /dev/sda2 100m
  lvreduce -L 100m /dev/sda2
  mount -a
  

  【/etc/logrotate.d/nginx】
  /mall/web/nginx/logs/8080_port.access.log {
  daily
  copytruncate
  create
  olddir /mall/web/nginx/logs/logrotate/8080
  dateext
  extension -%Y%m%d
  rotate 90
  compress
  missingok
  }
  

  chkconfig --add nginx
  chkconfig nginx on
  chkconfig --list nginx
  chkconfig ip6tables off
  chkconfig --level 345 mysqld on
  

  

  【时间同步】
  时间同步(依靠另一个服务器)
  /etc/xinetd.d/time-stream   NO->YES
  /etc/init.d/xine stop/start restart
  rdata -s IP(另一个) 同步时间,以另一个IP时间为准
  service xinetd restart 以此同步到另一台服务器时间
  
  /dev/hda2 hd:IDE硬盘  a表示第一块硬盘
  /dev/sda2 sd:scsi硬盘
  1-4(主分区或扩展分区)  5----逻辑分区
  硬盘的容量   =    主分区的容量   +    扩展分区的容量
  扩展分区的容量  =  各个逻辑分区的容量之和
  

  etc/fstab 开机自动挂载分区列表,需要开机自动挂载的分区,都可以
  etc/sysctl.conf 系统内核参数配置文件
  etc/service 定义系统服务与端口的对应关系
  etc/syslog.conf 系统日志输入文件
  /usr/lib 或者 /local/lib 系统使用的函数库目录
  fsck -rv -t exts /dev/sda1 修复磁盘分区
  

  netstat -rn :显示当前系统路由信息
  netstat -tlnpu :显示当前已经启动网络连接和对应的端口信息
  netstat -atunp:当前系统上处于网络连接状态的资源信息
  netstat -nat :当前所有端口的网络连接的状态
  

  traceroute -i eth0 -s 192.168.60.251 -w 10 www.baidu.com 100
  跟踪从本机到网络www.baidu。com的数据包过程,指定eth0网络接口发送数据包,同时指定本地发送数据包的ip为192.168.60.251 设置超时时间为10秒,发送的数据包大小为100bytes
  可以看出,本机到百度对应的ip地址经过了18个路由。
  

  
  route add -net 10.35.40.0 netmask 255.255.255.0 gw 10.35.40.254   gw只能是本网段的gw
  写进/etc/rc.local,开机自启动
  

  iptables -t nat -I POSTROUTING -s 10.35.40.0/24 -j SNAT --to-source 10.35.40.222  添加一条iptables策略
  iptables -t mangle -I PREROUTING -d 192.168.1.193 -p tcp -m tcp --dport 80 -m mac \! --mac-source 00:0C:29:20:D7:3F -j MARK --set-mark 0x6    开通对方ip与端口,允许对方80端口通信
  iptables -A INPUT -i eth0 -p tcp --drop 80 -j accept
  iptables -A OUTPUT -p tcp --sport 80 -m%d stat --stat ESTABLISHED -j ACCEPT
  /etc/init.d/iptables save
  /etc/sysconfig/iptables中可以看到防火墙策略
  

  https:openssl加密 用户和服务器进行web请求时,数据就会加密
  验证域名完整性和可靠性
  

  LAN: local area network,局域网
  WAN:wide area network,广域网
  WLAN: wireless LAN,无线局域网
  VLAN: virtual LAN,虚拟局域网
  ***: Virtual Private Network,虚拟私人网络
  

  wan接口是外网接口,是用来连接互联网或局域网等外部网络的。
  lan接口是内网接口,是用来连接计算机终端或其他路由器等终端设备的。
  

  正在使用文件清空cat /dev/null > 文件名
  

  网络:
  TCP 和UDP协议属于传输层协议,提供端对端的接口,TCP提供IP环境下的数据可靠传输,
  它提供的服务包括数据流传送、可靠性,TCP支持的应用协议主要 有:Telnet、FTP、SMTP等;
  UDP支持的应用层协议主要有:NFS、SNMP(简单网络管理协议)、DNS、TFTP等.
  
  

  
  

  【服务器运维】
  1、某一台服务器部署多个web站点,其中一个cpu占用达到100%,如何找出有问题的web站点?
  通过你的站点,推断出外网IP、端口与内网web集群,找到这组real server,这时候确定是哪个java进程,可以jmap一下看内存使用情况,这时候开始检查系统的资源,cpu使用情况
  top -H -p pid 返回开发商量一下
  
  2、了解哪些主流web服务器,各自特点?
  tomcat jboss weblogic webshpere
  tomcat 与jboss类型相似,没有b/s结构
  属于轻量级服务器,简单实用,需要做集群服务,只能依靠负载
  
  weblogic与webshpere,适合单个消耗大的程序,可以使用其做集群服务,有b/s架构,略微复杂,集群服务可以调优使用。
  3、如何查找某一文件被哪个进程打开?
  ps -fe|grep filename
  
  4、找出access.log中访问top 10的ip地址?
  

  awk -F '{print $1}' access.log |sort |uniq -c |sort -n -r |head -n 10
  5、cacti与nagios的区别,cacti如何监控mysql?
  nagios特点:监控最基本的资源信息,
         bin:可执行程序所在
     etc:配置文件
     libexec:插件,监控项的脚本,check——mem
     var:日志
     etc:nagios.cfg:主配置文件,可定义所有待监控项,已经定义配置文件,user、group、超时时间
          nrpe.cfg :定义主机ip,被监控机ip,监控项,监控等级
  command.cfg :定义配置文件被使用,web页面上的监控项
  localhost.cfg:监控主机,可以写上其他被监控机器
  contacts.cfg:邮件接受者
  
  6、不小心在系统下执行了 chmod -x/sbin/chmod 怎么办?
  sbin下面文件较少,可以对比其他系统来
  7、linux下,指定DNS服务器的配置文件是?
  

  /etc/resolv.conf        nameserver 8.8.8.8
  网卡配置/etc/sysconfig/network-script/eth0  DNS1=8.8.8.8
  8、在某行crontab配置中 执行时间配置段为 */30 * 3 * *,表示什么意思
  每月3号 的 每半小时
  
  9、说明TCP建立连接过程?
  

  (1)客户端发送一个SYN包给服务器,然后等待应答。
  (2)服务器端回应给客户端一个ACK=1、SYN=1的TCP数据段。
  (3)客户必须再次回应服务器端一个ACK确认数据段。
  10、如何将本地80端口请求转发到8080端口,当前主机IP为192.168.2.1
  

  1、可以使用nginx转发
                server ---listen 80
    localtion {
    proxy_pass http://192.168.2.1:8080
    }
  
  2、使用ip隧道
  ssh -L *:80::8080 192.168.2.1
  11、编写个shell脚本,将/usr/local/test 目录下大雨100K的文件转移到/tmp 目录下大雨100K的文件转移到/tmp下
  shpwd=`pwd`
  file_list=`find /usr/local/test/ -size +100K --print`
  for  i in $file_list
  do
     mv $i /tmp
     cd $shpwd
  done
  
  12、如何查看占用端口8080的进程
  

  netstat -lntp|grep 8080    pid/java or ....
  lsof -i:8080
  13、如何用mysql命令进行备份和恢复
  

  备份 mysqldump -uroot -p mydb > mydb_20161110.sql
  
  导入:mysql -uroot -p   use mydb (一定选定数据库)  source /home/mysql/back/mydbbak.sql (导入库)
  14、apache有几种工作模式,分别介绍下其特点,并说明什么情况下采用不同的工作模式。
  

  prefork,worker和event
  15、用iptables添加一个规则允许192.168.0.123访问本机3306端口。
  

  iptables -I INPUT 1 -p tcp -m tcp --dport 3306 -s 192.168.0.123 -j ACCEPT
  
  16、nginx如何防止DDOS***?
  

  主要使用nginx的http_limit_conn和http_limit_req模块来防御。
  ngx_http_limit_conn_module 可以限制单个IP的连接数,
  ngx_http_limit_req_module 可以限制单个IP每秒请求数
  http{}
  limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;        所有访问ip 限制每秒10个请求
  limit_conn_zone $binary_remote_addr zone=addr:10m;
  location {}
  limit_req zone=one burst=5 nodelay;    允许超过频率限制的请求数不多于5个,假设1、2、3、4秒请求为每秒9个,那么第5秒内请求15个是允许的  反之,如果第一秒内请求15个,会将5个请求放到第二秒,第二秒内超过10的请求直接503,类似多秒内平均速率限制。
  limit_conn addr 1;    // 限制同一时间内1个连接,超出的连接返回503
  
  17、web访问慢的,如何定位问题解决?
   1、是否普遍较慢?先环节:电信运行商、自己pc机、浏览器
   2、本网站丢包情况  cmd - tracert www.***.com  再排除一下DNS劫持是否
   3、看一下web服务器与应用服务器的资源问题,负载与异常日志
      1、其他web集群访问情况,是否只有这个web站点问题,只有这个web站点问题
     查负载压力是否很大,错误日志,web服务器资源问题
     应用服务器的中间件错误日志,进程cpu、内存占用以及web服务器资源
   4、缓存的命中与磁盘读写速率
  
  18、简述linux启动过程?
  

  1、加载BIOS
   2、读取MBR-预启动信息,分区表
   3、启动boot,    初始化硬件、内存
   4、加载内核
   5、根据init运行级别
   6、启动配置项
   7、登录用户
  
  

  19、free命令各行意义
  

  total       used       free     shared    buffers     cached
  Mem:         29261      28798        463          0        267      18331
  -/+ buffers/cache:      10199      19062
  Swap:        16383        545      15838
    buffer/cache
  

  

  20、使用sed替换a.tmp文件内admin为administrator
  

  sed -i 's/admin/administrator/g'
  

  21、以#和:为分隔符,使用awk打印a.tmp第三列内容
  

  awk -F'[#:]' '{print $3}' a.tmp     -F/ -F"/"
  
  22、列举测试硬盘读写速度方法
  

  hdparm -tT /dev/sda
  

  23、使用shell编写脚本,备份mysql的test库,并通过rsync同步到10.1.2.3(备份目录名:DBBACK)
  

  #!/bin/bash
  file_data=`date +%Y%m%d.sql`
  cd /home/mysql_db/
  mysqldump -uroot -pmysqlpasswd mydb > "$file_date".sql
  rsync -azv --delete /home/mysql_db/  mysql@10.1.2.3:/DBBACK/
  

  24、用一行命令实现,统计80端口所有连接状态,并按照连接状态由大到小排列显示
  

  netstat -nat|grep ':80\b' |grep established |sort -n -k 3
  

  

  25、写一个脚本,实现批量增加30个用户,用户名为user01-30,密码为随机的大小写
  

  #!/bin/bash
  for ((i=1;ihaproxy>nginx
  功能上的:lvs简陋   健康检查功能:lvs与haproxy
               nginx强大
  

  负载均衡器的性能:
  会话率:单位时间的完成的会话数
  会话并发能力:同时持有的会话数
  数据率:单位时间内所完成数据交互的能力
  
  
  LB:负载均衡集群,并发,分流压力
  HA:高可用集群,容灾
  

  四层负载:在传输层(tcp udp)上工作,基于IP+port负载,虚拟IP+port接受请求,再分配到真实的服务器上
  lvs
    工作性能很好,但是不处理应用层,不支持高级特性
  七层负载:在应用层(http,smtp,pops,imap)上工作,基于URL等应用层信息的负载,虚拟URL或主机名接受请求,再分配到真实的服务器上。
  nginx
    haproxy
    keepalived
    精密解析特定协议,向后做负载均衡
  LVS
  

  LVS主要组成部分为:
  

  负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
  

  服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,执行的服务一般有WEB、MAIL、FTP和DNS等。
  

  共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
  

  keepalived  +  haproxy + nginx
  keepalived:实线对haproxy服务高可用,采用双主模型配置
  haproxy:实线对nginx的负载均衡和读写分离
  nginx:实线对http请求的高速处理
  

  

  两个director实现HA(高可用性)群集
  两个web服务器实现LB(负载均衡)群集
  

  [root@LVS1 ~]# ipvsadm –C      /proc/sys/net/ipv4/conf/lo/arp_ignore
  echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
  echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
  echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
  VIP写在lo:0上  数据报文从这接口上出去
  

  

  (3)检查后台realserver健康问题
  可以在realsever上写一个html   ok
  curl --connect-timeout 1 http://192.168.10.9/chen/healthy_check.html |grep "ok" &> /dev/null && echo $?请求设定超时时间为1秒
  curl -I http....  不获取页面内容,只获取页面相应首部
  curl 正确的话,返回值为0  错误则不为0
  

  附带health_check.sh
  lvs的服务
  如果一个节点故障,应该在ipvsadm删点这个节点,集群服务继续运行
  每五秒中检查一下,如果这个节点服务正常了,再加进来
  

  linux 检测jvm使用,检测内存溢出情况  Jmap
  ps aux
  VSZ     該进程使用的虚拟內存量(KB)
  RSS     該進程占用的固定內存量(KB)(驻留中页的数量);
  

  tomcat调优
  JAVA_OPTS="-server -Xms2048m -Xmx4086m -XX:PermSize=256M -XX:MaxNewSize=512m -XX:MaxPermSize=512m -Djava.awt.headless=true"
  

  正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。
  反向代理的典型用途是将 防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。
  

  

  正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
  反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。
  开放的反向代理应用:nginx和nat123。nginx是单纯的反向代理,需要自行搭建反向代理服务才能使用,效率高。nat123是结合了NAT和反向代理的应用,可以直接使用,解决80端口问题等,速度快。
  

  keepalived可提供vrrp以及health-check功能,可以只用它提供双机浮动的vip(vrrp虚拟路由功能),这样可以简单实现一个双机热备高可用功能。
  定义检测脚本,用于检测Haproxy状态,从而进行vip的切换----
  

  keepalived发生切换,原因是,一台服务器虚拟机升级时候,重启了。
  

  lvs+keepalived : Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现
  keepalived.conf: tcp check {connect-timeout}
  advert_int 1:MASTER和SLAVE负载均衡器之间同步检查的时间间隔
     authentication { MASTER和SLAVE的认证方式
  auth_type PASS
  auth_pass 1111
  }
  负载均衡的调度算法 lb_algo
     lb_algo rr 静态 负载均衡的调度算法:轮循调度rr “轮循”调度算法将外部请求按顺序轮流分配到集群中的Real Server
             wrr 静态  加权轮循(Weighted Round Robin)wrr 加权轮循”调度算法根据真实服务器的不同处理能力来调访问请求 根据权重。
     dh  静态 目标地址散列(Destination Hashing)(DH) 从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,则将请求发送到该服务器
     lb_algo lc 调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上
                lc = 活动连接数*256 + 非活动连接数
  
  1、网站建设初期,可以选用Nigix/HAproxy作为反向代理负载均衡(或者流量不大都可以不选用负载均衡),因为其配置简单,性能也能满足一般的业务场景。如果考虑到负载均衡器是有单点问题,可以采用Nginx+Keepalived/HAproxy+Keepalived避免负载均衡器自身的单点问题。
  2、网站并发达到一定程度之后,为了提高稳定性和转发效率,可以使用LVS、毕竟LVS比Nginx/HAproxy要更稳定,转发效率也更高。不过维护LVS对维护人员的要求也会更高,投入成本也更大。
  

  注:Niginx与Haproxy比较:Niginx支持七层、用户量最大,稳定性比较可靠。Haproxy支持四层和七层,支持更多的负载均衡算法,支持session保存等。具体选型看使用场景,目前来说Haproxy由于弥补了一些Niginx的缺点用户量也不断在提升。
  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  【haproxy】
  HAProxy是免费、极速且可靠的用于为TCP和基于HTTP应用程序提供高可用、负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点。
  特别适用于那些负载特大的web站点,
  

  haproxy 1.4 高扩展性,基于url调度,提高缓存命中,
  1.3 高负载 并发
  

  【haproxy配置】相当于lvs的keepalived中的real server.........
  listen  Outer-Nginx-8084-Outgoing
  bind*:8084
  balance leastconn
  server 172.18.11.29 172.18.11.29:8084 weight 5 check inter 2000 rise 3 fall 3
  server 172.18.11.30 172.18.11.30:8084 weight 5 check inter 2000 rise 3 fall 3
  
  
  【haproxy优点】
  
  HAProxy 支持连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制***蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。
  这个已经为一个陷于小型DDoS***的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。
  
  HAProxy可以跑满10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom's 10GbE NICs (Myri-10G PCI-Express),这个数值作为软件级负载均衡器是相当惊人的
  
  HAProxy 支持全透明代理(已具备硬件防火墙的典型特点): 可以用客户端IP地址或者任何其他地址来连接后端服务器
  
  HAProxy支持虚拟主机,许多朋友说它不支持虚拟主机是错误的,通过测试我们知道,HAProxy是支持虚拟主机的。
  另外,提到Nginx作负载均衡器,这个由于我自己也比较喜欢它的强大的正则处理功能和其强悍的抗并发能力,
  所以我在自己的博客及运维网.com上推行它的Nginx+Keepalived,并成功用此架构帮许多客户实施他们的网站,Nginx对网络的依赖性非常小,理论上只要ping得通它就就能实现它的负载均衡能力,这一点跟LVS不一样。
  我去年在一家公司准备实施LVS+Keepalived时,发现它的网络环境太复杂了,每台机器都是7、8静态路由,网络中还有二个网关,LVS实现不了转发功能;最后还是换成了Nginx+Keepalived。
  

  现在我觉得Nginx作为最前端的负载均衡并不是一个非常理想的选择,一个大型的网站或系统的话,可以存在多级代理,比如我们最前端可以用F5或LVS来作为网站或系统的入口,让它们来顶外部的高并发流量,
  而Nginx由于其强大的正则处理能力,可以作为中层代理,一来可以作为F5/LVS的补充,节约大量成本,拓朴如下图:
                               【四层负载均衡】
  /                   |                   \
  【nginx proxy】       【nginx proxy】       【nginx proxy】
                         /
       【web集群A】【web集群B】【web集群C】
  
  
  大家可以看一下基于架构的好处有:
  

  一、不需要担心单Nginx负载均衡器crash的问题,随便怎么挂都可以;
  二、Nginx作为F5的补充,利用其强大的upstream模块和正则,可以轻松实现动静分离;
  三、压缩可以通过nginx做,这样,后台应用服务器不管是apache、resin、lighttpd甚至iis或其他古怪服务器,都不用考虑压缩的功能问题。
  四、方便的运维管理,在各种情况下可以灵活制订方案;
  五、即使没有squid群组,Nginx现在可以做为优秀的反向代理加速软件了。
  
  
  #######################################################################
  

  / keepalived 主 172.18.10.104
  keepalived +  haproxy   VIP 172.18.10.61-
  \ keepalived 备 172.18.10.105
  
  #######################################################################
  
  / keepalived 主 172.18.10.107
  keepalived +  haproxy   VIP 172.18.10.63-
  \ keepalived 备 172.18.10.108
  
  #######################################################################
  
  现在网站发展的趋势对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术:
  一种是通过硬件来进行进行,常见的硬件有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用;另外一种就是类似于LVS/HAProxy、Nginx的基于Linux的开源免费的负载均衡软件策略,这些都是通过软件级别来实现,所以费用非常低廉,所以我个也比较推荐大家采用第二种方案来实施自己网站的负载均衡需求。
  近期朋友刘鑫(紫雨荷雪)的项目成功上线了,PV达到了亿级/日的访问量,最前端用的是HAProxy+Keepalived双机作的负载均衡器/反向代理,整个网站非常稳定;这让我更坚定了以前跟老男孩前辈聊的关于网站架构比较合理设计的架构方案:即Nginx/HAProxy+Keepalived作Web最前端的负载均衡器,后端的MySQL数据库架构采用一主多从,读写分离的方式,采用LVS+Keepalived的方式。
  在这里我也有一点要跟大家申明下:很多朋友担心软件级别的负载均衡在高并发流量冲击下的稳定情况,事实是我们通过成功上线的许多网站发现,它们的稳定性也是非常好的,宕机的可能性微乎其微,所以我现在做的项目,基本上没考虑服务级别的高可用了。相信大家对这些软件级别的负载均衡软件都已经有了很深的的认识,下面我就它们的特点和适用场合分别说明下。
  LVS:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability),感谢章文嵩博士为我们提供如此强大实用的开源软件。
  LVS的特点是:
  

  1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;
  2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;
  3、工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived;
  4、无流量,保证了均衡器IO的性能不会收到大流量的影响;
  5、应用范围比较广,可以对所有应用做负载均衡;
  6、软件本身不支持正则处理,不能做动静分离,这个就比较遗憾了;其实现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。
  7、如果是网站应用比较庞大的话,实施LVS/DR+Keepalived起来就比较复杂了,特别后面有Windows Server应用的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。
  Nginx的特点是:
  

  1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是许多朋友喜欢它的原因之一;
  2、Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在;
  3、Nginx安装和配置比较简单,测试起来比较方便;
  4、也可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;
  5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测;
  6、Nginx仅能支持http和Email,这样就在适用范围上面小很多,这个它的弱势;
  7、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web架构,大有和以前最流行的LAMP架构分庭抗争之势,在高流量的环境中也有很好的效果。
  8、Nginx现在作为Web反向加速缓存越来越成熟了,很多朋友都已在生产环境下投入生产了,而且反映效果不错,速度比传统的Squid服务器更快,有兴趣的朋友可以考虑用其作为反向代理加速器。
  HAProxy的特点是:
  

  1、HAProxy是支持虚拟主机的,以前有朋友说这个不支持虚拟主机,我这里特此更正一下。
  2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
  3、支持url检测后端的服务器出问题的检测会有很好的帮助。
  4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
  5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS,所以我向大家推荐LVS+Keepalived。
  6、HAProxy的算法现在也越来越多了,具体有如下8种:
  ①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
  ②static-rr,表示根据权重,建议关注;
  ③leastconn,表示最少连接者先处理,建议关注;
  ④source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注;
  ⑤ri,表示根据请求的URI;
  ⑥rl_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name;
  ⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
  ⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
  

  keepalived理论工作原理
  keepalived可提供vrrp以及health-check功能,可以只用它提供双机浮动的vip(vrrp虚拟路由功能),这样可以简单实现一个双机热备高可用功能。
  
  
  LVS+Keepalived 介绍
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-658421-1-1.html 上篇帖子: haproxy 4层负载 下篇帖子: Haproxy 配置日志
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表