“omo”通过精心收集,向本站投稿了9篇多台主机实现DNS服务器负载均衡详细教程,以下是小编精心整理后的多台主机实现DNS服务器负载均衡详细教程,仅供参考,希望能够帮助到大家。
- 目录
篇1:多台主机实现DNS服务器负载均衡详细教程
访问企业网服务器的用户急剧增加,一台服务器难以满足用户的访问需要,那么如何才能保证用户的正常访问呢?解决方法有很多,如使用Windows 或Windows Server 提供网络负载均衡服务,但该服务的设置非常复杂,而通过DNS服务器实现网络负载均衡则是一种比较简单的方法。
笔者以企业网中的Web服务器为例来介绍一下如何使用DNS服务器实现网络负载均衡。为了提高域名为“www.huweishen.com”的网站的访问量,在企业网中部署三台内容相同的Web服务器,它们提供相同的服务,但每台服务器的IP地址都不一样。下面对企业网中的DNS服务器进行设置来实现三台Web服务器共同承担客户对网站的访问。
一、启用循环
以WindowsServer2003系统为例,在DNS服务器中,依次点击“开始→程序→管理工具→DNS”选项,进入DNS管理器窗口,鼠标右键点击DNS服务器图标,在弹出的快捷菜单中选择“属性”选项,接着在属性对话框中切换到“高级”选项卡(图1),确保“服务器选项”列表框中的“启用循环”选项处于选中状态。
二、添加主机记录
在“huweishen.com”区域中创建主机记录。在DNS管理器窗口中,右键点击“huweishen.com”项,在弹出的菜单中选择“新建主机”,进入新建主机对话框,在“名称”栏中输入“WWW”,IP地址栏中输入其中一台Web服务器的IP地址,如192.168.0.5,最后点击“添加主机”按钮,
因为企业网中有三台Web服务器,并且它们的IP地址都不同,因此另外还要新建两条主机名为“WWW”的主机记录,方法和上面一样,仅仅是它们的IP地址内容不同。这样就能将网站域名分别解析到不同的Web服务器上。
DNS服务器huweishen.com区域三条主机记录内容如下表所示:
完成了以上三条主机记录的创建后(图2),就实现了Web服务器的网络负载均衡。这样当客户机访问www.huweishen.com网站时,就会向DNS服务器发出域名解析请求。DNS服务器收到第一个请求时,会把第一个IP地址192.168.0.5返回给客户机,当第二个客户机要求域名解析时,DNS服务器就把第二个IP地址192.168.1.5返回给客户机。通过这样的循环分配,就可以把客户机的访问分担到不同的Web服务器上,从而实现网络负载均衡功能。
三、负载均衡功能的优化
企业网通常由很多子网构成,为了降低网络中的数据流量,客户机最好能访问处于同一子网内的Web服务器。虽然实现了网络负载均衡功能,但并不能保证客户访问的是本子网的Web服务器。其实这个问题也很好解决,只要启用DNS服务器的“启用网络掩码排序”功能即可。
在DNS管理器窗口中,右键点击DNS服务器,在弹出的菜单中选择“属性”,然后在属性对话框中切换到“高级”选项卡,勾选“服务器选项”列表框中的“启用网络掩码排序”选项即可。这样客户机每次都能访问到本子网内的Web服务器了。
完成以上设置后,就使DNS服务器实现了网络负载均衡功能,把客户的访问分担到每个Web服务器上,并且还减少了跨子网的网络通信流量,大大降低了企业网的通信负担。
篇2:Linux下基于DNS的多机均衡负载的实现服务器教程
前二天为一个客户添加了一台服务器,共同承担一个论坛的运作。但是。要实现负载均衡。的确是件难事。
之前有试过几个方法,
一、DNS轮值。。优点:简单实现。缺点:无法检测各个服务器的负荷。难控制访客的访问地址(一般DNS服务器都有缓存,所以。效果不明显)
二、前台程序。。使用了一个类似Zeus Load Balancer的服务程序。在前台接受访问请求。再分流到各个实际的服务器。
但以上二个方法都不太适用我的情况。。
第一种。无法正确分配访客流量。。。常发生一台服务器的负荷很大。而另一台就很低。。。
第二种。会占用更多的流量。资源也占用较大。
最好。我还是采用了一个DNS均衡负载的方法---lbname。
它的主要效果介绍:
一、基于perl的dns服务端,
应用简单。
二、自动检测各个服务器的负荷。然后再按结果优先分配DNS解析。
三、DNS解析实时生效。不会被DNS服务器缓存。
四、安装方法简单。。。
lbname网页介绍
www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html
www.stanford.edu/~riepel/lbnamed/
。
。
下载:
www.stanford.edu/~riepel/lbnamed/lbnamed-1.2.1.tar.gz
www.stanford.edu/~schemers/dist/lb.tar
.
.
下载包说明:
篇3:Linux下基于DNS的多机均衡负载的实现DNS服务器
前二天为一个客户添加了一台服务器,共同承担一个论坛的运作。但是。要实现负载均衡。的确是件难事。
之前有试过几个方法,
一、DNS轮值。。优点:简单实现。缺点:无法检测各个服务器的负荷。难控制访客的访问地址(一般DNS服务器都有缓存,所以。效果不明显)
二、前台程序。。使用了一个类似Zeus Load Balancer的服务程序。在前台接受访问请求。再分流到各个实际的服务器。
但以上二个方法都不太适用我的情况。。
第一种。无法正确分配访客流量。。。常发生一台服务器的负荷很大。而另一台就很低。。。
第二种。会占用更多的流量。资源也占用较大。
最好。我还是采用了一个DNS均衡负载的方法---lbname。
它的主要效果介绍:
一、基于perl的dns服务端。应用简单。
二、自动检测各个服务器的负荷。然后再按结果优先分配DNS解析。
三、DNS解析实时生效。不会被DNS服务器缓存。
四、安装方法简单。。。
lbname网页介绍
www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html
www.stanford.edu/~riepel/lbnamed/
。
。
下载:
www.stanford.edu/~riepel/lbnamed/lbnamed-1.2.1.tar.gz
www.stanford.edu/~schemers/dist/lb.tar
.
.
下载包说明:
内存数个目录
1)lbcd的源代码。。。。lbcd是lbnamed所用到的服务器端检测服务器负荷程序。。每个需要均衡负荷的服务器都需要安装、运行它的。。。
建议下载使用最新的lbcd编译包。www.stanford.edu/~riepel/lbnamed/lbcd-3.1.0.tar.gz 之前的常有编译错误的。(这个也有的。嘻。)
编译这个包时。常会出错的。如何成功安装。就看你的本事了。(编辑util.c第123行。在前面加上//)
编译lbcd成功后。将它复制到/usr/sbin。那你就可以运行它了。。不用加什么参数了。(运行后要停止它就是lbcd -s)
2)lbnamed的服务器程序perl..分有二个版本。一个是perl4.另一个是perl5.我是使用perl5的。所以用它来说明。
进入perl5目录。。。。。先要配置好lbnamed和poller程序。
说明一下:
lbnamed程序是主程序。提供dns动态解析。严格来说。它已是一个dns服务器端程序了。
poller是为lbnamed提供各个均衡服务器的负荷情况。(配合我们之前安装的lbcd程序使用)
但二个程序可能都需要更改,请看程序第一行的perl程序地址。。改为你的perl地址。
然后就需要更改程序的配置文件了。
1,lbnamed.conf 要更改的地方有几个
一、$hostmaster = “schemers.leland.stanford.edu”; 将schemers.leland.stanford.edu改为你服务器的域名。。比如host.abc.com 这个无太大关系
二、将所有stanford改为你域名的中段(比如bendy.com,就改为bendy),将所有edu改为域名的后缀(比如bendy.com,就改为com)。。这个很重要。。我建议不要更改best。当然你也可以改
2,sweet.config 这个文件可以是用其它文件名的,具体在lbnamed.conf有设置。我建议大家先清空这文件。再重新建立新的。
这个文件的配置方法是
负荷服务器host 负重 组
比如。我自己的情况。
关 键 字:DNS 服务器
篇4:轻松实现Nginx负载均衡WEB服务器
注意:
1、本文根据实际的生产环境整理,安装部分可以直接使用,核心部分还是要根据公司需求配置
2、如果读者在阅读本文章出现问题,欢迎读者留言反馈
3、联系方式:
QQ:595627025
Mail: linuxsan@163.com
1. 环境
1.1 系统环境
[root@nginx-cache-1-1 nginx]# cat /etc/redhat-release
CentOS release 5.8 (Final)
[root@nginx-cache-1-1 ~]# uname -r
2.6.18-308.el5
[root@nginx-cache-1-1 ~]# uname -m
x86_64
[root@nginx-cache-1-1 ~]# uname -n
nginx-cache-1-1
1.2 软件需求
软件:
nginx-1.2.1.tar.gz
pcre-8.11.tar.gz
地址:
nginx.org/en/download.html
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
2. 安装Nginx
2.1 安装pcre
安装命令:
cd /home/start/tools
tar zxf pcre-8.11.tar.gz
cd pcre-8.11
./configure
make && make install
cd ../
安装过程:
[root@nginx-cache-1-1 tools]# tar zxf pcre-8.11.tar.gz
[root@nginx-cache-1-1 tools]# cd pcre-8.11
[root@nginx-cache-1-1 pcre-8.11]# ./configure
[root@nginx-cache-1-1 pcre-8.11]# make && make install
2.2 安装Nginx
1)安装命令:
useradd -M -s /sbin/nologin www
tar zxf nginx-1.2.1.tar.gz
cd nginx-1.2.1
./configure
--user=www
--group=www
--prefix=/application/nginx-1.2.1
--with-pcre
--with-http_stub_status_module
--with-http_ssl_module
make && make install
cd ..
ln -s /application/nginx-1.2.1 /application/nginx
echo '/usr/local/lib' >>/etc/ld.so.conf
不执行这个会报错:nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
tail -1 /etc/ld.so.conf
ldconfig
###以下命令可以不操作###
echo 'export PATH=$PATH:/application/nginx/sbin' >>/etc/profile
source /etc/profile
echo ‘start for nginx by start -01-26’ >>/etc/rc.local
echo ‘/application/nginx/sbin/nginx’ >>/etc/rc.local
tail -2 /etc/rc.local
2)安装过程:
[root@nginx-cache-1-1 tools] useradd -M -s /sbin/nologin www <==添加Nginx系统运行帐户
[root@nginx-cache-1-1 tools] tar zxf nginx-1.2.1.tar.gz <==解压Nginx
[root@nginx-cache-1-1 tools] cd nginx-1.2.1
[root@nginx-cache-1-1 nginx-1.2.1] ./configure <==编译安装
--user=www
--group=www
--prefix=/application/nginx-1.2.1
--with-pcre
--with-http_stub_status_module
--with-http_ssl_module
[root@nginx-cache-1-1 nginx-1.2.1] make && make install
[root@nginx-cache-1-1 nginx-1.2.1] ln -s /application/nginx-1.2.1 /application/nginx <==创建软链接方便升级
[root@nginx-cache-1-1 nginx-1.2.1] echo '/usr/local/lib' >>/etc/ld.so.conf
[root@nginx-cache-1-1 nginx-1.2.1] tail -1 /etc/ld.so.conf <==检查是否添加
/usr/local/lib
[root@nginx-cache-1-1 nginx-1.2.1] ldconfig
[root@nginx-cache-1-1 nginx-1.2.1] cd ..
[root@nginx-cache-1-1 nginx-1.2.1] echo ‘export PATH=$PATH:/application/nginx/sbin’ >>/etc/profile <==将Nginx命令加入系统全局变量
[root@nginx-cache-1-1 nginx-1.2.1] source /etc/profile <==使变量生效
[root@nginx-cache-1-1 nginx-1.2.1] echo ‘start for nginx by start 2012-01-26’ >>/etc/rc.local
[root@nginx-cache-1-1 nginx-1.2.1] echo ‘/application/nginx/sbin/nginx’ >>/etc/rc.local
参数说明:
--prefix=/application/nginx-1.2.1 <==指定安装位置
--with-http_stub_status_module <==启用”server status”(服务状态)页
--with-http_ssl_module <==启用SSL支持并且能够处理HTTPS请求,需要OpenSSL支持
--with-pcre <==支持正则表达式
以下两个参数本文没有使用
--with-mail <==启用IMAP4/POP3/SMTP代理模块
--with-http_realip_module <==网上都是忽悠人的?
提示:wiki.nginx.org/HttpRealIpModule
2.3 启动检查
[root@nginx-cache-1-1 tools]# nginx <==Nginx命令已经加入到系统全局变量
[root@nginx-cache-1-1 tools]# netstat -lnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTENtcp 0 0 :::22 :::* LISTEN
3. Nginx负载均衡
3.1 Proxy参数
client_max_body_size 300m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
参数解释:
#允许客户端请求的最大的单个文件字节数
client_max_body_size 300m;
#缓冲区代理缓冲用户端请求的最大字节数 可以理解为先保存到本地再传给用户
client_body_buffer_size 128k;
#跟后端服务器连接的超时时间_发起握手等候响应超时时间
proxy_connect_timeout 600;
#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理
proxy_read_timeout 600;
#后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_send_timeout 600;
#代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可
proxy_buffer_size 16k;
#同上 告诉Nginx保存单个用的几个Buffer 最大用多大空间
proxy_buffers 4 32k;
#如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐*2
proxy_busy_buffers_size 64k;
3.2 upstream模块
3.2.1 语法
官方地址:nginx.org/en/docs/http/ngx_http_upstream_module.html
官方提示:upstream模块默认被proxy_pass, fastcgi_pass, and memcached_pass 这三个参数调用
The ngx_http_upstream_module module allows to define groups of servers that can be referenced from the proxy_pass, fastcgi_pass, and memcached_pass directives.
官方示例:
upstream backend {
server backend1.example.com weight=5; <==单独域名。如果不加端口,默认是80端口。weight代表权重,值越大被分配的几率越高;
server backend2.example.com:8080; <==域名加端口。转发到后端的指定端口上;
server unix:/tmp/backend3; <==指定socket文件(具体用法不祥)
提示:Server如果接域名,需要内网有DNS服务器,或者在hosts文件做解析。Server后面还可以直接接IP或IP加端口
server 192.168.1.2
server 192.168.1.3:8080
server backup1.example.com:8080 backup; <==备份服务器,等上面指定的服务器都不可访问的时候会启用,backup的用法和Haproxy中用法一样;
server backup2.example.com:8080 backup;
}
3.2.1 Upstream参数
官方原文:
weight=number
sets a weight of the server, by default 1.
设置该服务器的权重,默认值是1.这个数值越大,服务器会被转发更多的请求;
max_fails=number
sets a number of unsuccessful attempts to communicate with the server during a time set by the fail_timeout parameter after which it will be considered down for a period of time also set by the fail_timeout parameter. By default, the number of unsuccessful attempts is set to 1. A value of zero disables accounting of attempts. What is considered to be an unsuccessful attempt is configured by the proxy_next_upstream, fastcgi_next_upstream, and memcached_next_upstream directives. The http_404 state is not considered an unsuccessful attempt.
Nginx尝试链接后端主机失败次数,这个数值是配合 proxy_next_upstream, fastcgi_next_upstream, and memcached_next_upstream这三个参数来使用的,当Nginx接收后端服务器返回这三个参数定义的状态码的时候,会将这个请求转发给正常工作的后端服务器,例如404,502,503.Max_fails 默认值是1;
fail_timeout=timesets
a time during which the specified number of unsuccessful attempts to communicate with the server should happen for the server to be considered down;
and a period of time the server will be considered down.
By default, timeout is set to 10 seconds.
在max_fails定义的失败次数后,距离下次检查的间隔时间,默认是10s;
backup
marks the server as a backup server. It will be passed requests when the primary servers are down.
这标志着这个服务器作为备份服务器,当主服务器全部宕机的时候,才会向他转发请求;
down
marks the server as permanently down; used along with the ip_hash directive.
这标志着服务器永远不可用,这个参数只配合ip_hash使用
示例:
upstream backend {
server backend1.example.com weight=5; <==如果就是单个Server,没必要设置权重
server 127.0.0.1:8080 max_fails=5 fail_timeout=10s; <==当检测次失败数等于5的时候,间隔10s再检查,这个参数和proxy/fasrcgi/memcached_next_upstream,相关;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup; <==热备机器设置
}
max_fails=5 fail_timeout=10s
重新加载nginx配置或WEB主机检测正常后,如果后端出现proxy_next_upstream中定义的错误(502),Nginx会根据max_fails的值去后端服务器检测,如果max_fails是5 ,他就检测5次,如果5次都是502那么,他就会根据fail_timeout的值,等待10s再去检查,过10s后检查一次,如果还是502,那么继续等待10s,再去检查,还是只检查一次,如果持续502,在不重新加载nginx配置或web站点没有恢复的情况下,每隔10s都只检测一次,
测试结果见5附录
3.2.2 调度算法
1)轮询(默认)
每个请求按时间顺序注意分配到不同的机器,相当于LVS中rr算法,如果后端服务器宕机(默认情况下只检测80端口,如果后端报502,404,403,503,还是会直接返回给用户),则会跳过该服务器,将请求分配给下一个服务器。
2)weight(权重)
在指定的轮询的基础上加上权重(默认是rr+weight),权重轮询和访问成正比,权重越大,转发的请求也就越多。可以根据服务器的配置和性能指定权重值大小,可以有效解决新旧服务器分配问题。
示例:
后端服务器192.168.1.2配置:E5520*2 CPU,8G内存
后端服务器192.168.1.3配置:Xeon(TM)2.80GHz * 2,4G内存
我希望在有30个请求到达前端时,其中20个请求交给192.168.1.3处理,剩余10个请求交给192.168.1.2处理,就可做如下配置;
upstream engine {
server 192.168.1.2 weight=1;
server 192.168.1.3 weight=2;
}
3)ip_hash
每个请求按访问的Ip的hash结果分配,当新的请求到达时,先将其客户端ip通过哈希算法哈希出一个值,在随后请求客户端Ip的哈希值只要相同,就会被分配至同一个服务器,该调度算法可以解决session问题,但有时会导致分配不均即,无法保证负载均衡。
提示:必须是最前端的服务器,后端也必须直接接应用服务器
示例:
upstream engine {
ip_hash;
server 192.168.1.2:80;
server 192.168.1.3:8080;
}
4)fair(第三方,NO)
按照后端服务器的响应时间来分配请求,响应时间短的优先分配。
示例:
upstream engine {
server 192.168.1.2;
server 192.168.1.3;
fair;
}
5)usr_hash(第三方,NO)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。
upstream engine {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
3.3 Proxy_pass 指令
3.3.1官方文档:
nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
3.3.2官方定义:
This module makes it possible to transfer requests to another server.
此模块可以将请求转发到另一台服务器
3.4 Location 指令
Nginx中的location指令是NginxHttpCoreModule中重要指令。location比较简单且常用。
location 指令,是用来对rul进行匹配的,URI即语法中的/uri/,可以是字符串或正则表达式。但是如果是正则表达,必须指定前缀。
3.4.1 基本语法
语法:
location [=|~|~*|^~|@] /uri/ {···}
解释:
[ = ] 精确匹配,如果找到,立即停止搜索,并立即处理请求(优先级最高)
[ ~ ] 区分大小写
[ ^~ ] 之匹配字符串,不匹配正则表达式
[ ~*] 不区分大小写
[ @ ] 指定一个命名的location,一般只用于内部重定向请求
匹配过程
首先对字符串进行匹配查询,最确切的匹配将被使用。然后,正则表达式的匹配查询开始,匹配第一个结果后会停止搜索,如果没有找到正则表达式,将使用字符串的搜索结果,如果字符串和正则都匹配,那么正则优先级较高。
提示:本文没有针对location的匹配顺序,进行测试,总结起来就是“精确匹配优先”。具体怎么个精确匹配还需要读者自己体会。
4. Nginx代理
4.1 L4 负载均衡
4.1.1 Upstraem配置(机器不够就用多端口来演示)
1)权重轮询
upstream engine {
server 192.168.18.211:80 weight=2;
server 192.168.18.211:81 weight=3;
server 192.168.18.211:82 weight=4;}
2)ip_hash
upstream engine {
server 192.168.18.211:80;
server 192.168.18.211:81;
server 192.168.18.211:82 down;
ip_hash;
}
4.1.2 Server配置
server {
listen 80;
server_name nginx.san.com;
location / {
proxy_pass engine;
}
}
4.2 L7 负载均衡
4.2.1 根据URI转发
4.2.1.1 Upstream配置
upstream nginx {
server 192.168.18.211:80;
}
upstream php {
server 192.168.18.211:81;
}
upstream java {
server 192.168.18.211:82;
}
4.2.1.2 虚拟主机配置
server {
listen 80;
server_name nginx.san.com;
location /nginx/ {
proxy_pass nginx/;
}
location /php/ {
proxy_pass php/;
}
location /java/ {
proxy_pass java/;
}
}
提示:关于结尾这个“/”问题我这没有测试,大家回去有兴趣的可以测试下!
4.2.2 根据扩展名转发(需要正则表达式支持)
4.2.2.1 Upstream配置
upstream nginx {
server 192.168.18.211:80;
}
upstream php {
server 192.168.18.211:81;
}
upstream java {
server 192.168.18.211:82;
}
4.2.2.2 虚拟主机配置
server {
listen 80;
server_name nginx.san.com;
location ~* /(.*.jpg)$ {
proxy_pass nginx/$1;
}
location ~* /(.*.gif)$ {
proxy_pass php/$1;
}
location ~* /(.*.png)$ {
proxy_pass java/$1;
}
}
4.3 Nginx SSL
配置文件(没有测试多台证书服务器)
server {
listen 443 ssl; <==指定https端口,这个“ssl”必须有不然报错
server_name sso.eefocus.com;
#access_log logs/sss-access.log;
#error_log logs/ssl-error.log;
##SSL cert files##
ssl_certificate /usr/local/nginx/ssl/ee_com.crt;
#ssl_certificate_key /usr/local/nginx/ssl/ees_com.key;
ssl_certificate_key /usr/local/nginx/ssl/ee_com-nopass.key;
#keepalive_timeout 60;
location / {
proxy_pass 192.168.18.61;
proxy_set_header X-Forwarded-For $remote_addr;
#proxy_set_header X-Forwarded-Proto https;
}
}
4.4 WEB日志客户端IP记录
4.4.1 X-Forwarded-For 字段
解释(维基百科):
X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。
地址:zh. .org/wiki/X-Forwarded-For
4.4.2 Apeche
4.4.2.1 Nginx配置
location ~* /(.*.png)$ {
proxy_pass java/$1;
proxy_set_header X-Forwarded-For $remote_addr;
}
4.4.2.2 Apache日志格式配置(这里和HAProxy一样)
LogFormat “%{X-Forwarded-For}i %l %u %t ”%r“ %>s %b ”%{Referer}i“ ”%{User-Agent}i“” combined
提示:
1 注意大括号后面还有一个“i”;
2 (自己测试)大括号内“X-Forwarded-For”的值可以随意定义只要和Nginx中X-Forwarded-For 一致,不区分大小写
4.4.3 Nginx(WEB)
4.4.3.1 Nginx(Proxy)
示例:
location ~* /(.*.jpg)$ {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass nginx/$1;}
4.4.3.2 Nginx(WEB)日志格式配置
log_format main '$http_x_forwarded_for - $remote_user [$time_local] “$request” '
'$status $body_bytes_sent “$http_referer” '
'“$http_user_agent” ';
4.5 Nginx健康检查
4.5.1 upstream 配置(详细内容前面已经提到)
upstream php {
server 10.0.11.82:81 weight=1;
server 10.0.11.83:80 weight=3 max_fails=5 fail_timeout=10s;
}
4.5.2 server 配置
server {
listen 80;
server_name php.san.com;
location / {
proxy_pass php;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404;
}
}
篇5:Linux下基于DNS的多机均衡负载的实现
前二天为一个客户添加了一台服务器,共同承担一个论坛的运作。但是。要实现负载均衡。的确是件难事。
之前有试过几个方法,
一、DNS轮值。。优点:简单实现。缺点:无法检测各个服务器的负荷。难控制访客的访问地址(一般DNS服务器都有缓存,所以。效果不明显)
二、前台程序。。使用了一个类似Zeus Load Balancer的服务程序。在前台接受访问请求。再分流到各个实际的服务器。
但以上二个方法都不太适用我的情况。。
第一种。无法正确分配访客流量。。。常发生一台服务器的负荷很大。而另一台就很低。。。
第二种。会占用更多的流量。资源也占用较大。
最好。我还是采用了一个DNS均衡负载的方法---lbname。
它的主要效果介绍:
一、基于perl的dns服务端。应用简单。
二、自动检测各个服务器的负荷。然后再按结果优先分配DNS解析。
三、DNS解析实时生效。不会被DNS服务器缓存。
四、安装方法简单。。。
lbname网页介绍
www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html
www.stanford.edu/~riepel/lbnamed/
。
。
下载:
www.stanford.edu/~riepel/lbnamed/lbnamed-1.2.1.tar.gz
www.stanford.edu/~schemers/dist/lb.tar
.
.
下载包说明:
内存数个目录
1)lbcd的源代码。。。。lbcd是lbnamed所用到的服务器端检测服务器负荷程序。。每个需要均衡负荷的服务器都需要安装、运行它的。。。
建议下载使用最新的lbcd编译包。www.stanford.edu/~riepel/lbnamed/lbcd-3.1.0.tar.gz 之前的常有编译错误的。(这个也有的。嘻。)
编译这个包时。常会出错的。如何成功安装。就看你的本事了。(编辑util.c第123行。在前面加上//)
编译lbcd成功后。将它复制到/usr/sbin。那你就可以运行它了。。不用加什么参数了。(运行后要停止它就是lbcd -s)
2)lbnamed的服务器程序perl..分有二个版本。一个是perl4.另一个是perl5.我是使用perl5的。所以用它来说明。
进入perl5目录。。。。。先要配置好lbnamed和poller程序。
说明一下:
lbnamed程序是主程序。提供dns动态解析。严格来说。它已是一个dns服务器端程序了。
poller是为lbnamed提供各个均衡服务器的负荷情况。(配合我们之前安装的lbcd程序使用)
但二个程序可能都需要更改,请看程序第一行的perl程序地址。。改为你的perl地址。
然后就需要更改程序的配置文件了。
1,lbnamed.conf 要更改的地方有几个
一、$hostmaster = “schemers.leland.stanford.edu”; 将schemers.leland.stanford.edu改为你服务器的域名。。比如host.abc.com 这个无太大关系
二、将所有stanford改为你域名的中段(比如bendy.com,就改为bendy),将所有edu改为域名的后缀(比如bendy.com,就改为com)。。这个很重要。。我建议不要更改best。当然你也可以改
2,sweet.config 这个文件可以是用其它文件名的,具体在lbnamed.conf有设置。我建议大家先清空这文件。再重新建立新的。
这个文件的配置方法是
负荷服务器host 负重 组
比如。我自己的情况。有二台服务器。分别是bbs1.bendy.com和bendy2.bendy.com那我的配置文件就是
bbs1 1 bbs
bbs2 2 bbs
配置好这个文件后。你需要一个能对bbs1这个域名进行解析的方法。就是修改/etc/hosts文件。我的情况就是
192.168.1.1 bbs1
192.168.1.2 bbs2
这样的话。poller程序就会检测111.222.333.001、111.222.333.002的负荷情况了
至此,DNS服务器和均衡负载的服务器的程序已完成。可能我的说明不太清楚。现在我就一一列表说明
bbs1服务器 lbserver1 192.168.1.1 编译运行lbcd
bbs2服务器 lbserver2 192.168.1.2 编译运行lbcd
dns服务器 dnsserver 10.0.0.1 配置lbnamed 在/etc/hosts配置bbs1、bbs2域名解析
这样的情况下。。在dns服务器运行lbnamed程序。系统就开始动作了。。lbnamed的启动参数主要是 -l logfile和-d(debug)
./lbnamed -l lb.log -d
查看记录(类似)
cat lb.log
-=====
05/30 00:59 21442 lbnamed starting poller
05/30 00:59 21442 lbnamed load_config
loading 1452 bbs2 192.168.1.2 bbs
loading 837 bbs1 192.168.1.1 bbs
05/30 00:59 21442 lbnamed ready to answer requests
05/30 00:59 21442 lbnamed do_maint
05/30 00:59 21442 lbnamed reloading config
05/30 00:59 21442 lbnamed load_config
loading 1671 bbs2 192.168.1.2 bbs
loading 1086 bbs1 192.168.1.1 bbs
如果你没有那些记录,
看文件sweet.config.unreach这是代表poller程序无法接收到对方服务器的负荷信息。。请检查lbcd程序是否运行。。
如果程序运行正常。那你的DNS服务器就正常运行了。
如果检查程序是否正常。。。用我们的nslookup就可以了。。。
C:Documents and SettingsAdministrator.XINGKONG-SERVER>nslookup
Default Server: ns.guangzhou.gd.cn
Address: 202.96.128.143
>server 10.0.0.1 //直接使用dns服务器
Default Server: [10.0.0.1]
Address: 10.0.0.1
>set type=all //设置查询类型
>bbs.best.bendy.com //bbs是sweet.config设置的组名,best.bendy.com是在lbnamed.conf设置的
Server: [10.0.0.1]
Address: 10.0.0.1
bbs.best.bendy.com canonical name = bbs2.bendy.com //返回的信息。是DNS系统分配了bbs2给你这次的查询(按二台服务器返回的负荷情况来分配的,并非随便分配的)
bbs2.bendy.com internet address = 192.168.1.2 //而bbs.bendy.com在该在DNS系统的A记录是192.168.1.2//最后结果bbs.best.bendy.com得到的IP地址是192.168.1.2
====
自此。。服务器方面的配置已经完成。
跟着是我们配置具体域名的dns解析。。。
方法也是很简单,以bendy.com为例,在bendy.com的DNS管理加上以下记录
一、加上二个best.bendy.com的ns记录为ns1.bendy.com和ns2.bendy.com(也可以不止二个的.取决你有多少台服务器运行lbnamed
二、加上第一条添加的ns记录的实际指向iP,分别指向各个运行lbnamed的服务器,比如ns1.bendy.com address 10.0.0.1/ns2.bendy.com address 10.0.0.2等。
三、添加bbs1.bendy.com和bbs2.bendy.com等的实际ip地址。。。正如刚才所说...bbs.best.bendy.com只将DNS记录转移为bbs1.bendy.com或者bbs2.bendy.com。而lbnamed是没权对bbs1.bendy.com和bbs2.bendy.com进行解析的。。。所以。需要bendy.com的NAMESERER对它进行解析。
(ps:bbs1.bendy.com的记录并不一定要求与lbnamed程序的相同。。。)
四、最后。。添加bbs.bendy.com cname to bbs.best.bendy.com。。。哈哈。。。大功告成。。。
DNS解析完成后,我们就完成本次任务了。。。。
前二天为一个客户添加了一台服务器。共同承担一个论坛的运作。但是。要实现负载均衡。的确是件难事。
之前有试过几个方法,
一、DNS轮值。。优点:简单实现。缺点:无法检测各个服务器的负荷。难控制访客的访问地址(一般DNS服务器都有缓存,所以。效果不明显)
二、前台程序。。使用了一个类似Zeus Load Balancer的服务程序。在前台接受访问请求。再分流到各个实际的服务器。
但以上二个方法都不太适用我的情况。。
第一种。无法正确分配访客流量。。。常发生一台服务器的负荷很大。而另一台就很低。。。
第二种。会占用更多的流量。资源也占用较大。
最好。我还是采用了一个DNS均衡负载的方法---lbname。
它的主要效果介绍:
一、基于perl的dns服务端。应用简单。
二、自动检测各个服务器的负荷。然后再按结果优先分配DNS解析。
三、DNS解析实时生效。不会被DNS服务器缓存。
四、安装方法简单。。。
lbname网页介绍
www.stanford.edu/~schemers/docs/lbnamed/lbnamed.html
www.stanford.edu/~riepel/lbnamed/
。
。
下载:
www.stanford.edu/~riepel/lbnamed/lbnamed-1.2.1.tar.gz
www.stanford.edu/~schemers/dist/lb.tar
篇6:代码:DNS负载均衡设置(一)
root@localhost ~]# vi /etc/named.conf//// named.conf for Red Hat caching-nameserver //options { directory “/var/named”; dump-file “/var/named/data/cache_dump.db”; statistics-file “/var/named/data/named_stats.txt”;};controls { inet 127.0.0.1 allow { localhost; } keys { rndckey; };};zone “.” IN { type hint; file “named.ca”;};zone “localdomain” IN { type master; file “localdomain.zone”; allow-update { none; };};zone “localhost” IN { type master; file “localhost.zone”; allow-update { none; };};zone “0.0.127.in-addr.arpa” IN { type master; file “named.local”; allow-update { none; };};zone “0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa” IN { type master; file “named.ip6.local”; allow-update { none; };};zone “255.in-addr.arpa” IN { type master; file “named.broadcast”; allow-update { none; };};zone “0.in-addr.arpa” IN { type master; file “named.zero”; allow-update { none; };}; zone “ox.com” { type master ; file “ox.zone”;};zone “0.168.192.in-addr.arpa” { type master ; file “named.ox”; };include “/etc/rndc.key”;
编辑推荐负载均衡技术基础专题
当前,无论在企业网、园区网还是在广域网上,即使按照当时最优配置建设的网络,业务量的发展都超出了过去..
呈现详细操作过程之DNS负载均衡设置直白讲解DNS负载均衡DNS负载均衡原理和设置实操讲解从两方面学会DNS负载均衡设置总结DNS负载均衡的“好与坏”
篇7:代码:DNS负载均衡设置(一)
# nslookup www.ox.comServer: 192.168.0.1Address: 192.168.0.1#53Name: www.ox.comAddress: 192.168.0.8Name: www.ox.comAddress: 192.168.0.6Name: www.ox.comAddress: 192.168.0.7
【责任编辑:佟媛微 TEL:(010)68476606】
编辑推荐负载均衡技术基础专题
当前,无论在企业网、园区网还是在广域网上,即使按照当时最优配置建设的网络,业务量的发展都超出了过去..
呈现详细操作过程之DNS负载均衡设置直白讲解DNS负载均衡DNS负载均衡原理和设置实操讲解从两方面学会DNS负载均衡设置总结DNS负载均衡的“好与坏”
篇8:功能解析的DNS负载均衡
常谈到负载均衡和DNS的问题,那么对于动态的负载均衡,也就是这用地址域名的分配我们应该考虑一些什么问题,这种技术能给我们带来什么样的好处呢?现在我们就来详细地讨论一下这个话题,希望通过这篇文章的详细介绍,能让大家了解DNS扩展的优越性能。
解决网络过载的问题的一个解决方法是在现有的DNS中加入动态负载均衡的特性?
随着计算机网络的应用的日益广泛,在互联网上的负载也变得日益拥挤,这经常导致服务器无法正常地响应,并且影响了一些应用程序的崩溃?而且,这种现象的发生是动态的?解决这个问题的一个方法是建造更加强大的服务器,而另外一个途径就是将客户请求分散到多个服务器上?后者是解决这个问题的一种巧妙的方法,通过这种方法实际上是一种平衡的艺术,可以避免一些服务器过于繁忙而另外的服务器非常空闲的状态?跨服务器的需求分配技术成为网络技术的一个重要课题?
我们来考虑这么两种情况:首先,每个TCP进程会消耗32比特的内存,这样,一个有32MB内存的服务器从理论上支持100万的连接?其次,在多个拥有同样内容的服务器中,用户总是喜欢根据他们自己的经验(或者是一些监测数据)访问一些服务负载较小的服务器,比如说,GetRight就可以选择一个较佳的服务器进行FTP下载?
但是,我们可以可以通过定期地监测服务器的状态并将请求指向最佳服务器来实现请求的分配?这种在多个服务器中根据服务器负载动态定向请求的技术称之为动态负载均衡?这个功能可以加入域名服务(DNS)中,而这是因为域名服务器本身就充当了解析客户请求的主要责任,而具有这种特性的DNS称为dlbDNS(dynamicloadbalanceDNS)?在这里,最佳服务器指的是通过一种排名算法的出最佳排名的服务器?
在这里,我们将要解释通过dlbDNS对DNS扩展所带来的好处?首先,我们必须要考虑dlbDNS设计应该达到的性能:
(1)新的设计必须与原来的DNS应用兼容?
(2)该设计必须要易于配置?
(3)负载均衡必须快速而且有效?
(4)一个主机可以属于多个组或者簇?
(5)对一个请求的响应应当动态地产生?
(6)对服务器的监控应当由不同的进程所产生?
(7)TTL的值应当设为最小以防止其他名字服务器的缓存的响应?
(8)最终的设计应当是一个通用性的名字服务器,可以被同时用于简单的?反向的和动态的请求?
(9)对错误应当有所响应?
(10)负载均衡的过程对用户来说是透明的?
负载均衡模型
有四种负载均衡模型可供使用:首先,RFC1794描述了使用一个特别区域代理以从外部资源获得信息的负载均衡方法,这样,一个新的区域通过名字服务器被载入?这个方法的问题是大量的信息量,包括静态的或者是可能需要分配的信息量,都在区域中进行循环地传送?同时,这个方法也不支持根据被请求的名字所回应的动态创建的虚拟/动态域名?
第二个模型是通过一个专门的负载均衡服务器来解释请求并将其指向一个最佳服务器?这种设计由负载服务器在内部使用虚拟的IP地址?而这种服务器的问题在于需要在被监控地服务器群中加入另外一台服务器而不是使用现有的资源?
第三个模型是通过一个远程监视系统来监视不同服务器的性能,从而提供给DNS一个反馈?这个设计可以帮助解决无法直接观测的系统问题,同时提供给用户以访问时间的测算?这种方式的问题就是在于需要依靠远程网络进行监视并且分发数据?
最后一种方案就是通过内部监视系统来监视服务器的性能,并且提供给DNS的反馈?这主要的优点就是易维护性和管理性,而且也没有安全方面的问题?dlbDNS就是使用的这种方式?
篇9:Windows DNS服务器配置服务器教程
如果用户使用Windows 2000 Server作为计算机的操作系统,可以通过安装服务、协议与工具并正确地设置它们来把该计算机配置成诸如Web服务器、IIS服务器、FTP服务器、DNS 服务器、DHCP服务器和WINS服务器等各种服务器,以便为网络中的客户机提供某项服务,在Windows 2000 Server服务器提供的所有服务当中,最为重要和基本的三种服务是域名服务、将NetBIOS计算机名转换为对应IP地址的服务以及为进入网络的客户机动态地分配IP地址的服务。它们的主要作用在于将计算机能够识别的IP地址与现实中人们使用的诸如www.sina.com 或Jace(计算机名)类型的计算机地址和名称进行转换与解析。这三种服务分别是由DNS服务器、DHCP服务器和WINS服务器来完成的。基于这三种服务器在整个网络连接中的重要作用,本章介绍如何创建和配置DNS服务器、DHCP服务器和WINS服务器及其相关的知识,
在庞大的Internet网络中,每台计算机(无论是服务器还是客户机)都有一个自己的计算机名称。通过这个易识别的名称,网络用户之间可以很容易地进行互相访问以及客户机与存储有信息资源的服务器建立连接等网络操作。不过,网络中的计算机硬件之间真正建立连接并不是通过大家都熟悉的计算机名称,而是通过每台计算机各自独立的IP地址来完成的。因为,计算机硬件只能识别二进制的IP地址。因此, Internet中有很多域名服务器来完成将计算机名转换为对应IP地址的工作,以便实现网络中计算机的连接。可见DNS服务器在Internet中起着重要作用,本节我们便来对域名服务以及如何配置和管理DNS服务器进行介绍。
什么是域名服务
在计算机网络中,主机标识符分为三类:名字、地址及路径。而计算机在网络中的地址又分为IP地址和物理地址,但地址终究不易记忆和理解。为了向用户提供一种直观的主机标识符,TCP/IP协议提供了域名服务(DNS)
多台主机实现DNS服务器负载均衡详细教程(推荐9篇)




