實驗簡介
本文主要介紹雙主模型的nginx proxy高可用集群的搭建方式。
實驗環境:
- 使用nfs/ftp服務器,nfs提供頁面數據共享,ftp提供程序下載
- 使用單獨的mariadb服務器提供關系型數據庫
- 使用兩臺httpd服務器提供頁面服務,包括靜態的html和動態的php(phpmyadmin、wordpress、phpinfo)
- 使用兩臺nginx作為兩臺httpd的負載均衡器
- 對兩臺nginx配置keepalived保證集群的高可用
拓撲圖
配置
nfs/ftp 192.168.45.201
#修改主機名 hostnamectl set-hostname nfs.easy.com #同步時間 yum install -y ntp ntpdate #搭建nfs yum install -y nfs-utils mkdir /data/html -pv vim /etc/exports /data/html 192.168.45.0/24(rw) systemctl start nfs showmount -e #搭建ftp yum install -y vsftpd yum install -y lrzsz cd /var/ftp/pub rz 上傳phpMyAdmin-4.0.10.20-all-languages.zip 上傳wordpress-4.7.4-zh_CN.tar.gz
mariadb 192.168.45.202
#修改主機名 hostnamectl set-hostname mydb.easy.com #同步時間 yum install -y ntp ntpdate #搭建mariadb yum install -y mariadb-server vim /etc/my.cnf.d/server.cnf [mysqld] skip_name_resolve=1 log-bin=mysql-bin innodb_file_per_table = 1 systemctl start mariadb.service #簡單配置mariadb mysql_secure_installation mysql -uroot -peasy GRANT ALL ON *.* TO 'root'@'192.168.45.%' IDENTIFIED BY 'easy'; CREATE DATABASE wordpress; SELECT * FROM mysql.user \G ; SHOW DATABASES;
web1 192.168.45.11
#修改主機名 hostnamectl set-hostname web1.easy.com #同步時間 yum install -y ntp ntpdate yum install -y httpd php php-mysql php-mcrypt php-mbstring #掛載nfs yum install -y nfs-utils mkdir /data/html -pv mount 192.168.45.201:/data/html /var/www/html #創建phpMyAdmin wordpress yum install -y wget wget ftp://192.168.45.201/pub/phpMyAdmin-4.0.10.20-all-languages.zip wget ftp://192.168.45.201/pub/wordpress-4.7.4-zh_CN.tar.gz tar xf wordpress-4.7.4-zh_CN.tar.gz yum install -y unzip unzip phpMyAdmin-4.0.10.20-all-languages.zip mv /root/wordpress /var/www/html/wordpress-4.7.4 mv /root/phpMyAdmin-4.0.10.20-all-languages /var/www/html cd /var/www/html ln -sv phpMyAdmin-4.0.10.20-all-languages pma ln -sv wordpress-4.7.4 wp ls /var/www/html #創建主頁 vim /var/www/html/index.php <h1>This is index pages</h1> <?php phpinfo(); ?> #創建負載均衡測試頁 mkdir /var/www/lbtest echo "web server1">> /var/www/lbtest/test.html cat /var/www/lbtest/test.html #配置httpd虛擬主機 vim /etc/httpd/conf.d/vhost.conf listen 8080 <VirtualHost 192.168.45.11:80> DocumentRoot /var/www/html Servername www.easy.com <Directory '/var/www/html'> Options FollowsymLinks AllowOverride None Require all granted </Directory> </VirtualHost> <VirtualHost 192.168.45.11:8080> DocumentRoot /var/www/lbtest <Directory '/var/www/lbtest'> Options None AllowOverride None Require all granted </Directory> </VirtualHost> systemctl start httpd #配置php-mysql vim /etc/php.ini mysqli.default_host = 192.168.45.202 mysqli.default_user = root mysqli.default_pw = easy systemctl restart httpd #配置phpMyAdmin cd /var/www/html/pma cp config.sample.inc.php config.inc.php vim config.inc.php $cfg['blowfish_secret'] = 'a8baskdljalskd7c6d'; $cfg['Servers'][$i]['host'] = '192.168.45.202'; #配置wordpress cd /var/www/html/wp cp wp-config-sample.php wp-config.php vim wp-config.php define('DB_NAME', 'wordpress'); define('DB_USER', 'root'); define('DB_PASSWORD', 'easy'); define('DB_HOST', '192.168.45.202');
web2 192.168.45.12
#修改主機名 hostnamectl set-hostname web2.easy.com #同步時間 yum install -y ntp ntpdate yum install -y httpd php php-mysql php-mcrypt php-mbstring #掛載nfs yum install -y nfs-utils mkdir /data/html -pv mount 192.168.45.201:/data/html /var/www/html #創建負載均衡測試頁 mkdir /var/www/lbtest echo "web server2">> /var/www/lbtest/test.html cat /var/www/lbtest/test.html #配置httpd虛擬主機 vim /etc/httpd/conf.d/vhost.conf listen 8080 <VirtualHost 192.168.45.12:80> DocumentRoot /var/www/html Servername www.easy.com <Directory '/var/www/html'> Options FollowsymLinks AllowOverride None Require all granted </Directory> </VirtualHost> <VirtualHost 192.168.45.12:8080> DocumentRoot /var/www/lbtest <Directory '/var/www/lbtest'> Options None AllowOverride None Require all granted </Directory> </VirtualHost> systemctl start httpd #配置php-mysql vim /etc/php.ini mysqli.default_host = 192.168.45.202 mysqli.default_user = root mysqli.default_pw = easy systemctl restart httpd
nginx1 192.168.45.201
#修改主機名 hostnamectl set-hostname nginx1.easy.com #同步時間 yum install -y ntp ntpdate yum install -y psmisc #killall指令安裝 #配置nginx負載均衡 yum install -y nginx vim /etc/nginx/nginx.conf http { upstream backend { server 192.168.45.11:80; server 192.168.45.12:80; } upstream lbtest { server 192.168.45.11:8080; server 192.168.45.12:8080; } server{ location / { proxy_pass http://backend; } location ~* 'test.html$' { proxy_pass http://lbtest; } } } systemctl start nginx #配置keepalived yum install -y keepalived mv /etc/keepalived/keepalived.conf{,.bak} vim /etc/keepalived/keepalived.conf !Configuration File for keepalived global_defs { notification_email { root@localhost; } notification_email_from keepadmin@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 route_id nginx1 vrrp_mcast_group4 224.51.151.251 } vrrp_instance VI_1{ state MASTER priority 100 interface ens37 advert_int 1 authentication { auth_type PASS auth_pass SWF5FW2DF } virtual_ipaddress { 172.16.51.1/16 dev ens37 label ens37:0 } notify_master "/etc/keepalived/notify.sh master" notify_bachup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" } vrrp_instance VI_2{ state BACKUP interface ens37 virtual_router_id 52 priority 96 advert_int 1 authentication { auth_type PASS auth_pass 7D2SS5DF } virtual_ipaddress { 172.16.51.2/16 dev ens37 label ens37:1 } track_script { chk_down chk_nginx } notify_master "/etc/keepalived/notify.sh master" notify_bachup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" } #配置通知腳本 vim /etc/keepalived/notify.sh #!/bin/bash # contact='root@localhost' notify(){ local mailsubject="$(hostname) to be $1 ,vip floating" local mailbody="$(date +'%F $T'):vrrp transition,$(hostname) changed to be $1" echo "$mailbody" |mail -s "$mailsubject" $contact } case $1 in master) systemctl start nginx.service notify master ;; backup) systemctl start nginx.service notify backup ;; fault) systemctl stop nginx.service notify fault ;; *) echo "ERROR" exit 1 ;; esac
nginx2 192.168.45.202
#修改主機名 hostnamectl set-hostname nginx2.easy.com #同步時間 yum install -y ntp ntpdate yum install -y psmisc #killall指令安裝 #配置nginx負載均衡 yum install -y nginx mv /etc/nginx/nginx.conf{,.bak} 接受nginx1傳送配置后 systemctl start nginx #配置keepalived yum install -y keepalived mv /etc/keepalived/keepalived.conf{,.bak} vim /etc/keepalived/keepalived.conf !Configuration File for keepalived global_defs { notification_email { root@localhost; } notification_email_from keepadmin@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 route_id nginx2 vrrp_mcast_group4 224.51.151.251 } vrrp_script chk_down{ script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0 " interval 1 weight -5 fall 1 rise 1 } vrrp_script chk_nginx{ script "killall -0 nginx && exit 0 || exit 1" interval 1 weight -5 fall 2 rise 2 } vrrp_instance VI_1{ state BACKUP interface ens37 virtual_router_id 51 priority 96 advert_int 1 authentication { auth_type PASS auth_pass SWF5FW2DF } virtual_ipaddress { 172.16.51.1/16 dev ens37 label ens37:0 } track_script { chk_down chk_nginx } notify_master "/etc/keepalived/notify.sh master" notify_bachup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" } vrrp_instance VI_2{ state MASTER interface ens37 virtual_router_id 52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 7D2SS5DF } virtual_ipaddress { 172.16.51.2/16 dev ens37 label ens37:1 } track_script { chk_down chk_nginx } notify_master "/etc/keepalived/notify.sh master" notify_bachup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" } #配置通知腳本 vim /etc/keepalived/notify.sh #!/bin/bash # contact='root@localhost' notify(){ local mailsubject="$(hostname) to be $1 ,vip floating" local mailbody="$(date +'%F $T'):vrrp transition,$(hostname) changed to be $1" echo "$mailbody" |mail -s "$mailsubject" $contact } case $1 in master) systemctl start nginx.service notify master ;; backup) systemctl start nginx.service notify backup ;; fault) systemctl stop nginx.service notify fault ;; *) echo "ERROR" exit 1 ;; esac
實驗總結
BUG
- 該環境配置完成后出現BUG,chk_nginx腳本并不會真正的檢測nginx,來對keepalived權重進行調整
待完善
- 該實驗環境只是實現基本功能,部分配置存在安全隱患
- 該環境單點狀況過多,需要提升頁面資源的nfs服務器和關系型數據庫mariadb服務器的高可用性
- httpd服務器沒有實現動靜分離
- httpd服務器負載均衡不能保持會話,需要增加session服務器
- 增加cache服務器可以大幅度提高瀏覽速度
原創文章,作者:easyTang,如若轉載,請注明出處:http://www.www58058.com/78553