mysql服务器配置
mysql服务器需要被连接,可以先创建一个库并创建一个新用户。
1. [root@mysql ~]# mysql -uroot -p123456 2. 3. //省略部分内容 4. 5. mysql> create database bbs; 6. 7. Query OK, 1 row affected (0.00 sec) 8. 9. mysql> grant all on bbs.* to bbs@'%' identified by '123456'; 10. 11. Query OK, 0 rows affected (0.00 sec) 12. 13. mysql> exit 14. 15. Bye
验证
测试机访问代理服务器,分别使用linux端,xshell端,win端测试
1. 测试连接web1
linux端测试如下:(linux端和xhell端)
xshell端测试如下:
2. 测试连接数据库
win端连接数据库测试工具有很多,如SQLyog、navicat等,本次使用SQLyog通过代理服务器连接mysql数据库。win客户端打开SQLyog软件,出现下图所示内容,添加代理服务器IP,mysql用户名密码及端口号点击连接即可。
登录后可以看到刚刚在myslq服务器中创建的库,现在就可以进行编辑查看表了。
高可用
高可用实验目标:本次实验分为两个部分,①在两台lb服务器上搭建nginx和keeplived,实现负载均衡器的高可用。模拟网站服务器损坏,使用客户机访问网站依然正常访问。②解决高可用裂脑问题。
拓扑图如下:
理论部分
1. 高可用作用:增加容错性(HA:High availability)
2. 协议: VRRP(虚拟路由冗余协议) 公有协议 224.0.0.18
HSRP(热备份路由协议) 私有协议,Cisco公司 224.0.0.5 224.0.0.6
3. 高可用软件:
keepalived:使用vrrp实现多台主机高可用群集
高可用角色:master 主服务器 、backup 备服务器
4. 高可用裂脑
高可用节点之间互相失去联系,自认为自己是主服务器,就会出现多主现象,即裂脑现象。
裂脑出现的原因:
心跳线松动或网卡故障。
服务器硬件故障,崩溃。
节点服务器开启防火墙,却没有做vrrp例外。
nginx服务死掉,不会出现裂脑现象,但整个集群都无法正常运作。
环境搭建
根据拓扑图安装服务,lb1和lb2都需要安装nginx及keepalived,下面以lb1为例,两台web服务以web1为例。
lb搭建
1. [root@lb1 ~]# rpm -ivh /media/nginx-rpm/* --nodeps --force 2. 3. [root@lb1 ~]# yum -y install keepalived 4. 5. [root@lb1 ~]# systemctl start nginx keepalived 6. 7. [root@lb1 ~]# systemctl enable nginx keepalived
web搭建
1. [root@web1 ~]# rpm -ivh /media/nginx-rpm/* --nodeps --force 2. 3. [root@web1 ~]# systemctl start nginx 4. 5. [root@web1 ~]# systemctl enable nginx
负载均衡高可用
lb1主要服务器配置
1. 通过搭建实现两台负载均衡器的高可用,过多不在介绍,详情请查看代理服务器配置。
1. [root@lb1 ~]# cd /etc/nginx/conf.d/ 2. 3. [root@lb1 conf.d]# rm -rf default.conf 4. 5. [root@lb1 conf.d]# vim lb.conf 6. 7. upstream web { 8. 9. server 192.168.1.6:80; 10. 11. server 192.168.1.7:80; 12. 13. } 14. 15. server { 16. 17. listen 80; 18. 19. server_name www.lb.com; 20. 21. location / { 22. 23. proxy_pass http://web; 24. 25. include nginx_params; 26. 27. } 28. 29. } 30. 31. [root@lb1 conf.d]# vim /etc/nginx/nginx_params 32. 33. proxy_set_header Host $http_host; 34. 35. proxy_set_header X-Real-IP $remote_addr; 36. 37. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 38. 39. 40. 41. proxy_connect_timeout 30; 42. 43. proxy_send_timeout 60; 44. 45. proxy_read_timeout 60; 46. 47. 48. 49. proxy_buffering on; 50. 51. proxy_buffer_size 32k; 52. 53. proxy_buffers 4 128k; 54. 55. [root@lb1 conf.d]# systemctl restart nginx
2. 修改keepalived配置文件
1. [root@lb1 ~]# vim /etc/keepalived/keepalived.conf 2. 3. global_defs { 4. 5. //省略部分内容 6. 7. router_id lb1 //该配置为主机名称, 8. 9. vrrp_strict //删除此行内容,路由器中vrrp的一些协议,linux中没有所以需要删掉 10. 11. //省略部分内容 12. 13. } 14. 15. vrrp_instance VI_1 { 16. 17. state MASTER //编辑为主要服务器 18. 19. interface ens33 //修改网卡为ens33 20. 21. virtual_router_id 51 22. 23. priority 100 //选举优先级,100为最高 24. 25. advert_int 1 26. 27. authentication { //验证模块不需要修改,主备需相同 28. 29. auth_type PASS 30. 31. auth_pass 1111 32. 33. } 34. 35. virtual_ipaddress { 36. 37. 192.168.1.200 //添加漂移地址 38. 39. } 40. 41. } 42. 43. [root@lb1 ~]# systemctl restart keepalived
lb2备份服务器配置
lb1服务器已经配置了网页通过scp命令复制过来即可。
1. [root@lb2 ~]# scp -rp root@192.168.1.4:/etc/nginx/* /etc/nginx 2. 3. [root@lb2 ~]# cd /etc/nginx/conf.d/ 4. 5. [root@lb2 conf.d]# ls 6. 7. default.conf lb.conf 8. 9. [root@lb2 conf.d]# rm -rf default.conf //删除默认网页 10. 11. [root@lb2 conf.d]# systemctl restart nginx
web配置
web1和web2配置相同下面以web1为例,相关配置参考web服务器配置。
1. [root@web1 ~]# cd /etc/nginx/conf.d/ 2. 3. [root@web1 conf.d]# rm -rf default.conf 4. 5. [root@web1 conf.d]# vim web.conf 6. 7. server { 8. 9. listen 80; 10. 11. server_name www.web.com; //本次不需要使用虚拟主机,域名随意填写即可 12. 13. location / { 14. 15. root /www; 16. 17. index index.html; 18. 19. } 20. 21. } 22. 23. [root@web1 conf.d]# nginx -t 24. 25. [root@web1 conf.d]# mkdir /www //创建网站根目录 26. 27. [root@web1 conf.d]# echo "192.168.1.6" > /www/index.html //创建网页内容,web2网页内容设置为192.168.1.7 28. 29. [root@web1 conf.d]# systemctl restart nginx
验证
客户端访问http://192.168.1.200,刷新两次可以看到web1和web2的网站内容。
测试关掉lb1主机访问漂移地址,查看lb2的主机是否获取漂移地址。
通过上图可以看到漂移地址已经到lb2主机上,访问http://192.168.1.200是否能正常访问。
开启lb1主机,查看漂移地址是否又回到本机中。
经过上面的测试已经配置成功负载均衡的高可用功能,下面将进行解决nginx故障问题详情请看理论部分。
nginx故障问题
关闭lb1服务器的nginx服务并访问漂移地址,发现漂移地址依旧在lb1上故而服务访问不了网站。下面就解决lb1服务器nginx故障造成无法访问的问题。
[root@lb1 ~]# systemctl stop nginx
1. [root@lb1 ~]# systemctl start nginx 2. 3. [root@lb1 ~]# vim /sh/check_nginx_proxy.sh 4. 5. #!/bin/bash 6. 7. killall -0 nginx 8. 9. if [ $? -ne 0 ];then 10. 11. systemctl stop keepalived 12. 13. fi 14. 15. [root@lb1 ~]# chmod +x /sh/check_nginx_proxy.sh 16. 17. [root@lb1 ~]# vim /etc/keepalived/keepalived.conf 18. 19. ! Configuration File for keepalived 20. 21. 22. 23. global_defs { 24. 25. //省略部分内容 26. 27. router_id lb1 28. 29. //省略部分内容 30. 31. } 32. 33. vrrp_script check_nginx_proxy { //添加模块内容 34. 35. script "/sh/check_nginx_proxy.sh" 36. 37. interval 2 38. 39. weight 5 40. 41. } 42. 43. state MASTER 44. 45. interface ens33 46. 47. virtual_router_id 51 48. 49. priority 100 50. 51. advert_int 1 52. 53. authentication { 54. 55. auth_type PASS 56. 57. auth_pass 1111 58. 59. } 60. 61. virtual_ipaddress { 62. 63. 192.168.1.200 64. 65. } 66. 67. track_script { //在实例内启用脚本模块 68. 69. check_nginx_proxy 70. 71. } 72. 73. } 74. 75. [root@lb1 ~]# systemctl restart keepalived
模拟损坏nginx,测试结果。
[root@lb1 ~]# systemctl stop nginx
分别再lb1和lb2上查看漂移地址,可以看到lb1上nginx损毁后,漂移地址已经到lb2上。