大體簡介
PV(page view)即頁面瀏覽量,或點擊量,通常是衡量一個網絡網站的主要指標採用四層模式實現,主要分爲前端反向代理層、Web層、數據庫緩存層和數據庫層。前端反向代理層採用主備模式,Web層採用集羣模式,數據庫緩存層採用主備模式,數據庫層採用主從模式。
軟件 | 版本 | 簡介 | |
---|---|---|---|
Keepa | 1.3.5-6.el7 | Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepalived自動將服務器加入到服務器羣中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的服務器。 | |
nginx | 1:1.14.0-1.el7_4.ngx | Nginx 是一個很強大的高性能Web和反向代理服務器,它具有很多非常優越的特性:在連接高併發的情況下,Nginx是Apache服務器不錯的替代品 | |
jdk | 8u144-linux-x64 | JDK是 Java 語言的軟件開發工具包,主要用於移動設備、嵌入式設備上的java應用程序。JDK是整個java開發的核心,它包含了JAVA的運行環境(JVM+Java系統類庫)和JAVA工具。 | |
tomcat | apache-tomcat-8.5.23 | 是一款免費開源的jsp服務器。tomcat6.0具有tomcat管理和控制平臺、安全域管理和tomcat閥等功能,其本身就包含了一個http服務器,也可以當作單獨的web服務器看待。該軟件有着性能穩定和監督易用性的特點,是它成爲了使用最爲廣泛的jsp服務器。 | |
MySQLDB | 1:5.5.56-2.el7 | 由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點 | |
redis | 3.2.10-2.el7 | redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。 |
主機名稱 | IP | 安裝軟件 |
---|---|---|
master | 192.168.100.188內網 192.168.200.188外網 | 前端反向代理,redis緩存主機 MySQL數據主 |
backup | 192.168.10015 | 前端反響代理備機,redis 緩存備機 MySQL從庫 |
tomcat-nodel | 192.168.100.9 | web 服務tomcat jdk |
toncat-node2 | 192.168.100.10 | web 服務tomcat jdk |
- 先實現前端的反向代理並且進行測試
- 搭建keepalived nginx
Nginx反向代理和keepalived -------安裝帶有nginx rpm軟件包的源-----------主從都要做----- rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/\ nginx-release-centos-7-0.el7.ngx.noarch.rpm ------使用centos 默認倉庫完成下面的安裝---- yum install -y keepalived nginx
- 修改主配置文件參數
- 搭建keepalived nginx
vi /etc/keepalived/keepalived.conf //從上修改三個參數 BACKUP 從
! Configuration File for keepalived
global_defs {
route_id NGINX_HA
}
vrrp_script nginx { #定義腳位置
script "/opt/shell/nginx.sh"
interval 2
}
vrrp_instance VI_1 {
state MASTER #MASTER 爲主 BACKUP 爲從
interface ens33 # 網卡名稱
virtual_router_id 51 # 組號
priority 100 # 優先級 在從上面要注意
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
nginx #調用前面定義的腳本
}
virtual_ipaddress { # 虛擬IP
192.168.100.188
192.168.200.188
}
}
mkdir /opt/shell
vi /opt/shell/nginx.sh
#!/bin/bash
k=`ps -ef | grep keepalived | grep -v grep | wc -l` #當keepalived 服務開啓的時候會自動檢測nginx 若keepalived 開啓則開啓nginx
if [ $k -gt 0 ];then
/bin/systemctl start nginx.service
else
/bin/systemctl stop nginx.service
fi
chmod +x /opt/shell/nginx.sh
- 配置nginx前端調度功能
vi /etc/nginx/nginx.conf //在include 上面一行新增
upstream tomcat_pool {
server 192.168.100.9:8080; # 定義web 服務主機
server 192.168.100.10:8080;
ip_hash; #hash算法會話穩固功能,否則無法通過vip地址登陸
}
server {
listen 80;
server_name 192.168.100.188; #虛擬出的IP
location / {
proxy_pass http://tomcat_pool;
proxy_set_header X-Real-IP $remote_addr;
}
}
nginx -t -c /etc/nginx/nginx.conf //測試配置文件語法
systemctl start keepalived.service //nginx啓動會等待一會
-----------以上主從都要做--------------------
在keepalived服務開啓狀態下,關閉nginx做測試,發現每隔2秒nginx又會自動啓用
測試主從漂移地址切換。
- 搭tomcat jdk 在web服務器上搭建
---------兩臺都要做---------
tar xf apache-tomcat-8.5.23.tar.gz
tar xf jdk-8u144-linux-x64.tar.gz
cp -rv jdk1.8.0_144/ /usr/local/java
vi /etc/profile # 添加環境變量
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export PATH=$PATH:/usr/local/java/bin
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib
source /etc/profile #立即生效
java -version #允許檢測版可以看到版本信息
java version "1.8.0_144"
cp -r apache-tomcat-8.5.23 /usr/local/tomcat8
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup #啓動腳本添加到被系統識別的命令
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
tomcatup # 開啓服務
netstat -anpt | grep 8080
http://192.168.100.9:8080/ //測試默認測試頁是否正常顯示
http://192.168.100.10:8080/
cd /use.local/tomcat8/webapps/ROOT/ # 到tomcat 站點目錄
mv index.jsp index.jsp.dk
vi index.jsp //修改默認網頁內容
<h1>Server 9!!</h1>
http://192.168.100.188/ 輸入調度器地址,也就是虛擬地址,測試兩臺節點的調度情況。
cd /usr/local/tomcat8/conf/
vim server.xml //跳到行尾,在Host name下新增 148 150
<Context path="" docBase="SLSaleSystem" reloadable="true" debug="0"></Context>
日誌調試信息debug爲0表示信息越少,docBase指定訪問目錄
在主服務器上搭建MySQL主
yum install -y mariadb-server mariadb #安裝MySQL
systemctl start mariadb.service
systemctl enable mariadb.service
netstat -anpt | grep 3306
cd /usr/bin
mysql_secure_installation //常規安全設置
mysql -uroot -p
----------導入數據庫-----------
mysql -u root -p < slsaledb-2014-4-10.sql
mysql -uroot -p
show databases;
GRANT all ON slsaledb.* TO 'root'@'%' IDENTIFIED BY 'abc123';
flush privileges; #給與權限
----------------以下在兩臺tomcat節點做----------------
tar xf SLSaleSystem.tar.gz -C /usr/local/tomcat8/webapps/
cd /usr/local/tomcat8/webapps/SLSaleSystem/WEB-INF/classes # 導入商場環境頁面
vi jdbc.properties //修改數據庫IP地址是VRRP的虛擬IP,以及授權的用戶名root和密碼abc123。
------------網站測試------
http://192.168.100.9:8080/ //默認的用戶名admin 密碼:123456
http://192.168.100.10:8080/
http://192.168.175.188 //輸入虛擬地址測試登錄,並且關閉主再測試登錄
搭建redis集羣
----------在主服務器和從服務器上做-----
使用centos7.4 默認源安裝
yum install -y epel-release
yum install redis -y
vi /etc/redis.conf
bind 0.0.0.0 #修改
systemctl start redis.service
netstat -anpt | grep 6379
redis-cli -h 192.168.175.128 -p 6379 //測試連接
192.168.100.9:6379> set name test //設置name 值是test
192.168.100.10:6379> get name //獲取name值
從服務器上多如下一行配置------
266 slaveof 192.168.100.188 6379 //主服務器的IP不是虛擬IP
redis-cli -h 192.168.100.188 -p 6379 //登錄從,獲取值,成功說明主從同步成功
192.168.100.188:6379> get name
"test"
-------------配置商城項目中連接redis的參數---
vi /usr/local/tomcat8/webapps/SLSaleSystem/WEB-INF/classes/applicationContext-mybatis.xml
38 <!--redis 配置 開始-->
47 <constructor-arg value="192.168.100.188"/> #虛擬IP
48 <constructor-arg value="6379"/>
------------以下測試緩存效果-----
redis-cli -h 192.168.100.188 -p 6379
192.168.100.188:6379> info
keyspace_hits:1 或者 keyspace_misses:2//關注這個值,命中數和未命中數
登錄商城,然後反覆點擊需要數據庫參與的操作頁面,再回來檢查keyspace_hits或者keyspace_misses: 值變化。
---------以下配置redis集羣主從切換---只在主服務器是操作--------
redis-cli -h 192.168.175.128 info Replication //獲取當前服務器的角色
vi /etc/redis-sentinel.conf
17 protected-mode no
68 sentinel monitor mymaster 192.168.175.128 6379 1 //1表示1臺從 注意:修改
98 sentinel down-after-milliseconds mymaster 3000 //故障切換時間單位是毫秒
service redis-sentinel start //啓動集羣
netstat -anpt | grep 26379
redis-cli -h 192.168.175.128 -p 26379 info Sentinel //查看集羣信息
-----------驗證主從切換----
在主上
service redis stop
redis-cli -h 192.168.100.1 -p 26379 info Sentinel //發現主變成了1
------驗證數據同步情況---
redis-cli -h 192.168.175.130 -p 6379
192.168.175.130:6379> set name2 test2
OK
192.168.175.130:6379> get name2
"test2"
service redis start //把主啓動
redis-cli -h 192.168.175.128 -p 6379
192.168.175.128:6379> get name2
"test2"
MySQL主從配置
--------mysql主服務器配置-------
vi /etc/my.cnf //[mysqld]下
binlog-ignore-db=mysql,information_schema
character_set_server=utf8
log_bin=mysql_bin
server_id=1
log_slave_updates=true
sync_binlog=1
systemctl restart mariadb
netstat -anpt | grep 3306
mysql -u root
show master status; //記錄日誌文件名稱和 位置值
grant replication slave on *.* to 'rep'@'192.168.175.%' identified by '123456';
flush privileges;
----------mysql從服務器配置-------
vi /etc/my.cnf //[mysqld]下
server_id=2
systemctl restart mariadb
netstat -anpt | grep 3306
mysql -u root
change master to master_host='192.168.175.128',master_user='rep',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=245;
start slave;
show slave status\G; #檢測是否同步
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
-----------以下可以測試主上操作,從同步情況-------