keepalive+nginx服务部署ubuntu20.04.txt 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. 1,系统环境
  2. 两台Ubuntu20.04主机
  3. 假设ip分别为:192.168.2.100 和 192.168.2.200
  4. 2,安装nginx
  5. sudo apt-get install nginx
  6. 测试是否安装成功的命令:sudo nginx -t
  7. 也可以在浏览器中输入ip地址,可以看到nignx的页面
  8. nginx一些相关命令:
  9. # 下面两句的效果一样,都是重启
  10. sudo service nginx restart
  11. sudo systemctl restart nginx
  12. # 查询nginx进程号
  13. ps -ef |grep nginx
  14. # 以下都可以停止进程
  15. #nginx从容停止命令,等待所有请求结束后关闭服务
  16. sudo kill -QUIT nginx主进程号
  17. # 快速停止命令,立即关闭nginx进程
  18. sudo kill -TERM nginx主进程号
  19. # 以上两个停止命令如果不管用,可以强制停止
  20. sudo kill -9 nginx主进程号
  21. # 删除nginx,-purge包括配置文件
  22. sudo apt-get --purge remove nginx
  23. 2,修改nginx默认web服务的端口,两台主机均需修改
  24. nginx默认配置文件是/etc/nginx/sites-enabled/default,默认端口为80
  25. 可修改其端口(修改其端口是为了不让该服务占用80端口,实际项目上使用的时候也需要改端口)
  26. sudo gedit /etc/nginx/sites-enabled/default
  27. 将 listen 80 default server;
  28. 与 listen [::] 80 default server;两行中的80改为想修改的端口即可,本例以修改为81为例。
  29. 保存修改后的文件,重启nginx服务:
  30. sudo systemctl restart nginx 重启后网页访问nginx原来的80端口会无法访问,新修改后的端口可以访问
  31. 3, 修改nginx的默认页面,做上标记,便于区分,两台主机均需修改
  32. sudo gedit /var/www/html/index.nginx-debian.html
  33. 在<p><em>Thank you for using nginx.</em></p>这行下面加入:
  34. <p>I come from Ubuntu server:192.168.2.100</p>
  35. 192.168.2.200的主机加入时文本中的IP地址改成自己的ip地址即可
  36. 保存关闭分别检查
  37. 在192.168.2.100的主机浏览器中输入 192.168.2.100:81 即可看到刚出添加的文。192.168.2.200的主机同理
  38. 4,配置负载均衡,两台主机均需相同操作
  39. 在129.168.2.100服务器上配置负载均衡。
  40. 有关负载均衡方法的说明,可参考:https://www.cnblogs.com/1214804270hacker/p/9325150.html
  41. sudo /etc/nginx/conf.d/nginx.conf
  42. 填写内容如下:
  43. upstream text_nginx {
  44. #负载均衡方法,可选:least_conn,ip_hash等,不填写则为轮询方式;
  45. # 服务器的访问地址,最好使用服务器的私有IP以获得更好的性能和安全性。
  46. server 192.168.2.100:81 weight=1;
  47. server 192.168.2.200:81 weight=2;
  48. }
  49. server {
  50. # 负载均衡的监听端口
  51. listen 80 default_server;
  52. listen [::]:80 default_server;
  53. # 负载均衡服务器的服务名称,没有时填写 _
  54. server_name _;
  55. location / {
  56. # 代理转发,注意这个text_nginx要与 upstream 后的字符串相同
  57. proxy_pass http://text_nginx;
  58. }
  59. }
  60. 保存后重启nginx服务。
  61. sudo systemctl restart nginx
  62. 5, 测试负载均衡
  63. 在浏览器中输入192.168.2.100,刷新页面后发现来自 192.168.2.100服务器的页面和来自192.168.2.200服务器的页面轮番出现,
  64. 且200页面出现的概率是100页面的两倍(填写两个服务器权重的时候,weight值不同)。
  65. 6,安装配置keepalived,两台主机均需相同操作
  66. 命令安装:sudo apt-get install keepalived
  67. 设置随系统自启动:sudo gedit /etc/rc.local 在文件中添加以下内容:
  68. #!/bin/sh -e
  69. # 服务类要以 & 结尾一行,表示不要等待运行结束
  70. service keepalived start &
  71. #文末必须以exit 0结束
  72. exit 0
  73. 配置keepalived命令:sudo gedit /etc/keepalived/keepalived.conf 在文件中加入以下内容:
  74. global_defs {
  75. router_id lb01 #路由id号,不可重复
  76. }
  77. #预先定义一个脚本,方便后面调用,也可定义多个,方便选择
  78. vrrp_script chk_nginx {
  79. script "/etc/keepalived/nginx_chk.sh" #脚本具体路径
  80. interval 2 #脚本运行间隔。单位s
  81. }
  82. vrrp_instance VI_1{ #定义一个实例
  83. state MASTER #MASTER为主节点、BACKUP为备用节点 只是说明,具体根据优先级
  84. interface ens1 #虚拟IP地址放置的网卡位置
  85. virtual_router_id 51 #当前虚拟路由唯一标识,同一个集群id需要一致,范围0-255
  86. priority 101 #当前节点在虚拟路由中的优先级,值越大优先级越大;范围1-254
  87. advert_int 1 #主备通讯间隔
  88. authentication {
  89. auth_type PASS
  90. auth_pass 123456 #认证号,集群中需要一致
  91. }
  92. virtual_ipaddress {
  93. 192.168.2.130 #使用的虚拟IP,不能和网段内IP冲突
  94. }
  95. #使用在这个域中预先定义的脚本,上面定义的
  96. track_script {
  97. chk_nginx
  98. }
  99. }
  100. 注意:192.168.2.200主机上router_id不可相同,MASTER需要改为BACKUP
  101. 创建nginx_chk脚本
  102. 脚本文件/etc/keepalived/nginx_chk.sh用于检查nginx相关服务器是否启动,如果没有启动则重启。如果重启不成功,则杀死keepalived服务,切换到备用服务
  103. sudo gedit /etc/keepalived/nginx_chk.sh 添加以下内容:
  104. #!/bin/bash
  105. #检查是否有nginx相关的进程
  106. A=`ps -C nginx --no-header |wc -l`
  107. #如果没有
  108. if [ $A -eq 0 ];then
  109. # 重启nginx,延迟2秒
  110. service nginx restart
  111. sleep 2
  112. # 重新检查是否有nginx相关的进程
  113. if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
  114. # 仍然没有nginx相关的进程,杀死当前keepalived,切换到备用机
  115. killall keepalived
  116. fi
  117. fi
  118. 为脚本文件添加执行权限:sudo chmod +x /etc/keepalived/nginx_chk.sh
  119. 两台服务器都要添加这个脚本和权限。
  120. 7,重启keepalived
  121. sudo service keepalived restart
  122. 5,测试
  123. 在192.168.2.100(MASTER)节点上执行:ip a
  124. 如果前面顺利,这里可以看到设置的虚拟ip
  125. 192.168.2.200(BACKUP)上没有虚拟IP
  126. 停掉192.168.2.100(MASTER)的keepalived
  127. sudo service keepalived stop
  128. 再到192.168.2.200(BACKUP)上执行:ip a
  129. 可以看到虚拟IP说明配置成功
  130. 检查页面能否访问
  131. 先将上面停掉的master上的keepalived启动起来:sudo service keepalived start
  132. 通过浏览器访问虚拟IP 192.168.2.130
  133. 一直刷新能访问到不断切换的两个页面则高可用性负载均衡配置成功
  134. 参考
  135. https://blog.csdn.net/weixin_41621706/article/details/117173069
  136. https://blog.csdn.net/weixin_41621706/article/details/117217349