1. haproxy实现session粘性,负载均衡php。

vim /etc/haproxy/haproxy.cfg

listen web_port
    bind 192.168.50.100:80
    balance    roundrobin
    mode http
    log global
    cookie websrv insert nocache indirect
    server web1 192.168.50.1:80 check inter 3000 fall 2 rise 5 cookie web1
    server web1 192.168.50.2:80 check inter 3000 fall 2 rise 5 cookie web1

2. tomcat实现会话复制集群。

设备规划:

IP                  主机名      服务

192.168.50.100    proxy      调度器        nginx

192.168.50.1      t1       tomcat1  jdk8、tomcat

192.168.50.2      t2       tomcat2  jkd8、tomcat

1#在proxy主机设置nginx实现后端tomcat主机轮询
vim /etc/nginx/conf.d/tomcat.conf

<proxy balancer://tomcat-server>
    BalancerMember http://t1:8080 loadfactor=1
    BalancerMember http://t2:8080 loadfactor=1
</proxy>


<virtualHost *:80>
        servername             proxy
        proxyrequests            off
        proxyvia                     on
        proxypreservehost       on
        proxypass                / balancer://tomcat-serer/
        proxypassreverse      / balancer://tomcat-serer/
<virtualHost>

systemctl restart nginx

 

2#在t1后端tomcat主机上修改conf/server.xml

vim /usr/local/tomcat/conf/server.xml


.....以上省略.....
   <Host name="t1"  appBase="/data/webapps" unpackWARs="true"
autoDeploy="true">
###################在<Host> </host>块中间加下面一段内容
##############################
     <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
 channelSendOptions="8">
 <Manager className="org.apache.catalina.ha.session.DeltaManager"
   expireSessionsOnShutdown="false"
   notifyListenersOnReplication="true"/>
 <Channel className="org.apache.catalina.tribes.group.GroupChannel">
 <Membership className="org.apache.catalina.tribes.membership.McastService"
 address="230.100.100.100"   #指定不冲突的多播地址
 port="45564"
 frequency="500"
 dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
  address="192.168.50.1"          #指定网卡的IP
  port="4000"
  autoBind="100"
  selectorTimeout="5000"
  maxThreads="6"/>
 <Sender 
className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
 <Transport 
className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
 </Sender>
<Interceptor 
className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor 
className="org.apache.catalina.tribes.group.interceptors.MessageDispatchIntercep
tor"/>
</Channel>
 <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
 filter=""/>
 <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
 <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
 tempDir="/tmp/war-temp/"
 deployDir="/tmp/war-deploy/"
 watchDir="/tmp/war-listen/"
 watchEnabled="false"/>
 <ClusterListener 
className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
#######################################以上内容是新加的
#################################
     </Host>
   </Engine>
 </Service>
</Server>

systemctl restart tomcat

 

3#在t2后端tomcat主机上修改conf/server.xml

vim /usr/local/tomcat/conf/server.xml


.....以上省略.....
   <Host name="t2"  appBase="/data/webapps" unpackWARs="true"
autoDeploy="true">
###################在<Host> </host>块中间加下面一段内容
##############################
     <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
 channelSendOptions="8">
 <Manager className="org.apache.catalina.ha.session.DeltaManager"
   expireSessionsOnShutdown="false"
   notifyListenersOnReplication="true"/>
 <Channel className="org.apache.catalina.tribes.group.GroupChannel">
 <Membership className="org.apache.catalina.tribes.membership.McastService"
 address="230.100.100.100"   #指定不冲突的多播地址
 port="45564"
 frequency="500"
 dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
  address="192.168.50.2"          #指定网卡的IP
  port="4000"
  autoBind="100"
  selectorTimeout="5000"
  maxThreads="6"/>
 <Sender 
className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
 <Transport 
className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
 </Sender>
<Interceptor 
className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor 
className="org.apache.catalina.tribes.group.interceptors.MessageDispatchIntercep
tor"/>
</Channel>
 <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
 filter=""/>
 <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
 <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
 tempDir="/tmp/war-temp/"
 deployDir="/tmp/war-deploy/"
 watchDir="/tmp/war-listen/"
 watchEnabled="false"/>
 <ClusterListener 
className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
#######################################以上内容是新加的
#################################
     </Host>
   </Engine>
 </Service>
</Server>

systemctl restart tomcat

 

4# 修改t1主机的应用的web.xml文件

cp -a /usr/local/tomcat/webapps/ROOT/WEB-INF/ /data/webapps/ROOT/

vim /data/webapps/ROOT/WEB-INF/web.xml

 </description>
<distributable/>  #添加此行
</web-app>

systemctl restart tomcat

 

5# 修改t2主机的应用的web.xml文件

cp -a /usr/local/tomcat/webapps/ROOT/WEB-INF/ /data/webapps/ROOT/

vim /data/webapps/ROOT/WEB-INF/web.xml

 </description>
<distributable/>  #添加此行
</web-app>

systemctl restart tomcat

 

3. redis解释rdb, aof区别,优缺点?

 

rdb:基于时间的快照,其默认只保留当前最新的一次快照,特点是执行速度比较快。

优点:

(1)RDB快照保存了某个时间点的数据,可以通过脚本执行redis指令bgsave(非阻塞,后台执行)或者
save(会阻塞写操作,不推荐)命令自定义时间点备份,可以保留多个备份,当出现问题可以恢复到不
同时间点的版本,很适合备份,并且此文件格式也支持有不少第三方工具可以进行后续的数据分析
(2)RDB可以最大化Redis的性能,父进程在保存 RDB文件时唯一要做的就是fork出一个子进程,然后

这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘工/0操作。
(3)RDB在大量数据,比如几个G的数据,恢复的速度比AOF的快。
缺点:
(1)不能实时保存数据,可能会丢失自上一次执行RDB备份到当前的内存数据

(2)当数据量非常大的时候,从父进程fork子进程进行保存至RDB文件时需要一点时间,可能是毫秒或

者秒,取决于磁盘IO性能
 
 

aof:按照操作顺序依次将操作追加到指定的日志文件末尾。

AOF 和 RDB 一样使用了写时复制机制,AOF默认为每秒钟 fsync一次,即将执行的命令保存到AOF文件
当中,这样即使redis服务器发生故障的话最多只丢失1秒钟之内的数据,也可以设置不同的fsync策略
always,即设置每次执行命令的时候执行fsync,fsync会在后台执行线程,所以主线程可以继续处理用
户的正常请求而不受到写入AOF文件的I/O影响
优点:
(1)数据安全性相对较高,根据所使用的fsync策略(fsync是同步内存中redis所有已经修改的文件到存

储设备),默认是appendfsync everysec,即每秒执行一次 fsync,在这种配置下,Redis 仍然可以保
持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据( fsync会在后台线程执行,
所以主线程可以继续努力地处理命令请求)
(2)由于该机制对日志文件的写入操作采用的是append模式,因此在写入过程中不需要seek, 即使出现

宕机现象,也不会破坏日志文件中已经存在的内容。然而如果本次操作只是写入了一半数据就出现
了系统崩溃问题,不用担心,在Redis下一次启动之前,可以通过 redis-check-aof 工具来解决数据
一致性的问题
(3)Redis可以在 AOF文件体积变得过大时,自动地在后台对AOF进行重写,重写后的新AOF文件包含了

恢复当前数据集所需的最小命令集合。整个重写操作是绝对安全的,因为Redis在创建新 AOF文件
的过程中,append模式不断的将修改数据追加到现有的 AOF文件里面,即使重写过程中发生停
机,现有的 AOF文件也不会丢失。而一旦新AOF文件创建完毕,Redis就会从旧AOF文件切换到新
AOF文件,并开始对新AOF文件进行追加操作。
(4)AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。事实上,也可以通过该文

件完成数据的重建
缺点:
(1)即使有些操作是重复的也会全部记录,AOF 的文件大小要大于 RDB 格式的文件

(2)AOF 在恢复大数据集时的速度比 RDB 的恢复速度要慢

(3)根据fsync策略不同,AOF速度可能会慢于RDB

(4)bug 出现的可能性更多

 

4. redis数据类型解释?

(1)string字符串是所有编程语言中最常见的和最常用的数据类型,而且也是redis最基本的数据类型之一,而且
redis 中所有的 key 的类型都是字符串。常用于保存 Session 信息场景,此数据类型比较常用
(2)list:列表是一个双向可读写的管道,其头部是左侧,尾部是右侧,一个列表最多可以包含2^32-

1(4294967295)个元素,下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,元素值可以重
复,常用于存入日志等场景,此数据类型比较常用
(3)集合set :Set 是 String 类型的无序集合,集合中的成员是唯一的,这就意味着集合中不能出现重复的数据,可以

在两个不同的集合中对数据进行对比并取值,常用于取值判断,统计,交集等场景
(4)有序集合sorted set:

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关
联一个double(双精度浮点型)类型的分数,redis正是通过该分数来为集合中的成员进行从小到大的排
序,有序集合的成员是唯一的,但分数(score)却可以重复,集合是通过哈希表实现的,所以添加,删除,
查找的复杂度都是O(1), 集合中最大的成员数为 2^32 – 1 (4294967295, 每个集合可存储40多亿个成
员),经常用于排行榜的场景
(5)哈希hash:hash 是一个string类型的字段(field)和值(value)的映射表,Redis 中每个 hash 可以存储 2^32 -1 键值

对,类似于字典,存放了多个k/v 对,hash特别适合用于存储对象场景。

5. redis实现生产者消费者,发布订阅模型。

1#订阅者监听频道
redis-cli
subscribe channel1   #订阅者事先订阅指定的频道,之后发布的消息才会收到
2#发布者发布消息

redis-cli
publish channel1 test1     
publish channel2 test2
3#订阅多个频道、多个匹配频道、所有频道
redis-cli 
subscribe channel1 channel2    #多个
subscribe chenn*   #多个匹配
subscribe *           #所有

 

6. redis使用场景?

(1)session共享:常见于web集群中的tomcat或者php中多web服务器seesion共享

(2)缓存:数据查询、电商网站商品信息、新闻内容

(3)计数器:访问排行榜、商品浏览数等和次数相关的数值统计场景

(4)微博/微信社交场合:共同好友、粉丝数、关注、点赞评论等

(5)消息队列:ELK的日志缓存、部分业务的订阅发布系统

(6)地理位置:基于GEO(地理信息定位),实现摇一摇,附近的人,外卖等功能。

7. jvm垃圾回收原理,如何优化?”

 (1)标记-清除mark-sweep算法:分垃圾标记阶段和内存释放阶段。标记阶段,找到所有可访问对象打个标记。清理阶段,遍历整个堆,对未标记对象逐一进行清理。

(2)标记-压缩mark-compact算法:分垃圾标记阶段和内存整理阶段。标记阶段,找到所有可访问对象打个标记。内存清理阶段时,整理时将对象向内存一端移动,整理后存活对象连续的集中在内存一端、

(3)复制copying:先将可用内存分为大小相同区域A和B,每次只用其中一块,比如A。当A用完后,则将A中存活的对象复制到B。复制到B的时候连续的使用内存,最后将A一次性清除干净。

 

 

tomcat性能优化

1#内存空间优化

vim /usr/local/tomcat/bin/catalina.sh


JAVA_OPTS="-server -Xms4g -Xmx4g -Xss512k -Xmn1g -
XX:CMSInitiatingOccupancyFraction=65 -XX:+AggressiveOpts -XX:+UseBiasedLocking -
XX:+DisableExplicitGC -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -
XX:PermSize=128m -XX:MaxPermSize=512m -XX:CMSFullGCsBeforeCompaction=5 -
XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -
XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -
XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods"



#-server:服务器模式
#-xms:堆内存初始化大小
#-xmx:堆内存空间上限、
#-xx:NewSize=:新生代空间初始化大小
#--xx:MsxNewSize=:新生代空间最大值
2#线程池调整

vim /usr/local/tomcat/conf/server.xml

<Connector port="8080" protocol="HTTP/1.1"  connectionTimeout="20000"
redirectPort="8443" />

 

原文地址:http://www.cnblogs.com/wangyinbo2022/p/16660595.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性