haproxy、nginx、memcache

(第十九周作业)
1、运用haproxy实现nginx服务负载均衡
需要三台虚拟机做实验:
A机:安装haproxy,实现后端BC机上的nginx负载,IP地址为:192.168.184.100
B机、C机:安装Nginx服务器,监听80端口。(Nginx简单安装即可,这里不再描述)   IP地址为192.168.184.101 、192.168.184.102
1)A机安装haproxy
先安装依赖软件包
# yum -y install make gcc gcc-c++ openssl-devel
下载haproxy,假如软件包为haproxy-1.7.9.tar.gz,并上传到A机
# tar -zxf haproxy-1.7.9.tar.gz
# cd /root/haproxy-1.7.9
查看安装帮助文件,得知要先查看一下系统的内核版本
# uname -r  
根据上面的查看结果,到帮助文件中找到以下安装命令中TARGET参数合适的值,PREFIX是安装目录
# make     TARGET=linux2628    PREFIX=/usr/local/haproxy  
# make install
2)A机编写配置文件
# mkdir /usr/local/haproxy/etc
# vim /usr/local/haproxy/etc/haproxy.cfg    

global
    log 127.0.0.1  local0
    maxconn 4096
    chroot    /usr/local/haproxy
    uid 99#使用nobody用户的uid
    gid 99 #使用nobody用户的  用户组
    daemon #以守护进程形式运行haproxy
    nbproc 1 #启动1个haproxy实例。设置成和CPU核心数一样
    pidfile  /usr/local/haproxy/run/haproxy.pid    #进程ID
defaults
    log    global
    log    127.0.0.1      local3        #日志文件的输出定向。产生的日志级别为local3. 系统中local1-7
    mode    http           #工作模式默认采用http模式,Nginx服务要采用这种方式
    option  httplog       #日志类别,记载http日志
    option  httpclose      #每次请求完毕后主动关闭http通道,
    option  dontlognull    #不记录空连接的日志
    option  forwardfor     #使后端服务器可获得客户端真实ip
    option  redispatch     #当serverid对应的服务器挂掉后,强制定向到其他健康服务器
    retries 2              #2次连接失败就认为服务器不可用
    maxconn 2000           #最大连接数
    balance roundrobin      #负载均衡算法轮询方式
    stats  uri    /haproxy-stats          #haproxy 监控页面的访问地址
    timeout connect      5000             #连接超时时间。 单位毫秒
    timeout client       50000            #客户端连接超时时间
    timeout server      50000             #服务器端连接超时时间
    option  httpchk GET /hb.html     #健康检查页面
frontend nginx #前端名称
    bind 0.0.0.0:80 #监听80端口,请求会被转发到后端
    default_backend nginx_back #后端名称
backend nginx_back #后端名称,给上文引用
    server s1 192.168.184.101:80 weight 3 check #后端的主机 IP 通过weight设置权重
    server s2 192.168.184.102:80 weight 3 check 

3)启动haproxy
#  /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg
给B机和C机的Nginx添加一个hb.hmtl页面,内容为文本行“OK!"
给B机和C机添加一个index.html页面,内容不相同,以示区别
然后启动B机和C机的nginx服务
访问:http://192.168.184.100查看对应的index.html页面,多次刷新可以查看页面显示内容如何变化。

2、搭建haproxy实现mysql负载均衡

这里的haproxy安装过程与前一题差不多,这里只是说明一个配置文件的内容
# vim /usr/local/haproxy/etc/haproxy.cfg    

global
       daemon
        nbproc 1
        pidfile  /usr/local/haproxy/run/haproxy.pid
defaults
        mode tcp                #对于mysql的负载均衡,这里要采用tcp(4层)。
        retries 3              #3次连接失败就认为是服务器不可用
        option redispatch      #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
        option abortonclose    #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
        maxconn 4096            #默认的最大连接数
        timeout connect 5000    #连接超时 ms
        timeout client 30000    #客户端超时
        timeout server 30000    #服务器超时
        timeout check 2000      #=心跳检测超时
        log 127.0.0.1 local0 err #日志输出级别
listen configMysql
        bind 127.0.0.1:3306    #监听3306端口
        mode tcp
        maxconn 4096
        server s1 192.168.184.110:3306   #后端的两台数据库服务器
        server s2 192.168.184.111:3306

3、搭建tomcat服务器,并通过nginx反向代理访问
需两台虚拟机进行实验:
A机:安装tomcat+java  ,IP地址:192.168.184.137
B机:安装nginx设置反向代理   IP地址:192.168.184.138
1)A机安装java
上传jdk-8u151-linux-x64.rpm到A机的/root目录下,安装包是多官网下载的。
# rpm -ivh  jdk-8u151-linux-x64.rpm
设置PATH环境变量
#  vi  ~/.bash_profile
最后增加两行:

export  JAVA_HOME=/usr/java/jdk1.8.0_151
export PATH=$JAVA_HOME/bin:$PATH

保存后再执行一下
# source  ~/.bash_profile
验证java 版本
#java  -version
2)A机安装tomcat
上传apache-tomcat-8.0.47.0.tar到/root
# cd /root
#  tar -xf apache-tomcat-8.0.47.0.tar
#  mv apache-tomcat-8.0.47.0 tomcat
3)启动tomcat并验证
   启动tomcat服务
# /root/tomcat/bin/startup.sh
查看日志
# tail -f /root/tomcat/logs/catlina.out
等出现Started UP表示启动完成
关闭防火墙
# service firewalld stop
从宿主机打开浏览器来访问http://192.168.184.137:8080,可以看到tomcat的首页
4)B机安装nginx
# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# yum install -y nginx
5)配置nginx
vi  /etc/nginx/nginx.conf

#后端tomcat服务器
upstream apachetomcat  {
    #这里可以配置多台服务器和端口号
    server 192.168.184.137:8080;
}

server {
    listen 80;
    server_name  192.168.184.138;
    #定义日志位置
    access_log  logs/tomcat.access.log  main;
    error_log  logs/tomcat.error.log;
     #配置站点根目录会根据完整的URI请求来映射
    root  html;
    #默认页面
    index  index.html index.htm index.jsp;
    #url映射
    location / {
        proxy_pass  http://apachetomcat;    #proxy_pass配置为:http:// + upstream名称       
        proxy_redirect    off;   #禁止所有的proxy_redirect指令 
        proxy_set_header  Host            $host;    #允许重新定义或添加字段传递给代理服务器的请求头。
        #将$remote_addr(客户端IP)的值放进变量请求头  X-Real-IP中 
        proxy_set_header  X-Real-IP        $remote_addr;  
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;   # 显示出客户端原始ip
        #当其中一台返回错误码404,500...等错误时,可以分配到下一台服务器程序继续处理,提高平台访问成功率,多可运用于前台程序负载,       
       proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0;    #一次访问能写入的临时文件的大小
        proxy_connect_timeout      90;   #后端服务器连接的超时时间_发起握手等候响应超时时间 
        proxy_send_timeout        90; #后端服务器数据回传时间 
        proxy_read_timeout        90;  #连接成功后_等候后端服务器响应时间 
        proxy_buffer_size          4k;    #当中的设置单个缓冲区的大小。 
        proxy_buffers              4 32k;    #由缓冲区数量和缓冲区大小组成的 
        #nginx会在没有完全读完后端响应的时候就开始向客户端传送数据,所以它会划出一部分缓冲区来专门向客户端传送数据
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;   #一次访问能写入的临时文件的大小 
   }
}

6)重启nginx服务
#systemctl start nginx.service
7)访问测试:http://192.168.184.138

4、搭建Tomcat,并基于memcached实现会话共享

需要两台虚拟机:
A机:192.168.184.70 ,安装Nginx(80端口做反向代理),tomcat(8080端口)  主机名:nodeA
B机:192.168.184.71 安装tomcat(8080端口),memcache(11211端口)   主机名: nodeB
1)A机安装Nginx
安装依赖包:yum  -y  install  gcc  gcc-c++   libgcc
下载Nginx和pcre安装包  nginx-1.14.2.tar.gz 和 pcre-8.37.tar.gz
创建用户和用户组
groupadd  web
useradd  -s /sbin/nologin web
安装pcre
tar -zxvf pcre-8.37.tar.gz
cd pcre-8.37
./configure
make  &&  make install
安装nginx
tar -zxvf nginx-1.14.2.tar.gz
cd nginx-1.14.2
./configure --prefix=/usr/local/nginx --user=web --group=web --conf-path=/etc/nginx/nginx.conf --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_flv_module --with-pcre=/usr/local/src/pcre-8.37
make  &&  make install
启动nginx   
/usr/local/nginx/sbin/nginx       
2)A机Nginx配置反向代理
vi /etc/nginx/nginx.conf

user  web web  #运行用户
worker_processes  1;  #启动进程,通常设置成和cpu的数量相等
#全局错误日志及PID文件
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
events {
    #单个后台worker process进程的最大并发链接数
    worker_connections  1024;
}
http {
    include      mime.types;  #设定mime类型,类型由mime.type文件定义
    default_type  application/octet-stream;
    sendfile        on;  #普通应用设置为on
    keepalive_timeout  65;  #连接超时时间
    upstream webtomcat{  #设定负载均衡的服务器列表
         server  192.168.184.70:8080;     
         server  192.168.184.71:8080;
    }
    server {
        listen      80;  #侦听80端口
        server_name  192.168.184.70;
        location  / {                          #代理配置
               proxy_pass  http://webtomcat; #反向代理到webtomcat定义的服务器列表
               #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
               proxy_set_header  Host            $host;
               proxy_set_header  X-Real-IP        $remote_addr;
               proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
       #定义错误提示页面
        error_page  500 502 503 504  /50x.html;
            location = /50x.html {
            root  html;
        }
    }
}

重新加载nginx配置文件
/usr/local/nginx/sbin/nginx  -s reload
3)A机和B机都安装jdk和tomcat
(安装步骤参考第3题的第(1)(2)(3)步操作)
4)B机安装memcache
下载相关的软件包: libevent-1.4.13-stable.tar.gz   memcached-1.4.4.tar.gz
安装libevent
tar zxf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
./configure --prefix=/usr
make && make install
安装Memcached
tar zxf memcached-1.4.4.tar.gz
cd memcached-1.4.4
./configure --prefix=/usr/local/memcached --with-libevent=/usr
make && make install
启动Memcached
/usr/local/memcached/bin/memcached -d -m 64 -u root -l 192.168.184.71 -p 11211 -c 256 -P /tmp/memcached.pid
-d daemon后台进程
-m 指定最大使用内存大小
-u 绑定指定用户用于运行进程
-c 最大同时连接数
5)A机和B机在tomcat上进行连接 memcache  session 会话共享
vi /root/tomcat/conf/context.xml

……

            memcachedNodes="nodeB:192.168.184.71:11211"
        requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$"
        sticky="false"
        storageKeyPrefix="context"
        lockingMode="uriPattern:/path1|/path2"
        sessionBackupAsync="false"
        sessionBackupTimeout="100"                                                                                   
ranscoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>

……

requestUriIgnorePattern 设置忽略会话同步的请求的 URI 地址的正则表达式
sticky  粘性会话需要保证每个用户的请求都路由到同一台 Tomcat 服务器中
lockingMode  用于非粘性会话
sessionBackupAsync  设置 session 会话中的数据是否异步同步到 memcached 中,默认为 true。
sessionBackupTimeout 备份 session 会话数据所需时间如果大于该值,将导致 session 会话数据同步失败
transcoderFactoryClass  配置序列化和反序列化 session 会话中的数据到 memcached 中的编码转换器的工厂类名
6)验证:
编写测试页面(A机和B机都要写,B机要把下文中的NodeA改为NodeB):

<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false"%>
SessionID:<%=session.getId()%>
SessionIP:<%=request.getServerName()%>
SessionPort:<%=request.getServerPort()%>
<%
      out.println("This is Tomcat Server NodeA");
%>

你可能感兴趣的:(haproxy、nginx、memcache)