Nginx 是一個高性能的HTTP和反向代理web服務器,因它的穩定性、豐富的功能集、簡單的配置文件和低系統資源的消耗而聞名。Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特點是占有內存少,并發能力強,事實上nginx的并發能力在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。Nginx是同類型軟件中應用范圍最廣的開源類的反向代理服務器。
Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。目前生產中如果不是應用于容器和微服務,在同類型web應用服務器中Tomcat是一個不錯的選擇。
Redis是一個高性能的key-value數據庫。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。
區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。redis的出現,很大程度補償了memcached這類key/value存儲的不足,在部分場合可以對關系數據庫起到很好的補充作用。Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。Redis還支撐集群。redis-cluster采用無中心結構,每個節點都維護著集群的信息,并且節點之間互相通信;節點的 fail 是通過集群中超過半數的節點檢測失效時才生效無需人為干擾;客戶端與redis節點直連不需要中間proxy層,client根據node返回的錯誤信息重定向請求;redis-cluster實現了故障轉移、負載均衡、高可用性、高并發等功能。
MySQL 是最流行的關系型數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。MySQL所使用的 SQL 語言是用于訪問數據庫的最常用標準化語言。MySQL 軟件采用了雙授權政策,分為社區版和商業版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站數據庫。與其他的大型數據庫例如 Oracle、DB2、SQL Server等相比,MySQL [1] 自有它的不足之處,但是這絲毫也沒有減少它受歡迎的程度。對于一般的個人使用者和中小型企業來說,MySQL提供的功能已經綽綽有余,而且由于 MySQL是開放源碼軟件,因此可以大大降低總體擁有成本。
Linux作為操作系統,Apache 或Nginx作為 Web 服務器,MySQL 作為數據庫,PHP/Perl/Python作為服務器端腳本解釋器。由于這四個軟件都是免費或開放源碼軟件(FLOSS),因此使用這種方式不用花一分錢(除開人工成本)就可以建立起一個穩定、免費的網站系統,被業界稱為“LAMP“或“LNMP”組合。
RHEL 6.5 / CENTOS 6.5 及以上
開源軟件生產安裝要求一般要求最新穩定版本,以下安裝版本是目前要求版本,具體如下所示:
Nginx1.20.1、jdk1.8.0_144、Tomcat-8.5.71、keepalive-2.1.0、redis5.0.13、mysql5.7.35
依賴:針對不同的軟件需要不同的依賴包,具體如下所示:
Nginx:openssl openssl-devel zlib zlib-devel pcre pcre-devel gcc make automake autoconf libtool gcc-c++
Tomcat:主要依賴于jdk環境
Redis:tcl gcc make
Mysql:無
Linux下root賬號安裝:
yum install libaio openssl openssl-devel tcl ssl * gcc* lua zlib zlib-devel pcre pcre-devel-y
每個環節必須要求存在高可用,nginx+keepalived實現高可用,mysql+keepalived實現高可用,redis哨兵或集群架構實現高可用。
網絡1000Mbps及以上
內存和cpu針對不同的軟件建議不同的大小,如下
Nginx:4G2C
Tomcat:8G4C+
Redis:內存建議8G及以上,CPU4個以上
Mysql:內存建議8G及以上,CPU4個以上
關閉防火墻
systemctl stop firewalld.service 或service iptables stop
禁用防火墻
systemctl disable firewalld.service 或 chkconfig iptables off
安裝依賴包:
yum install gcc* openssl* ssl* -y
解壓keepalived安裝包并進去加壓目錄:
./configure --prefix=/data/keepalived/
創建軟連接:
ln-s/data/keepalived/etc/keepalived/
keepalived.conf /etc/keepalived/keepalived.conf
cat /data/keepalived/sbin/check.sh
#!/bin/bash
ps=`ss -anl|grep LISTEN|grep -w 8080|wc -l`
if [$ps -ne 1]; then
pkill keepalived
fi
注:check.sh的權限必須是700才能調用執行:
chmod 700 /data/keepalived/sbin/check.sh
cat /data/keepalived/etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_script chk_local {
script "/data/keepalived/sbin/check.sh"
interval 3
weight -2
}
vrrp_instance VI_1 {
state BACKUP #slave: state BACKUP
interface eth0
virtual_router_id 51
priority 100 #slave: priority 90
nopreempt #不搶占
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.66
}
track_script {
chk_local
}
}
/data/keepalived/sbin/keepalived -f
/data/keepalived/etc/keepalived/keepalived.conf -S 0
注:nginx和mysql的keepalived高可用安裝配置一樣,只是把監聽nginx的端口換成監聽mysql的端口即可。
配置執行以下命令
cd /data/nginx-1.12.0
./configure --prefix=/data/nginx
--with-http_realip_module
--with-http_sub_module
--with-http_flv_module
--with-http_dav_module
--with-http_gzip_static_module
--with-http_stub_status_module
--with-http_addition_module
--with-http_ssl_module
編譯
make
安裝
make install
修改配置文件
vi /data/nginx/conf/nginx.conf
a.添加如下代碼:
location /nginx_status {
stub_status on; #開啟stub_status監控模塊
access_log off; #訪問日志不記錄到log中
allow 127.0.0.1; #只允許本機訪問
deny all; # 不允許其他ip地址訪問
}
b.到 server 所在代碼段:
include /data/nginx/conf/conf.d/*.conf
c.在http模塊中填下如下代碼:
server_tokens off; #屏蔽nginx的版本號
修改nginx端口
由于非root用戶只能使用大于1024的的端口,
修改 port :80 為 port :7280
/data/nginx/sbin/nginx -c /data/nginx/conf/nginx.conf
查看啟動進程 ps -ef| grep nginx
訪問 http://localhost:7280
訪問 http://localhost:7280/nginx_status
在http模塊中填下如下代碼:
upstream webserver {
server tomcat1_ip:port;
server tomcat2_ip:port;
server tomcat3_ip:port;
server tomcat4_ip:port;
}
注:該配置為nginx進來的請求輪詢依次分發到后端各web服務,upstream后端的webserver名字在server模塊中localtion代碼段里面添加如下內容:
proxy_pass http://webserver。
tar -zxvf jdk-8u144-linux-x64.tar.gz
mv /data/jdk1.8.0_144 /data/jdk
tar -zxvf apache-tomcat-8.5.71.tar.gz
mv /data/apache-tomcat-8.5.71 /data/tomcat
vim .bash_profile
JAVA_HOME=/data/jdk
JAVA_BIN=/data/jdk/bin
PATH=$PATH:$JAVA_BIN
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
source .bash_profile
java -version
vi /data/tomcat/conf/server.xml
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="400" minSpareThreads="200" maxSpareThreads="500"
connectionTimeout="200000" maxHttpHeaderSize="102400" maxPostSize="-1"
redirectPort="8443" URIEncoding="UTF-8" />
<Host name="localhost" appBase="/data/tomcat/webapps"
unpackWARs="true" autoDeploy="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="%h|%{X-FORWARDED-FOR}i|%l|%u|%t|%r|%s|%T|%b|%{Referer}i|%{User-Agent}i" />
vi catalina.sh
JAVA_OPTS="-server -Xmx4g -Xms4g -Xmn256m -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M -Xss256k -
XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -
XX:+CMSParallelRemarkEnabled -XX:LargePageSizeInBytes=128m -
XX:+UseFastAccessorMethods -
XX:+UseCMSInitiatingOccupancyOnly -
XX:CMSInitiatingOccupancyFraction=70 -Duser.timezone=GMT+8 -
verbose:gc -Xloggc:$CATALINA_BASE/logs/gc.log -
XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -
XX:+PrintGCDetails"
確認 /data 目錄其他用戶有寫權限,確認依賴包gcc/tcl/make
安裝包:redis-5.0.13.tar.gz
主備三臺主機,三臺主機單節點安裝啟動方式一模一樣
解壓:tar -xvf redis-5.0.13.tar.gz -C /data
cd /data/redis-5.0.13
make MALLOC=libc
cd src ; make test
cd ../
make install PREFIX=/data/redis
cd ../redis
mkdir data log conf tmp monitor
每臺主機需要配置兩個配置文件分別為7001端口和7002端口,配置要求如下所示:
cat /data/redis/conf/7001.conf
bind 0.0.0.0
protected-mode yes
port 7001
tcp-backlog 511
timeout 0
tcp-keepalive 60
daemonize yes
supervised no
pidfile /data/redis/tmp/redis7001.pid
loglevel verbose
logfile "/data/redis/log/redis.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data/redis/data
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
requirepass d^L8sU_s9
masterauth d^L8sU_s9
maxclients 20000
maxmemory 4G
maxmemory-policy volatile-lru
maxmemory-samples 3
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
aof-rewrite-incremental-fsync yes
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
cluster-replica-validity-factor 0
cluster-require-full-coverage no
hz 100
cat /data/redis/conf/7001.conf配置中只需要把7001改成7002。
三臺主機redis都安裝完成后,把3臺主機6個redis都啟動,啟動命令如下:
/data/redis/bin/redis-server /data/redis/conf/7001.conf
/data/redis/bin/redis-server /data/redis/conf/7002.conf
任意一臺redis主機上執行如下命令:
/data/redis/bin/redis-cli --cluster create ip1:7001 ip1:7002
ip2:7001 ip2:7002 ip3:7001 ip3:7002 --cluster-replicas 1 -a d^L8sU_s9
檢查集群信息:
/data/redis/bin/redis-cli -c -h ip1 -p 7001 -a d^L8sU_s9 cluster info
檢查集群節點狀態:
/data/redis/bin/redis-cli -c -h ip1 -p 7001 -a d^L8sU_s9 cluster ndoes
檢查單節點信息:
/data/redis/bin/redis-cli -c -h ip1 -p 7001 -a d^L8sU_s9 info
確認 /data 目錄其他用戶有寫權限
安裝包:mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz
準備兩臺主機
解壓:tar -xvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz -C /data
進入安裝目錄并重命名解壓目錄并進入目錄:
cd /data && mv mysql-5.7.35-linux-glibc2.12-x86_64 mysql && cd /data/mysql
創建數據及日志等目錄:
mkdir data log
根據配置文件初始化mysql:
./bin/mysqld --defaults-
file=/data/mysql/conf/my.cnf --initialize-insecure --
user=mysql --innodb_undo_tablespaces=3
Mysql配置文件如下:
cat /data/mysql/conf/my.cnf
[client]
port=3306
socket=/tmp/mysql.sock
default-character-set=utf8
[mysql]
no-auto-rehash
default-character-set=utf8
[mysqld]
socket=/tmp/mysql.sock
basedir=/data/mysql
datadir=/data/mysql/data
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
port=3306
character-set-server=utf8
explicit_defaults_for_timestamp=true
lower_case_table_names=1
back_log=200
max_connections=3000
max_connect_errors=100000
table_open_cache=512
external-locking=FALSE
max_allowed_packet=1024M
sort_buffer_size=8M
join_buffer_size=8M
thread_cache_size=51
query_cache_size=32M
#query_cache_limit=4M
transaction_isolation=REPEATABLE-READ
tmp_table_size=96M
max_heap_table_size=96M
skip-name-resolve
###***slowqueryparameters
slow_query_log_file=/data/mysql/log/slow.log
long_query_time=1
slow_query_log = 1
###***binlogparameters
log-bin=/data/mysql/log/mysql-bin
binlog_cache_size=16M
max_binlog_cache_size=128M
max_binlog_size=512M
binlog_format=ROW
expire_logs_days=7
###***MyISAMparameters
key_buffer_size=16M
read_buffer_size=8M
read_rnd_buffer_size=16M
bulk_insert_buffer_size=8M
#***Innodbstorageengineparameters
innodb_buffer_pool_size=4G
innodb_data_file_path=ibdata1:1G:autoextend
innodb_read_io_threads=8
innodb_write_io_threads=8
innodb_thread_concurrency=16
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=16M
innodb_log_file_size=512M
innodb_log_files_in_group=4
innodb_max_dirty_pages_pct=75
innodb_buffer_pool_dump_pct=75
innodb_lock_wait_timeout=50
innodb_file_per_table=on
innodb_undo_tablespaces=3
###***master-slave replication parameters
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=4
slave-parallel-type=LOGICAL_CLOCK
slave-preserve-commit-order=1
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
[mysqldump]
quick
max_allowed_packet=1024M
[myisamchk]
key_buffer=16M
sort_buffer_size=16M
read_buffer=8M
write_buffer=8M
[mysqld_safe]
open-files-limit=8192
log-error=/data/mysql/log/error.log
pid-file=/data/mysql/log/mysqld.pid
啟動主從mysql:
/data/mysql/bin/mysqld_safe --defaults-
file=/data/mysql/conf/my.cnf &
主庫操作:登陸mysql:
/data/mysql/bin/mysql -uroot
mysql>update mysql.user set authentication_string=password(*) where user=root;
mysql>flush privileges;
mysql>grant replication slave on *.* to repl@% identified by ****;
從庫操作:登陸mysql:
/data/mysql/bin/mysql -uroot
mysql>change master to master_host=主庫ip,master_user=repl,master_port=3306,master_password=Rep
2018#,master_auto_position=1;
mysql>start slave;
從庫操作:
mysql>grant replication slave on *.* to repl@% identified
by ****;
主庫操作:
mysql>change master to master_host=從庫ip,master_user=repl,master_port=3306,master_password=Rep
2018#,master_auto_position=1;
mysql>start slave;
db1操作:
a. 登陸數據庫
Create database if not exists dbname;
b. 查看db2是否已通過過來dbname。
db2操作:
a. 登陸數據庫
use dbname
create table tablename (id int(11),name varchar(25) );
b. 查看db1是否已同步過來tablename。
至此一個實現高可用反向代理集群即安裝完成,簡單的架構如上圖所示;
nginx主要實現高可用反向代理負載均衡功能;
web服務多機主要提高程序的的并發處理能力及避免單點故障;
redis做緩存數據庫可以緩存不怎么修改的配置信息或序列計數等信息提高程序的處理效率;
mysql主從主要就是存儲數據并保障主從讀寫分離機failover自動切換避免單點故障。
更多精彩干貨分享
點擊下方名片關注
IT那活兒
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/129755.html
摘要:開源云平臺中的拼圖玩具對于云平臺,如今基本就意味著開源。明與暗角力開源云平臺中的拼圖玩具為什么會產生這種混淆正如之前談到由兩大部分組成和的計算引擎。 開源云平臺中的拼圖玩具?對于云平臺,如今基本就意味著開源。提及開源技術,著實在云計算和大數據下火起來。面對撲面而來的云服務,無論是何種服務對于企業和用戶來說都是熟悉的陌生人,熟悉是因為知道云計算的人都能說出IaaS、PaaS和SaaS這幾個詞,...
摘要:月日,國家會議中心,由主辦的合稱將強勢登陸北京這是首次來華,在這場三合一的開源技術盛會中,來自國內外的開發人員架構師系統管理員專家商業領袖等數千名專業人士將匯聚一堂。后被收購,梁勝出任云平臺首席技術官,也成為首位華人。 6月19-20日,國家會議中心,由The Linux Foundation主辦的LinuxCon + ContainerCon + CloudOpen (合稱LC3) ...
摘要:本文轉自劉斌博文如何選擇監控方案,文中劉斌從技術的角度深入解釋了監控的數據采集原理,介紹了現有開源的監控方案,以及能夠對進行監控功能的主流服務工具。下一章,劉斌將為大家介紹監控的開原方案,主流服務,及其特點。 過去的一年中,關于 Docker 的話題從未斷過,而如今,從嘗試 Docker 到最終決定使用 Docker 的轉化率依然在逐步升高,關于 Docker 的討論更是有增無減。另一...
摘要:而隨著云計算成為轉型的重要技術支撐,云計算開源也進入了下半場。房秉毅表示,在這個轉型過程中,云計算顯然為運營商的轉型和新業務發展提供了極大的機會。但在房秉毅看來,從傳統向轉型的時候,尤其在云計算方面,運營商擁有兩大獨特優勢。近年來,在云計算領域,開源技術呈現爆發式的增長,像OpenStack、KVM等已經成為云計算領域非常主流的開源應用。借用云計算領域的主流看法,這個過程就是云計算開源戰場的...
摘要:有部分前端人員使用的是盜版的。非編程相關其它一些我使用的,但與編程關系不大的正版工具。尊重別人,更是尊重自己做為一個程序員,使用正版,我認為這不是自做清高的事情,這是對自己職業的一種基本尊重。 ...
閱讀 1353·2023-01-11 13:20
閱讀 1699·2023-01-11 13:20
閱讀 1211·2023-01-11 13:20
閱讀 1902·2023-01-11 13:20
閱讀 4161·2023-01-11 13:20
閱讀 2749·2023-01-11 13:20
閱讀 1397·2023-01-11 13:20
閱讀 3664·2023-01-11 13:20