马哥博客作业第二十一周
第21周作业:
1、搭建一个 redis 哨兵集群

sentinel中的三个定时任务
每10秒每个sentinel对master和slave执行info,发现slave节点,确认主从关系
每2秒每个sentinel通过master节点的channel交换信息(pub/sub),通过sentinel__:hello频道交互,交互对节点的“看法”和自身信息
每1秒每个sentinel对其他sentinel和redis执行ping
拓扑图如下:

1>.所有主从节点的redis.conf中关健配置
bind 0.0.0.0
masterauth "123456"
requirepass "123456"
2>.配置slave1和slave2
[root@redis-slave1 ~]#redis-cli -a 123456
127.0.0.1:6379> REPLICAOF 10.0.0.8 6379
127.0.0.1:6379> CONFIG SET masterauth "123456"
127.0.0.1:6379> INFO replication
[root@redis-slave2 ~]#redis-cli -a 123456
127.0.0.1:6379> REPLICAOF 10.0.0.8 6379
127.0.0.1:6379> CONFIG SET masterauth "123456"
127.0.0.1:6379> INFO replication
修改配置文件永久生效
#vim /etc/redis.conf
replicaof 10.0.0.8 6379
masterauth 123456
查看master服务器状态
[root@redis-master ~]#redis-cli -a 123456
127.0.0.1:6379> INFO replication
role:master
connected_slaves:2
slave0:ip=10.0.0.28,port=6379,state=online,offset=112,lag=1
slave1:ip=10.0.0.18,port=6379,state=online,offset=112,lag=0
3>.sentinel配置
[root@redis-master ~]#vim /etc/redis-sentinel.conf
port 26379
daemonize no
pidfile "/var/run/redis-sentinel.pid"
logfile "/var/log/redis/sentinel.log"
dir "/tmp"
sentinel monitor mymaster 10.0.0.8 6379 2
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 3000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
[root@redis-master ~]#scp /etc/redis-sentinel.conf redis-slave1:/etc/
[root@redis-master ~]#scp /etc/redis-sentinel.conf redis-slave2:/etc/
4>.启动哨兵
[root@redis-master ~]#systemctl enable --now redis-sentinel.service
[root@redis-slave1 ~]#systemctl enable --now redis-sentinel.service
[root@redis-slave2 ~]#systemctl enable --now redis-sentinel.service
5>.查看当前sentinel状态
[root@redis-master ~]#redis-cli -p 26379
127.0.0.1:26379> INFO sentinel
sentinel_masters:1
master0:name=mymaster,status=ok,address=10.0.0.8:6379,slaves=2,sentinels=3 #两个slave,三个sentinel服务器
2、基于Redis 5 的 redis cluster 部署
1>. 创建 redis cluster集群的环境准备
1. 每个redis 节点采用相同的硬件配置、相同的密码、相同的redis版本
2. 所有redis服务器必须没有任何数据
3. 准备六台主机,地址如下:
10.0.0.8
10.0.0.18
10.0.0.28
10.0.0.38
10.0.0.48
10.0.0.58
2>.启用 redis cluster 配置
每个节点修改redis配置,必须开启cluster功能的参数
[root@redis-node1 ~]#sed -i.bak -e 's/bind 127.0.0.1/bind 0.0.0.0/' -e '/masterauth/a masterauth 123456'
-e '/# requirepass/a requirepass 123456' -e '/# cluster-enabled yes/a cluster-enabled yes'
-e '/# cluster-config-filenodes-6379.conf/a cluster-config-file nodes-6379.conf'
-e '/cluster-require-full-coverage yes/c cluster-require-full-coverage no' /etc/redis.conf
[root@redis-node1 ~]#systemctl restart redis
验证当前Redis服务状态:#开启了16379的cluster的端口,实际的端口=redis port + 10000
[[root@redis-node1 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 100 127.0.0.1:25 0.0.0.0:*
LISTEN 0 128 0.0.0.0:16379 0.0.0.0:*
LISTEN 0 128 0.0.0.0:6379 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 100 [::1]:25 [::]:*
[[root@redis-node1 ~]#ps -ef|grep redis
redis 1939 1 0 10:54 ? 00:00:00 /usr/bin/redis-server 0.0.0.0:6379[cluster] (注意进程有[cluster]状态)
root 1955 1335 0 10:57 pts/0 00:00:00 grep --color=auto redis
3>.创建集群
[root@redis-node1 ~]#redis-cli -a 123456 --cluster create 10.0.0.8:6379 10.0.0.18:6379 10.0.0.28:6379 10.0.0.38:6379 10.0.0.48:6379
10.0.0.58:6379 --cluster-replicas 1 (表示每个master对应一个slave节点)
Can I set the above configuration? (type 'yes' to accept): yes #输入yes自动创建集群
观察以上结果,可以看到3组master/slave
master:10.0.0.8---slave:10.0.0.38
master:10.0.0.18---slave:10.0.0.48
master:10.0.0.28---slave:10.0.0.58
4>.查看主从状态
[root@redis-node1 ~]#redis-cli -a 123456 INFO replication (分别查看每个节点的主从状态)
root@redis-node1 ~]#redis-cli cluster nodes
a177c5cbc2407ebb6230ea7e2a7de914bf8c2dab 10.0.0.8:6379@16379 myself,master - 01602571566000 10 connected 0-5461
cb20d58870fe05de8462787cf9947239f4bc5629 10.0.0.38:6379@16379 slave a177c5cbc2407ebb6230ea7e2a7de914bf8c2dab 0 1602571566780 10 connected
97c5dcc3f33c2fc75c7fdded25d05d2930a312c0 10.0.0.18:6379@16379 master - 01602571564000 11 connected 5462-10922
779a24884dbe1ceb848a685c669ec5326e6c8944 10.0.0.48:6379@16379 slave 97c5dcc3f33c2fc75c7fdded25d05d2930a312c0 0 1602571565000 11 connected
4f146b1ac51549469036a272c60ea97f065ef832 10.0.0.28:6379@16379 master - 01602571565772 12 connected 10923-16383
07231a50043d010426c83f3b0788e6b92e62050f 10.0.0.58:6379@16379 slave 4f146b1ac51549469036a272c60ea97f065ef832 0 1602571565000 12 connected
5>. 验证集群状态
[root@redis-node1 ~]#redis-cli -a 123456 CLUSTER INFO
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6 #节点数
cluster_size:3 #三个集群
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:837
cluster_stats_messages_pong_sent:811
cluster_stats_messages_sent:1648
cluster_stats_messages_ping_received:806
cluster_stats_messages_pong_received:837
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:1648
#查看任意节点的集群状态
[root@redis-node1 ~]#redis-cli -a 123456 --cluster info 10.0.0.38:6379
6>.查看集群node对应关系
[root@redis-node1 ~]#redis-cli -a 123456 --cluster check 10.0.0.38:6379
3、tomcat实现多虚拟主机
1>.修改tomcat配置文件(在文件最后面增加下面内容)
[root@CentOS8 ~]#vim /usr/local/tomcat/conf/server.xml
<Host name="node1.magedu.org" appBase="/data/webapps1">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="node1_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b"/>
</Host>
<Host name="node2.magedu.org" appBase="/data/webapps2">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="node2_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b"/>
</Host>
[root@CentOS8 ~]#systemctl restart tomcat
2>.对每个虚拟主机,准备数据
[root@centos8 ~]#mkdir /data/webapps{1,2}/ROOT -pv
[root@centos8 ~]#vim /data/webapps1/ROOT/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
<br>
<%=request.getRequestURL()%>
</body>
</html>
[root@CentOS8 ~]#cp /data/webapps1/ROOT/index.jsp /data/webapps2/ROOT/index.jsp
3>.设置权限
[root@centos8 ~]#chown -R tomcat.tomcat /data/webapps{1,2}
4>.准备虚拟主机的名称解析
[root@centos8 ~]#cat /etc/hosts
127.0.0.1 node1.magedu.org node2.magedu.org
5>.测试每个虚拟主机的访问
[root@CentOS8 ~]#curl http://node1.magedu.org:8080/
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
<br>
http://node1.magedu.org:8080/
</body>
</html>
[root@CentOS8 ~]#curl http://node2.magedu.org:8080/
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
<br>
http://node2.magedu.org:8080/
</body>
</html>
6>.查看单独配置的日志文件
[root@CentOS8 ~]#cat /usr/local/tomcat/logs/node2_access_log.2020-10-27.txt
127.0.0.1 - - [27/Oct/2020:18:22:09 +0800] "GET / HTTP/1.1" 200 237

浙公网安备 33010602011771号