Linux-实现双主模型的nginx的高可用
程序员文章站
2023-11-03 18:45:34
实现双主模型的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 提供服务 } } }
这样访问 就是访问192.168.234.47/57:80
访问 就是访问192.168.234.67/77:80
现在客户机将host添加
172.18.0.100 www.a.com
172.18.0.200
客户端将 解析 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
客户端将 解析 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服务
结果:访问
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