利用graphviz描述语言绘图

graphviz是很强烈的描述语言绘图工具 安装: apt install graphviz 或 yum install graphviz 生成png dot -Tpng hn.gv -o hn.png vi hg.gv digraph MyGraph { compound = true margin="0,0" ranksep = 1 nodesep = 1 rankdir=LR {rank=same;防火墙;日志审计} subgraph cluster_app { label="海南应用" rankdir=LR margin = 10 {rank=same;app01;app02} app01 [label="app01\n内网:192.168.0.10"] app02 [label="app02\n内网:192.168.0.11"] storage01 [label="storage01\n内网:192.168.0.30"] subgraph cluster_db { style = dotted label="数据库主/备" {rank=same;db02;db01} db01 [label="db01\n内网:192.168.0.20"] db02 [label="db02\n内网:192.168.0.21"] db01 -> db02 [dir=both] } app01 -> db01 [splines=true,lhead=cluster_db] app02 -> db01 [splines=true,lhead=cluster_db] app01 -> storage01 app02 -> storage01 } ​ ...

2023年04月03日 · 1 分钟 · 135 字 · 八戒

TrueNAS系统如何增加新硬盘

之前公司世纪互联和无锡的TureNAS现有硬盘都是38块,满配是60块,所以都需要扩容,扩满再增加22块。 TrueNAS的Raid是使用的RaidZ3,基于ZFS的,最多允许3块盘坏 首先会建立zpool,然后在zpool里面增加vdev,注意,vdev一旦增加,不可更改。 我们这里就犯了第一个错误,所有vdev的磁盘数量最好相等,所以第一次应该先增加30块盘,然后第二次再增加30块,这样两个vdev就是均衡的 现在我们这种状况,第一个vdev是38块,第二个vdev是22块,不对等了,会警告 具体添加步骤如下: 首先浪潮工程师到现场加盘,盘必须做好清除信息,用以下命令通过 dd if=/dev/zero of=/dev/da59 bs=1M count=32 然后插好盘后,必须重启Trunas,才能正常认出盘来,不能热插拔(很奇怪) Storage –> Pools –> 点击齿轮 –> Add Vdevs 然后选中所有左边的Available Disks,移到右边的Data VDevs 然后看最下面会立刻出红色警告,提示两个vdev的disks不对等 点击ADD VDEVS,会弹窗警告,选中Confirm,然后点Continue 会继续弹出一个警告窗,这回就明晰了,旧的数据不会破坏,然后继续选中Confirm,然后点ADD VDEVS 然后就会开始初始化硬盘 最后查看zpool,看到有两个RAIDZ3,就加好了

2023年03月31日 · 1 分钟 · 31 字 · 八戒

dell服务器idrac常用操作脚本

收录一下 dell 服务器 idrac 操作常用脚本 显示Raid卡硬盘 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm raid get controllers sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm raid get vdisks sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm raid get pdisks 清理Foreign磁盘状态 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm storage clearconfig:RAID.Integrated.1-1 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm jobqueue create RAID.Integrated.1-1 -s TIME_NOW --realtime 删除vdisk sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.5.14 racadm raid deletevd:Disk.Virtual.0:RAID.Integrated.1-1 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm jobqueue create RAID.Integrated.1-1 -s TIME_NOW --realtime 建立Raid0 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm raid createvd:RAID.Integrated.1-1 -rl r0 -wp wb -rp ra -name raid_0 -pdkey:Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm jobqueue create RAID.Integrated.1-1 -s TIME_NOW --realtime 建立Raid5 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm raid createvd:RAID.Integrated.1-1 -rl r5 -wp wb -rp ra -name raid_5 -pdkey:Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1,Disk.Bay.2:Enclosure.Internal.0-1:RAID.Integrated.1-1,Disk.Bay.3:Enclosure.Internal.0-1:RAID.Integrated.1-1 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm jobqueue create RAID.Integrated.1-1 -s TIME_NOW --realtime 重启服务器 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm serveraction hardreset 设置硬盘第一启动,禁止F1/F2等待 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm set BIOS.biosbootsettings.BootSeq HardDisk.List.1-1,NIC.Integrated.1-1-1 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm set BIOS.MiscSettings.ErrPrompt Disabled sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.5.16 racadm jobqueue create BIOS.Setup.1-1 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm serveraction hardreset 设置vnc sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm set idrac.vncserver.enable Enabled sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm set idrac.vncserver.Password calvin 设置idrac其他用户 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm config -g cfgUserAdmin -o cfgUserAdminUserName -i 4 newuser sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm config -g cfgUserAdmin -o cfgUserAdminPassword -i 4 123456 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm config -g cfgUserAdmin -o cfgUserAdminPrivilege -i 4 0x000001ff sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm config -g cfgUserAdmin -o cfgUserAdminEnable -i 4 1 改掉密码 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm config -g cfgUserAdmin -o cfgUserAdminPassword -i 4 987654 NTP的设置 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm set idrac.ipv4static.dns1 8.8.8.8 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm set idrac.NTPConfigGroup.ntp1 0.asia.pool.ntp.org sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm set idrac.NTPConfigGroup.ntp2 1.asia.pool.ntp.org sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm set idrac.NTPConfigGroup.ntp3 2.asia.pool.ntp.org sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm set idrac.NTPConfigGroup.ntp1 129.250.35.250 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm set idrac.NTPConfigGroup.ntp2 180.211.88.50 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm set idrac.NTPConfigGroup.ntp3 202.112.29.82 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm set idrac.NTPConfigGroup.NTPEnable Enabled sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm set idrac.NTPConfigGroup.NTPMaxDist 16 sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm set idrac.time.timezone Japan 修改网卡启动为Legacy PXE sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm get nic.nicconfig.1 | grep Legacy sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm set nic.nicconfig.1.legacybootproto PXE sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm get nic.nicconfig.1 | grep Legacy sshpass -p "calvin" ssh -oLogLevel=ERROR -oStrictHostKeyChecking=no root@10.224.$1 racadm jobqueue create NIC.Integrated.1-1-1 ipmitool -I lanplus -H $ip -U root -P calvin chassis power reset

2023年03月31日 · 3 分钟 · 490 字 · 八戒

TureNAS系统在浪潮定制系统上的安装

无锡浪潮TrueNAS系统的安装 这一版的浪潮定制NAS机器比较特别,没有任何Raid卡,配了Avago的一块pcie sas直通卡:搏通9400卡 然后是定制机,整体4U的高度,满配是60块16T的大盘,主板在机箱侧面立着,2块小盘做系统。 由于机房限制,无法直接从本地访问10.18.30.97,导致无法将本地文件挂入idrac的cdrom,只能曲线救国,在172.18.31.2建立一个nfs share,把光盘文件放进去 到 idrac 的 Remote control , 再到Virtual media,配好nfs共享 ip: 172.18.31.2 path: /export/nfsshare 在remote image redirction中可以看到光盘文件,点击Start 然后重启,CDROM是第一启动媒介 开始安装,缺省会进入第一项进行安装 然后会报这个错,panic: AP #1 (PHY# 2) failed! 见了鬼了,唯一的地方可能是主板部分和博通卡冲突,我们重启进入BIOS,到SATA和sSATA的地方 把主板的SATA给关掉,禁止AHCI 同样关掉sSATA,也禁止AHCI 然后重启安装TrueNAS,这次就可以通过了 安装盘选择前两块SSD小盘,230G openbsd会自动将这两款小盘做成软Raid 提示会抹掉两块盘的所有数据 输入root的密码 选择Boot via BIOS 建立16G的swap空间 然后就开始安装,这里没什么动静,也没有进度条,会等很久 安装完成后会让你重启,然后出来配置界面 我们首先要配置第二项,Bonding端口 然后再配第一项的静态IP 再配第四项缺省路由 配完就http和https显示正确地址 输入地址:http://172.18.30.97 登录就完成安装了

2023年03月30日 · 1 分钟 · 49 字 · 八戒

GlusterFS的实际应用

特别注意 两台GFS主机172.18.30.18和172.18.30.36上面务必配置/etc/hosts,否则peer的时候会有问题 172.18.30.18 renhe-18-30-18 172.18.30.18 renhe-18-30-36 客户端安装 yum -y install epel-release 然后 yum install glusterfs-fuse 就可以了 挂载: mount.glusterfs 172.18.30.18:/borui-vol /data/br/nfs fstab 自动挂载 172.18.30.18:/borui-vol /data/br/nfs glusterfs defaults,_netdev,backupvolfile-server=172.18.30.36 0 0 在172.18.30.18上建立新卷,因为只有2个节点,就必须force了 gluster volume create test-zhichi-vol replica 2 transport tcp 172.18.30.18:/glusterfs/test-zhichi-vol 172.18.30.36:/glusterfs/test-zhichi-vol force 启动 gluster volume start test-zhichi-vol 查看一下 gluster volume info test-zhichi-vol 查看卷信息(禁止查看inode,太多了) gluster volume status test-zhichi-vol detail gluster volume status test-zhichi-vol clients gluster volume status test-zhichi-vol mem gluster volume status test-zhichi-vol fd gluster volume status test-zhichi-vol inode 开启限额 gluster volume quota test-zhichi-vol enable gluster volume quota test-zhichi-vol limit-usage / 50GB gluster volume quota test-zhichi-vol list 限制IP访问 例如允许172.18.31.*网段的主机访问rep-volume: ...

2023年03月30日 · 2 分钟 · 236 字 · 八戒

使用ipset来禁止国外的用户登录openvpn

突然来的个需求,要求屏蔽国外的用户登录公司的openvpn,防止滥用,搜了一下教程倒是真不少,问题不少都是要去下载那个无比大的ip地址库,好不容易找了一个可用的。 记录下来,备用,原理很简单,ipset建立一个china的hashset,不停添加条目,最后用iptalbes阻挡一下: #!/bin/sh ipset create china hash:net hashsize 10000 maxelem 1000000 ipset add china 1.0.1.0/24 ...... ipset add china 91.234.36.0/24 iptables -I INPUT -m set --match-set china src -p udp -m udp --dport 1194 -j ACCEPT iptables -A INPUT -p udp --dport 1194 -j DROP 相应脚本的下载: ipset-rules.txt

2023年03月29日 · 1 分钟 · 47 字 · 八戒

核心交换机的配置过程

换了公司,也搞起了桌面运维,配置交换机的过程记录一下,其实很简单,就是命令记不住。 拿到一台华为交换机,重新初始化后,配置如下: <HUAWEI>dis cur !Software Version V200R008C00SPC500 # sysname HUAWEI # aaa authentication-scheme default authorization-scheme default accounting-scheme default domain default domain default_admin local-user admin password irreversible-cipher %^%#7:.iL]+u"4\j8ZFhGeg/-m.&"^0}kMznjk%>;BaUDO/'6m\X\=V8JGY:W;i,%^%# local-user admin service-type http # interface Vlanif1 # interface MEth0/0/1 # interface GigabitEthernet0/0/1 # interface NULL0 # user-interface con 0 authentication-mode password set authentication password cipher $1a$~!;$-JF0-W$Z><1.F]<sF.R_NBj34CJ/JPe=/tZDMM(Ws3'9u%+$ user-interface vty 0 4 user-interface vty 16 20 # return 一、配名称 sysname BJ_FANGHENG_JIERU 二、配置登录用户 1、aaa local-user admin password irreversible-cipher abcdefg local-user admin privilege level 3 local-user admin service-type telnet terminal ssh 2、user-interface con 0 authentication-mode aaa 3、user-interface vty 0 4 authentication-mode aaa protocol inbound all 三、配置下联交换机端口 interface GigabitEthernet0/0/23 description == H3cSW --> 24 port link-type trunk port trunk allow-pass vlan 2 to 4094 四、配置上联交换机端口 interface GigabitEthernet0/0/24 description == RuijieRoute --> lan0 port link-type trunk port trunk allow-pass vlan 2 to 4094 五、配置vlan地址 vlan 11 vlan 100 vlan 11 interface Vlanif11 ip address 10.8.0.7 255.255.254.0 vlan 100 interface Vlanif100 ip address 192.168.10.7 255.255.255.0 六、配置缺省路由 ip route-static 0.0.0.0 0.0.0.0 10.8.0.1 七、批量配置端口 port-group group-member GigabitEthernet0/0/1 to GigabitEthernet0/0/23 port link-type access port default vlan 11 stp edged-port enable 八、lldp lldp enable 九、dhcp dhcp enable ip pool 11 gateway-list 10.8.0.1 network 10.8.0.0 mask 255.255.254.0 static-bind ip-address 10.8.0.4 mac-address 8005-88f1-fa62 dns-list 114.114.114.114 interface Vlanif11 description === Ke hu duan ip address 10.8.0.1 255.255.254.0 dhcp select global 十、telnet和ssh dsa local-key-pair create telnet server enable stelnet server enable ssh authentication-type default password 这样就完成了一台核心设备的简单配置 ...

2023年03月24日 · 2 分钟 · 229 字 · 八戒

Hubot集成企业钉钉

换了公司,现在的公司用的是钉钉,不是企业微信,那么 hubot 就得改接入钉钉了 前文回顾:Hubot集成企业微信+jenkins+ansible 不明白的可以先看那一篇,那么首先的步骤是一样的,同样要去钉钉开放平台,用管理员登录: https://open.dingtalk.com/ 登陆后,点击应用开发–>企业应用开发: ’ 然后应用开发,机器人,点击创建应用: 建好后,点击应用信息,可以看到应用凭证 我们记录下来 AppSecret,之后要用到 然后再点击开发管理,这里需要你把 hubot 的服务器地址给公布出去,需要有个公网地址 因为hubot是监听的8080端口,所以映射是 xxxx.ip:80 –> hubotip:8080 服务器出口 IP 的地方 , 需要在 hubot 的服务器上,curl http://ipinfo.io,得到地址,然后填上(我们的 ip 非常特殊,每一次访问都有可能会换个ip,所以只好把整段填写进去,而且把公网映射ip也填进去) 消息接收地址填上映射后的地址:https://bot.rendoumi.com/hubot/dingtalk/message/(用不用nginx加证书变https随具体情况定) 然后去hubot安装dingtalk插件,在hubot安装根目录运行 npm install hubot-dingtalk export HUBOT_DINGTALK_AUTH_TYPE=sign export HUBOT_DINGTALK_SECRET=xxxxxxxxxx export HUBOT_DINGTALK_MODE=1 ./bin/hubot -a dingtalk 然后我们去用浏览器访问 https://bot.rendoumi.com/hubot/dingtalk/message/,会返回这个 然后就可以了。至于把 hubot 做成服务,就参考上一篇文章,把jenkins和ansible都加上,做一个好用的机器人。

2023年03月01日 · 1 分钟 · 48 字 · 八戒

yearning集成进freeIPA进行统一认证

接上上一篇,Freeipa接完confluence,接下来是接入数据库上线软件Yearning. 先下结论:同样存在先有 Yearning 账户、然后才有的 FreeIPA LDAP 目录,这次要命了,因为 Yearning 不支持 LDAP 认证方式用户与已有用户进行合并!所以,等于ldap新建了一个用户,跟老用户的邮箱一模一样,但是是个 Newbee,没有权限,需要重新赋权。比较麻烦!希望之后能pr修改一下!!!! 连接属性如下: ldap地址:freeipa.bybon.cn:389 LDAP管理员DN:uid=manager,cn=users,cn=accounts,dc=bybon,dc=cn LDAP管理员密码:xxxxxx LDAP_Search Filter:(&(objectclass=inetorgperson)(memberOf=cn=confluence-users,cn=groups,cn=accounts,dc=bybon,dc=cn)(uid=%s)) LDAP_SCBASE:cn=users,cn=accounts,dc=bybon,dc=cn LDAP用户属性:{ "real_name": "displayName", "email": "mail", "department": "技术中心" } 解释一下: LDAP_Search Filter 指搜索用户时所用的filter,这里偷了个懒,按道理应该是独立建一个组yearning-users,懒得干了,复用confluence-users好了。admin组更懒得建,必须用freeipa的admins组 LDAP_SCBASE 指搜索用户的BASE DN LDAP用户属性指yearning中的属性与ldap属性之间的映射关系,department是没有对应的,也没有人会没事干建一个去吧。 截图如下:

2023年02月28日 · 1 分钟 · 36 字 · 八戒

kubernetes中用户rbac的建立

k8s里面建立一个用户,然后给特定权限,再做rolebinding的过程,给个标准的建立jenkins-admin的用户的过程: 简单来说,三步,ServiceAccout –> Role –> Rolebinding apiVersion: v1 kind: ServiceAccount metadata: name: jenkins-admin namespace: devops-tools --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: jenkins namespace: default labels: "app.kubernetes.io/name": 'jenkins' rules: - apiGroups: [""] resources: ["pods"] verbs: ["create","delete","get","list","patch","update","watch"] - apiGroups: [""] resources: ["pods/exec"] verbs: ["create","delete","get","list","patch","update","watch"] - apiGroups: [""] resources: ["pods/log"] verbs: ["get","list","watch"] - apiGroups: [""] resources: ["secrets"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: jenkins-role-binding namespace: default roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: jenkins subjects: - kind: ServiceAccount name: jenkins-admin namespace: default 资源的链接:https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/rbac/ ...

2023年02月22日 · 1 分钟 · 83 字 · 八戒