http服务器负载均衡安装部署(apache+keepalived)(一)

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情


环境准备

生产中心http apache使用两台服务器作为masterslave节点

序号 服务器节点 IP地址 服务器操作系统 apache 版本
1 http-primary-master 192.168.4.162 linux CentOS 6.4 64位 2核4G 50G 2.2.4
2 http-primary-slave 192.168.4.163 linux CentOS 6.4 64位 2核4G 50G 2.2.4

生产中心http keepalived使用两台服务器作为master和slave节点

序号 服务器节点 IP地址 服务器操作系统 apache 版本
1 keepalived-primary-master 192.168.4.162 linux CentOS 6.4 64位 2核4G 50G 2.0.6
2 keepalived-primary-slave 192.168.4.163 linux CentOS 6.4 64位 2核4G 50G 2.0.6

一、生产中心http master安装及配置

1.1、安装http-primary-master节点

上传httpd-2.2.34.tar.gz到/opt/tools目录下并进行解压

# cd /opt/tools/

# tar -zxvf httpd-2.2.34.tar.gz

编译安装

# cd httpd-2.2.34

# ./configure --prefix=/usr/local/apache2 --enable-module=so --enable-rule=SHARED_CORE --enable-so --enable-rewrite

image.png

如果编译的时候出现以上错误,安装GCC软件套件,执行下面命令:

# yum -y install gcc

重新编译

# ./configure --prefix=/usr/local/apache2 --enable-module=so --enable-rule=SHARED_CORE --enable-so --enable-rewrite

# make

# make install

至此 apache已经安装完

启动Apache服务:

# /usr/local/apache2/bin/apachectl start

如果启动apache启动报错如下:

httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.4.162 for ServerName

需要修改apache ServerName,步骤如下

# vi /usr/local/apache2/conf/httpd.conf

搜索"#ServerName",修改ServerName 为 192.168.4.162:80

image.png

修改为

image.png

再重新启动apache 即可

# /usr/local/apache2/bin/apachectl start

image.png

1.2、配置防火墙

启动80端口

# vi /etc/sysconfig/iptables

添加以下内容:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A INPUT -i eth0 -p 112 -j ACCEPT

注意,80是HTTP端口,112是keepalived通讯端口,112端口必须要这样写

重启防火墙

# service iptables restart

1.3、安装tomcat通信模块

# cd /opt/tools/httpd-2.2.34/modules/proxy

# /usr/local/apache2/bin/apxs -c -i mod_proxy.c proxy_util.c

image.png

1.4、安装proxy_ajp模块

# cd /opt/tools/httpd-2.2.34/modules/proxy

# /usr/local/apache2/bin/apxs -c -i mod_proxy_ajp.c ajp_header.c ajp_utils.c ajp_msg.c ajp_link.c

image.png

# /usr/local/apache2/bin/apxs -i -c -a mod_proxy_http.c

image.png

# /usr/local/apache2/bin/apxs -i -c -a mod_proxy_connect.c

image.png

# /usr/local/apache2/bin/apxs -i -c -a mod_proxy_balancer.c

image.png

1.5、加载模块配置

# vi /usr/local/apache2/conf/httpd.conf

搜索"# LoadModule foo_module modules/mod_foo.so"

image.png

把以上三个LoadModule替换为以下五个LoadModule,注意顺序,否则启动会报错:

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_http_module  modules/mod_proxy_http.so

LoadModule proxy_connect_module modules/mod_proxy_connect.so

LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

image.png

apache停止命令:

# /usr/local/apache2/bin/apachectl stop

apache启动命令:

# /usr/local/apache2/bin/apachectl start

查看apache启动情况:

# netstat -anp | grep :80

image.png

经过以上步骤安装部署,可以通过浏览器正常访问到服务器80端口,http服务器安装完成。

image.png

1.6、参数调优及应用配置

1.6.1、主配置文件配置

# vi /usr/local/apache2/conf/httpd.conf

将虚拟主机配置文件路径与性能配置模块路径路径前面#号注释去掉,生效配置文件,配置如图所示:

image.png

1.6.2、高性能配置

配置MPM

在apace安装目录/conf/extra目录编辑个名为httpd-mpm.conf的配置文件,执行脚本如下:

# vi /usr/local/apache2/conf/extra/httpd-mpm.conf

在默认情况下,apache的MPM模块配置文件并没有启用

image.png

此时,我们就需要根据当前Apache服务器所使用的MPM模块,来修改对应<IfModule>节点下的参数配置,配置情况如下:

<IfModule mpm_prefork_module>
    StartServers          30
    MinSpareServers       30
    MaxSpareServers      90
    ServerLimit          5500
    MaxClients          5000
    MaxRequestsPerChild   50000
</IfModule>

image.png

对应的配置参数作用如下:

startServers:启动Apache时创建的子进程数。

MinSpareServers:处于空闲状态的最小子进程数。

MaxSpareServers:处于空闲状态的最大子进程数。

MinSpareThreads:处于空闲状态的最小线程数。

MaxClients:允许同时连接的最大请求数量

MaxRequestsPerChild:每个子进程允许处理的请求总数

1.6.3、站点应用配置

# vi /usr/local/apache2/conf/extra/httpd-vhosts.conf

把两个example的配置注释掉,在文件末尾添加以下内容:

<VirtualHost *:80>
    DocumentRoot "/usr/local/apache2/htdocs"
    ServerName 192.168.4.162
    ErrorLog "logs/http-primary-master-error_log"
    CustomLog "logs/http-primary-master-access_log" common
</VirtualHost>

如图:

image.png

重启apache令配置生效:

# /usr/local/apache2/bin/apachectl restart

修改默认页

# vi /usr/local/apache2/htdocs/index.html

修改为以下内容:

<html><body><h1>This is http-primary-master!</h1></body></html>

浏览访问查看效果:

image.png

1.7、apache命令

重启apache:

# /usr/local/apache2/bin/apachectl restart

启动apache:

# /usr/local/apache2/bin/apachectl start

停止apache:

# /usr/local/apache2/bin/apachectl stop

1.8、安装keepalived

上传keepalived-2.0.6.tar.gz到/opt/tools目录下并进行解压

# cd /opt/tools/

# tar -zxvf keepalived-2.0.6.tar.gz

# cd keepalived-2.0.6

# ./configure --prefix=/usr/local/keepalived

image.png

如果出现以上错误,执行以下命令安装openssl

# yum -y install openssl-devel

安装完opendssl后,重新安装keepalived

# ./configure --prefix=/usr/local/keepalived

# make

# make install

1.9、将 keepalived 安装成 Linux 系统服务

因为没有使用 keepalived 的默认路径安装(默认是/usr/local),安装完成之后,需要做一些工作复制默认配置文件到默认路径

# mkdir /etc/keepalived

复制 keepalived 服务脚本到默认的地址

# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ 

# cp /opt/tools/keepalived-2.0.6/keepalived/etc/init.d/keepalived /etc/init.d/

# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

# ln -s /usr/local/sbin/keepalived /usr/sbin/

# ln -s /usr/local/keepalived/sbin/keepalived /sbin/ 

设置 keepalived 服务开机启动

# chkconfig keepalived on

1.10、修改 Keepalived 配置文件

MASTER 节点配置文件(192.168.4.162)

首先先备份keepalived配置文件

# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

创建新的配置文件

# vi /etc/keepalived/keepalived.conf

添加以下内容:

global_defs {
   router_id http-primary-master
}

vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 166
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }

  virtual_ipaddress {
    192.168.4.166
  }
}

virtual_server 192.168.4.166 80 {
  delay_loop 6
  lb_algo wrr
  lb_kind DR
  persistence_timeout 0
  protocol TCP
  real_server 192.168.4.162 80 {
    weight 1
    TCP_CHECK {
      connect_timeout 10
      delay_before_retry 3
      connect_port 80
    }
  }

  real_server 192.168.4.163 80 {
    weight 1
    TCP_CHECK {
      connect_timeout 10
      delay_before_retry 3
      connect_port 80
    }
  }
}

以下是配置文件的说明

global_defs {  
  router_id http-primary-master  # 设置lvs的id,在一个网络内应该是唯一的,标识本节点的字条串,通常为 hostname
}  

vrrp_instance VI_1 {  
  state MASTER   #指定Keepalived的角色,MASTER为主,BACKUP为备          
  interface eth0  #指定Keepalived的角色,MASTER为主,BACKUP为备
  virtual_router_id 166  #虚拟路由编号,主备要一致
  priority 100  #定义优先级,数字越大,优先级越高,主DR必须大于备用DR    
  advert_int 1  #检查间隔,默认为1s
  # 设置验证信息,两个节点必须一致
  authentication {  
    auth_type PASS  
    auth_pass 1111
  }  

  virtual_ipaddress {  
    192.168.4.166  #定义虚拟IP(VIP),可多设,每行一个
  }  
}  

# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.4.166 80 {  
  delay_loop 6 # 设置健康检查时间,单位是秒                    
  lb_algo wrr # 设置负载调度的算法为wlc                   
  lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式   
  nat_mask 255.255.255.0                
  persistence_timeout 0          
  protocol TCP                  
  real_server 192.168.4.162 80 {  # 指定real server1的IP地址
    weight 1   # 配置节点权值,数字越大权重越高              
    TCP_CHECK {  
      connect_timeout 10         
      nb_get_retry 3  
      delay_before_retry 3  
      connect_port 80  
    }  
  }  

  real_server 192.168.4.163 80 {  # 指定real server2的IP地址
    weight 1  # 配置节点权值,数字越大权重越高  
    TCP_CHECK {  
      connect_timeout 10  
      nb_get_retry 3  
      delay_before_retry 3  
      connect_port 80  
     }  
  }  
}

完成以上步骤,master节点的keepalived已经安装配置完成,可以开启keepalieved服务

1.11、编辑realserver脚本文件

# vi /etc/init.d/realserver

添加以下内容:

SNS_VIP=192.168.4.166
/etc/rc.d/init.d/functions
case "$1" in
start)
       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_VIP dev lo:0
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)

       ifconfig lo:0 down
       route del $SNS_VIP >/dev/null 2>&1
       echo "0" >/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
       echo "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

exit 0

保存脚本文件后更改该文件权限:

# chmod 755 /etc/init.d/realserver

开启realserver服务:

# service realserver start

设置开机自动启动realserver服务:

# vi /etc/rc.local

在末尾添加以下内容:

service realserver start

(注意:这个realserver步骤一定要做,否则keepalived无法实现负载均衡)

1.12、启动keepalived

# service keepalived start

image.png

查看是否成功创建VIP

# ip a

image.png

可以看到VIP已经创建成功

1.13、 Keepalived日志

默认日志存放在系统日志:/var/log/messages下,把日志单独存放

修改/etc/sysconfig/keepalived

# vi /etc/sysconfig/keepalived

把KEEPALIVED_OPTIONS="-D" 修改为:KEEPALIVED_OPTIONS="-D -d -S 0"

image.png

然后修改rsyslog.conf

# vi /etc/rsyslog.conf

文件末尾添加:

local0.* /var/log/keepalived.log

重启日志记录服务

# /etc/init.d/rsyslog restart

重启keepalived

# /etc/init.d/keepalived restart

查看日志

# tail -f /var/log/keepalived.log

好了,以上就是http master主节点安装apache和keepalived的过程了。

篇幅有点长,大家伙耐心点看!!!

http slave从节点,安装大致差不多,可能就是一些配置文件的不一样,那就留着下次分享了。

好了,今天就先到这里了!!!^_^

个人理解,可能也不够全面,班门弄斧了。

如果觉得有收获的,帮忙点赞、评论、收藏一下呗!!!

image.png

猜你喜欢

转载自juejin.im/post/7111698327111991333