首页
统计信息
友情链接
壁纸
Search
1
【更新】CommentToMail typecho2017&v4.1& Mailer三版本,支持php5.6/7,插件详解
158,220 阅读
2
【90APT开源免费】第三代哈弗H6、哈弗大狗、H6经典版、坦克300车机开启无线ADB、升级地图、安装软件全流程
20,584 阅读
3
CentOS 7安装bbr教程
12,958 阅读
4
纯小白10分钟变身linux建站高手?宝塔linux面板全体验
12,552 阅读
5
深信服超融合架构测试介绍
12,098 阅读
技术相关
ACG相关
胡言乱语
数码杂烩
登录
Search
标签搜索
进击的巨人
漫画
宝塔
php
typecho
diy
vps
折腾
动漫
优酷路由宝
ubuntu
路由器
QQ
KMS
王忘杰
累计撰写
289
篇文章
累计收到
179
条评论
首页
栏目
技术相关
ACG相关
胡言乱语
数码杂烩
页面
统计信息
友情链接
壁纸
搜索到
289
篇与
的结果
2023-04-05
身为RHCE认证红帽工程师,我为什么不再推荐红帽认证考试-上
本文无利益相关,仅为个人从业者工作经历和行业趋势分享。大家好,我在IT行业工作近十年时间,去年考取了RHCE红帽注册工程师认证,今天,我跟大家分享一下对红帽认证的一些看法。一、红帽认证是什么? 红帽认证是由红帽Linux公司推出的,全上机认证考试,主要分为红帽认证系统管理员(RHCSA)、红帽认证工程师(RHCE)、红帽认证架构师(RHCA);但我们需要注意的是,红帽认证是基于红帽Linux生态的认证考试,考试内容也是基于红帽Linux组件的考试,红帽专家≠Linux专家;二、红帽认证认可度高吗?难度怎么样? 红帽认证并没有想象中的含金量,红帽认证考试并不难,很多系统运维从业人员从始至终不考红帽的原因,也仅仅是红帽系统考试费用过于昂贵,行业也没有将红帽认证作为一个必须的门槛。最尴尬的是,你看到的红帽考试非常有用的文章,基本都是培训班的账号发的,这里不再细说。三、为什么我不再推荐红帽考试? 1、商业化大跃进2014年,红帽公司收购了CentOS系统,国内几乎所有企业Linux系统都会选择CentOS系统作为基础平台,正是因为其开源免费并且二进制兼容RHEL系统;2018年,IBM收购了红帽公司;2021年,红帽官方“杀死”CentOS版本,停止CentOS8系统的更新,发布了新的滚动更新版本CentOS Stream,因为企业对稳定性的要求,导致大量用户转至其他Linux版本,如AlmaLinux、OracleLinux、RockyLinux等RHEL二进制兼容版本;对于一家商业公司来说,不能贡献利润的客户,就不叫客户。2、国产信创系统发展目前信创国产系统,无论是银河麒麟还是统信UOS,几乎都在新版本中选择了由华为捐赠给中国开发原子基金会的OpenEuler欧拉系统,虽然也使用了RPM包管理器,但与红帽系统已经没有了兼容关系,属于完全自主的操作系统;2020年起,中国信创产业开始了省级单位的国产化替代,每年投入数百亿;2023年初,国资委79号文件明确提出,将在5年内完成全部国企的信息化系统信创改造;其主要要求如下:“全面替换”:OA、门户、邮箱、纪检、党群、档案、经营管理“应替就替”:战略决策、ERP、风控管理、CRM管理系统“能替就替”:生产制造、研发系统网络安全产品全面替代未来五年一定是“大信创”时期,信创市场具备万亿规模。小结: 我仍然建议学习网路上各种免费的红帽课程,如果你所在公司有红帽认证相关的报销政策,考一下是可以的;但如果你是学生,或者是从业人员想自费考取认证,我建议还是去看信创国产系统相关认证政策吧。下篇预告
2023年04月05日
808 阅读
0 评论
4 点赞
2023-04-02
2023年家庭及小范围监控录像科普与推荐
品牌: 在当前,商业摄像头厂家中,海康威视和大华同时是全球和全国厂家的第一二名,而在家庭摄像头中,海康威视和大华的子品牌萤石云和乐橙也占有一定的地位,小米手机由于广泛的覆盖率和米家的提前布局,小米摄像头也是家庭摄像头中一股不小的势力。本人只推荐大华摄像头,因为海康同性能的摄像头,价格都是大华的两倍。摄像头分类: 枪击摄像头,支架安装半球摄像头,自带支架固定安装云台摄像头,自带支架并且可以控制旋转家庭摄像头,通常是放在桌子上的焦距、清晰度、分辨率、覆盖范围: 焦距通常决定角度距离和覆盖范围,室内一般采用2.8mm进行近距离广角覆盖更高的像素可以带来更大的画面尺寸和更好的清晰度,通常使用200万像素,若要识别人脸、文字细节,可采用400万及以上的高清摄像头家用摄像头只需按宣传页选择购买即可其他: 夜视能力:一般分为红外、白光,红外是黑白画面,白光为全彩画面,但白光是通过高亮灯珠照射,夜间持续照射不关闭。录音,推荐购买带录音的产品跟随:云台摄像头通常可设置行人跟随拍摄或者声音源追踪,但作用并不大,反而容易被利用支架:枪击摄像头需要购买单独的支架,半球自带支架编码格式:推荐SmartH265编码的摄像头,占用存储空间更小,画面更清晰购买渠道:推荐从拼多多购买,拼多多的同规格摄像头价格仅为京东一半,并非山寨产品,而是货源不同。京东产品是厂家直供,是全新的;而拼多多一般是大型项目剩余的全新摄像头,价格只有一半。供电方式及联网方式:家用摄像头自带USB的电源适配器,而商业摄像头分为12V供电和POE+12V双供电,我这里只推荐POE供电的产品。(POE供电即通过网线供电,不需要独立电源,摄像头功率一般仅为2-3W,具体看产品页面)家用摄像头一般采用WIFI连接,而商业摄像头为了保证稳定性,一般采用网线连接。存储方式及硬盘录像机:简单计算存储容量,即1T硬盘可以为200万像素的4台H265摄像头录制10天画面,但不绝对因为硬盘录像机通常会设置画面无变化不录制,可将录制时间延长至20-30天。TF卡:家用摄像头采用TF卡存储,具体录制时间需要查看产品的页面硬盘录像机:有两种选择方式,第一种,使用POE交换机,则按需求选择普通硬盘录像机即可,摄像头连接POE交换机再连接硬盘录像机;第二种,使用POE硬盘录像机,摄像头直连POE硬盘录像机。监控网线:对网速要求不高,但我推荐六类监控网线,因为六类监控网线内带龙骨,皮更厚,在室外能长期抵抗更恶劣的环境。但如果你只在室内使用,超五类监控网线也可以。所谓监控网线,就是普通网线外皮加厚一点点,价格也比普通网线便宜。方案推荐: 家庭1-2个摄像头推荐:购买小米或大华家庭摄像头,插电连接WIFI使用即可。材料:小米、大华家庭摄像头小范围1-4摄像头推荐:推荐关键字:防水、录音、POE供电材料:大华4路POE硬盘录像机+1T硬盘(使用仅活动画面录像,可满足20-30天录像要求)大华室外枪击、红外、录音、POE供电摄像头+支架大华室内半球摄像头、红外、录音、POE供电六类监控网线小范围4-8摄像头推荐:推荐关键字:防水、录音、POE供电、POE交换机材料:大华8路网络硬盘录像机+2T硬盘(使用仅活动画面录像,可满足20-30天录像要求)大华室外枪击、红外、录音、POE供电摄像头+支架大华室内半球摄像头、红外、录音、POE供电六类监控网线磊科10口POE交换机(8口POE+2口上行+90W功率)总结:买!
2023年04月02日
542 阅读
0 评论
9 点赞
2023-03-23
联想Lenovo XClarity Essentials远程在线升级微码
下载运行Lenovo XClarity Essentials UpdateXpress例如我的SR860 (ThinkSystem)https://datacentersupport.lenovo.com/cn/zc/products/servers/thinksystem/sr860/downloads/driver-list/component?name=Lenovo%20XClarity%20Essentials%20%28LXCE%29%20%28OneCLI升级完成,注意,需关机拔掉电源,静止5分钟后通电启动!
2023年03月23日
357 阅读
0 评论
1 点赞
2023-03-22
vSphere vCenter ESXi接入群晖IPSAN iSCSI
前言,若使用iSCSI功能,则要确保IPSAN与ESXi之间采用双链路及以上链接,务必保证连接稳定。IPSAN部署 打开SAN Manager创建LUN推荐Thin精简模式试验阶段可用全部允许模式我采用自定义启动器填写,登录vCenter,添加iSCSI适配器查看名称完成群晖LUN配置要在ESXi共享,需打开多重联机vCenter动态发现重新扫描存储查看iSCSI设备,确认已连接创建文件系统为其他主机添加IPSAN,添加后文件系统会自动挂载全部添加群晖SAN manager查看至此IPSAN配置完成配置IPSAN快照保护计划 虚拟化迁移测试将某虚拟机迁移至IPSAN此虚拟机已运行于IPSAN在线计算资源迁移快速迁移完成简单测速 总结 使用双10G网卡后群晖IPSAN性能远超预期,可以替代16G FCSAN
2023年03月22日
587 阅读
0 评论
2 点赞
2023-03-06
华为超融合故障处理一则 fusioncube6.5 证书已经过期 FS_MANAGER
查看系统版本:FusionStorage Block V100R006C30SPH505故障描述:重要 证书已经过期 FS_MANAGER Server FusionStorage 附加信息: 证书类型=OMM_Tomcat_Certificate 流水号: 1743 告警级别: 重要 对象类型: Server 对象ID: FS_MANAGER 部件名称: FusionStorage01 告警ID: 51302 告警名称: 证书已经过期 告警对象: FS_MANAGER 部件类型: FusionStorage官方处理说明:https://support.huawei.com/enterprise/zh/doc/EDOC1100171940?idPath=7919749%7C251364444%7C21430817%7C251366260%7C21905727证书下载:https://support.huawei.com/enterprise/zh/software/252011923-ESW2000293854处理过程:注意,需要先清除告警再替换证书,否则会造成告警无法清除,只能华为远程处理。1、查看主节点登录FSM主节点,即fusioncube的主IP,也是FCC的主IP,通过ssh登录登陆用户名dsware用户默认密码为IaaS@OS-CLOUD9!,还有个fc2用户也可以登录登陆后切换到root用户su - rootroot用户默认密码为IaaS@OS-CLOUD8!查看节点状态,active为主节点,如果不是请确认IP是否正确/opt/omm/oms/workspace/ha/module/hacom/script/get_harole.sh active2、上传证书上传至/home/dsware/3、执行一键替换脚本证书密码为Huawei@123,必须在root目录中执行[root@FCC02 ~]# sh /home/dsware/One-click_replace_cert.sh ------------------------------------------------------------------------ STEP 1 Check the environment requirements. Check Success! HA role is active. [done] Check Success! The certificate in use is the default certific[done] Check Success! New Certificate file has upload /home/dsware. [done] Node Version is V100R006C30SPH505 [done] ------------------------------------------------------------------------ STEP 2 Back up the certificate in use to the /home/dsware/ directory. Backup the CRT in use to directory /home/backup_default_certi[done] ------------------------------------------------------------------------ STEP 3 Obtaining the Password of the New Certificate Enter the protection key of the /home/dsware/tomcat_server.jks. Please Enter: Huawei@123 /home/dsware/tomcat_server.jks password check SUCCESS. [done] ------------------------------------------------------------------------ STEP 4 Execute CLI to upload the script to the specified directory. -----------------------step 4.1 save tomcat_client.jks---------------- Execute dsware_tool save tomcat_client.jks SUCCESS. [done] -----------------------step 4.2 save tomcat_server.jks---------------- Execute dsware_tool save tomcat_server.jks SUCCESS. [done] ------------------------------------------------------------------------ STEP 5 Execute CLI to update TomcatCertificate. -----------------------step 5.1 update cert ---------------- Execute dsware_tool update crt tomcat_server.jks SUCCESS. [done] ------------------------------------------------------------------------ STEP 6 Check whether the service is normal after the certificate is replaced. -----------------------Check whether dsware_tool is available.---------------- Check dswareTool FAIL 1/5 TIMES [fail] Check dswareTool FAIL 2/5 TIMES [fail] Check dswareTool FAIL 3/5 TIMES [fail] Check dswareTool SUCCESS.! [done] Congratulations. Certificate replaced successfully.4、故障码清除咨询客服得知,故障码将在一段时间后自动清除
2023年03月06日
452 阅读
0 评论
2 点赞
2023-03-01
红帽Linux防火墙 firewall 中文文档以及我的笔记
文档地址https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html禁止ping echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 开启ping echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all安装firewallyum install firewalld服务相关systemctl disable firewalld systemctl enable firewalld systemctl start firewalld systemctl stop firewalld systemctl restart firewalld firewall-cmd --state查看当前防火墙规则firewall-cmd --list-all重载防火墙firewall-cmd --reload查看当前接口情况firewall-cmd --get-active-zonesIP伪装端口转发firewall-cmd --permanent --add-masquerade --zone=external firewall-cmd --add-forward-port=port=22:proto=tcp:toport=3753 --permanent --zone=external firewall-cmd --add-forward-port=port=22:proto=tcp:toaddr=192.0.2.55 --permanent --zone=external firewall-cmd --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.0.2.55 --permanent --zone=external添加删除http限制并发规则firewall-cmd --zone=public --add-rich-rule='rule service name="http" limit value="80/s" accept' --permanent firewall-cmd --zone=public --remove-rich-rule='rule service name="http" limit value="80/s" accept' --permanent添加删除80端口限制并发规则firewall-cmd --zone=public --add-rich-rule='rule port port=80 protocol=tcp limit value="80/s" accept' --permanent firewall-cmd --zone=public --remove-rich-rule='rule port port=80 protocol=tcp limit value="80/s" accept' --permanent添加删除tcp端口firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --remove-port=80/tcp黑名单firewall-cmd --zone=drop --add-source 192.168.1.1 firewall-cmd --zone=drop --remove-source 192.168.1.1 firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" drop' --permanent firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.1.1" drop' --permanent控制规则 rule [family="<rule family>"] [ source address="<address>" [invert="True"] ] [ destination address="<address>" [invert="True"] ] [ <element> ] [ log [prefix="<prefix text>"] [level="<log level>"] [limit value="rate/duration"] ] [ audit ] [ accept|reject|drop ] `port` 端口既可以是一个独立端口数字,又或者端口范围,例如,5060-5062。协议可以指定为 tcp 或 udp 。命令为以下形式: port port=number_or_range protocol=protocol综合应用允许指定IP的端口访问 [root@ADmanagement ~]# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.16.21.118" port protocol="tcp" port="61234" accept" success [root@ADmanagement ~]# firewall-cmd --reload success [root@ADmanagement ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens192 sources: services: cockpit dhcpv6-client ssh ports: 10050-10051/tcp 61222/tcp 80/tcp protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: rule family="ipv4" source address="172.16.21.118" port port="61234" protocol="tcp" accept 移除策略 [root@ADmanagement ~]# firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="172.16.21.118" port protocol="tcp" port="61234" accept" success [root@ADmanagement ~]# firewall-cmd --reload success 允许指定网段的端口访问 [root@ADmanagement ~]# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.17.0.0/16" port protocol="tcp" port="61234" accept" success [root@ADmanagement ~]# firewall-cmd --reload success 移除策略 [root@ADmanagement ~]# firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="172.17.0.0/16" port protocol="tcp" port="61234" accept" success [root@ADmanagement ~]# firewall-cmd --reload success 允许 accept 阻止 drop
2023年03月01日
755 阅读
0 评论
1 点赞
2023-02-08
MongoDB6 安装部署、权限设置、外网访问
本文使用windows安装,但实际配置与linux相同。一、软件安装下载MongoDB,当前版本为6.0.4,默认安装带MongoDB Compasshttps://www.mongodb.com/try/download/community默认安装目录为C:\Program Files\MongoDB\Server\6.0MongoDB Shell需要手动下载,可放在MongoDB目录中使用https://www.mongodb.com/try/download/shell安装后程序自动注册为服务,自动运行,程序开启、停止、重启均通过服务控制二、配置文件mongod.cfg配置文件位于C:\Program Files\MongoDB\Server\6.0\bin\,建议使用默认配置文件配置完成后再修改配置文件。三、配置数据库、用户、远程登陆注意!必须使用MongoDB Shell配置运行mongosh.exe登陆终端查看当前数据库test> show dbs admin 168.00 KiB config 108.00 KiB local 80.00 KiB创建管理员用户,进入admin管理员库control> use admin switched to db admin admin> db.createUser({ user: "superadmin", pwd: "superadmin", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] }) { ok: 1 }验证用户名密码,退出系统admin> db.auth('superadmin','superadmin') { ok: 1 } admin>exit修改mongod.cfg配置文件,开启验证security: authorization: enabled /开启认证重启服务再次使用mongosh.exe登陆数据库,运行任意命令提示权限不足test> show dbs MongoServerError: command listDatabases requires authentication使用管理员用户登录test> use admin switched to db admin admin> db.auth('superadmin','superadmin') { ok: 1 }创建control数据库和数据库拥有者admin> use control switched to db control control> db.createUser({ user: "admin", pwd: "adminpasswd", roles: [{ role: "dbOwner", db: "control" }] }) { ok: 1 }创建只读账号control> db.createUser({ user: "user", pwd: "user", roles: [{ role: "read", db: "control" }] }) { ok: 1 }修改mongod.cfg配置允许外网访问并重启服务器net: port: 60000 /端口配置 bindIp: 0.0.0.0 /监听所有地址使用MongoDB Compass客户端登录测试格式为mongodb://用户名:密码@IP:端口/数据库名登陆无问题,且不同人员登陆后权限不同四、扩展阅读role里的角色可以选: Built-In Roles(内置角色): 1. 数据库用户角色:read、readWrite; 2. 数据库管理角色:dbAdmin、dbOwner、userAdmin; 3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager; 4. 备份恢复角色:backup、restore; 5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase,userAdminAnyDatabase、dbAdminAnyDatabase 6. 超级用户角色:root 7. 内部角色:__system修改密码 use admin db.changeUserPassword("username", "xxx") 删除用户 use admin db.dropUser('user001')mongodb用户权限管理最全攻略:用户的创建、查看、删除与修改,mongodb入坑之旅https://blog.csdn.net/zhanghongshuang/article/details/117461225
2023年02月08日
507 阅读
0 评论
1 点赞
2022-12-29
RHEL9学习笔记
注册为RHEL9开发者,可获取系统更新功能 https://developers.redhat.com/安装系统 若有外网,可下载 boot.iso 在线安装系统进入单用户 参考RHEL9中文文档,在9系统中默认隐藏了grub菜单,需要开机后按 ESC键 重新显示,之后的操作与RHEL8相同通过向内核添加 rd.break 参数来以单用户模式启动 mount -o remount,rw /sysroot chroot /sysroot touch /.autorelabel 两次exit退出
2022年12月29日
465 阅读
0 评论
0 点赞
2022-11-24
SQLServer跨大版本升级,SQL2008-SQL2017
目标主机当前SQLServer版本为2008,升级目标为20171、关闭目标主机相关业务2、对虚拟机建立快照,防止升级故障3、选择升级安装SQL20174、升级提示需要先将SQL2008版本升级到SQL2008R2 SP35、升级SQL2008版本数据库当前版本为2008R2微软官网下载Microsoft® SQL Server® 2008 R2 Service Pack 3升级包https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=44271进行升级再次进行升级,注意企业版只能升级到企业版6、升级完成7、若使用无异常,则删除虚拟机快照
2022年11月24日
626 阅读
0 评论
1 点赞
2022-09-26
华三H3C无线AC、AP模式与上线解析
一、前言通常将AP分为胖AP(Fat AP)和瘦AP(Fit AP),其中胖AP又包含本地管理与云管理模式。AC部署方式分为旁挂和直连模式,网关部署分为AC网关和其他网关。二、AC部署方式1、最简单的部署方式,即AP直接连接到AC端口上,AC本身配置网关和VLAN,客户端以AC作为网关上网,此方式为AC网关+直连二层+瘦AP模式+集中转发 或 本地转发。2、网关不在AC上,AP与AC在同一VLAN中,客户端以AC集中转发方式上网,此方式为其他网关+直连二层+瘦AP模式+集中转发 或 本地转发。3、网关不在AC上,AP与AC不在同一VLAN中,AP通过三层Option43寻找AC,客户端以AC集中转发方式上网,此方式为其他网关+三层连接+瘦AP模式+集中转发。4、网关不在AC上,AP与AC不在同一VLAN中,AP通过三层Option43寻找AC,客户端以本地转发方式上网,客户端与AP在同一VLAN中,此方式为其他网关+三层连接+瘦AP模式+本地转发。5、网关不在AC上,AP与AC不在同一VLAN中,AP通过三层Option43寻找AC,客户端以本地转发方式上网,客户端与AP不在同一VLAN中,此方式为其他网关+三层连接+瘦AP模式+本地转发+管理业务分离。AC接口配置若AP使用集中转发,则AC接口需要配置为trunk;若AP只使用本地转发,则AC接口可以为access或三层接口。二、胖AP1、同VLAN本地管理连接AP的接口为access,本VLAN中应存在DHCP服务器,登录AP配置SSID,AP与客户端处在同一个VLAN中。2、trunk模式本地管理连接AP的接口为trunk,配置PVID为管理VLAN,管理VLAN中应存在DHCP服务器,允许其他VLAN为业务VLAN,登录AP配置SSID,AP与客户端不处于同一个VLAN中。3、云管理模式华三云简网络 https://oasis.h3c.com/与上面两种模式相同,当AP获得IP并且能够连接外网时,可以使用SN注册云简网络使用,统一配置SSID,可以自动下发配置。三、瘦AP1、同VLAN AC管理 本地转发连接AP接口为access,本VLAN中应存在DHCP服务器,AP通过广播寻找AC,上线后AP、AC、客户端在同一VLAN中。2、同VLAN AC管理 集中转发连接AP接口为access,本VLAN中应存在DHCP服务器,AP通过广播寻找AC,通过AC集中转发,上线后,AP、AC在同一VLAN,客户端在AC指定的VLAN中,集中转发最大带宽由AC决定。3、三层连接 AC管理 本地转发连接AP的接口为access,本VLAN中应存在DHCP服务器,DHCP服务器应配置Option 43选项指定AC的IP地址,AP通过路由连接AC,上线后AP与客户端在同一VLAN中。示例:假设当前AC IP为192.168.2.2/24,无线汇聚管理和业务段均为192.168.3.0/24,每个段都应配置DHCP服务。无线汇聚交换机连接AP端口为access,指定VLAN为管理业务混合段。三层上线配置,AP管理段所在VLAN配置DHCP,如:dhcp server ip-pool vlan5 gateway-list 192.168.1.1 network 192.168.1.0 mask 255.255.255.0 dns-list 114.114.114.114 option 43 hex 800700000103030303在线转换工具 https://tool.520101.com/wangluo/jinzhizhuanhuan/说明option43格式简要说明: 80 07 00 00 01 02 02 02 02 80:固定值,不用改变; 07:长度字段,其后面所跟数据的字节长度; 00 00:固定值,不用改变; 01:表示后面的IP地址的个数,此处为一个IP地址; 02 02 02 02:IP地址 AC配置缺省转发VLAN为1,本地转发为全部AP配置无线服务不设置VLAN4、三层连接 AC管理 集中转发连接AP的接口为access,本VLAN中应存在DHCP服务器,DHCP服务器应配置Option 43选项指定AC的IP地址,AP通过路由连接AC,上线后AP、AC在不同网络中,客户端在AC指定的VLAN中。5、三层连接 AC管理 管理业务分离 本地转发连接AP的接口为trunk,配置PVID为管理VLAN,管理VLAN中应存在DHCP服务器,DHCP服务器应配置Option 43选项指定AC的IP地址,AP通过路由连接AC,允许其他VLAN为业务VLAN,上线后AP、AC在不同网络中,客户端在AC指定的VLAN中,通过本地转发模式实现带宽最大化利用。示例:华三官方典型教程https://www.h3c.com/cn/d_202108/1436703_30005_0.htm(注意官方教程有一点错误,官方尚未修改)假设当前AC IP为192.168.2.2/24,无线汇聚管理段为192.168.3.0/24,无线汇聚业务段为192.168.4.0/24,每个段都应配置DHCP服务。三层上线配置,AP管理段所在VLAN配置DHCP,如:dhcp server ip-pool vlan5 gateway-list 192.168.1.1 network 192.168.1.0 mask 255.255.255.0 dns-list 114.114.114.114 option 43 hex 800700000103030303在线转换工具 https://tool.520101.com/wangluo/jinzhizhuanhuan/说明option43格式简要说明: 80 07 00 00 01 02 02 02 02 80:固定值,不用改变; 07:长度字段,其后面所跟数据的字节长度; 00 00:固定值,不用改变; 01:表示后面的IP地址的个数,此处为一个IP地址; 02 02 02 02:IP地址无线汇聚交换机连接AP端口配置为trunk,并配置缺省VLAN,此VLAN为管理VLAN,允许业务VLAN通过interface GigabitEthernet1/0/20 port link-mode bridge port link-type trunk port trunk permit vlan all port trunk pvid vlan 3AC配置简单版即缺省VLAN为1,本地转发VLAN为全部AP配置重点,加载MAP文件,即把AP接口同样改为trunk,此时允许通过的VLAN为业务VLAN,同样可以配置允许全部VLAN,以此简化配置。MAP文件内容:system-view vlan 4 quit interface GigabitEthernet 1/0/1 port link-type trunk port trunk permit vlan 4绑定无线服务时直接指定业务VLAN此时管理VLAN为交换机pvid设置的VLAN,业务VLAN为绑定无线服务时设置的VLAN。四、小结个人用户,从节约成本角度考虑,可以使用胖AP/云管理模式,无需购买AC和授权;小型企业用户可以使用同vlan集中转发模式;大型企业应使用三层连接、管理业务分离方式,更安全更快速。
2022年09月26日
881 阅读
0 评论
4 点赞
2022-09-21
Huawei华为交换机学习笔记
进入系统试图 system-view 退出 quit 返回用户视图 return Ctrl+Z 显示系统版本 display version 查看当前配置 display this 更改设备名 sysname 保存 save 重启reboot 恢复出厂设置reset saved-configuration 查看配置信息 display current-configuration 关闭“打断命令输入”undo terminal monitor 查看路由表 display ip routing-table 配置终端登录密码 user-interface console 0 authentication-mode password set authentication password simple 123 明文密码 set authentication password cipher 123 密文密码 配置终端自动退出时间 user-interface console 0 idle-timeout 1 1分钟后自动退出 关闭网络接口 interface GigabitEthernet 0/0/2 shutdown关闭 undo shutdown打开 配置IP地址 interface GigabitEthernet 0/0/0 进入接口 ip add 192.168.1.254 24 配置IP 配置交换机管理地址 interface Vlanif 1 ip add 192.168.1.253 24 undo sh 配置远程访问 user-interface vty 0 1 远程管理的终端数量 user privilege level 3 远程管理的权限级别 authentication-mode aaa 启用3A认证 aaa 进入3A认证视图 local-user admin password cipher 123 添加用户密码 local-user admin service-type telnet 远程管理的协议 {dotted startColor="#ff6c6c" endColor="#1989fa"/}清除Console口密码User interface con0 is available Please Press ENTER. Password: 断电重启,提示Ctrl+B时按Ctrl+B Boot Area ...........................................Main CPU reset type ...................................PowerOn CPU Core Frequency ...............................1400MHz SDRAM memory size ............................... 4Gbytes SDRAM initializing ..................................Done Press [Ctrl+T] to entry diag menu in 1 seconds BIOS Version:1262, Date: Mar-12-2020 09:00:00 Starting the os kernel Uncompressing... done, booting... @@@[ 3.300340] **** Total Boot time: 3300 ms, uncompress initrd cost 2701 ms **** Press CTRL+B to enter BOOT menu or CTRL+E to boot DFX: 2 Info: The password is empty. For security purposes, change the password. New password: Confirm password: The password is changed successfully. Main Menu 1. Default startup 2. Serial submenu 3. Ethernet submenu 4. Startup parameters submenu 5. File system submenu 6. Password manager submenu 7. Restore factory defaults 8. Reboot Enter your choice(1-8): 6 Password manager submenu 1. Modify bootloader password 2. Clear the console login password 3. Reset bootloader password 0. Return Enter your choice(0-3): 2 Caution: A new console password must be set after the restart. Continue now? Yes(y) or No(n): y Boot Disk: flash Startup File: CE6820-V200R019C10SPC800.cc code here... 端口聚合/链路聚合[sw1]interface Eth-Trunk 1 [sw1-Eth-Trunk1]mode manual load-balance [sw1-Eth-Trunk1]int g0/0/1 [sw1-GigabitEthernet0/0/1]eth-trunk 1 [sw1-GigabitEthernet0/0/1]int g0/0/2 [sw1-GigabitEthernet0/0/2]eth-trunk 1
2022年09月21日
870 阅读
0 评论
3 点赞
2022-09-18
RHCE学习笔记2
yml文件 yaml声明式语言,要求语法检测必须通过key:[空格]值hosts:[空格]值user模块,创建一个用户 参数:statestate: presentansible-doc -s user 范例ansible-doc user 范例 user:name: johnd comment: John Doe uid: 1040 group: admin 使用vim写yml文件hosts 跟inventory清单里的一台主机,跟主机组 多个主机之间或者多个组之间用逗号隔开,隔开比如web,db,lamp | all所有清单all 即 ansible.cfg中inventory所有主机yml写完后,通过ansible-playbook命令运行ansible-playbook -i /tmp/invenoty2.py 使用指定清单新建一个剧本first.ymlname: This is first yml filehosts: web,dbtasks: - name: create user upnange123 user: name: upnange123 state: present uid: 1800 通过ansible-playbook --syntax-check first.yml进行语法检查playbook: first.yml 语法通过执行完playbook后随后进行验证,通过add-hocansible 组名 | 主机名 -m shell | command 都可以 -a 执行一些传统命令command 直接对接shell环境 /bin/bash | /bin/false格式不对检查报错ansible-playbook --syntax-check first.ymlERROR! We were unable to read either as JSON nor YAML, these are the errors we got from each:JSON: Expecting value: line 1 column 1 (char 0)Syntax Error while loading YAML. did not find expected '-' indicator剧本增加模块name: This is first yml filehosts: web,dbtasks: - name: create user upnange123 user: name: upnange123 state: present uid: 1800 - name: verify upnange123 is exist shell: cmd: tail -1 /etc/passwd ansible-playbook first.yml 执行脚本PLAY [This is first yml file] 读取yml文件剧本TASK [Gathering Facts] *收集事实变量ok: [serverc]ok: [serverb]ok: [servera]ok: [serverd]TASK [create user upnange123] 执行第一个任务,创建用户changed: [serverb]changed: [serverc]changed: [servera]changed: [serverd]TASK [verify upnange123 is exist] **执行第二个任务changed: [serverc]changed: [serverd]changed: [servera]changed: [serverb]PLAY RECAP *回放执行过程servera : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0serverb : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0serverc : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0serverd : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0ansible 幂等性ok 绿色 成功 没有对结果产生影响changed 黄色 成功了对结果产生影响ignored 任务执行失败 忽略找手感环节1:最开始的playbook:找到你的手感vim first.yml---(回车)(空格)(空格)-(空格)name:(空格)xxxxxxxx(回车)直接写hosts:(空格)xxx(回车)直接写tasks:(回车)直接写-(空格)name:(空格)xxxxxxxx(回车)直接写模块比如shell:(回车)直接写参数比如cmd:(空格)xxxxxxxx(回车)多个参数,直接写参数比如create:(空格)xxxxxxxx(回车)到此,一个play就结束了 多个play,先进行语法检测,多用复制粘贴主机列表项方式name: xxxhosts: - web - dbtasks: - name: xxx shell: xxx tasks列表项方式,直接 -模块name: This is first yml filehosts: web,dbhosts: - web - db tasks: - name: create user upnange123 user: name: upnange123 state: present uid: 1800 - name: verify upnange123 is exist shell: cmd: tail -1 /etc/passwd - user: name: upnange123 state: absent remove: yes 最终验证:ansible all -m shell -a "id upnange123"语法检测ansible-playbook --syntax-check first.yml进行语法检查-C 预运行,并不真正运行,只是模拟运行 ansible-playbook -C 7.yml排错 ansible-playbook 7.yml -v-v 显示较为详细任务输出-vv 任务所在行数-vvv 环境用到的包-vvvv 任务是通过哪个用户的身份去运行-vv平时用的多找手感2:对 YAML 格式的识别以及格式上的自动对齐vi ~/.vimrcautocmd FileType yaml setlocal ai ts=2 sw=2 et写playbook时开两个窗口,一个vim xxx.yml 另一个ansible-doc xxx需要熟悉常用模块的参数经典部署httpd1、传统命令方式部署:1.1 安装单节点 servera yum install httpd1.2 启动服务器 systemctl enable --now httpd1.3 搞站点website /var/www/html echo "xxx" > index.html1.4 改端口httpd.conf apache 80-80801.5 重启httpd systemctl restart httpd1.6 发现index.html 无法通过firefox访问 selinux端口策略、安全性上下文,firewalld查看端口开放2、ansible不是httpd2.1 yum模块2.2 service模块2.3 copy模块2.4 lineinfile模块2.5 service模块2.6 copy | file setype参数,firewalld模块举例name: deploy httpdhosts: servera,serverbtasks: - name: install httpd package yum: name: httpd state: present - name: Start service httpd, if not started service: name: httpd state: started enabled: yes - name: copy index.html copy: content: 'upnange666' dest: /var/www/html/index.html owner: apache group: apache mode: '0444' setype: httpd_sys_content_t - name: modify httpd.conf port 8080 lineinfile: path: /etc/httpd/conf/httpd.conf regexp: '^Listen' line: Listen 8080 - name: restart httpd service service: name: httpd state: restarted - name: verify firewalld service is started service: name: firewalld state: started enabled: yes - name: add firwalld policy tcp 8080 firewalld: port: 8080/tcp permanent: yes immediate: yes state: enabled验证[student@workstation ansible]$ curl http://serverb:8080upnange666[student@workstation ansible]$playbook中的远程用户ansible 控制节点ansible.cfgremote_user=student | devops被管理节点又devops用户 | devops sudo1、被管理环境要有用户2、要有sudo权限ansible.cfgremote_user=devops除了bastion之外,其他的跑ansible任务没有问题觉得bastion用devops不太方便 ,没有用户,调用已经存在的sudo用户抛开全局默认的远程用户,单独执行yml针对bastion配置student用户执行grep -v -e "#" -e "^$" ansible.cfg 查看配置方法举例name: create user devops for bastionhosts: bastionremote_user: studentbecome: Truebecome_method: sudobecome_user: roottasks: - name: creat user user: name: devops state: present 该报错跟用户是否存在有关:[student@workstation ansible]$ ansible bastion -m shell -a "id student"bastion | UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: devops@bastion: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true}该报错表示devops用户没有加入sudo:[student@workstation ansible]$ ansible bastion -m ping bastion | FAILED! => {"msg": "Missing sudo password"}变量命名字母开头,字母、数字、下划线变量 在不同的位置进行调用和使用1、playbook中 优先级局中 通过vars定义变量 也可以通过vars_files 将一个外部的yml作为变量的文件使用2、执行playbook 通过ansible-playbook -e 使用 优先级最高3、inventory清单中指定主机组变量优先级排序一、在playbook中应用变量name: deploy httpdhosts: servera,serverbvars: pack_name: httpd service_name: httpd service_port: 8080tasks: - name: install "{{ pack_name }}" package yum: name: "{{ pack_name }}" state: present - name: Start service "{{ service_name }}", if not started service: name: "{{ service_name }}" state: started enabled: yes - name: copy index.html copy: content: 'upnange666' dest: /var/www/html/index.html owner: apache group: apache mode: '0444' setype: httpd_sys_content_t - name: modify httpd.conf port "{{ service_port }}" lineinfile: path: /etc/httpd/conf/httpd.conf regexp: '^Listen' line: Listen "{{ service_port }}" - name: restart "{{ service_name }}" service service: name: "{{ service_name }}" state: restarted - name: verify firewalld service is started service: name: firewalld state: started enabled: yes - name: add firwalld policy tcp "{{ service_port }}" firewalld: port: "{{ service_port }}/tcp" permanent: yes immediate: yes state: enabled 二、创建外部vars变量文件[student@workstation vars]$ cat ~/ansible/vars/httpd.ymlpack_name: httpdservice_name: httpdservice_port: 8080引用外部vars变量文件[student@workstation ansible]$ cat deploy-httpd.ymlname: deploy httpdhosts: servera,serverbvars_files: - vars/httpd.ymltasks:[student@workstation ansible]$ cat remove_httpd.ymlname: remove httpdhosts: servera,serverbvars_files: - vars/httpd.ymltasks: - name: remove yum: name: "{{ pack_name }}" state: absent 三、在playbook运行时指定变量名,优先级最高ansible-playbook -e 变量名=变量值 -e 变量名=变量值[student@workstation ansible]$ ansible-playbook remove_httpd.yml -e pack_name=redisPLAY [remove "redis"] *TASK [Gathering Facts] **ok: [serverb]ok: [servera]四、在清单中对单一主机指定变量,清单中优先级比playbook中定义vars | vars_file 要低[student@workstation ansible]$ cat inventorybastion[web]servera pack_name=redis在清单中对主机组中所有主机设置变量[student@workstation ansible]$ cat inventorybastion[web]serveraserverb[db]servercserverd[web:vars]pack_name=vsftp优先级1、ansible-playbook -e 优先级最高2、vars | vars_file 优先级居中3、清单变量优先级最低debug信息输出[student@workstation ansible]$ cat regist.ymlname: register copy modulehosts: webtasks: - name: copy output copy: src: upnange.txt dest: /opt/ mode: 4777 register: upnange - name: debug output debug: #msg: "upnange.txt copy sucess!" var: upnange 变量类型字符串数组[student@workstation vars]$ cat users.ymlusers: upwen: uid: 1888 user-name: upwen2022 shell: /bin/bash upnange: uid: 1900 user-name: upnange666 shell: /bin/nologin取值users.upwen.user_nameusers'upnange'需要调试![student@workstation ansible]$ cat useradd.ymlname: useradd userhosts: webvars_files: - vars/users.ymltasks: - name: create user "{{ users.upwen.user_name }}" user: name: "{{ users.upwen.user_name }}" uid: "{{ users.upwen.uid }}" shell: "{{ users.upwen.shell }}" state: present - name: create user "{{ users['upnange']['user_name'] }}" user: name: "{{ users['upnange']['user_name'] }}" uid: "{{ users['upnange']['uid'] }}" shell: "{{ users['upnange']['shell'] }}" state: present[student@workstation ansible]$ cat vars/users.ymlusers: upwen: uid: 1888 user_name: upwen2022 shell: /bin/bash upnange: uid: 1900 user_name: upnange666 shell: /bin/nologin 过滤器 用来设置密文密码password: "{{ 'redhat' | password_hash('sha512') }}"举例name: useradd userhosts: webvars_files: - vars/users.ymltasks: - name: create user "{{ users.upwen.user_name }}" user: name: "{{ users.upwen.user_name }}" uid: "{{ users.upwen.uid }}" shell: "{{ users.upwen.shell }}" state: present password: "{{ 'redhat' | password_hash('sha512') }}" - name: create user "{{ users['upnange']['user_name'] }}" user: name: "{{ users['upnange']['user_name'] }}" uid: "{{ users['upnange']['uid'] }}" shell: "{{ users['upnange']['shell'] }}" state: present password: "{{ 'redhat' }}"验证,不使用passwd过滤器的显示为明文[student@workstation ansible]$ ansible web -m shell -a "tail -4 /etc/shadow"servera | CHANGED | rc=0 >>upwen2022:!!:19252:0:99999:7:::upnange666:!!:19252:0:99999:7:::upwen2033:$6$.bNwaSnhAOaSFJs1$GOVFXHv4TbSmJQwP676gEGnHEtHE.bTHnOBR7KyHal5jD/125j6yGfok5wOD0SU1it.og01i1YjWZ2WeQCwjj0:19252:0:99999:7:::upnange667:redhat:19252:0:99999:7:::serverb | CHANGED | rc=0 >>upwen2022:!!:19252:0:99999:7:::upnange666:!!:19252:0:99999:7:::upwen2033:$6$4jdDWFLp3bfV0aV3$PXLKRGG4ccsH4NaXWfQXmKaylBqGu5ItITw8wUOmsLbbctkx9lF/4SHiSfAEODXI35YvmGXIR/Zmpvt5L5uXq.:19252:0:99999:7:::upnange667:redhat:19252:0:99999:7:::管理机密定义管理机密ansible vault 创建、编辑、加密、解密、查看文件创建新的加密yml文件ansible-vault create vault1.yml编辑edit查看view指定密码运行--ask-vault-pass通过文件读取密码--vault-password-file=/xx.txt通过ansible.cfg配置密码,配置后全部操作免密第140行,取消注释修改vault_password_file = /xx先创建再加密ansible-vault encrypt useradd.yml解密ansible-vault decrypt useradd.yml更新密码rekey管理事实:1、收集事实2、关闭开启事实收集gather_facts: no | yes3、收集事实变量ansible servera -m setup4、魔法变量ansible localhost -m debug -a "var=hostvars.localhost"ansible实施与控制简单循环 loop "{ item }}"示例[student@workstation ansible]$ cat loop1.ymlname: create userhosts: webtasks: - name: loop user user: name: "{{ item }}" state: present loop: - upwen12 - upwen13 - upwen14 - upwen15 when条件魔法变量事实变量rc值 result code num变量 == 值变量 != 值变量 is defined变量 is not definedwhen举例[student@workstation ansible]$ cat when1.ymlname: when testhosts: web,db,balancertasks: - name: install haproxy on balancer group yum: name: haproxy state: latest when: inventory_hostname in groups.web - name: install redis on db group yum: name: redis state: latest when: inventory_hostname in groups['db'] rc举例[student@workstation ansible]$ cat rc.ymlname: rchosts: webtasks: - name: rpm shell: cmd: rpm -qa | grep -i haproxy register: upnange - name: debug debug: var: upnange.rc when结合rc举例[student@workstation ansible]$ cat rc.ymlname: rchosts: webtasks: - name: rpm shell: cmd: rpm -qa | grep -i haproxy register: upnange - name: remove yum: name: haproxy state: absent when: upnange.rc == 0 - name: debug debug: var: upnange.rc 验证ansible web -m shell -a "rpm -qa | grep -i haproxy"程序处理启动服务 | 重启服务 handlers实现必须对应一个play模块 对应的任务黄色changed 实现handlersansible幂等性 黄色changedhandlers 整个playbook中最后才去运行1、install httpd 触发handlers2、搞网站3、改主配置文件端口 80804、防火墙策略最后一步 handlers start | restart 服务 curl | firefox 举例upnange666[student@workstation ansible]$ cat handlers.ymlname: deploy httpdhosts: servera,serverbvars:pack_name: httpdservice_name: httpdservice_port: 8080vars_files: - vars/httpd.ymltasks: - name: install "{{ pack_name }}" package yum: name: "{{ pack_name }}" state: present notify: - restart "{{ service_name }}" service - name: copy index.html copy: content: 'upnange666' dest: /var/www/html/index.html owner: apache group: apache mode: '0444' setype: httpd_sys_content_t - name: modify httpd.conf port "{{ service_port }}" lineinfile: path: /etc/httpd/conf/httpd.conf regexp: '^Listen' line: Listen "{{ service_port }}"handlers: - name: restart "{{ service_name }}" service service: name: "{{ service_name }}" state: restarted - name: verify firewalld service is started service: name: firewalld state: started enabled: yes - name: add firwalld policy tcp "{{ service_port }}" firewalld: port: "{{ service_port }}/tcp" permanent: yes immediate: yes state: enabled验证[student@workstation ansible]$ curl http://servera:8080upnange666任务控制,失败处理需修改验证[student@workstation ansible]$ cat rremove_httpd.ymlname: remove "{{ pack_name }}"hosts: servera,serverbvars_files: - vars/httpd.ymltasks: - name: remove yum: name: http state: absent ignore_errors: yes handlers强制通过[student@workstation ansible]$ cat deploy-httpd.ymlname: deploy httpdhosts: servera,serverbforce_handlers: yes指定失败条件failed_when:举例:[student@workstation ansible]$ cat failed_when.ymlname: failed_whenhosts: webtasks: - name: excute /bin/false command: /bin/false register: upnange failed_when: upnange.rc != 1 - name: debug debug: var: upnange.rc验证:TASK [debug] ok: [servera] => {"upnange.rc": "1"}ok: [serverb] => {"upnange.rc": "1"}ansible 块与错误处理block | rescue | always首先在block跑play任务,成功-》进入always中运行play任务不成功-》进入rescue中,执行rescue里的play任务,再去走always举例[student@workstation ansible]$ cat block_rescure_always.ymlname: block & rescure & alwayshosts: webtasks: - name: block & rescure & always block: - name: vaerify upnange shell: id -un upnange rescue: - name: create user upnange user: name: upnange state: present always: - name: mofity upnange user groups is wheel user: name: upnange groups: wheel append: yes验证[student@workstation ansible]$ ansible web -m shell -a "id upnange"serverb | CHANGED | rc=0 >>uid=1906(upnange) gid=1906(upnange) groups=1906(upnange),10(wheel)servera | CHANGED | rc=0 >>uid=1906(upnange) gid=1906(upnange) groups=1906(upnange),10(wheel)在被管理节点执行lineinfile:blockinfile:创建写入ansible web -m blockinfile -a "path=/opt/up.txt create=true block='up666'"清空内容[student@workstation ansible]$ ansible web -m blockinfile -a "path=/opt/up.txt state=absent"sefcontext: selinux模块stat:jinja2模板模板 xxx.j2 文件名 使用事实变量 | 魔法变量通过template模块 src参数指定xxx.j2 dest= ansible被管理节点中的一个目标在被管理节点中可以输出 自己的事实变量的内容 servera fqdn ip kernel也可以在servera输出 别人的事实变量的值servera | b | c /etc/hosts文件通过jinja2 获取配合循环for控制ifjinja2语法调用变量: {{ ansible_facts.fqdn }} ansible servera -m setup 输出servera的事实变量循环:{{% for xxxx %}}中间贯穿变量的使用 {{% endfor %}}结合事实变量xx.j2welcome to vist {{ ansible_facts.fqdn }}结合魔法变量xx.j2也可以这样写:[student@workstation ansible]$ cat for.j2 {% for upnange in groups['all'] %} {{ hostvars[upnange].ansible_facts.default_ipv4.address }} {{ hostvarsupnange['fqdn'] }} {{ hostvarsupnange['hostname'] }} {% endfor %}管理大项目 CMDB 配置管理数据库动态清单演示 动态清单启动环境[student@workstation ansible]$ lab projects-inventory startSetting up workstation for lab exercise work:· Verifying Ansible installation.............................. SUCCESS · Creating working directory.................................. SUCCESS · Deploying ansible.cfg....................................... SUCCESS[student@workstation ansible]$ cd ~[student@workstation ~]$ cd projects-inventory/[student@workstation projects-inventory]$ lltotal 4-rw-r--r--. 1 student student 33 Sep 18 09:39 ansible.cfg下载脚本wget http://materials.example.com/labs/projects-inventory/inventorya.pywget http://materials.example.com/labs/projects-inventory/inventoryw.pychmod +x *.pyansible -i ./inventorya.py servera --list-hosts./inventorya.py --list配置并行[student@workstation ansible]$ cat ansible.cfg | grep forksforks = 5滚动更新,防止同时停止服务serial: 1位置在hosts下一行包含include和导入import,引申roles角色把yml拆分多个小的yml安装:install.yml防火墙:firewalld.yml管理服务:service.ymlimport 静态操作,解析剧本时对所有import静态处理include动态操作,执行playbook时进行处理install.yml 负责主要是安装的功能service.yml 负责主要是服务管理的功能注意,不要写hosts总体yml project1.yml 写hostsimport install.ymlinclude service.yml举例[student@workstation ansible]$ cat install.ymlname: install packageyum: name: vsftpd state: latest[student@workstation ansible]$ cat service.ymlname: service manageservice: name: vsftpd state: started enabled: yes[student@workstation ansible]$ cat porject1.ymlname: project1hosts: dbtasks: - name: import install vsftpd import_tasks: install.yml - name: include service vsftpd include_tasks: service.yml 验证[student@workstation ansible]$ ansible-playbook porject1.ymlPLAY [project1] *TASK [Gathering Facts] **ok: [serverd]ok: [serverc]TASK [install package] **changed: [serverd]changed: [serverc]TASK [include service vsftpd] *included: /home/student/ansible/service.yml for serverc, serverdTASK [service manage] *changed: [serverc]changed: [serverd]PLAY RECAP **serverc : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0serverd : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0通过角色简化playbookroles角色通过roles 标准化的目录结构目录1 子目录: var 子目录:template目录1 变成一个角色 使用 任何的yml 不带hosts写一个用于调用该角色的一个yml 这个yml文件指定hosts[student@workstation ansible]$ cat ansible.cfg | grep rolesadditional paths to search for roles in, colon separatedroles_path = /home/student/ansible/roles初始化roles[student@workstation roles]$ ansible-galaxy init apacheRole apache was created successfully[student@workstation roles]$ lltotal 0drwxrwxr-x. 10 student student 154 Sep 18 10:22 apache[student@workstation roles]$ tree apache/apache/├── defaults│ └── main.yml├── files├── handlers│ └── main.yml├── meta│ └── main.yml├── README.md├── tasks│ └── main.yml├── templates├── tests│ ├── inventory│ └── test.yml└── vars └── main.yml角色叫apache 里面包含主体的yml tasks目录下 hadlers 目录用于触发器 vars存放变量文件 templates j2角色如何去做:1、自定义2、系统角色3、从ansible galaxy 网站 下载 使用1、自定义 ansible-galaxy init apache自己从头到尾编写2、系统角色 直接安装即可 写好调用即可3、从ansible galaxy网站 通过anisble-galaxy install 方式 指定角色压缩包 写好调用的角色 配置好hosts系统角色ansible控制节点[student@workstation roles]$ sudo yum install rhel-system-roles -y[student@workstation roles]$ ansible-galaxy list/usr/share/ansible/roleslinux-system-roles.certificate, (unknown version)linux-system-roles.crypto_policies, (unknown version)linux-system-roles.ha_cluster, (unknown version)linux-system-roles.kdump, (unknown version)linux-system-roles.kernel_settings, (unknown version)linux-system-roles.logging, (unknown version)linux-system-roles.metrics, (unknown version)linux-system-roles.nbde_client, (unknown version)linux-system-roles.nbde_server, (unknown version)linux-system-roles.network, (unknown version)linux-system-roles.postfix, (unknown version)linux-system-roles.selinux, (unknown version)linux-system-roles.ssh, (unknown version)linux-system-roles.sshd, (unknown version)linux-system-roles.storage, (unknown version)linux-system-roles.timesync, (unknown version)linux-system-roles.tlog, (unknown version)rhel-system-roles.certificate, (unknown version)rhel-system-roles.crypto_policies, (unknown version)rhel-system-roles.ha_cluster, (unknown version)rhel-system-roles.kdump, (unknown version)rhel-system-roles.kernel_settings, (unknown version)rhel-system-roles.logging, (unknown version)rhel-system-roles.metrics, (unknown version)rhel-system-roles.nbde_client, (unknown version)rhel-system-roles.nbde_server, (unknown version)rhel-system-roles.network, (unknown version)rhel-system-roles.postfix, (unknown version)rhel-system-roles.selinux, (unknown version)rhel-system-roles.ssh, (unknown version)rhel-system-roles.sshd, (unknown version)rhel-system-roles.storage, (unknown version)rhel-system-roles.timesync, (unknown version)rhel-system-roles.tlog, (unknown version)/etc/ansible/roles[student@workstation roles]$ cd /usr/share/ansible/roles/[student@workstation roles]$ lslinux-system-roles.certificate rhel-system-roles.certificatelinux-system-roles.crypto_policies rhel-system-roles.crypto_policieslinux-system-roles.ha_cluster rhel-system-roles.ha_clusterlinux-system-roles.kdump rhel-system-roles.kdumplinux-system-roles.kernel_settings rhel-system-roles.kernel_settingslinux-system-roles.logging rhel-system-roles.logginglinux-system-roles.metrics rhel-system-roles.metricslinux-system-roles.nbde_client rhel-system-roles.nbde_clientlinux-system-roles.nbde_server rhel-system-roles.nbde_serverlinux-system-roles.network rhel-system-roles.networklinux-system-roles.postfix rhel-system-roles.postfixlinux-system-roles.selinux rhel-system-roles.selinuxlinux-system-roles.ssh rhel-system-roles.sshlinux-system-roles.sshd rhel-system-roles.sshdlinux-system-roles.storage rhel-system-roles.storagelinux-system-roles.timesync rhel-system-roles.timesynclinux-system-roles.tlog rhel-system-roles.tlogtimesync时间同步的系统角色 复制到 [student@workstation roles]$ cp -av rhel-system-roles.timesync/ /home/student/ansible/roles/系统角色,写好调用timesync角色的ymlExample PlaybookInstall and configure ntp to synchronize the system clock with three NTP servers:- hosts: targets vars: timesync_ntp_servers: - hostname: foo.example.com iburst: yes - hostname: bar.example.com iburst: yes - hostname: baz.example.com iburst: yes roles: - rhel-system-roles.timesync实验环境ntp在classroom中 classroom.example.comhosts: webvars: timesync_ntp_servers:- hostname: classroom.example.com iburst: yesroles:rhel-system-roles.timesync复制到vim中需要先进入粘贴模式:set paste验证结果ansible web -m shell -a "chronyc sources -v"timedatectl关注一个点:系统角色已经提前写好 tasks目录下的main.yml时角色主题,不需要 ansible-playbook main --syntax-check只检查自己调用角色的yml自定义角色变量-vars目录jinja2模板-timplates目录handlers触发器-handlers目录自定义角色:ansible-galaxy init apache变量:[student@workstation apache]$ cat ../../var/httpd.yml pack_name: httpdservice_name: httpdservice_port: 8080apache角色中的vars目录中的main.yml[student@workstation vars]$ cat main.ymlvars file for apachepack_name: httpdservice_name: httpdservice_port: 8080jinjia2模板:[student@workstation vars]$ cat ../../../upnange.j2 welcome to vist {{ ansible_facts.fqdn }} {{ ansible_facts['fqdn'] }} on {{ ansible_facts.default_ipv4.address }}apache角色中的templates目录中的main.yml[student@workstation templates]$ cp -p /home/student/ansible/upnange.j2 .handlers触发器:apache角色中的hanlders目录中的main.yml - name: start {{ service_name }} service service: name: "{{ service_name }}" state: started enabled: yes [student@workstation handlers]$ cat main.ymlhandlers file for apachename: start {{ service_name }} serviceservice: name: "{{ service_name }}" state: started enabled: yesapache角色中的tasks目录中的main.yml 存放主体的yml[student@workstation tasks]$ cat main.ymltasks file for apachename: install {{ pack_name }} packageyum: name: "{{ pack_name }}" state: presentname: template index.htmltemplate: src: upnange.j2 dest: /var/www/html/index.html owner: apache group: apache mode: 0444 setype: httpd_sys_content_tname: modify httpd.conf port {{ service_port }}lineinfile: path: /etc/httpd/conf/httpd.conf regexp: '^Listen' line: line: "Listen {{ service_port }}"notify:start {{ service_name }} servicename: add firewall policy tcp {{ service_port }}firewalld: port: "{{ service_port }}/tcp" permanent: yes immediate: yes state: enabled调用apache角色的yml[student@workstation tasks]$ vim /home/student/ansible/apache.ymlname: deploy apachehosts: webroles:apacheansible-galaxygalaxy.ansible.comrz -E xxsz -E xx上传下载ansible-galaxyhttps://galaxy.ansible.com/community-aws-1.5.0.tar.gz 上传ansible控制节点rz -E community-aws-1.5.0.tar.gz 直接上传到workstationsz -E xxxx.txtF0主机的/content目录下新建roles目录 上传通过浏览器访问http://content.example.com/roles/workstation wget http://content.example.com/roles/community-aws-1.5.0.tar.gz写一个yml 指定角色的来源 并且角色名称[student@workstation roles]$ cat require.ymlsrc: http://content.example.com/roles/community-aws-1.5.0.tar.gzname: aws[student@workstation roles]$ ansible-galaxy install -r require.yml -p /home/student/ansible/rolesdownloading role from http://content.example.com/roles/community-aws-1.5.0.tar.gzextracting aws to /home/student/ansible/roles/awsaws was installed successfullyansible 故障排除配置ansible日志[student@workstation ansible]$ cat ansible.cfg | grep log_pathlog_path = /var/log/ansible.log自动化模块copy | file | fetch管理类模块yum_repository自动化模块:copy | file | fetch | yum | user | group | lineinfile | blockinfile | stat | yum_repository | service | firewalld管理类模块:搭建YUM仓库gpgcheck=1 gpgkey=http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-releasecsa rpm --import http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-releaseansible all -m shell -a "rpm --import http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-release"rpm_key管理模块:[student@workstation ansible]$ cat yum_repository.ymlname: deploy yum repositoryhosts: alltasks:name: deploy yum repository baseosyum_repository: name: rh294_baseos description: 'This is rh294 BaseOS' file: rh294_baseos baseurl: http://content.example.com/rhel8.4/x86_64/dvd/BaseOS enabled: yes gpgcheck: yes gpgkey: http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-releasename: deploy yum repository appstreamyum_repository: name: rh294_AppStream description: 'This is rh294 AppStream' file: rh294_AppStream baseurl: http://content.example.com/rhel8.4/x86_64/dvd/AppStream enabled: yes gpgcheck: yes gpgkey: http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-releasename: import gpgkeyrpm_key: key: http://content.example.com/rhel8.4/x86_64/dvd/RPM-GPG-KEY-redhat-release state: presentuser管理模块:name | uid | group私有组 | groups | append | home | state present absent | password + 过滤器 | expires 账户的过期时间 shadow 倒数第2列 19700101+useradd -e 密码的过期时间 42~60 90 : ansible all -m shell -a "chage -M xxxxx"it-manager | PM product manager | role 身份存储的管理模块:涉及到分区parted、文件系统filesystem、挂载mount (标准形式)LVM lvg lvol 传统命令:vgcreate -s 16M upnangevg /dev/vdb /dev/vdc2lvg 模块 1、先去创建转换pv pvcreate /dev/vdb2、vgcreatevgcreate -s 32M upnangevg /dev/vdc1lvg: - name: create upnangevg lvg: vg: upnangevg pvs: /dev/vdb pesize: 32 创建lv逻辑卷lvcreate -L xxG -n lv1 upnangevglvcreate -l xxxpe个数 -n lv1 upnangevglvol: - name: create lv1 in upnangevg lvol: vg: upnangevg size: 800m lv: lv1 创建文件系统:mkfs -t ext4 | mkfs.xfs /dev/upnangevg/lv1filesystem: - name: create filesystem ext4 filesystem: fstype: ext4 dev: /dev/upnangevg/lv1 挂载使用:涉及到开机自动挂载 /etc/fstab 随手写到该文件中mkdir -p /opt/dir1 && mount /dev/upnangevg/lv1 /opt/dir1 && vi /etc/fstab mount模块:state: mounted mount /dev/upnangevg/lv1 + vi /etc/fstab[student@workstation ansible]$ cat storage.ymlname: deploy lvmhosts: webtasks:name: create upnangevglvg: vg: upnangevg pvs: /dev/vdb pesize: 32mname: create lv1 in upnangevglvol: vg: upnangevg size: 800m lv: lv1name: create filesystem ext4filesystem: fstype: ext4 dev: /dev/upnangevg/lv1name: mount filesystemmount: path: /opt/dir1 src: /dev/upnangevg/lv1 fstype: ext4 state: mounted分区模块:partedparted 分区 set 分区号1 lvm on flagparted -l flag /dev/vdb1 = LVM[student@workstation ansible]$ cat parted.ymlname: parted /dev/vdb in db grouphosts: dbtasks:name: parted parted: device: /dev/vdb number: 1 part_end: 800MiB state: presentname: create file systemfilesystem: fstype: xfs dev: /dev/vdb1name: mountmount: path: /opt/dir2 src: /dev/vdb1 fstype: xfs state: presentcron计划任务:crontab -e -u upnangecrontab -e 当前用户(root | upnange)分 时 日 月 周 命令的全路径(考试跟全路径)10 17 * echo hellosystemctl restart crondcron模块:[student@workstation ansible]$ cat cron.ymlname: cronforce_handlers: yeshosts: webtasks:name: croncron: name: this is a job minute: "11" hour: "17" user: upnange job: "/usr/bin/echo hello" state: presentnotify:restart crond servicename: create filefile: path: /opt/file1 state: filehandlers:name: restart crond serviceservice: name: crond state: restarted[student@workstation ansible]$ ansible web -m shell -a "tail -10 /var/log/cron" RHCSA:1、磁盘分区结构 磁盘接口2、操作系统安装3、系统启动 init | systemd4、nmtui | nmcli | nmcli add | nmcli modify5、systemd功能 systemctl | systemctl --user6、目录操作mkdir rmdir stat文件操作 touch cp mv rm 链接文件 ln -s | ln7、系统信息收集 lscpu df du free timedatectl hostsnamectl tree find more less cat8、ssh 免密操作9、用户管理 userad | usermod | userdel-u -g -G -d -e -p -s -aG -m -r10、组 私有组 附加组 groupadd groupmod groupdel11、权限 chmod | chown chgrp特殊权限 suid | sgid | sticky ACL setfacl | getfacl12、软件 rpm -qa -qc -qlyum 仓库 yum | yum group xx yum module 模块流 contos-stream 13、磁盘管理 分区 fdisk gdisk parted14、lvm pv vg lv15、swap mkswap dd if=/dev/zero of=/xxx bs=xxx count=xxx16、VDO | stratis17、日志 rsyslog journald18、find19、容器podman20、tunedRHCE:ansibleansible.cfg 清单 静态 | 动态 CMDB配置管理数据库自动化模块过滤器playbook角色rolesDevOPS开发运维+自动化上午 RHCSA 满分300分 210通过 22道题 3个小时 前7天下午 RHCE 满分300分 210通过 16道题 4个小时 Ansible内容所有题 都是上机操作 V2.1版本 RHCSA+RHCE 最新版本RH124&134 RH294 平时上课练习环境考试练习环境:RHCE_exam vmware 虚拟机 CSA+CE 自带参考的评分脚本只要按照 样题解析文档 每一道题会包含知识点+解题步骤+最后要注意的细节 考试通过没有任何问题考试环境node1 node2 registry15个人考试node1.domain01.xxxxnode1.domain03.xxxx用户密码node1 root flectragnode2 自己破解强烈建议大家,考试的时候 涉及到创建用户、密码、YUM仓库地址 进行复制粘贴RHCSA 有两道根Podman 镜像服务器 admin redhat321重要测评信息重新引导node1 node2 ,保证所有操作开机启动运行,无法引导启动为零分RHCSA 3个小时考试时间 强烈建议大家1.5个小时昨晚 0.5小时检查RHCE 4个小时 2小时做完 0.5小时检查ansible-playbook --syntax-chenck xxx.yml练习环境通过快照切换考试环境F0主机 用户名kiosk 密码redhat三个组件红帽 考试题目虚拟机控制台终端node1 node2 虚拟机控制台会用consolenode1 一开始不叫node1 IP console root | flectrag nmcli修改IPnode2 叫node2 一开始进不去 root密码不知道 console 重启 -grub xxx考试通过终端terminal答题做题 按照样题解析全部做完26道题有可能CSA及CE每个部分有一道从没见过的题目按顺序做题node1题目1 配置主机 网络等通过nmcli配置网络通过hostnamectl修改主机名题目2 配置YUM仓库题目3 调试selinux题目4 创建用户组题目5 配置cron计划任务题目6 配置协作目录题目7 配置NTP题目8 atuofs题目9 配置/var/tmp/fstab权限题目10 配置用户账户题目11 查找文件题目12 查找字符串题目13 创建存档题目14 配置容器使其自动运行题目15 为容器配置持久存储题目16 可能从新题,可能从下面抽一道1、编写shell全路径执行2、设置用户密码过期时间3、设置用户默认权限4、设置sudonode2题目1 设置root密码题目2 配置你的系统以使用默认仓库题目3 调整逻辑卷大小题目4 添加swap交换分区题目5 创建逻辑卷题目6 创建VDO卷题目7 调优集测试参考评分exam-gradeRHCE16道题 4小时control node1 - 5 系统IP采用静态设置Ansible控制节点已经创建了用户账户gregAnsible必须通过greg普通用户登录control控制节点默认工作目录在普通用户家目录下的ansible中 yml ansible inventory roles /home/greg/ansible题目1 安装配置ansiblessh greg@control建议用vimhost_key_checking=False #考试时不需要配置,会扣一点分数考试时不需要配置被管理节点的sudo题目2 创建和运行Ansible考试中用全路径执行 /xxx.shGPGKEY导入题目3 安装软件包题目4 使用RHEL系统角色题目5 使用Ansible Galaxy安装角色题目6 创建和使用角色题目7 从Ansible Galaxy使用角色题目8 创建和使用逻辑卷题目9 生成主机文件题目10 修改文件内容题目11 创建web内容目录题目12 生成硬件报告题目13 创建密码库题目14 创建用户账户题目15 更新Ansible库的密钥题目16 配置cron作业参考评分 exam-grade
2022年09月18日
383 阅读
0 评论
1 点赞
1
...
11
12
13
...
25