lxy777 发表于 2018-11-22 06:46:54

WDCP环境下的Apache负载均衡及keepalived配置

  测试环境:

[*]  serverA为web主站点,IP地址为192.168.1.201,网卡eth0
server B为web副站点,IP地址为192.168.1.202,网卡eth0

[*]  web站点底层环境为wdcp管理平台(linux+apache+mysql+php),具体安装方法见:51cto.com/wdcp/install.html,使用源码方式安装
[*]  任务目标:使用apache模块功能实现两台web服务器的负载均衡,使用keepalived实现两台服务器的双机热备
  部署过程:
  一.负载均衡

[*]  为apache安装支持负载均衡的模块
cd/root/lanmp/httpd-2.2.24/modules/proxy/ #进入源码目录,
/www/wdlinux/httpd-2.2.24/bin/apxs-i -c -a mod_proxy.c proxy_util.c#编译安装
/www/wdlinux/httpd-2.2.24/bin/apxs-i -c -a mod_proxy_http.c
/www/wdlinux/httpd-2.2.24/bin/apxs-i -c -a mod_proxy_ftp.c
/www/wdlinux/httpd-2.2.24/bin/apxs-i -c -a mod_proxy_connect.c
/www/wdlinux/httpd-2.2.24/bin/apxs-i -c -a mod_proxy_balancer.c

  模块安装完成后会在主配置文件中看到以下信息:
vi/www/wdlinux/httpd-2.2.24/conf/httpd.conf

  模块安装完成后,登录到web管理平台编辑站点配置文件
  站点列表—文件管理

  Apache配置文件—选择站点配置文件

  在配置文件中添加配置信息

  保存后重启httpd服务即可
  命令解释:
  ProxyRequests Off                                                         //使用反向代理,on是正向代理
  Proxypass / balancer://proxy/                            //“/”代表发送Web请求的URL前缀
                                                //定义一个负载均衡
  Order Deny,Allow
  Allow from all                                                                  //这两行是访问控制
  BalancerMember http://192.168.1.8:80
  BalancerMember http://192.168.1.9:80status=+H       //主服务器及辅助服务器,“+H”表示开启热备份功能
  ProxySet lbmethod=bytraffic                                        //根据流量分配主机资源
  
  更详细的配置参照http://zhumeng8337797.blog.163.com/blog/static/100768914201242211633248/
  二.Keepalived配置
  keepalived官方地址:http://www.keepalived.org/download.html,可以到这里下载最新版本的keepalived

[*]  1.      环境配置:安装make 和gcc openssl openssl-devel等等
  yum -y install gcc make openssl openssl-devel wgetkernel-devel
  mkdir -p /usr/local/src/hasoft
  cd /usr/local/src/hasoft
  wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
  tar -zxvf keepalived-1.2.2.tar.gz
  cd keepalived-1.2.2
  ./configure --prefix=/usr/local/keepalived--with-kernel-dir=/usr/src/kernels/2.6.18-238.19.1.el5-i686/
  这里的软件版本及系统内核版本要根据自己的服务器进行修改
  预编译后出现:
  Keepalived configuration
  ------------------------
  Keepalived version       : 1.2.2
  Compiler               : gcc
  Compiler flags         : -g -O2 -DETHERTYPE_IPV6=0x86dd
  Extra Lib                : -lpopt -lssl -lcrypto
  Use IPVS Framework       : Yes
  IPVS sync daemon support : Yes
  IPVS use libnl         : No
  Use VRRP Framework       : Yes
  Use Debug flags          : No

[*]  2.      编译安装
  make && make install
  复制代码
  这里用的是通用安装方法,如果没有用到LVS可以把lvs去掉即
  ./configure --prefix=/usr/local/keepalived--with-kernel-dir=/usr/src/kernels/2.6.18-238.19.1.el5-i686/--disable-lvs-syncd --disable-lvs

[*]  3.      整理管理文件:
  cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  cp /usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/
  cp /usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/init.d/

[*]  4.      建立配置文件目录
  mkdir -p /etc/ keepalived/
  两台服务器(两个节点)都这样安装即可

[*]  5.      编辑配置文件
  节点A配置如下:
  vi /etc/keepalived/keepalived.conf
  global_defs
  {
  notification_email
  {
  admin@example.com
  }
  notification_email_from admin@example.com
  smtp_server 127.0.0.1
  stmp_connect_timeout 30
  router_id lnmp_node1
  }
  vrrp_instance lnmp {
  state MASTER                                    //这里住服务器配制成MASTER,备机配制成BACKUP
  interface eth0                                       //绑定虚拟IP的网卡
  virtual_router_id 100                         //两台服务器的virtual_router_id要完全一致
  priority 200                                          //数值越大,优先级越高
  advert_int 5                                          //vrrp信息检测时间间隔,这里是5秒
  track_interface {                                  //监听的网卡
  eth0
  }
  authentication {                                 //主备服务器的验证方式,密码要完全一致
  auth_type PASS
  auth_pass 123456
  }
  virtual_ipaddress {                              //使用的虚拟IP,默认绑定在主服务器上,如果主服务器宕机,则漂移到备服务器上
  192.168.1.10
  }
  }
  节点B配置如下:
  vi /etc/keepalived/keepalived.conf
  global_defs
  {
  notification_email
  {
  admin@example.com
  }
  notification_email_from admin@example.com
  smtp_server 127.0.0.1
  stmp_connect_timeout 30
  router_id lnmp_node1
  }
  vrrp_instance lnmp {
  state BACKUP
  interface eth0
  virtual_router_id 100
  priority 150
  advert_int 5
  track_interface {
  eth0
  }
  authentication {
  auth_type PASS
  auth_pass 123456
  }
  virtual_ipaddress {
  192.168.1.10
  }
  }

[*]  6.      添加开机启动项
  chkconfig --add keepalived
  chkconfig --level 35 keepalived on
  

[*]  7.      添加防火墙策略
  vi /etc/sysconfig/iptables
  添加一行:
  -A INPUT –s 192.168.1.0/24 -p vrrp -j ACCEPT


[*]  8.      启动测试
  在节点A上启动
  /usr/local/keepalived/sbin/keepalived
  启动日志:
  cat   /var/log/messages
  Sep818:26:02 centosa Keepalived_vrrp: Registering Kernel netlink reflector
  Sep818:26:02 centosa Keepalived_vrrp: Registering Kernel netlink command channel
  Sep818:26:02 centosa Keepalived_vrrp: Registering gratutious ARP shared channel
  Sep818:26:02 centosa Keepalived_vrrp: Opening file'/etc/keepalived/keepalived.conf'.
  Sep818:26:02 centosa Keepalived_vrrp: Configuration is using : 36076 Bytes
  Sep818:26:02 centosa Keepalived_vrrp: Using LinkWatch kernel netlink reflector...
  Sep818:26:02 centosa Keepalived: Starting VRRP child process, pid=5606
  Sep818:26:07 centosa Keepalived_vrrp: VRRP_Instance(lnmp)Transition to MASTER STATE
  Sep818:26:12 centosa Keepalived_vrrp: VRRP_Instance(lnmp)Entering MASTER STATE
  Sep818:26:12 centosa avahi-daemon: Registering new address record for192.168.1.10 on eth0.
  在节点B上启动
  /usr/local/keepalived/sbin/keepalived
  查看启动日志:
  cat /var/log/messages
  Sep818:30:02 centosb Keepalived_vrrp: Opening file'/etc/keepalived/keepalived.conf'.
  Sep818:30:02 centosb Keepalived_vrrp: Configuration is using : 36252 Bytes
  Sep818:30:02 centosb Keepalived_vrrp: Using LinkWatch kernel netlink reflector...
  Sep818:30:02 centosb Keepalived_healthcheckers: Configuration is using : 6271 Bytes
  Sep818:30:02 centosb Keepalived_healthcheckers: Using LinkWatch kernel netlinkreflector...
  Sep818:30:02 centosb Keepalived_vrrp: VRRP_Instance(lnmp)Entering BACKUP STATE
  从日志可以看出,启动都没有问题,并且安装我给的优先级完成了竞选,各自成就了各自的状态
  关闭节点A的网卡测试切换是否正常
  ifdown eth0
  观察节点B的日志:
  Sep818:32:55 centosb Keepalived_vrrp: VRRP_Instance(lnmp) Transition to MASTERSTATE
  Sep818:33:00 centosb Keepalived_vrrp: VRRP_Instance(lnmp)Entering MASTER STATE
  Sep818:33:00 centosb avahi-daemon: Registering new address record for192.168.1.10 on eth0.
  启动节点A的网卡测试切换是否正常
  ifup eth0
  观察节点B的日志:
  Sep818:33:31 centosb Keepalived_vrrp: VRRP_Instance(lnmp) Received higher prioadvert
  Sep818:33:31 centosb Keepalived_vrrp: VRRP_Instance(lnmp) EnteringBACKUP STATE
  Sep818:33:31 centosb avahi-daemon: Withdrawing address record for 192.168.1.10on eth0.
  Received higher prio advert:表示接收到更高优先级的公告(advert公告的意思)
  Withdrawing:撤回的意思,可以看出切换过程一目了然

[*]  9.      使用脚本监测服务
  下面使用脚本监控apache、php及mysql三个服务,若有一个出现问题便立即停止keepalived服务,以切换到另一台服务器
  mkdir /root/shell/
  cd /root/shell
  vi keepcheck.sh
  #!/bin/bash
  while :
  do
  mysqlcheck=`/www/wdlinux/mysql-5.1.63/bin/mysqladmin-pwdlinux.cn -uroot ping 2>&1`
  mysqlcode=`echo $?`
  phpcheck=`ps aux | grep -c php-fpm | wc -l`
  apachecheck80=`lsof -i:80|wc -l`
  apachecheck8080=`lsof -i:8080|wc -l`
  keepalivedcheck=`ps -C keepalived --no-header| wc -l`
  if [$apachecheck80 -eq 0 ]||[ $apachecheck8080 -eq 0 ]||[ $phpcheck -eq 0 ]||[$mysqlcode -ne 0 ];then
  if [ $keepalivedcheck -ne 0];then
  killall -TERM keepalived
  else
  echo "keepalived isstoped"
  fi
  else
  if [ $keepalivedcheck -eq 0];then
  /etc/init.d/keepalived start
  else
  echo "keepalived isrunning"
  fi
  fi
  sleep5
  done
  注意,用/etc/init.d/keepalived start如果起不来,可以用/usr/local/keepalived/sbin/keepalived二进制文件直接执行启动即可
  启动脚本:
  chmod +x /root/shell/keepcheck.sh
  nohup sh /root/shell/keepcheck.sh &
  节点B也用这个脚本
  写入/etc/rc.local开机自动启动
  vi /etc/rc.local
  nohup sh /root/shell/keepcheck.sh &
  至此全部配置已经完成,将域名或nat指向到创建的虚拟ip即可使用服务
  




页: [1]
查看完整版本: WDCP环境下的Apache负载均衡及keepalived配置