centos6.4下DNS+squid+nginx+mysql建立高可用web服务器51CTO博客 - 亚美娱乐

centos6.4下DNS+squid+nginx+mysql建立高可用web服务器51CTO博客

2019-01-03 13:32:06 | 作者: 飞兰 | 标签: 效劳,署理,恳求 | 浏览: 1554

一.Squid是什么

Squid是一种用来缓冲Internet数据的软件。它是这样完成其功用的,承受来自人们需求下载的方针(object)的恳求并适当地处理这些恳求。也就是说,假如一个人想下载一web页面,他恳求Squid为他获得这个页面。Squid随之衔接到长途效劳器并向这个页面宣布恳求。然后,Squid显式地集合数据到客户端机器,而且一起仿制一份。当下一次有人需求同一页面时,Squid能够简略地从磁盘中读到它,那样数据迅即就会传输到客户机上。当时的Squid能够处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西。

squid各种署理的界说

正向署理

a.规范的署理缓冲效劳器

  一个规范的署理缓冲效劳被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主机上(即署理效劳器)。当被缓存的页面被第2次拜访的时分,浏览器将直接从本地署理效劳器那里获取恳求数据而不再向原web站点恳求数据。这样就节省了名贵的网络带宽,而且进步了拜访速度。可是,要想完成这种方法,必须在每一个内部主机的浏览器上清晰指明署理效劳器的IP地址和端口号。客户端上网时,每次都把恳求送给署理效劳器处理,署理效劳器依据恳求确认是否衔接到长途web效劳器获取数据。假如在本地缓冲区有方针文件,则直接将文件传给用户即可。假如没有的话则先取回文件,先在本地保存一份缓冲,然后将文件发给客户端浏览器。

b.通明署理缓冲效劳器(常用在局域网网关上装置,合作防火墙reject运用)

  通明署理缓冲效劳和规范署理效劳器的功用彻底相同。可是,署理操刁难客户端的浏览器是通明的(即不需指明署理效劳器的IP和端口)。通明署理效劳器阻断网络通讯,而且过滤出拜访外部的HTTP(80端口)流量。假如客户端的恳求在本地有缓冲则将缓冲的数据直接发给用户,假如在本地没有缓冲则向长途web效劳器宣布恳求,其他操作和规范的署理效劳器彻底相同。关于Linux操作体系来说,通明署理运用Iptables或许Ipchains完成。因为不需求对浏览器作任何设置,所以,通明署理关于ISP(Internet效劳器供给商)特别有用。

反向署理

a.反向署理缓冲效劳器

  反向署理是和前两种署理彻底不同的一种署理效劳。运用它能够下降原始WEB效劳器的负载。反向署理效劳器承当了对原始WEB效劳器的静态页面的恳求,防止原始效劳器过载。它坐落本地WEB效劳器和Internet之间,处理一切对WEB效劳器的恳求,组织了WEB效劳器和Internet的直接通讯。假如互联网用户恳求的页面在署理效劳器上有缓冲的话,署理效劳器直接将缓冲内容发送给用户。假如没有缓冲则先向WEB效劳器宣布恳求,取回数据,本地缓存后再发送给用户。这种方法经过下降了向WEB效劳器的恳求数然后下降了WEB效劳器的负载。

二.体系架构

1.原理阐明

经过DNS的轮询技能,将来自客户端的恳求分发给其间一台 Squid 反向署理效劳器处理,假如这台 Squid 缓存了用户的恳求资源,则将恳求的资源直接回来给用户,不然 Squid 将此次恳求依据装备的规矩发送给街坊 Squid 和后台的 WEB 效劳器处理,这样既减轻后台 WEB 效劳器的负载,又进步整个网站的功用和安全性。



2.主机分配:

DNS效劳器:  启用两张网卡,衔接两个网段

eth0:10.10.54.150

eth1:172.16.54.254(作为172.16.54.0/24网段的网关)

两台squid反向署理效劳器

squid1:172.16.54.150

squid2:172.16.54.151

两台web效劳器(装置Discuz_X3.0_SC_UTF8.zip)

web1:172.16.54.200

web2:172.16.54.201

三台mysql效劳器(一主两从)

master:172.16.54.203

slave1:172.16.54.204

slave2:172.16.54.205

三:首要进行内存优化

修正sysctl.conf文件,增加以下内容

shell> vi /etc/sysctl.conf
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 65536 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 786432 1048576 1572864
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 1024 65000
#装备选项解说:
net.ipv4.tcp_rmem = 4096 87380 4194304:TCP读buffer,可参阅的优化值: 32768 436600  873200
net.ipv4.tcp_wmem = 4096 65536 4194304:TCP写buffer,可参阅的优化值: 8192 436600  873200
net.core.wmem_default:标明发送套接字缓冲区巨细的缺省值(以字节为单位)
net.core.rmem_default:标明接纳套接字缓冲区巨细的缺省值(以字节为单位)
net.core.rmem_max :标明接纳套接字缓冲区巨细的最大值(以字节为单位)
net.core.wmem_max:标明发送套接字缓冲区巨细的最大值(以字节为单位)
net.core.netdev_max_backlog =  262144:每个网络接口接纳数据包的速率比内核处理这些包的速率快时,答应送到行列的数据包的最大数目。
net.core.somaxconn =  262144:web运用中listen函数的backlog默许会给咱们内核参数的net.core.somaxconn约束到128,而nginx界说的NGX_LISTEN_BACKLOG默许为511,所以有必要调整这个值。
net.ipv4.tcp_max_orphans = 3276800:体系中最多有多少个TCP套接字不被相关到任何一个用户文件句柄上。
net.ipv4.tcp_max_syn_backlog =  8192:标明SYN行列的长度,默许为1024,加大行列长度为8192,能够包容更多等候衔接的网络衔接数。
net.ipv4.tcp_max_tw_buckets =  5000:标明体系一起坚持TIME_WAIT套接字的最大数量,假如超越这个数字,TIME_WAIT套接字将马上被铲除并打印正告信息。削减它的最大数量,防止Squid效劳器被很多的TIME_WAIT套接字拖死。
net.ipv4.tcp_timestamps =  0:时刻戳能够防止序列号的卷绕。一个1Gbps的链路肯定会遇到曾经用过的序列号,时刻戳能够让内核承受这种“反常”的数据包,这儿需求将其关掉。
net.ipv4.tcp_tw_recycle = 1:标明敞开TCP衔接中TIME-WAIT sockets的快速收回。
net.ipv4.tcp_tw_reuse = 1:标明敞开重用,答应将TIME-WAIT sockets从头用于新的TCP衔接。
net.ipv4.tcp_mem = 786432 1048576  1572864:相同有3个值,net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力;net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段;net.ipv4.tcp_mem[2]:高于此值,TCP回绝分配socket。可依据物理内存巨细进行调整,假如内存足够大的话,可适当往上调。主张94500000  915000000 927000000。
net.ipv4.tcp_fin_timeout =  30:标明假如套接字由本端要求封闭,这个参数决议了它坚持在FIN-WAIT-2状况的时刻。
net.ipv4.tcp_keepalive_time =  1200:标明当keepalive重用的时分,TCP发送keepalive音讯的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024  65000:标明用于向外衔接的端口规模。缺省情况下很小:32768到61000,改为1024到65000。
#使装备当即收效:
/sbin/sysctl -p

四.装备DNS效劳器,完成轮询

shell> yum install bindbind-utils

shell> vim /etc/named.conf

#装置DNS效劳器,并装备named.conf
shell> vim /etc/named.conf
options {
        listen-on port 53 { any; };
        allow-query     { any; };
        recursion yes;
#rrset-order标明对bbs.centos.com域中的IN记载运用轮询
        rrset-order {
                 class IN typeA name "bbs.centos.com"order cyclic;
       };
};
zone "."IN {
        typehint;
        file"named.ca";
};
zone "centos.com"IN {
        typemaster;
        file"named.centos.com";
};
zone "54.16.172.in-addr.arpa"IN {
        typemaster;
        file"named.172.16.54";
};
#装备正解域
shell> vim /var/named/named.centos.com
$TTL 600
@                       IN SOA    centos.com. ftp. (
                                        2011080404
                                        3H
                                        15M
                                        1W
                                        1D)
@                    IN NS     ceontos.com.
centos.com.             IN A      10.10.54.150
@                    IN MX 10  mail.ceontos.com.
mail.centos.com.        IN A      10.10.54.151
bbs.centos.com.         IN A      172.16.54.150
bbs.centos.com.         IN A      172.16.54.151
#重启
shell> /etc/init.d/named restart
#测验DNS轮询是否收效,经过两次ping
shell> ping bbs.centos.com
PING bbs.centos.com (172.16.54.151) 56(84) bytes of data.
64 bytes from 172.16.54.151: icmp_seq=1 ttl=64 time=0.441 ms
#再次ping
shell> ping bbs.centos.com
PING bbs.centos.com (172.16.54.150) 56(84) bytes of data.
64 bytes from 172.16.54.150: icmp_seq=1 ttl=64 time=0.019 ms
#上面能够看到两次ping的IP并不相同
留意:测验机的DNS效劳器需求装备为10.10.54.150这台



五.装备两台squid效劳器

1.编译装置squid

shell> yum installgcc wget perl gcc-c++ make

shell> cd/tmp

shell> wget http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.19.tar.gz

shell> tarxzf squid-3.1.19.tar.gz

shell> cd squid-3.1.19

shell> ./configure--prefix=/usr/local/squid--enable-gnuregex --disable-carp --enable-async-io=240 --with-pthreads --enable-storeio=ufs,aufs,diskd --disable-wccp --enable-icmp --enable-kill-parent-hack --enable-cachemgr-hostname=localhost --enable-default-err-language=Simplify_Chinese --with-maxfd=65535 --enable-poll --enable-linux-netfilter --enable-large-cache-files --disable-ident-lookups --enable-default-hostsfile=/etc/hosts--with-dl --with-large-files --enable-delay-pools --enable-snmp --disable-internal-dns --enable-underscore -enable-arp-acl

shell> make&& makeinstall

2.创立squid缓存目录,和日志目录

shell> groupadd squid

shell> useradd-g squid -s /sbin/nologinsquid

shell> mkdir/squid/data -p

shell> mkdir/squid/log

shell> chown-R squid.squid /squid

3.修正squid装备文件,装备其为反向署理形式,负载两台web效劳器

shell> vim /usr/local/squid/etc/squid.conf
#用户和用户组
cache_effective_user squid
cache_effective_group squid
#主机名
visible_hostname squid1.lij.com
#装备squid为反向署理形式
http_port 172.16.54.150:80 accel vhost vport
#装备squid2为其街坊,当 squid1 在其缓存中没有找到恳求的资源时,经过 ICP查询去其街坊中获得缓存
icp_port 3130
cache_peer 172.16.54.151 sibling 80 3130
#装备squid1的两个父节点(web server),originserver参数指明是源效劳器, round-robin参数指明squid经过轮询方法将恳求分发到其间一台父节点; squid 一起会对这些父节点的健康状况进行检查,假如父节点 down 了,那么 squid 会从剩下的 origin 效劳器中抓取数据
cache_peer 172.16.54.200 parent 80 0 originserver round-robin
cache_peer 172.16.54.201 parent 80 0 originserver round-robin
#下面是一些拜访操控、日志和缓存目录的设置
cache_mem 128 MB
maximum_object_size_in_memory 4096 KB
maximum_object_size 10240 KB
cache_dir aufs /squid/data 4000 16 512
coredump_dir /squid/data
#日志途径
cache_access_log /squid/logs/access.log
cache_log /squid/logs/cache.log
cache_store_log /squid/logs/store.log
acl localnet src 10.10.54.0/24
http_access allow all
icp_access allow localnet
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

4.squid2上装备和squid1上装备彻底相同,只需求修正相关IP,例如

visible_hostname squid2.lij.com

http_port 172.16.54.151:80 accel vhost vport

icp_port 3130

cache_peer 172.16.54.150 sibling 80 3130

留意:两台squid上都要增加hosts记载

shell> vim /etc/hosts

172.16.54.200 squid1.lij.com

172.16.54.201 squid2.lij.com

六.装置三台mysql效劳器,并装备为MHA高可用架构

1.MHA介绍:MHA是由日本Mysql专家用Perl写的一套Mysql毛病切换计划以确保数据库的高可用性,它的功用是能在0-30s之内完成主Mysql毛病搬运(failover),即一旦主效劳器宕机,备份机即开端充任master供给效劳,这就确保了咱们的web效劳器能够持续地运作

2..MHA环境建立进程参阅我的另一篇文章:这篇文章上运用的是四台效劳器,一台manager,一台master,两台slave中有一台作为备用master),三台主机也能够完成MHA环境,只需求把其间一台slave主机兼做manager即可

3.最终建立的MHA结构

主master:172.16.54.203

slave1:172.16.54.204(备用master,主master当掉之后,slave1充任master持续供给效劳)

slave2:172.16.54.205(两个人物,一是作为slave2同步master数据,二是作为manager节点监控主master是否正常)

七.装备web效劳器,并装置论坛Discuz

1.web效劳器咱们挑选nginx,首要需求装置LNMP环境,这个略过,下面只给出nginx装备参数,关于nginx功用优化方面的一些参数没有给出

2.shell> vim /usr/local/nginx/conf/nginx.conf

#用户,这个需求跟web根目录的用户相同
user  apache apache;
worker_processes  2;
error_log  logs/error.log;
pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
        include       mime.types;
        default_type  application/octet-stream;
        log_format  main  $remote_addr - $remote_user [$time_local] "$request" 
                      $status $body_bytes_sent "$http_referer" 
                      "$http_user_agent" "$http_x_forwarded_for";
        access_log  logs/access.log;
        sendfile        off;
        keepalive_timeout  65;
#       gzip  on;
  server {
            listen       80;
            server_name  bbs.centos.com;
#指定web根目录
            root /var/www/bbs/upload;
            charset utf-8;
            index index.php index.html;
            access_log  logs/bbs.access.log;
#装备php模块支撑
       location ~ \.php$ {
                fastcgi_pass   unix:/var/run/php-fpm.sock;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
                include        fastcgi_params;
                include fastcgi.conf;
             }
#nginx状况页,首要用于监控
        location /server-status {
                stub_status on;
                allow all;
                access_log off;
             }
        }

3.咱们装备的web效劳器根目录为/var/www/bbs/upload,首要切换到其上一层目录/var/www/bbs

shell> cd /var/www/bbs

shell> unzip Discuz_X3.0_SC_UTF8.zip

shell> chown apache.apache -R /var/www/bbs

4.浏览器拜访http://172.16.54.200 进入Discuz装置程序,首要是过错检查,依据过错提示更改过错,一般都是相关目录权限的问题

5.接下来是要拟定Discuz寄存数据库的方位,以及数据库读取所用账号,因为之前咱们现已建立起了MHA环境,所以这儿数据库咱们指定为后边的master主机(172.16.54.203),一旦master主机当掉,slave1(172.16.54.204)能够持续供给效劳

八.测验

1.在测验机上修正DNS效劳器地址为10.10.54.150,然后浏览器拜访bbs.centos.com测验是否能够拜访,然后进行下面过程

2.测验web效劳器:理论上squid效劳器会监督后端的web效劳器,假如某一台效劳器呈现毛病之后,squid就会把用户恳求署理到别的一台效劳器,测验中能够当掉一台web效劳器

3.测验mysql效劳器:mysql的MHA架构能够完成毛病搬运,测验中能够当掉master主机,以检查是否成功切换到slave1上,以及论坛是否能够拜访


参阅文章:

/>

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表亚美娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章