Linux-实现双主模型的nginx的高可用
实现双主模型的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
结果:
实现双主模型的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
Linux-实现双主模型的nginx的高可用的更多相关文章
- Mysql双主热备+LVS+Keepalived高可用部署实施手册
MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...
- Mysql双主热备+LVS+Keepalived高可用操作记录
MySQL复制能够保证数据的冗余的同时可以做读写分离来分担系统压力,如果是主主复制还可以很好的避免主节点的单点故障.然而MySQL主主复制存在一些问题无法满足我们的实际需要:未提供统一访问入口来实现负 ...
- keepalived+Nginx实现主备保障Nginx的高可用。
1.什么是keepalived? Keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障. Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工 ...
- 【 Linux 】Keepalived实现双主模型高可用集群
要求: 1. 两台web服务器安装wordpress,数据库通过nfs共享 2. 使用keepalived实现双主模型 环境: 主机: 系统:CentOS6.7 x64 ...
- 2、Keepalived提供日志与双主模型演示
Keepalived实例演示: 利用keepalived流动一个VIP,在提供LVS的高可用以及实现对LVS后端的real server做健康状态检测,最后实现高可用nginx. HA Clust ...
- Nginx+keepalived 高可用双机热备(主从模式/双主模式)
基础介绍负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行. 关于负载均衡介绍,可以参考:li ...
- keepalived + haproxy 实现web 双主模型的高可用负载均衡--转
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://xz159065974.blog.51cto.com/8618592/140581 ...
- ssdb主从及双主模型配置和简单管理
ssdb主从及双主模型配置和简单管理 levelDB是一个key->value 的数据存储库,其只能在本地保存数据,支持持久化,并且支持保存非常大的数据,单机redis在保存较大数据的时候数十G ...
- Apache+lvs高可用+keepalive(主从+双主模型)
Apache+lvs高可用+keepalive(主从+双主模型) keepalive实验准备环境: httpd-2.2.15-39.el6.centos.x86_64 keepalived-1 ...
随机推荐
- jvm 调优(转)
转自 http://pengjiaheng.iteye.com/blog/538582 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系 ...
- Maven - settings.xml简易配置Demo
前言 这里贴一下settings.xml的一个简易配置demo,就是简单配置了:本地的仓库地址.阿里云镜像.指定使用jdk1.8进行编译. 这里使用的Maven是3.5.0版本的. 配置文件demo ...
- SpringBoot | 遇坑总结 | JPA
1. Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when ...
- vs安装包
http://blog.csdn.net/cometnet/article/details/19551125
- npm scripts的生命周期管理
我们平时阅读一些开源项目,可能会发现有些项目的package.json里的scripts区域定义的脚本很复杂,令人眼花缭乱. 其实这些脚本是有规律可循的.让我们从最简单的一个例子开始学习. 新建一个空 ...
- JAVA初级必须要搞懂的事项(希望对新手有所帮助)
1 安装JDK=> (1,下载JDK,安装,一般目录为C:\Program Files\Java中:2,通过Dos命令测试JDK是否安装=>java –version命令查看 ...
- Shell脚本之for循环、while循环,if语句、case语句
1. for循环一般格式: 格式1: for((条件)) do 动作 done 格式2: for 变量名 in 范围 do 动作 done1234567891011121314实验:##1. 输出数字 ...
- 在 webpack 中使用 ECharts
http://echarts.baidu.com/tutorial.html#%E5%9C%A8%20webpack%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20ECharts W ...
- OpenCascade: 获取边的端点
FirstV = TopExp::FirstVertex(aEdge1); LastV = TopExp::LastVertex(aEdge1);
- Linux之Nginx服务 nfs文件存储 负载均衡
一.搭建Nginx服务 Nginx 是俄罗斯人编写的十分轻量级的HTTP 服务器,Nginx,它的发音为"engine X",是一个高性能的HTTP和反向代理服务器,同时也是一个I ...