Nginx+Keepalive 实现高可用负载均衡方案

Nginx+Keepalive 实现高可用负载均衡方案

#####规划
| 端口 |主机名|IP地址| 说明 |
| - | - |
| | ryxx-jkser1 |192.168.11.102| Nginx主机 |
| | ryxx-jkser2 |192.168.11.103| Nginx备机 |
| 8080,.. | ryxx-fzjh-1 | 192.168.11.107 | 应用服务机A|
| 8080,… | ryxx-fzjh-3 | 192.168.11.108 | 应用服务机B|
| | |192.168.11.109(网段一样)| Keepalived| 虚拟出的ip(VIP)

192.168.11.107,和108的tomcat请自行部署并且开放端口此文档默认是8080,根据实际情而定。

##开放端口命令,提供参考

1
2
3
4
5
6
添加命令提供参考开放端口命令
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
保存
service iptables save
重启防火墙
service iptables restart

Nginx安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1.将nginx放到yum repro库中
[root@localhost ~]# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2.查看nginx信息
[root@localhost ~]# yum info nginx
3.使用yum安装ngnix
[root@localhost ~]# yum install nginx
效果如下:
[root@localhost ~]# yum install nginx
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.usc.edu
* extras: mirror.raystedman.net
* updates: mirror.metrocast.net
正在解决依赖关系
--> 正在检查事务
---> 软件包 nginx.x86_64.1.1.10.1-1.el7.ngx 将被 安装
正在安装 : 1:nginx-1.10.1-1.el7.ngx.x86_64
Thanks for using nginx!
Please find the official documentation for nginx here:
* http://nginx.org/en/docs/
Commercial subscriptions for nginx are available on:
* http://nginx.com/products/
验证中 : 1:nginx-1.10.1-1.el7.ngx.x86_64 1/1
已安装:
nginx.x86_64 1:1.10.1-1.el7.ngx 完毕!
4.启动nginx
[root@localhost ~]# service nginx start
5.查看nginx版本 nginx -v

修改Nginx配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
1. 修改主机MASTER(ryxx-jkser1)
Linux 命令: vim /etc/nginx/nginx.conf
(按下 esc +a键写入)
修改配置如下:
user root;(当前使用的root用户)
worker_processes 1;
error_log /var/log/nginx/error.log ;#没有此日志文件可以,自己新建
error_log /var/log/nginx/error.log notice;
error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
#设定请求缓冲
server_names_hash_bucket_size 128;
client_header_buffer_size 32K;
large_client_header_buffers 4 32k;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
#连接超时时间
keepalive_timeout 65;
#开启gzip压缩,降低传输流量
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#添加tomcat列表,真实应用服务器都放在这
upstream tomcat_pool
{
#server tomcat地址:端口号 weight表示权值,权值越大,被分配的几率越大;
server 192.168.11.107:8080 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.11.108:8080 weight=4 max_fails=2 fail_timeout=30s;
}
server
{
listen 80;#监听端口
server_name localhost;
location / {
proxy_next_upstream error timeout http_500 http_502 http_504; #这里表示健康检查涉及到的情形,有这些情形的,都切换到另外的web服务器访问
proxy_read_timeout 10s; #这里表示程序返回的时间,请参考php.ini的max_exe_time来设置。
proxy_pass http://tomcat_pool; #转向tomcat处理
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
(按下 esc +:+w+q键保存)
2. 若无/var/log/nginx/error.log文件(有可以跳过)
Linux 命令: touch /var/log/nginx/error.log
3. 修改备机的Nginx.cong(ryxx-jkser2)**记得切换到连接到备机的服务器。(也可以使用scp发送,两个配置文一样,那样就可以不用切换,跳过4,5,6步骤)
4. Linux 命令: vim /etc/nginx/nginx.conf
(按下 esc +a键写入)
5. 备机nginx.conf如下:
user root;
worker_processes 1;
error_log /var/log/nginx/error.log ;
error_log /var/log/nginx/error.log notice;
error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32K;
large_client_header_buffers 4 32k;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
upstream tomcat_pool
{
server 192.168.11.107:8080 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.11.108:8080 weight=4 max_fails=2 fail_timeout=30s;
}
server
{
listen 80;
server_name localhost;
location / {
proxy_next_upstream error timeout http_500 http_502 http_504;
proxy_read_timeout 10s;
proxy_pass http://tomcat_pool;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
(按下 esc +:+w+q键保存)
6. 重启Nginx
Linux 命令:service nginx restart

Keepalived 安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
1#安装 popt (安装步骤主备机一致)
yum -y install popt popt-devel
2# cd /data/software
wget http://www.keepalived.org/software/keepalived-1.2.8.tar.gz
cd /data/src
tar zxf ../software/keepalived-1.2.8.tar.gz
cd keepalived-1.2.8
./configure --prefix=/usr/local/keepalived --sysconf=/etc
make && make install
chkconfig --add keepalived
#设置开机启动 (主备机都要操作)
chkconfig keepalived on
#启动keepalive服务 (主备机都要操作)
/etc/init.d/keepalived start
#备份 (主备机都要操作)
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
#主配置 Master(ryxx-jkser1)重要步骤
vim /etc/keepalived/keepalived.conf
#主配置如下:
! Configuration File for keepalived
global_defs {
notification_email {
15172405271@163.com #自己的163邮箱
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server smtp.163.com
smtp_connect_timeout 30
router_id nginx_master # 设置nginx master的id,在一个网络应该是唯一的
}
vrrp_script Monitor_Nginx {
script "/usr/local/src/check_nginx_pid.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行
interval 2 #(检测脚本执行的间隔,单位是秒)
weight 2
}
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
interface ens160 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
virtual_router_id 66 # 虚拟路由编号,主从要一致
priority 100 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
Monitor_Nginx #(调用检测脚本)
}
virtual_ipaddress {
192.168.11.109 #虚拟vIP
}
}
#xshell切换到备机(ryxx-jkser2)
vim /etc/keepalived/keepalived.conf
#备机配置如下:
! Configuration File for keepalived
global_defs {
notification_email {
15172405271@163.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server smtp.163.com
smtp_connect_timeout 30
router_id nginx_backup #备机
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP #备机
interface ens160 #(HA监测网络接口)
virtual_router_id 66 #(主、备机的virtual_router_id必须相同)
priority 90 #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)
advert_int 1 #(VRRP Multicast广播周期秒数)
authentication {
auth_type PASS #(VRRP认证方式)
auth_pass 1111 #(密码)
}
track_script {
chk_http_port # #(调用nginx进程检测脚本)
}
virtual_ipaddress {
192.168.11.109 #(VRRP HA虚拟地址)
}
}
#创建nginx进程检测脚本 (主备机都要操作)
touch /usr/local/src/check_nginx_pid.sh
#编写nginx进程检测脚本(主备机都要操作)
vim /usr/local/src/check_nginx_pid.sh
#脚本如下
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/sbin/nginx #??nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
#重启keepalived服务 (主备机都要操作)
/bin/systemctl restart keepalived.service
#检查ip addr
[root@ryxx-jkser1 nginx]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:81:0a:83 brd ff:ff:ff:ff:ff:ff
inet 192.168.11.102/24 brd 192.168.11.255 scope global ens160
valid_lft forever preferred_lft forever
inet 192.168.11.109/32 scope global ens160
valid_lft forever preferred_lft forever
inet6 2001:da8:b8:50:250:56ff:fe81:a83/64 scope global mngtmpaddr dynamic
valid_lft 2591639sec preferred_lft 604439sec
inet6 fe80::250:56ff:fe81:a83/64 scope link
valid_lft forever preferred_lft forever
#查看日志
tail -f /var/log/messages
May 24 18:17:17 ryxx-jkser1 Keepalived_vrrp[9620]: Sending gratuitous ARP on ens160 for 192.168.11.109
May 24 18:17:17 ryxx-jkser1 Keepalived_vrrp[9620]: Sending gratuitous ARP on ens160 for 192.168.11.109
May 24 18:17:17 ryxx-jkser1 Keepalived_vrrp[9620]: Sending gratuitous ARP on ens160 for 192.168.11.109
May 24 18:17:17 ryxx-jkser1 Keepalived_vrrp[9620]: Sending gratuitous ARP on ens160 for 192.168.11.109
#浏览器访问VIP
192.168.11.109
可以随机跳到之前应用服务器下的tomacat表示成功

```

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. Nginx+Keepalive 实现高可用负载均衡方案
  2. 2. 192.168.11.107,和108的tomcat请自行部署并且开放端口此文档默认是8080,根据实际情而定。
  3. 3. Nginx安装
  • 修改Nginx配置
  • Keepalived 安装
  • ,