• Nginx + keepalived 集群搭建


    一、准备两台机器

    node1 192.168.157.128 master 主

    node2 192.168.157.129 backup 备

    二、安装nginx

    分别在两台机器上安装nginx

    1. 安装nginx依赖

    yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

    2. 下载nginx安装

    wget http://nginx.org/download/nginx-1.18.0.tar.gz

    3. 解压安装

    1. # 解压
    2. tar -zxvf nginx-1.18.0.tar.gz
    3. # 进入nginx目录
    4. cd nginx-1.18.0
    5. # 编译
    6. ./configure
    7. # 安装
    8. make & make install

    4. 启动nginx

    安装完成后nginx的目录为 /usr/local/nginx

    1. cd /usr/local/nginx
    2. #启动
    3. ./sbin/nginx

    5. 查看是否启动成功

    node1 128

     node2 129

     三、 安装keepalived

    安装的目录在/etc/keepalived下

    yum install -y keepalived

    四、 脚本准备

    在/usr/local/src目录下创建nginx_check.sh脚本,内容如下。

    脚本所做的工作就是判断nginx是否还在运行,没有运行就重新启动一下nginx,如果重新启动还是失败的话,就停止keepalived服务。

    1. #!/bin/bash
    2. counter=$(ps -C nginx |grep -v PID |wc -l)
    3. if [ $counter == 0 ];then
    4. /usr/local/nginx/sbin/nginx
    5. sleep 3
    6. counter=$(ps -C nginx |grep -v PID |wc -l)
    7. if [ $counter == 0 ];then
    8. systemctl stop keepalived
    9. fi
    10. fi

    五、 双机主从模式

    双机主从模式:一台主服务器和一台热备服务器。正常情况下主服务器提供服务,只有当主服务器发生故障的时候热备服务器才会接管主服务器。但是当主服务器不出现故障的时候,则热备服务器就会处于浪费状态。

    1. 编写/etc/keepalived/keepalived.conf

    这里确定node1为master,node2 为 backup。

    node1 配置如下

    1. global_defs {
    2. notification_email {
    3. acassen@firewall.loc
    4. failover@firewall.loc
    5. sysadmin@firewall.loc
    6. }
    7. smtp_server 192.168.157.128
    8. smtp_connect_timeout 30
    9. router_id LVS_DEVEL
    10. }
    11. vrrp_script chk_http_port {
    12. script "/usr/local/src/nginx_check.sh"
    13. interval 2
    14. weight 2
    15. }
    16. vrrp_instance VI_1 {
    17. state MASTER
    18. interface eno16777736
    19. virtual_router_id 51
    20. priority 100
    21. advert_int 1
    22. authentication {
    23. auth_type PASS
    24. auth_pass 1111
    25. }
    26. virtual_ipaddress {
    27. 192.168.157.50
    28. }
    29. }

    node2 配置如下

    1. global_defs {
    2. notification_email {
    3. acassen@firewall.loc
    4. failover@firewall.loc
    5. sysadmin@firewall.loc
    6. }
    7. smtp_server 192.168.157.129
    8. smtp_connect_timeout 30
    9. router_id LVS_DEVEL
    10. }
    11. vrrp_script chk_http_port {
    12. script "/usr/local/src/nginx_check.sh"
    13. interval 2
    14. weight 2
    15. }
    16. vrrp_instance VI_1 {
    17. state BACKUP
    18. interface eno16777736
    19. virtual_router_id 51
    20. priority 90
    21. advert_int 1
    22. authentication {
    23. auth_type PASS
    24. auth_pass 1111
    25. }
    26. virtual_ipaddress {
    27. 192.168.157.50
    28. }
    29. }

    2. 配置讲解

    vrrp_script chk_http_port 用来配置脚本信息

    script 脚本的路径

    interval 检测脚本执行的时间间隔(秒)

    weight 权重

    vrrp_instance VI_1 实例配置

    state 表示这台机器的身份 MASTER (主)BACKUP(备) 两种

    interface 网卡名字,使用ifconfig查看

    virtual_router_id 虚拟路由id,主备一致

    advert_int 每隔多少秒发送心跳

    virtual_ipaddress 虚拟地址,访问虚拟地址,会转到具体的nginx中配置的地址

    3. 测试

    修改index.html

    node1 中修改标题为welcome to nginx master!

    node2 中修改标题为welcome to nginx backup!

    分别启动node1、node2中的nginx和keepalived

    1. #启动nginx
    2. /usr/local/nginx/sbin/nginx
    3. #启动keepalived
    4. systemctl start keepalived

    访问虚拟ip 192.168.157.50

     停止node1上的nginx和keepalived后访问192.168.157.50

    1. # 停止keepalived
    2. systemctl stop keepalived.service
    3. # 停止nginx
    4. /usr/local/nginx/sbin/nginx -s stop

    4. 总结

    双机主备模式下,只有master停止服务之后,从服务器才能提供服务。 

    六、 双机主主模式

    双机主主模式:使用两台负载均衡服务器,互为主备,两台服务器都属于活动状态,只有当其中一台发生故障时由另一台接管故障服务器的请求。这种方案比较经济实惠。

    1. 修改keepalived.conf配置,主要是增加一个 vrrp_instance,原来的MASTER变为BACKUP,原来的BACKUP变为MASTER

    node1 的keepalived配置

    1. global_defs {
    2. notification_email {
    3. acassen@firewall.loc
    4. failover@firewall.loc
    5. sysadmin@firewall.loc
    6. }
    7. smtp_server 192.168.157.128
    8. smtp_connect_timeout 30
    9. router_id LVS_DEVEL
    10. }
    11. vrrp_script chk_http_port {
    12. script "/usr/local/src/nginx_check.sh"
    13. interval 2
    14. weight 2
    15. }
    16. vrrp_instance VI_1 {
    17. state MASTER
    18. interface eno16777736
    19. virtual_router_id 51
    20. priority 100
    21. advert_int 1
    22. authentication {
    23. auth_type PASS
    24. auth_pass 1111
    25. }
    26. virtual_ipaddress {
    27. 192.168.157.50
    28. }
    29. }
    30. vrrp_instance VI_2 {
    31. state BACKUP
    32. interface eno16777736
    33. virtual_router_id 52
    34. priority 90
    35. advert_int 1
    36. authentication {
    37. auth_type PASS
    38. auth_pass 1111
    39. }
    40. virtual_ipaddress {
    41. 192.168.157.51
    42. }
    43. }

    node2 的keepalived配置

    1. global_defs {
    2. notification_email {
    3. acassen@firewall.loc
    4. failover@firewall.loc
    5. sysadmin@firewall.loc
    6. }
    7. smtp_server 192.168.157.129
    8. smtp_connect_timeout 30
    9. router_id LVS_DEVEL
    10. }
    11. vrrp_script chk_http_port {
    12. script "/usr/local/src/nginx_check.sh"
    13. interval 2
    14. weight 2
    15. }
    16. vrrp_instance VI_1 {
    17. state BACKUP
    18. interface eno16777736
    19. virtual_router_id 51
    20. priority 90
    21. advert_int 1
    22. authentication {
    23. auth_type PASS
    24. auth_pass 1111
    25. }
    26. virtual_ipaddress {
    27. 192.168.157.50
    28. }
    29. }
    30. vrrp_instance VI_2 {
    31. state MASTER
    32. interface eno16777736
    33. virtual_router_id 52
    34. priority 100
    35. advert_int 1
    36. authentication {
    37. auth_type PASS
    38. auth_pass 1111
    39. }
    40. virtual_ipaddress {
    41. 192.168.157.51
    42. }
    43. }

    2. 重新启动nginx和keepalived

    访问192.168.157.50 和 192.168.157.51,50得到的是master,51得到的是backup

     

     七、总结

    到此nginx+keepalived集群搭建完成,大家也去试试吧。

  • 相关阅读:
    STM32F4X 内部FLASH使用
    翻译英语的软件-跨境必备翻译软件免费
    开发工程师必备————【Day37】Django补充(九)
    Alibaba架构师纯手工打造神仙级“2022版Java面试手册”
    9、传统计算机视觉 —— 边缘检测
    Unity 动画系统基本概念
    智慧公厕:打造清新无臭的舒适空间
    NewStarCTF 公开赛-web
    腾讯mini项目-【指标监控服务重构】2023-07-30
    nodejs+vue 学生宿舍管理系统设计与实现
  • 原文地址:https://blog.csdn.net/axibazZ/article/details/127053978