nginx+keepalived集群实现高可用

1.安装nginx

master和baskup(server1和server2)都安装nginx:

tar zxf nginx-1.16.1.tar.gz
cd nginx-1.16.1/
yum install gcc zlib zlib-devel openssl-devel -y	#解决依赖性
./configure --prefix=/usr/local/nginx
make && make install

  
  
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
当看到Makefile和objs时说明安装成功
编写一个nginx的html文件:

vim /usr/local/nginx/html/index.html

  
  
  • 1

在这里插入图片描述
在这里插入图片描述
编写nginx启动脚本:

vim /etc/init.d/nginxd

  
  
  • 1

脚本内容:

#!/bin/bash
. /etc/init.d/functions		#加载系统函数库
path=/usr/local/nginx/sbin	#设定nginx启动命令路径
function start() {
	if [ `netstat -antlpe | grep nginx | wc -l` -eq 0 ]	#如果等于0
	then
		$path/nginx					#打开nginx
		RETVAL=$?
		if [ $RETVAL -eq 0 ]
		then
			action "nginx is started" /bin/true
			return $RETVAL
		else
			action "nginx is started" /bin/false
			return $RETVAL
		fi
	else
		echo "nginx is running"
		return 0
	fi
}
function stop() {
	if [ `netstat -antlpe | grep nginx | wc -l` -ne 0 ]	#如果不等于0
	then
		$path/nginx -s stop
		RETVAL=$?
		if [ $RETVAL -eq 0 ]
		then
			action "nginx is stoped" /bin/true
			return $RETVAL
		else
			action "nginx is stoped" /bin/false
                        return $RETVAL
                fi
	else
		echo "nginx is stoped"
		return 0
	fi
}
case "$1" in		#通过特殊参数$1接收脚本参数的字符串
	start)
	start
	;;
	stop)
	stop
	;;
	restart)
	stop
	sleep 1
	start
	;;
	*)
	echo $"usage: $0 {start | stop | restart}"
	exit 1
esac
exit $RETVAL

  
  
  • 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

给脚本添加执行权限:

chmod +x /etc/init.d/nginxd

  
  
  • 1

测试:

/etc/init.d/nginxd start

  
  
  • 1

在这里插入图片描述
注意:安装好nginx以后一定要测试它的启动脚本是否能够正常使用,nginx是否能够启动

2.安装keepalived

master和baskup(server1和server2)都安装编译keepalived:

tar zxf keepalived-2.0.20.tar.gz 
ls
cd keepalived-2.0.20
ls
yum install gcc openssl-devel -y		#解决依赖性
./configure --prefix=/usr/local/keepalived --with-init=systemd	#编译keepalived的源码包
make && make install

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

制作软连接方便keepalived的管理与设置:

ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived/ /sbin/

  
  
  • 1
  • 2
  • 3

在这里插入图片描述
制作启动链接:

ln -s /root/keepalived-2.0.20/keepalived/etc/init.d/keepalived /etc/init.d
chmod +x /etc/init.d/keepalived 

  
  
  • 1
  • 2

在这里插入图片描述
还原之前实验部分内容:
删除VIP并关闭nginx服务:

ip addr del 172.25.254.100/24 dev eth0
ip addr show
/etc/init.d/nginxd stop

  
  
  • 1
  • 2
  • 3

在这里插入图片描述

3.修改keepalived的配置文件

step1 编写脚本用于检查本地nginx是否存活:

#!/bin/bash
killall -0 nginx
if [[ $? -ne 0 ]]
then
        /etc/init.d/keepalived stop	#如果nginx不存活,则关闭keepalived实现服务切换
fi

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

step2 在master上修改keepalived的配置文件:

! Configuration File for keepalived
global_defs {
   notification_email {
        root@localhost   #健康检查报告通知邮箱
}
   notification_email_from keepalived@localhost         #发送邮件的地址
   smtp_server 172.0.0.1        #邮件服务器
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script_chk_nginx {
        script"/data/sh/check_nginx.sh"         #检查本地nginx是否存活脚本(脚本需要自己写)
        interval 2
        weight 2
}
#VIP1
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 5        #健康检测频率
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100    #VIP
}
        track_script {
                chk_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

step3 配置文件和脚本发给备机server2并修改配置文件:

scp keepalived.conf [email protected]:/etc/keepalived/
scp /data/sh/check_nginx.sh [email protected]:/data/sh/

  
  
  • 1
  • 2

只需要修改两处:
在这里插入图片描述
step4 重新启动nginx:

/etc/init.d/nginxd restart

  
  
  • 1

4.测试

启动nginx:

/etc/init.d/nginxd start

  
  
  • 1

启动keepalved

/etc/init.d/keepalived start

  
  
  • 1

在真机中测试:

curl 172.25.254.100

  
  
  • 1

在这里插入图片描述
可以查看到VIP配在了server1上:
在这里插入图片描述
server1宕掉时:
server2开始工作:
在这里插入图片描述
VIP漂移到了server2上:
在这里插入图片描述

发布了107 篇原创文章 · 获赞 0 · 访问量 1434

猜你喜欢

转载自blog.csdn.net/weixin_45029822/article/details/104527939