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那活儿
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/129755.html
摘要:开源云平台中的拼图玩具对于云平台,如今基本就意味着开源。明与暗角力开源云平台中的拼图玩具为什么会产生这种混淆正如之前谈到由两大部分组成和的计算引擎。 开源云平台中的拼图玩具 对于云平台,如今基本就意味着开源。提及开源技术,着实在云计算和大数据下火起来。面对扑面而来的云服务,无论是何种服务对于企业和用户来说都是熟悉的陌生人,熟悉是因为知道云计算的人都能说出IaaS、PaaS和SaaS这几个词,...
摘要:月日,国家会议中心,由主办的合称将强势登陆北京这是首次来华,在这场三合一的开源技术盛会中,来自国内外的开发人员架构师系统管理员专家商业领袖等数千名专业人士将汇聚一堂。后被收购,梁胜出任云平台首席技术官,也成为首位华人。 6月19-20日,国家会议中心,由The Linux Foundation主办的LinuxCon + ContainerCon + CloudOpen (合称LC3) ...
摘要:本文转自刘斌博文如何选择监控方案,文中刘斌从技术的角度深入解释了监控的数据采集原理,介绍了现有开源的监控方案,以及能够对进行监控功能的主流服务工具。下一章,刘斌将为大家介绍监控的开原方案,主流服务,及其特点。 过去的一年中,关于 Docker 的话题从未断过,而如今,从尝试 Docker 到最终决定使用 Docker 的转化率依然在逐步升高,关于 Docker 的讨论更是有增无减。另一...
摘要:而随着云计算成为转型的重要技术支撑,云计算开源也进入了下半场。房秉毅表示,在这个转型过程中,云计算显然为运营商的转型和新业务发展提供了极大的机会。但在房秉毅看来,从传统向转型的时候,尤其在云计算方面,运营商拥有两大独特优势。近年来,在云计算领域,开源技术呈现爆发式的增长,像OpenStack、KVM等已经成为云计算领域非常主流的开源应用。借用云计算领域的主流看法,这个过程就是云计算开源战场的...
摘要:有部分前端人员使用的是盗版的。非编程相关其它一些我使用的,但与编程关系不大的正版工具。尊重别人,更是尊重自己做为一个程序员,使用正版,我认为这不是自做清高的事情,这是对自己职业的一种基本尊重。 ...
阅读 1346·2023-01-11 13:20
阅读 1684·2023-01-11 13:20
阅读 1132·2023-01-11 13:20
阅读 1858·2023-01-11 13:20
阅读 4100·2023-01-11 13:20
阅读 2704·2023-01-11 13:20
阅读 1385·2023-01-11 13:20
阅读 3597·2023-01-11 13:20