云计算需要学什么课程?
云计算系统运用了编程模型、数据管理技术、数据存储技术、虚拟化等多种技术。在学习云计算时不仅要了解以上多种技术,还要学习以下多种课程:
1、云计算首先需要的是学习它的系统基础。主要包括了Linux系统管理、数据库管理、KVM管理和云计算环境的建立。
2、其次需要学习Linux网络管理、数据库同步、hKVM迁移与远程管理、云计算计算与镜像管理。
3、最后需要学习数据库集群、KVM虚拟机嵌入、云计算存储管理以及Docker实战和云计算数据管理,另外Linux存储管理和云计算网络管理也是不可缺少的课程。
云计算平台的体系结构由用户界面、服务目录、管理系统、部署工具、监控和服务器集群组成:
(1)用户界面。主要用于云用户传递信息,是双方互动的界面。
(2)服务目录。顾名思义是提供用户选择的列表。
(3)管理系统。指的是主要对应用价值较高的资源进行管理。
(4)部署工具。能够根据用户请求对资源进行有效地部署与匹配。
(5)监控。主要对云系统上的资源进行管理与控制并制定措施。
(6)服务器集群。服务器集群包括虚拟服务器与物理服务器,隶属管理系统。
云计算是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。云是网络、互联网的一种比喻说法。过去在图中往往用云来表示电信网,后来也用来表示互联网和底层基础设施的抽象。因此,云计算甚至可以让你体验每秒10万亿次的运算能力,拥有这么强大的计算能力可以模拟核爆炸、预测气候变化和市场发展趋势。用户通过电脑、笔记本、手机等方式接入数据中心,按自己的需求进行运算。
目前我们的云计算的课程为由浅入深、循序渐进的完整课程体系,包括结合Linux的网络基础实战、Linux系统配置及服务深度解析、Shell脚本自动化运维项目开发、开源数据库MySQL DBA架构及优化、主流Web 服务器Nginx架构优化、大型网站高并发项目LVS实战方案、高可用集群技术、分布式存储技术Ceph、安全防御技术、性能优化方案、Python自动化运维开发技术、私有云平台技术KVM 、Openstack、容器技术Docker等。
云计算学习课程大纲如下:
1 Linux云计算网络管理实战
2 Linux系统管理及服务配置实战
3 Linux Shell自动化运维编程实战
4 开源数据库SQL/NOSQL运维实战
5 大型网站高并发架构及自动化运维项目
6 网站安全渗透测试及性能调优项目实战
7 公有云运维技术项目实战
8 企业私有云架构及运维实战
9 Python自动化运维开发基础
10 Python自动化运维开发项目实战
Redis集群一般有5种:
1,主从复制
2,哨兵模式
3,Redis官方提供的Cluster集群模式(服务端)
4,Jedis sharding集群(客户端sharding)
5,利用中间件代理,比如豌豆荚的codis等
介绍完他们的模式,现在来分析一下他们的原理:
主从复制(Master-Slave Replication):
实现主从复制(Master-Slave Replication)的工作原理:Slave从节点服务启动并连接到Master之后,它将主动发送一个SYNC命令。Master服务主节点收到同步命令后将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave从节点服务在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master主节点继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。
如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。
主从复制配置
修改从节点的配置文件:slaveof masterip masterport
如果设置了密码,就要设置:masterauth master-password
哨兵模式:
该模式是从Redis的26版本开始提供的,但是当时这个版本的模式是不稳定的,直到Redis的28版本以后,这个哨兵模式才稳定下来,无论是主从模式,还是哨兵模式,这两个模式都有一个问题,不能水平扩容,并且这两个模式的高可用特性都会受到Master主节点内存的限制。
Sentinel(哨兵)进程是用于监控redis集群中Master主服务器工作的状态,在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用。
Sentinel(哨兵)进程的作用
监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
提醒(Notification):当被监控的某个Redis节点出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master;当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用现在的Master替换失效Master。Master和Slave服务器切换后,Master的redisconf、Slave的redisconf和sentinelconf的配置文件的内容都会发生相应的改变,即,Master主服务器的redisconf配置文件中会多一行slaveof的配置,sentinelconf的监控目标会随之调换。
Sentinel(哨兵)进程的工作方式
每个Sentinel(哨兵)进程以每秒钟一次的频率向整个集群中的Master主服务器,Slave从服务器以及其他Sentinel(哨兵)进程发送一个 PING 命令。
如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel(哨兵)进程标记为主观下线(SDOWN)
如果一个Master主服务器被标记为主观下线(SDOWN),则正在监视这个Master主服务器的所有 Sentinel(哨兵)进程要以每秒一次的频率确认Master主服务器的确进入了主观下线状态
当有足够数量的 Sentinel(哨兵)进程(大于等于配置文件指定的值)在指定的时间范围内确认Master主服务器进入了主观下线状态(SDOWN), 则Master主服务器会被标记为客观下线(ODOWN)
在一般情况下, 每个 Sentinel(哨兵)进程会以每 10 秒一次的频率向集群中的所有Master主服务器、Slave从服务器发送 INFO 命令。
当Master主服务器被 Sentinel(哨兵)进程标记为客观下线(ODOWN)时,Sentinel(哨兵)进程向下线的 Master主服务器的所有 Slave从服务器发送 INFO 命令的频率会从 10 秒一次改为每秒一次。
若没有足够数量的 Sentinel(哨兵)进程同意 Master主服务器下线, Master主服务器的客观下线状态就会被移除。若 Master主服务器重新向 Sentinel(哨兵)进程发送 PING 命令返回有效回复,Master主服务器的主观下线状态就会被移除。
Redis官方 Cluster集群模式
Redis Cluster是一种服务器Sharding技术,30版本开始正式提供。
在这个图中,每一个蓝色的圈都代表着一个redis的服务器节点。它们任何两个节点之间都是相互连通的。客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其进行存取和其他操作。
Redis集群数据分片
在redis的每一个节点上,都有这么两个东西,一个是插槽(slot)可以理解为是一个可以存储两个数值的一个变量这个变量的取值范围是:0-16383。还有一个就是cluster我个人把这个cluster理解为是一个集群管理的插件。当我们的存取的key到达的时候,redis会根据crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。
Jedis sharding集群
Redis Sharding可以说是在Redis cluster出来之前业界普遍的采用方式,其主要思想是采用hash算法将存储数据的key进行hash散列,这样特定的key会被定为到特定的节点上。
庆幸的是,Java Redis客户端驱动Jedis已支持Redis Sharding功能,即ShardedJedis以及结合缓存池的ShardedJedisPool
Jedis的Redis Sharding实现具有如下特点:
采用一致性哈希算法,将key和节点name同时hashing,然后进行映射匹配,采用的算法是MURMUR_HASH。采用一致性哈希而不是采用简单类似哈希求模映射的主要原因是当增加或减少节点时,不会产生由于重新匹配造成的rehashing。一致性哈希只影响相邻节点key分配,影响量小。
为了避免一致性哈希只影响相邻节点造成节点分配压力,ShardedJedis会对每个Redis节点根据名字(没有,Jedis会赋予缺省名字)会虚拟化出160个虚拟节点进行散列。根据权重weight,也可虚拟化出160倍数的虚拟节点。用虚拟节点做映射匹配,可以在增加或减少Redis节点时,key在各Redis节点移动再分配更均匀,而不是只有相邻节点受影响。
ShardedJedis支持keyTagPattern模式,即抽取key的一部分keyTag做sharding,这样通过合理命名key,可以将一组相关联的key放入同一个Redis节点,这在避免跨节点访问相关数据时很重要。
利用中间件代理
中间件的作用是将我们需要存入redis中的数据的key通过一套算法计算得出一个值。然后根据这个值找到对应的redis节点,将这些数据存在这个redis的节点中。
常用的中间件有这几种
Twemproxy
Codis
nginx
Spark的Web监控页面 在SparkContext中可以看到如下代码: 首先是创建一个Spark Application的Web监控实例对象: 然后bind方法会绑定一个web服务器: 可以看出我们使用Jetty服务器来监控程序的运行和显示Spark集群的信息的。
在集群系统中,所有的计算机拥有一个共同的名称,集群内任一系统上运行的服务可被所有的网络客户所使用。集群必须可以协调管理各分离组件的错误和失败,并可透明的向集群中加入组件。用户的公共数据被放置到了共享的磁盘柜中,应用程序被安装到了所有的服务器上,也就是说,在集群上运行的应用需要在所有的服务器上安装一遍。当集群系统在正常运转时,应用只在一台服务器上运行,并且只有这台服务器才能操纵该应用在共享磁盘柜上的数据区,其它的服务器监控这台服务器,只要这台服务器上的应用停止运行(无论是硬件损坏、操作系统死机、应用软件故障,还是人为误操作造成的应用停止运行),其它的服务器就会接管这台服务器所运行的应用,并将共享磁盘柜上的相应数据区接管过来。其接管过程如下图所示(以应用A为例):
1应用A正常工作时;
2应用A停止工作后,其它的备用服务器将该应用接管过来。 具体接管过程分三部执行: a系统接管 b加载应用 c客户端连接
EMQ 管理控制台 (EMQ Dashboard,以下简称 Dashboard) 是 EMQ 提供的一个后端 Web 控制台,用户可通过 Web 控制台查看服务器与集群的运行状态、统计指标,进行插件配置与停启、简单的连接测试等操作。
如果 EMQ 安装在本机,则使用浏览器打开地址 http://127001:18083 ,输入默认用户名 admin 与默认密码 public ,登录进入 Dashboard。如果忘记了管理控制台密码,使用 管理命令 重置或新建管理账号。
Dashboard 界面与展示上提供 暗色 (默认)、 明亮 两种主题风格, 中文 、 英文 (默认)两种语言支持。用户可在 ADMIN (系统) -> Settings (设置) 中进行切换设置。
Dashboard 提供 EMQ 单机与集群的运行状态监控功能,监控指标涵盖服务器基本信息,设备连接信息,会话信息,EMQ 当前主体与订阅信息。
控制台可查看 EMQ 当前节点及服务器集群的基本信息如服务器版本、运行时间、CPU、内存、进程、运行统计等数据。
系统信息、度量指标展示的是当前节点数据,用户可以通过界面右上角下拉切换至集群内其他节点;
节点信息、运行统计展示集群内的所有节点列表的信息,标题括号内的数字即代表当前集群内节点的数量。
连接界面可查看当前客户端的连接情况,通过右上角下拉切换按钮可以切换查看某节点内、集群内的连接信息;搜索框可按照客户端 ID (clientid) 进行搜索。
会话界面可查看客户端会话信息如会话数、订阅数等,其右上角切换、搜索功能同上。
主题界面可查看集群内所有主题信息,右上角可进行主题搜索。
订阅界面可查看单节点/集群内主题订阅信息,右上角切换、搜索功能同连接与会话界面。
插件界面可查看当前节点插件运行状况,点击 启动/停止 按钮可以进行插件的停启,点击 配置 按钮可以查看并配置插件参数。 关于插件更详细的介绍请看 扩展插件 。
出于安全性考虑,通过 Dashboard 配置的插件参数不会持久化到配置文件,即每次重启 EMQ 后配置信息会丢失。用户通过界面上配置的插件参数,在确认正确可用后应当将配置写到 etc/plugins/ 目录下响应的配置文件中。
监听器界面可查看节点下网络监听状况,包含有每个服务的监听协议、地址与端口及其最大连接数与当前连接数。
该工具通过 WebSocket 与 EMQ 连接,提供客户端连接、发布/订阅、消息查看功能。WebSocket 支持非加密连接 (默认 8083 端口) 与 SSL 加密连接 (默认 8084 端口),但请注意使用加密连接时必须配置了 WebSocket 证书且主机地址填写的是与证书对应的域名。
HTTP 接口列举了 Dashboard 所有 API 接口,点击 路径 中的 URL 可以以当前登录用户调用该接口并显示数据,部分 POST/PUT/DELETE 方法接口不支持该操作。
通过应用可以创建一个 API 接口凭证,用于调用 管理监控 API 监控服务器、管理客户端、发布订阅消息等。
应用可以分配到期日期实现过期失效,如需暂时禁用应用,可以将其状态置为 拒绝访问 。
管理 Dashboard 的登录用户,支持新建、编辑、修改密码等。
使用单独的域名或将 Dashboard 绑定到现有域名的某个路径如 http://examplecom/dashboard 下,参见文章: 使用 nginx 部署 EMQ Dashboard 。
ganglia简介
名词说明
引用自此博客介绍
Metrics- 监控电脑的运行数据
Node - 一台电脑,或许拥有多个CPU,中文称之为节点。
Cluster - 一组节点,中文称之为簇。通常节点之间拥有达到G比特的高带宽,簇内通过组播协议,每个节点组播自己的数据,所以每个节点拥有整个簇的状态,这种冗余设计可以提高簇的鲁棒性。一般簇内节点为相同的系统和体系结构,由同一个管理员管理。
Grid - 一组簇,中文可称之为网格。网格的用处是在一个大范围内把各异构的簇通过宽带汇聚在一起。
Ganglia的各种组成
功能
名称及配置文件
位置
数据采集器 名叫gmond(Ganglia MONitor Daemon)的服务程序,配置文件是/etc/ganglia/gmondconf 位于每个Node上
数据混合收集器 名叫gmetad(Ganglia METAdata Daemon)的服务程序,配置文件是/etc/ganglia/gmetadconf。它通过轮询收集gmond的数据,并聚合簇的各类信息,然后保存在本地rrdtool的数据库中 最好每个cluster都有一个gmetad,以便能构建多级网络
Web可视化工具 这是用PHP脚本实现的将数据可视化,并画出表格。可以是任何支持PHP、SSL和XML的web服务器。一般都用Apache2 web服务器 一般与gmetad部署在一个节点上
额外的高级工具 gmetric可以用来添加你需要监控的Node额外状态
gstat可以直接获得Ganglia的数据 每台需要这些功能的Node上
实验环境
机器
系统
软件
ip1 centos 7 gmetad + gmond +ganglia-web 372
ip2 centos 5 gmond 371
ip3 centos 5 gmond 371
ip4 centos 5 gmond 371
ip5 centos 5 gmond 371
ip6 centos 5 gmond 371
ip7 centos 5 gmond 371
ganglia安装配置
安装
ip1 安装ganglia主节点
yum -y install epel-release
yum -y install rrdtool httpd
yum -y install ganglia-devel ganglia-gmetad ganglia-gmond
yum -y install php ganglia-web
ip2-ip7 安装ganglia从节点
yum -y install epel-release
yum -y install ganglia-mond
配置
ganglia配置文件目录:/etc/ganglia
rrd数据库存放目录:/var/lib/ganglia/rrds
httpd主站点目录:/var/www/html
ganglia-web安装目录:/usr/share/ganglia
ganglia-web配置目录:/etc/httpd/confd/gangliaconf
相关配置文件修改
将ganglia-web安装目录链接到httpd主站点目录
将 ganglia-web 的 站 点 目 录 连 接 到 httpd 主 站 点 目 录 $ ln -s /usr/share/ganglia /var/www/html
修改httpd主站点目录下ganglia站点目录的访问权限
将 ganglia 站点目录访问权限改为 apache:apache,否则会报错
$ chown -R apache:apache /var/www/html/ganglia$ chmod -R 755 /var/www/html/ganglia12
- 修改rrd数据库存放目录访问权限 将 rrd 数据库存放目录访问权限改为12
$ chown -R ganglia:ganglia /var/lib/ganglia/rrds
- 修改ganglia-web的访问权限:修改/etc/httpd/confd/gangliaconf12
Alias /ganglia /usr/share/ganglia
<Location /ganglia>
Require all granted
#Require ip 10123
#Require host exampleorg
</Location>123456
配置/etc/ganglia/gmondconf
cluster {name = "hadoop cluster" }
udp_send_channel {
#the host who gather this cluster's monitoring data and send these data to gmetad node
host = ip1
port = 8649 }
udp_recv_channel {
port = 8649 }
tcp_accept_channel {
port = 8649 } 123456789101112131415161718
22 Hadoop cluster被监测节点的配置 配置/etc/ganglia/gmondconf
cluster {name = "hadoop cluster" }
udp_send_channel {
# the host who gather this cluster's monitoring data and send these data to gmetad node
host = ip1
port = 8649 }
udp_recv_channel {
port = 8649 }
tcp_accept_channel {
port = 8649 }1234567891011121314151617
Hadoop配置
主节点:
# 修改/hadoop/etc/hadoop/hadoop-metrics2propertiesnamenodesinkgangliaservers=ip1:8649resourcemanagersinkgangliaservers=ip1:8649mrappmastersinkgangliaservers=ip1:8649jobhistoryserversinkgangliaservers=ip1:8649sinkgangliaclass=orgapachehadoopmetrics2sinkgangliaGangliaSink31sinkgangliaperiod=10sinkgangliasupportsparse=true
sinkgangliaslope=jvmmetricsgcCount=zero,jvmmetricsmemHeapUsedM=both
sinkgangliadmax=jvmmetricsthreadsBlocked=70,jvmmetricsmemHeapUsedM=401234567891011
从节点
datanodesinkgangliaservers=ip1:8649nodemanagersinkgangliaservers=ip1:8649sinkgangliaclass=orgapachehadoopmetrics2sinkgangliaGangliaSink31sinkgangliaperiod=10sinkgangliasupportsparse=true
sinkgangliaslope=jvmmetricsgcCount=zero,jvmmetricsmemHeapUsedM=both
sinkgangliadmax=jvmmetricsthreadsBlocked=70,jvmmetricsmemHeapUsedM=401234567
成果
可以看到有datanode相关信息
注意问题
ganglia反应有点慢,每次重启后,数据得等一阵子才显示出来。这个也跟设置的有关,10秒一次显示
我本来配置每个节点都有gmond,cluster的信息发送到本地的gmond,由gmond发送给gmetad,但是一直不成功。我使用了telnet localhost 8649,能看到数据,但是gmetad就是不显示。暂时也没找到什么原因。
瑭锦-tanjurd说到对Hadoop和HBase的集群监控,大家知道的和用的最多的还是第三方的监控工具,cacti,ganglia,zabbix之类的。玩的深一些的,会用zenoss之类的。这些工具很不错,也能发挥很大的作用。
0条评论