Sentinel 架构体系 可以将 Redis Sentinel 集群看成是一个 ZooKeeper 集群,它是集群高可用的心脏,它一般是由 3~5 个节点组成,这样挂了个别节点集群还可以正常运转。它负责持续监控主从节点的健康,当主节点挂掉时,自动选择一个最优的从节点切换为主节点。客户端来连接集群时,会首先连接 sentinel,通过 sentinel 来查询主节点的地址,然后再去连接主节点进行数据交互。当主节点发生故障时,客户端会重新向 sentinel 要地址,sentinel 会将最新的主节点地址告诉客户端。 如此应用程序将无需重启即可自动完成节点切换。比如上图的主节点挂掉后,集群将可能自动调整为下图所示结构。 主节点挂掉了,原先的主从复制也断开了,客户端和损坏的主节点也断开了。从节点被提升为新的主节点,其它从节点开始和新的主节点建立复制关系。客户端通过新的主节点继续进行交互。 Sentinel 会持续监控已经挂掉了主节点,待它恢复后,此时原先挂掉的主节点现在变成了从节点,从新的主节点那里建立复制关系。 Sentinel 搭建 # 创建目录 [root@localho....
读写分离的应用场景 海量并发性能瓶颈处理,横向扩展,大幅度提升抗压能力。 Redis 的主从数据是异步同步的,所以分布式的 Redis 系统并不满足「一致性」要求。当客户端在 Redis 的主节点修改了数据后,立即返回,即使在主从网络断开的情况下,主节点依旧可以正常对外提供修改服务,所以 Redis 满足「可用性」。 运行一些额外的服务器,让它们与主服务器进行连接,然后将主服务器发送的数据副本并通过网络 进行准实时的更新(具体的更新速度取决于网络带宽)通过将读请求分散到不同的服务器上面进行处理, 用户可以从新添加的从服务器上获得额外的读查询处理能力。 Redis 已经发现了这个读写分离场景特别普遍,自身集成了读写分离供用户使用。我们只需在 Redis 的配置文件里面加上一条,【slaveof host port】语句 目前我们讲的 Redis 还只是主从方案,最终一致性,无故障转移功能,主 Master 节点宕机,则无法写入。 读写分离架构配置流程 # 创建目录 [root@localhost redis-replication]# mkdir /usr/local/red....
分布式锁 分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁实现。如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往通过互斥来防止彼此干扰。 分布锁设计目的 可以保证在分布式部署的应用集群中,同一个方法在同一操作只能被一台机器上的一个线程执行。 锁的设计要求 这把锁要是一把可重入锁(避免死锁) 这把锁有高可用的获取锁和释放锁功能 这把锁获取锁和释放锁的性能要好… 分布式锁实现方案分析 获取锁的时候,使用 setnx(SETNX key val:当且仅当 key 不存在时,set 一个 key 为 val 的字符串,返回 1; 若 key 存在,则什么都不做,返回 【0】加锁,锁的 value 值为当前占有锁服务器内网 IP 编号拼接任务标识组成。在释放锁的时候进行判断。并使用 expire 命令为锁添 加一个超时时间,超过该时间则自动释放锁。 获取锁的时候调用 setnx, 如果返回 0,则该锁正在被被人使用,返回 1,则成功获取锁。还设置一个获取的超时时间,若超过这个时间则放弃获取锁。 setex (key,value,expire) 过期以秒为单....
磁盘接口类型 并口的同一个线缆上可以接多个设备。 串口的同一个线缆上可以接一个设备。 IDE:并口,133MB/s、IOPS=100、非企业级 SCSI:并口,Ultrascsi320,320MB/S,Ultrascsi640,640MB/S。 IOPS=150 企业级 SATA:串口,6gbps。 IOPS=100 非企业级 SAS:串口(SCSI),6gbps。 IOPS=150 企业级 USB:串口,480MB/s 普通 SATA 固态硬盘:IOPS=9W PCI-E 固态硬盘:IOPS=10W~50W 一切皆文件 设备类型 块(block):随机访问、数据交换单位是“块”。 字符:线性访问,数据交换单位是“字符”。 设备文件 一切皆文件,设备也需要以文件的形式存在:/dev/*,设备文件主要作用是关联至设备的驱动程序。 设备号 major:主设备号,区分设备类型;用于标明设备所需要的驱动程序。 minor:次设备号,区分同种类型下的不同的设备;是特定设备的访问入口。 创建(申请)设备文件 # 创建字符类型设备,主版本号 111 次版本号 1 [root@loc....
机器列表 server1 ssh root@192.168.159.133 部署nameServer Broker-a server2 ssh root@192.168.159.130 部署nameServer Broker-a-s server3 ssh root@192.168.159.131 Broker-b server4 ssh root@192.168.159.132 Broker-b-s 修改 RocketMQ 启动内存配置 4 个机器都要修改, 其中 runbroker.sh 修改 4 个,runserver.sh 修改 2 个 # 解决NameServer内存不满足4G的报错:修改2个 vim /test/rocketmq/distribution/target/apache-rocketmq/bin/runserver.sh #修改JAVA_OPT JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" #....
Linux 系统的组成部分 Linux 系统主要由内核、根文件系统组成。 # 内核的功能 进程管理、内存管理、网络协议栈、文件系统、驱动程序、安全功能 运行中的系统环境可分为两层 用户空间:应用程序(进程或线程) 内核空间:内核代码(系统调用) 内核设计流派 单内核设计:把所有功能集成于同一个程序。Linux 微内核设计:每种功能使用一个单独的子系统实现。Windows、Solaris 内核的组成部分 核心文件:/boot/vmlinuz-3.10.0-957.21.3.el7.x86_64 ramdisk:临时根文件系统。/boot/initramfs-3.10.0-957.21.3.el7.x86_64.img 模块文件:/lib/modules/3.10.0-957.21.3.el7.x86_64/* .* Filesystem Hierarchy Standard 文件系统层级结构标准 所有 Linux 发行版遵循的根文件系统结构的标准规范,明确规范了根下所有目录的命名规范与职能。 系统分区规划的意义 BIOS Boot (标准分区):Boot Loa....
分布式事务 单体应用被拆为分布式应用,一个借口需要调用多个服务,且操作不同的数据库,数据一致性难以保障。 常见解决方案 2PC : 两阶段提交, 基于 XA 协议 TCC : Try、Confirm、Cancel 框架 GTS -> 开源 Fescar 链接 LCN 链接 RocketMQ4.X 分布式事务消息架构 RocketMQ 事务消息 RocketMQ 提供分布事务功能,通过 RocketMQ 事务消息能达到分布式事务的最终一致。 半消息 Half Message 暂不能投递的消息(暂不能消费),Producer 已经将消息成功发送到了 Broker 端,但是Broker 端未收到 Produce 对该消息的二次确认,此时该消息被标记成“暂不能投递”状态,处于该种状态下的消息即半消息。 消息回查 由于网络闪断、生产者应用重启等原因,导致某条事务消息的二次确认丢失,消息队列 RocketMQ 服务端通过扫描发现某条消息长期处于“半消息”时,需要主动向消息生产者询问该消息的最终状态(Commit 或是 Rollback),该过程即消息回查。 整体交互流程 ....