實現雙主模型的ngnix高可用(一)準備:主機7台client:172.18.x.x調度器:keepalived+nginx 帶172.18.x.x/16 網卡192.168.234.27192.168.234.37real_server192.168.234.47192.168.234.57192... ...
實現雙主模型的ngnix高可用(一)
準備:主機7台
client:
172.18.x.x
調度器:keepalived+nginx 帶172.18.x.x/16 網卡
192.168.234.27
192.168.234.37
real_server
192.168.234.47
192.168.234.57
192.168.234.67
192.168.234.77
實驗結果
1 [root@234c17 ~]# for i in {1..4};do curl www.a.com;curl www.b.com;sleep 1;done 2 234.57 3 234.77 4 234.47 5 234.67 6 234.57 7 234.77 8 234.47 9 234.67
過程:
一、先配置4台real_server,安裝好測試用的httpd
1 [root@234c47 ~]# curl 192.168.234.47;curl 192.168.234.57;curl 192.168.234.67;curl 192.168.234.77 2 234.47 3 234.57 4 234.67 5 234.77
二、配置keepalived
因為是雙主模型
1.配置keepalived主機234.27
[root@234c27 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from keepalived@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id kpone vrrp _mcast_group4 234.10.10.10 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 50 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.18.0.100/16 //這ip調度 192.168.234.47/57 } } vrrp_instance VI_2 { state BACKUP interface ens33 virtual_router_id 51 priority 80 advert_int 1 authentication { auth_type PASS auth_pass 2222 } virtual_ipaddress { 172.18.0.200/16 //這ip調度 192.168.234.147/157 } }
2.配置keepalived主機234.37
[root@234c37 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from keepalived@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id kpone vrrp _mcast_group4 234.10.10.10 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 50 priority 80 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.18.0.100/16 //這ip調度 192.168.234.47/57 } } vrrp_instance VI_2 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 2222 } virtual_ipaddress { 172.18.0.200/16 //這ip調度 192.168.234.147/157 } }
這樣雙主模型簡單的就搭建好了
3.配置nginx主機234.27/37
先配置http語塊
http { 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 /var/log/nginx/access.log main; upstream web1{ // server 192.168.234.47:80; server 192.168.234.57:80; } upstream web2{ server 192.168.234.67:80; server 192.168.234.77:80; } /* ngx_http_upstream_module ngx_http_upstream_module模塊 用於將多個伺服器定義成伺服器組,而由proxy_pass, fastcgi_pass等指令 進行引用 1、upstream name { ... } 定義後端伺服器組,會引入一個新的上下文 預設調度演算法是wrr Context: http upstream httpdsrvs { server ... server... ... */
然後配置server
server { listen 80 default_server; //預設監聽80埠 server_name www.a.com //功能變數名稱 listen [::]:80 default_server; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { proxy_pass http://web1 ; //定義訪問80埠的請求,以web1提供服務。而指定的web1在http語塊中為 192.168.234.47/57:80 提供服務 } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } server { server_name www.b.com listen 80; location / { proxy_pass http://web2 ; //定義訪問80埠的請求,以web2提供服務。而指定的web2在http語塊中為 192.168.234.147/157:80 提供服務 } } }
這樣訪問 www.a.com就是訪問192.168.234.47/57:80
訪問 www.b.com就是訪問192.168.234.67/77:80
現在客戶機將host添加www.a/b.com
172.18.0.100 www.a.com
172.18.0.200 www.b.com
客戶端將www.a.com 解析 172.18.0.100
[root@234c17 ~]# ping www.a.com PING www.a.com (172.18.0.100) 56(84) bytes of data. 64 bytes from www.a.com (172.18.0.100): icmp_seq=1 ttl=64 time=0.358 ms 64 bytes from www.a.com (172.18.0.100): icmp_seq=2 ttl=64 time=0.376 ms 64 bytes from www.a.com (172.18.0.100): icmp_seq=3 ttl=64 time=0.358 ms 64 bytes from www.a.com (172.18.0.100): icmp_seq=4 ttl=64 time=0.366 ms
客戶端將www.b.com 解析 172.18.0.200
[root@234c17 ~]# ping www.b.com PING www.b.com (172.18.0.200) 56(84) bytes of data. 64 bytes from www.b.com (172.18.0.200): icmp_seq=1 ttl=64 time=0.582 ms 64 bytes from www.b.com (172.18.0.200): icmp_seq=2 ttl=64 time=0.339 ms 64 bytes from www.b.com (172.18.0.200): icmp_seq=3 ttl=64 time=0.524 ms 64 bytes from www.b.com (172.18.0.200): icmp_seq=4 ttl=64 time=0.337 ms
結果:
1 [root@234c17 ~]# for i in {1..4};do curl www.a.com;curl www.b.com;sleep 1;done 2 234.57 3 234.77 4 234.47 5 234.67 6 234.57 7 234.77 8 234.47 9 234.67
實現雙主模型的ngnix高可用(二)
現在擴展實驗
將192.168.234.47/57主機加ip地址
[root@234c47 ~]#ip a a dev ens37 192.168.167/24
[root@234c57 ~]#ip a a dev ens37 192.168.177/24
編輯http的的配置文件增加基於FQDN虛擬主機
[root@234c47 ~]# vim /etc/httpd/conf.d/vhost.conf <virtualhost 192.168.234.167:80> documentroot /data/web1 servername www.a.com < directory /data/web1> require all granted < /directory> < /virtualhost>
另一個主機也加上虛擬主機
[root@234c57 ~]# vim /etc/httpd/conf.d/vhost.conf <virtualhost 192.168.234.177:80> documentroot /data/web1 servername www.a.com <directory /data/web1> require all granted < /directory> < /virtualhost>
重啟httpd服務
結果:訪問www.a.com
1 [root@234c17 ~]# for i in {1..8};do curl www.a.com;done 2 234.167 3 234.177 4 234.47 5 234.57 6 234.167 7 234.167 8 234.177 9 234.47 10
1 [root@234c17 ~]# for i in {1..8};do curl www.b.com;done 2 234.67 3 234.67 4 234.77 5 234.67 6 234.77 7 234.67 8 234.77 9 234.77