node1和node2为代理,node3和4提供网站服务
主机 | IP地址 |
---|---|
node1 | 192.168.182.137 |
node2 | 192.168.182.138 |
node3 | 192.168.182.139 |
node4 | 192.168.182.140 |
[root@node1 opt]# systemctl stop firewalld.service
[root@node1 opt]# systemctl disable firewalld.service
[root@node1 opt]# setenforce 0
[root@node1 opt]# getenforce 0
先创建挂载点
[root@node1 opt]# mkdir /mnt/cdrom
将ISO镜像挂载到创建的目录下
[root@node1 opt]# mount /dev/sr0 /mnt/cdrom/
创建本地yum源
[root@node1 opt]# cat /etc/yum.repos.d/w.repo
[BaseOS]
name=BaseOS
baseurl=file:///mnt/cdrom/BaseOS
gpgcheck=0
enabled=1
[AppStream]
name=AppStream
baseurl=file:///mnt/cdrom/AppStream
gpgcheck=0
enabled=1
[root@node1 nginx-1.18.0]# yum -y install gcc pcre-devel openssl-devel zlib
[root@node1 opt]# tar -zxf nginx-1.18.0.tar.gz
[root@node1 opt]# cd nginx-1.18.0
这里可以指定编译安装的路径,这里我们放在/opt/nginx目录下
[root@node1 nginx-1.18.0]# ./configure --prefix=/opt/nginx
安装也是在此目录下
[root@node1 nginx-1.18.0]# make && make install
以上步骤每一台机器上都要执行.
[root@node3 ~]# cat /opt/nginx/html/index.html
[root@node3 ~]# /opt/nginx/sbin/nginx
[root@node4 ~]# /opt/nginx/sbin/nginx
在配置文件里面添加下面的内容
注意:这个两台代理端都需要做同样的配置,这样时为了防止137这个主机宕机时也还有第二个代理来提供服务,保证服务的正常运行.
#gzip on;
34 upstream webserver {
35 server 192.168.182.139;
36 server 192.168.182.140;
37 }
// upstream的意思是定义集群,后面跟集群的名字;在下面写要的集群里的主机,一个server就代表着一个主机.
集群定义完成之后,就要调用集群了.添加下面的内容用来定义集群
location / {
47 proxy_pass http://webserver; //这里写要定义的集群名字.
48 root html;
修改完之后,启动nginx服务去访问
[root@node1 ~]# vim /opt/nginx/conf/nginx.conf
[root@node2 ~]# vim /opt/nginx/conf/nginx.conf
// 访问到下面的页面说明成功,并且每刷新一次就会在两个web端不停的跳转.
- 说明:你去访问137这个代理主机,而出现的web页面是由web01,也就是139这个主机提供的.当你去访问137这个主机时,137这个代理主机就会将请求转给web01和web02这个两个主机,由这个来两个服务器来提供服务.
// keepalived实现故障的自动切换
// - keepalived通过VIP地址实现故障自动切换,这里的VIP地址一般为公网IP
[root@node1 nginx-1.18.0]# yum -y install keepalived
修改keepalived配置文件,注释掉 vrrp_strict这一行
1 ! Configuration File for keepalived
2
3 global_defs {
4 notification_email {
5 [email protected]
6 [email protected]
7 [email protected]
8 }
这几行的功能就是如果出现错误可以通过发邮件的方式告诉你
10 smtp_server 192.168.200.1
11 smtp_connect_timeout 30
12 router_id LVS_DEVEL
13 vrrp_skip_check_adv_addr
14 vrrp_strict
15 vrrp_garp_interval 0
16 vrrp_gna_interval 0
17 }
这里是写发件人是谁
主要修改下面的内容:
19 vrrp_instance VI_1 {
20 state MASTER //这一行表示当前服务器的身份
21 interface eth0 //这一行将这个eth0 改为本机的网卡名称,当出现故障时能自动切换这里我们改为ens160,两台都改
22 virtual_router_id 51
23 priority 100 //这时当前主机的优先级,需要修改主机上的优先级,这里的数字越大优先级越高.
24 advert_int 1 //心跳检测,每隔几秒检测一次
25 authentication { //这里主机间身份验证的方式,默认是用密码验证的方式
26 auth_type PASS
27 auth_pass 1111 //默认4个1
28 }
29 virtual_ipaddress { //这里用来指定VIP地址
30 192.168.200.16 //这里我们用私网IP来模拟,按需求进行增减.
31 192.168.200.17 /
32 192.168.200.18
33 }
34 }
将备用的代理服务器也就是138的state MASTER这一行的MASER改为BACKUP;MASER代表主的意思,BACKUP就是备用的意思.
virtual_ipaddress {
30 192.168.182.100/24 //代理端此处保持一致.
这两个台主机都要写一样的IP地址.
修改之后启动服务
[root@node1 ~]# systemctl start keepalived.service
[root@node2 ~]# systemctl start keepalived.service
启动服务之后,我们发现在ens160这个网卡下多了一个IP,这个IP就是刚才我们在配置文件里面所指定的VIP地址
先关闭keepalived服务,再输入VIP地址192.168.182.100
[root@node1 ~]# systemctl stop keepalived.service
// 当代理端出现问题就使用VIP地址进行访问,当代理端恢复之后就使用代理的IP
// 当nginx代理出现问题时实现自动切换
将nginx和keepalived进行绑定,当nginx代理出现问题也能进行切换
我们这里写一个脚本来进行实现
[root@node1 ~]# vim /etc/keepalived/nginx.sh
#!/bin/bash
content=`ps -C nginx | grep -vc PID`
if [ $content -eq 0 ];then
/opt/nginx/sbin/nginx
sleep 5
content= `ps -C nginx | grep -vc PID`
elif [ $content -eq 0 ];then
systemctl stop keepalived.service
else
echo "nice"
fi
// 验证
先关闭nginx服务,给脚本执行权限并执行脚本验证.
[root@node1 ~]# /opt/nginx/sbin/nginx -s stop
[root@node1 ~]# chmod +x /etc/keepalived/nginx.sh
[root@node1 ~]# /etc/keepalived/nginx.sh
[root@node1 ~]# ps -C nginx
PID TTY TIME CMD
739623 ? 00:00:00 nginx
739625 ? 00:00:00 nginx
nginx启动成功
// 让keepalived自动检测执行脚本
修改keepalived的配置文件,指定脚本路径,定义监控项,添加一下内容:
vrrp_script nginx { //这是keepalived提供定义脚本监控项的模块,nginx是监控项的名字,可随意.
script "/etc/keepalived/nginx.sh" //这里是指定脚本的路径
interval 2 //指定多久去检测脚本,这里是2秒
vrrp_instance VI_1 { //在此行上方添加
调用监控项
track_script { //通过此参数来调用上面定义的监控项的名称.
nginx
}
virtual_ipaddress { //在此行上面添加