首页 文章 精选 留言 我的

精选列表

搜索[运维监控平台],共10000篇文章
优秀的个人博客,低调大师

日均百万PV架构第五弹(运维自动化)

概念: puppet基于ruby的开源自动化部署工具 具有可测试性,强一致性部署体验 丰富资源定义完成系统配置全周期流程 内置丰富编程体验完成自主任务 资源标识与通知机制特性 puttet服务器端定义客户端节点所需资源类型,客户端加入部署环境后, 客户端凭借主机名等申请(https)对应服务器资源,服务器编译catelog 后将结果返回客户端,客户端利用这些信息完成系统资源的定义与处理, 并返回结果给服务器. 规划: 172.16.43.200 master.king.com (预装 puppet server) 172.16.43.1 slave1.king.com (预装 puppet agent再无其他资源) 按照之前架构,这次演示slave1.king.com的自动化安装,其他节点的安装配置以附件形式上传 针对slave1.king.com部署实现 -> puppet agent 软件(由cobbler预装) -> hosts 文件(puppet自动化) -> bind 软件及配置文件(puppet自动化) -> haproxy 软件及配置文件(puppet自动化) -> keepalived 软件及配置文件 本地测试阶段(master.king.com) 在master节点编写模块,测试通过后进行主从方式的配置 1 2 #安装puppet yum-y install puppet-2.7.23-1.el6.noarch.rpm 1.在/etc/puppet目录建立如下目录 1 2 mkdir /etc/puppet/manifest/ {haproxy,hosts,keepalived,named}/{files,manifests,templates}-pv mkdir /etc/puppet/modules 2.编辑/etc/puupet/manifests/hosts/files/hosts(host) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #若要部署成前四节的架构,这里需要把每一个点都自动化所以配置文件及其对应的软件都要安装配置 127.0.0.1localhostlocalhost.localdomainlocalhost4localhost4.localdomain4 ::1localhostlocalhost.localdomainlocalhost6localhost6.localdomain6 172.16.43.1slave1.king.com 172.16.43.2slave2.king.com 172.16.43.3slave3.king.com 172.16.43.4slave4.king.com 172.16.43.3imgs1.king.com 172.16.43.3imgs2.king.com 172.16.43.3text1.king.com 172.16.43.3text2.king.com 172.16.43.3dynamic1.king.com 172.16.43.4dynamic2.king.com 172.16.43.200master.king.com 172.16.43.6server.king.com 172.16.43.5proxy.king.com 编辑/etc/puupet/manifests/hosts/files/init.pp, 这是hosts的模块定义 1 2 3 4 5 6 7 8 9 10 11 12 #hosts的init.pp #自动定义资源模块名为hosts #hosts不需要安装软件仅仅是将hosts文件在master/slave模型下复制到slave的某目录中 #所以这里定义的资源类型只有file classhosts{ file { "hosts" : ensure=> file , source => "puppet:///modules/hosts/hosts" , path=> "/etc/hosts" } } 3. 之后配置都如(2)类型配置,代码文件分别为配置文件和模块定义文件(named) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 // named.conf options{ // listen-onport53{127.0.0.1;}; // listen-on-v6port53{::1;}; directory "/var/named" ; dump- file "/var/named/data/cache_dump.db" ; statistics- file "/var/named/data/named_stats.txt" ; // memstatistics- file "/var/named/data/named_mem_stats.txt" ; allow-query{172.16.0.0 /16 ;}; recursion yes ; dnssec- enable yes ; dnssec-validation yes ; dnssec-lookasideauto; /*PathtoISCDLVkey*/ bindkeys- file "/etc/named.iscdlv.key" ; managed-keys-directory "/var/named/dynamic" ; }; logging{ channeldefault_debug{ file "data/named.run" ; severitydynamic; }; }; zone "." IN{ type hint; file "named.ca" ; }; include "/etc/named.rfc1912.zones" ; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 // named.rfc1912.zones: zone "localhost.localdomain" IN{ type master; file "named.localhost" ; allow-update{none;}; }; zone "localhost" IN{ type master; file "named.localhost" ; allow-update{none;}; }; zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN{ type master; file "named.loopback" ; allow-update{none;}; }; zone "1.0.0.127.in-addr.arpa" IN{ type master; file "named.loopback" ; allow-update{none;}; }; zone "0.in-addr.arpa" IN{ type master; file "named.empty" ; allow-update{none;}; }; zone "king.com" IN{ type master; file "king.com.zone" ; }; 1 2 3 4 5 6 7 8 9 10 11 12 13 #king.com.zone $TTL600 @INSOAdns.king.com.adminmail.king.com.( 2014050401 1H 5M 3D 12H) INNSdns dnsINA172.16.43.1 wwwINA172.16.43.88 wwwINA172.16.43.188 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #named的init.pp #定义模块named,dns软件报名为bind,所以package是安装bind软件借助yum源 classnamed{ package{ "bind" : ensure=>present, name=> "bind" , provider=>yum, } #named软件要运行起来需要配置区域文件并且要求改变属主属组 file { "/etc/named.conf" : ensure=> file , require=>Package[ "bind" ], source => "puppet:///modules/named/named.conf" , owner=>named, group=>named, } file { "/etc/named.rfc1912.zones" : ensure=> file , require=>Package[ "bind" ], source => "puppet:///modules/named/named.rfc1912.zones" , owner=>named, group=>named, } file { "/var/named/king.com.zone" : ensure=> file , require=>Package[ "bind" ], source => "puppet:///modules/named/king.com.zone" , owner=>named, group=>named, } #bind软件在package安装了之后,需要启动并设置开启启动,但前提是package已经帮我们装好的bind软件 service{ "named" : ensure=> true , require=>Package[ "bind" ], enable => true , } } 4. haproxy的配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 #/etc/haproxy/haproxy.cfg global log127.0.0.1local2 chroot /var/lib/haproxy pidfile /var/run/haproxy .pid maxconn4000 userhaproxy grouphaproxy daemon defaults modehttp logglobal optionhttplog optiondontlognull optionhttp-server-close optionforwardforexcept127.0.0.0 /8 optionredispatch retries3 timeouthttp-request10s timeoutqueue1m timeoutconnect10s timeoutclient1m timeoutserver1m timeouthttp-keep-alive10s timeoutcheck10s maxconn30000 listenstats modehttp bind0.0.0.0:8080 stats enable statshide-version statsuri /haproxyadmin ?stats statsrealmHaproxy\Statistics statsauthadmin:admin statsadmin if TRUE frontendhttp- in bind*:80 modehttp logglobal optionhttpclose optionlogasap optiondontlognull capturerequestheaderHostlen20 capturerequestheaderRefererlen60 aclimg_staticpath_beg-i /images /imgs aclimg_staticpath_end-i.jpg.jpeg.gif.png acltext_staticpath_beg-i/ /static /js /css acltext_staticpath_end-i.html.shtml.js.css use_backendimg_servers if img_static use_backendtext_servers if text_static default_backenddynamic_servers backendimg_servers balanceroundrobin serverimgsrv1imgs1.king.com:6081checkmaxconn4000 serverimgsrv2imgs2.king.com:6081checkmaxconn4000 backendtext_servers balanceroundrobin servertextsrv1text1.king.com:6081checkmaxconn4000 servertextsrv2text2.king.com:6081checkmaxconn4000 backenddynamic_servers balanceroundrobin serverwebsrv1dynamic1.king.com:80checkmaxconn1000 serverwebsrv2dynamic2.king.com:80checkmaxconn1000 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #haproxy的init.pp classhaproxy{ package{ "haproxy" : ensure=>present, name=> "haproxy" , provider=>yum, } file { "/etc/haproxy/haproxy.cfg" : ensure=> file , require=>Package[ "haproxy" ], source => "puppet:///modules/haproxy/haproxy.cfg" , } service{ "haproxy" : ensure=> true , require=>Package[ "haproxy" ], enable => true , } } 5. keepalived的配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 #/etc/keepalived/keepalived.conf global_defs{ notification_email{ root@localhost } notification_email_fromkeepadmin@localhost smtp_connect_timeout3 smtp_server127.0.0.1 router_idLVS_DEVEL_KING } vrrp_scriptchk_haproxy{ script "/etc/keepalived/chk_haproxy.sh" interval2 weight2 } vrrp_instanceVI_1{ interfaceeth0 stateMASTER #BACKUPforslaverouters priority100 #99forBACKUP virtual_router_id173 garp_master_delay1 authentication{ auth_typePASS auth_passking1 } track_interface{ eth0 } virtual_ipaddress{ 172.16.43.88 /16 deveth0 } track_script{ chk_haproxy } } vrrp_instanceVI_2{ interfaceeth0 stateBACKUP #masterforslaverouters priority99 #99formaster virtual_router_id174 garp_master_delay1 authentication{ auth_typePASS auth_passking2 } track_interface{ eth0 } virtual_ipaddress{ 172.16.43.188 /16 deveth0 } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #keepalived的init.pp classkeepalived{ package{ "keepalived" : ensure=>present, name=> "keepalived" , provider=>yum, } file { "/etc/keepalived/keepalived.conf" : ensure=> file , require=>Package[ "keepalived" ], source => "puppet:///modules/keepalived/keepalived.conf" , notify=>Exec[ "reload" ], } service{ "keepalived" : ensure=> true , require=>Package[ "keepalived" ], enable => true , } exec { "reload" : command => "/usr/sbin/keepalivedreload" , subscribe=>File[ "/etc/keepalived/keepalived.conf" ], path=> "/bin:/sbin:/usr/bin:/usr/sbin" , refresh=> "/usr/sbin/keepalivedreload" , } } 6. 一切定义完毕进入测试 # 首先所有的包都没有安装 # 使用puppet apply -e 命令在master节点测试安装hosts模块前后 /etc/hosts 文件的变化情况 # 其余模块一次测试 , # 观察keepalived的启动效果,在配置文件中定义的vrrp已经出现 # 观察服务端口是否均已启动 # 本地测试没有异常的情况下,现在考虑将slave1.king.com之前内容情况后,利用puppet自动化部署slave1.king.com节点所需的软件和配置 master/slave测试 puppet master: 1, 安装puppet-server并配置,启动服务 yum -y install puppet-server-2.7.23-1.el6.noarch.rpm puppet master --genconfig >> /etc/puppet/puppet.conf service puppetmaster start puppet agent: 1、安装puppet客户端并配置,启动服务 yum -y install puppet-2.7.23-1.el6.noarch.rpm vim /etc/puppet/puppet.conf,在[agent]中添加server=master.king.com service puppet start # 在master/slave服务启动后,slave1节点会发出请求查询,master会从site.pp文件中查找slave1.king.com该装什么模块 1 2 3 4 5 6 7 8 9 10 11 #/etc/puppet/modules/site.pp #这里就是表示slave1将安装named,keepalived,haproxy,hosts等文件 #当然之前写过的模块还有这里的节点都可以按照面向对象编程里的class一样 #带有继承关系的 node 'slave1.king.com' { includenamed includekeepalived includehaproxy includehosts } #在master/slave服务启动后,agent会根据配置文件中server的位置发起调用安装配置的请求,这才服务器需要将请求签证 # 已达到安全传输的目的 签署证书: master: puppet cert list # 查看所有的客户端的签证请求 puppet cert sign --all # 签署所有请求,那么客户端与服务器就可以进行交互了 # 在稍等片刻后,这些节点将被自动的在slave1.king.com上完成部署,当然也可以手动进行 1 2 #slave1.king.com puppetagent-t # 手动去请求服务器应用完毕的结果 # 部署完毕后vrrp节点信息,此时仅仅部署了一个slave1节点,所以会有两个vrrp的ip地址,详见keepalived的配置文件 # slave1上自动部署完成后的服务端口信息 本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1415003,如需转载请自行联系原作者

优秀的个人博客,低调大师

《Oracle高性能自动化运维》一一3.4 Redo优化

3.4 Redo优化从前面的内容可以知道,Oracle Redo的产生主要是由DML事务引起的,与DML事务相关的数据库更改主要包含:数据块更改;回滚段数据块镜像更新;数据库内部信息更新(数据字典表更新)。可以通过日志挖掘获取数据库更改的相关信息,如下: 可以看到,Redo中记录了DML事物的数据块更改、回滚段更新等信息。因此,可以考虑采取以下措施来减少Redo的产生,从而达到优化Redo的目的:减少索引键更新操作;减少大表(键)更新操作;使用Direct Load加载数据;使用Nologging进行特定操作;使用临时表(Temporary Table);;使用外部表(External Table);批量化处理DML业务程序;减少事务Commit次数,采用组提交的方式;减少Select For Update显示锁定,可以明显减少Re

优秀的个人博客,低调大师

运维之我的docker-compose快速创建zookeeper集群

很多时候大家不同的容器想要不用启动参数这个时候不妨使用脚本封装来实现,官方也很推荐这个做法,这里介绍下如何使用脚本传参快速启动一个zookeeper集群。 zookeeper集群大家知道有部分通用配置,和一些动态配置如果用一个简单的zookeeper实例无法正常启动集群,所以我们的节点列表和节点ID是需要动态传入的所以下面的脚本的${ZK_ID}和${ZK_LIST}是需要你使用compose的配置传入的。 zookeeper启动脚本 https://code.aliyun.com/nginxs/docker/blob/master/pkg/zookeeper/docker-entrypoint.sh [root@test-nodepkg]#catzookeeper/docker-entrypoint.sh #!/bin/bash ####################################################### #author:baishaohua# #mail:nginxs@126.com # #blog:new.nginxs.net # #msg:startupzookeeperclusterfordocker# ####################################################### #ShellBaseEnv ZK_HOME="/usr/local/zookeeper" ZK_CONF="${ZK_HOME}/conf/zoo.cfg" ZK_DATA="/var/lib/zookeeper" ZK_CONF_TXT="tickTime=2000\ninitLimit=10\nsyncLimit=5\ndataDir=${ZK_DATA}\nclientPort=2181" echo"zookeeperisstart" #initconfig echo-e${ZK_CONF_TXT}>${ZK_CONF} #ZK_NODE_LISTfromdockerargv foriin${ZK_NODE_LIST} do echo"$i">>${ZK_CONF} done echo"${ZK_ID}">${ZK_DATA}/myid #thisshellmainfunction ${ZK_HOME}/bin/zkServer.shstart-foreground Dockerfile文件配置 [root@test-node3pkg]#catzookeeper/Dockerfile FROMregistry.cn-hangzhou.aliyuncs.com/forker/centos7:last MAINTAINERbaishaohua<nginxs@126.com> #startupconfigure下面自动把zookeeper安装包安装到/usr/local/zookeeper目录 ADDzookeeper-3.5.1-alpha.tar.gz/usr/local/ RUNmv/usr/local/zookeeper-3.5.1-alpha/usr/local/zookeeper&&mkdir-p/var/lib/zookeeper/ RUNyum-yinstallmakegcclibgccgcc-c++glibc-develjava-1.8.0-openjdk COPYdocker-entrypoint.sh/usr/bin/ #ENVandCMD配置容器默认启动脚本和开放2181端口 CMD["/usr/bin/docker-entrypoint.sh"] EXPOSE2181 重点来了我们要从docker-compose.yml传参到启动脚本 下面通过environment定义环境变量把参数传递到容器的启动脚本,完成自定义部分内容 https://code.aliyun.com/nginxs/docker/blob/master/pkg/zk_cluster/docker-compose.yml [root@test-nodepkg]#catzk_cluster/docker-compose.yml version:'3' services: zk1: p_w_picpath:registry.cn-hangzhou.aliyuncs.com/forker/zookeeper restart:always container_name:zk1 ports: -"2181:2181" environment: ZK_ID:1 ZK_NODE_LIST:server.1=zk1:3181:4181server.2=zk2:3181:4181server.3=zk3:3181:4181 zk2: p_w_picpath:registry.cn-hangzhou.aliyuncs.com/forker/zookeeper restart:always container_name:zk2 ports: -"2182:2181" environment: ZK_ID:2 ZK_NODE_LIST:server.1=zk1:3181:4181server.2=zk2:3181:4181server.3=zk3:3181:4181 zk3: p_w_picpath:registry.cn-hangzhou.aliyuncs.com/forker/zookeeper restart:always container_name:zk3 ports: -"2183:2181" environment: ZK_ID:3 ZK_NODE_LIST:server.1=zk1:3181:4181server.2=zk2:3181:4181server.3=zk3:3181:4181 启动我的compose服务 这里可以看到其实zk1,zk2,zk3每个都是一个service,而且compose会为这个应用创建一个默认的桥接网络 [root@test-node3zk_cluster]#docker-composeup-d WARNING:TheDockerEngineyou'reusingisrunninginswarmmode. Composedoesnotuseswarmmodetodeployservicestomultiplenodesinaswarm.Allcontainerswillbescheduledonthecurrentnode. Todeployyourapplicationacrosstheswarm,use`dockerstackdeploy`. Creatingnetwork"zkcluster_default"withthedefaultdriver Creatingzk3 Creatingzk1 Creatingzk2 测试zookeeper集群 [root@test-nodezk_cluster]#echo"conf"|nclocalhost2181 clientPort=2181 secureClientPort=-1 dataDir=/var/lib/zookeeper/version-2 dataDirSize=67109393 dataLogDir=/var/lib/zookeeper/version-2 dataLogSize=67109393 tickTime=2000 maxClientCnxns=60 minSessionTimeout=4000 maxSessionTimeout=40000 serverId=1 initLimit=10 syncLimit=5 electionAlg=3 electionPort=4181 quorumPort=3181 peerType=0 membership: server.1=zk1:3181:4181:participant server.2=zk2:3181:4181:participant server.3=zk3:3181:4181:participant version=100000000 下面是一些我写的其它帮助文档: 0.docker安装 阿里云加速你的docker 运行你第一个镜像实例-docker容器 docker命令参数 docker仓库使用和镜像提交 docker镜像构建构建及参数详解 docker镜像的导入导出 docker的网络 docker网络的测试示例 docker数据卷 docker的api和python sdk 单机多容器的编排-compose docker-swarm集群的管理-swarm docker-swarm集群管理详解 docker-swarm集群中删除节点和服务 docker自建仓库Registry 使用技巧和推荐 docker集群web页面管理工具 不要再给你的docker安装ssh server compose快速创建zookeeper集群

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册