• nginx+keepalived 高可用项目实战


    1. 概念

    keepalived是什么
        keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

    keepalived工作原理
        keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

    虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

    2、Nginx+keepalived实现七层的负载均衡

    Nginx通过Upstream模块实现负载均衡

    主机名ip系统用途
    Proxy-master172.16.147.155centos7.5主负载
    Proxy-slave172.16.147.156centos7.5主备
    Real-server1172.16.147.153Centos7.5web1
    Real-server2172.16.147.154centos7.5Web2
    Vip for proxy172.16.147.100

    一、实施过程 
    1、选择两台nginx服务器作为代理服务器。
    2、给两台代理服务器安装keepalived制作高可用生成VIP
    3、配置nginx的负载均衡

    1. # 两台配置完全一样
    2. [root@proxy-master ~]# vim /etc/nginx/nginx.conf
    3. user nginx;
    4. worker_processes auto;
    5. error_log /var/log/nginx/error.log;
    6. pid /run/nginx.pid;
    7. include /usr/share/nginx/modules/*.conf;
    8. events {
    9. worker_connections 1024;
    10. }
    11. http {
    12. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    13. '$status $body_bytes_sent "$http_referer" '
    14. '"$http_user_agent" "$http_x_forwarded_for"';
    15. access_log /var/log/nginx/access.log main;
    16. sendfile on;
    17. tcp_nopush on;
    18. tcp_nodelay on;
    19. keepalive_timeout 65;
    20. types_hash_max_size 2048;
    21. include /etc/nginx/mime.types;
    22. default_type application/octet-stream;
    23. include /etc/nginx/conf.d/*.conf;
    24. upstream backend {
    25. server 172.16.147.154:80 weight=1 max_fails=3 fail_timeout=20s;
    26. server 172.16.147.153:80 weight=1 max_fails=3 fail_timeout=20s;
    27. }
    28. server {
    29. listen 80;
    30. server_name localhost;
    31. location / {
    32. proxy_pass http://backend;
    33. proxy_set_header Host $host:$proxy_port;
    34. proxy_set_header X-Forwarded-For $remote_addr;
    35. }
    36. }
    37. }

    Keepalived实现调度器HA
    1. 主/备调度器安装软件

    1. [root@proxy-master ~]# yum install -y keepalived
    2. [root@proxy-slave ~]# yum install -y keepalived
    3. [root@proxy-master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
    4. [root@proxy-master ~]# vim /etc/keepalived/keepalived.conf
    5. ! Configuration File for keepalived
    6. global_defs {
    7. router_id directory1 #辅助改为directory2
    8. }
    9. vrrp_instance VI_1 {
    10. state MASTER #定义主还是备
    11. interface ens33 #VIP绑定接口
    12. virtual_router_id 80 #整个集群的调度器一致
    13. priority 100 #back改为50
    14. advert_int 1
    15. authentication {
    16. auth_type PASS
    17. auth_pass 1111
    18. }
    19. virtual_ipaddress {
    20. 172.16.147.100/24 # vip
    21. }
    22. }

    备用机器也添加配置文件

    1. [root@proxy-slave ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
    2. [root@proxy-slave ~]# vim /etc/keepalived/keepalived.conf
    3. ! Configuration File for keepalived
    4. global_defs {
    5. router_id directory2
    6. }
    7. vrrp_instance VI_1 {
    8. state BACKUP #设置为backup
    9. interface ens33
    10. nopreempt #设置到back上面,不抢占资源
    11. virtual_router_id 80
    12. priority 50 #辅助改为50
    13. advert_int 1
    14. authentication {
    15. auth_type PASS
    16. auth_pass 1111
    17. }
    18. virtual_ipaddress {
    19. 172.16.147.100/24
    20. }
    21. }

    启动keepalived 主备都启动

    1. [root@proxy-master ~]# systemctl enable keepalived
    2. [root@proxy-slave ~]# systemctl start keepalived
    3. [root@proxy-master ~]# ip a
    4. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    5. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    6. inet 127.0.0.1/8 scope host lo
    7. valid_lft forever preferred_lft forever
    8. inet 172.16.147.100/32 scope global lo
    9. valid_lft forever preferred_lft forever
    10. inet6 ::1/128 scope host
    11. valid_lft forever preferred_lft forever
    12. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    13. link/ether 00:0c:29:ec:8a:fe brd ff:ff:ff:ff:ff:ff
    14. inet 172.16.147.155/24 brd 172.16.147.255 scope global noprefixroute dynamic ens33
    15. valid_lft 1115sec preferred_lft 1115sec
    16. inet 172.16.147.101/24 scope global secondary ens33
    17. valid_lft forever preferred_lft forever

    现在就实现了两台机器的高可用,两台高可用的机器都作为另外两台nginx服务器的负载均衡器,一台机器down掉了,会自动漂移到另一台备用机器上继续访问

  • 相关阅读:
    【牛客 - 剑指offer】JZ28 对称的二叉树 两种方案 Java实现
    2022最新版-李宏毅机器学习深度学习课程-P26RNN-2
    VTN系列多通道振弦、温度、模拟传感信号系列数据采集仪
    Opencv项目——信用卡数字识别Python代码实现
    Nvidia GPU 入门教程之 13 设置Jupyter Notebook随系统启动,并设置conda自定义环境ubuntu
    9月13-14日上课内容 第三章 ELK日志分析系统及部署实例
    .NET企业应用安全开发动向-概览
    chromedriver下载地址
    【区块链 | OpenZeppelin】OpenZeppelin 7个最常使用的合约
    基于PHP+MySQL的物流配送管理系统平台
  • 原文地址:https://blog.csdn.net/weixin_45814478/article/details/138197865