環境介紹:
centos7上搭建的dnsmasq服務,這是一款小巧的dns服務,配置簡單,容易上手;
編譯安裝 nginx ,因爲要負載udp,1.9以下的版本是不支持的,此處使用的是nginx-1.10的版本;
利用nginx進行web的負載均衡很是方便,nginx也是可以進行udp的負載均衡的;比如可以使用nginx負載dns服務;
搭建環境:
172.22.10.237 ---centos7搭建dnsmasq服務;
172.22.10.50 ---centos7搭建dnsmasq服務;
172.22.10.156 ---centos7編譯安裝nginx;
dnsmasq就不多說了,這是一款小巧且配置方便的dns服務;適用於小型的局域網;
換成其他的dns服務也可以,這裏只講解nginx的負載方法和配置;
整體的架構如下圖:
下載nginx安裝包(版本要大於1.9),上傳至172.22.10.156;我的放到了/usr/local/src/nginx-1.10.3.tar.gz,
//首先安裝編譯工具、依賴包
yum -y install gcc gcc-c++ autoconf automake
yum -y install zlib zlib-devel openssl openssl-devel pcre-devel
//解壓nginx
tar xzvf nginx-1.10.3.tar.gz
進入nginx目錄並查看
cd nginx-1.10.3 && ls
有的nginx版本本身就大於1.9,但是爲什麼不能做到udp負載?可能是沒編譯所需要的模塊
//查看nginx可以編譯的模塊;
./configure --help
其中有一個stream的模塊,
//預編譯
./configure --with-stream
//make編譯
make
//安裝
make install
此時,nginx就會安裝到默認目錄: /usr/local/nginx 下了;
/usr/local/nginx/conf/nginx.conf 就是nginx的主配置文件了;
vim編輯 /usr/local/nginx/conf/nginx.conf 將裏面的內容修改成:
#user nobody;
worker_processes 4;
events {
worker_connections 1024;
}
stream {
upstream dns {
server 172.22.10.237:53 weight=1;
server 172.22.10.50:53 weight=1;
}
server {
listen 53 udp;
proxy_connect_timeout 1s;
proxy_timeout 20s;
proxy_pass dns;
}
保存退出執行:
/usr/local/nginx/sbin/nginx -t
檢查配置;
這個時候就可以啓動nginx了:
/usr/local/nginx/sbin/nginx
爲了排除其他影響,建議將防火牆和selinux先關掉;
172.22.10.237和172.22.10.50的防火牆也關掉,這樣nginx才能訪問並分發udp;
測試:
在172.22.10.237 DNS配置文件中配置一個域名解析:172.22.10.110 www.xxx.com
在172.22.10.50 DNS配置文件中配置一個域名解析:172.22.10.110 www.ppp.com
重啓dns服務,讓配置生效;
將客戶端的dns該爲 172.22.10.156 ,使用 nslookup 對172.22.10.110這個ip進行解析,
你會發現,解析的結果會在 www.xxx.com 和 www.ppp.com 中來回變動,這就是nginx按照權重分配的結果了
upstream dns {
server 172.22.10.237:53 weight=1;
server 172.22.10.50:53 weight=1;
}
weight = 1 ; 就是權重數值了;