首页
统计信息
友情链接
壁纸
Search
1
【更新】CommentToMail typecho2017&v4.1& Mailer三版本,支持php5.6/7,插件详解
158,656 阅读
2
【90APT开源免费】第三代哈弗H6、一代哈弗大狗、H6经典版、坦克300华阳安波福车机开启无线ADB、升级地图、安装软件全流程
60,446 阅读
3
深信服超融合架构测试介绍
13,407 阅读
4
CentOS 7安装bbr教程
13,285 阅读
5
纯小白10分钟变身linux建站高手?宝塔linux面板全体验
12,948 阅读
技术相关
ACG相关
胡言乱语
数码杂烩
登录
Search
标签搜索
进击的巨人
漫画
宝塔
php
typecho
diy
vps
折腾
动漫
优酷路由宝
ubuntu
路由器
QQ
KMS
王忘杰
累计撰写
359
篇文章
累计收到
179
条评论
首页
栏目
技术相关
ACG相关
胡言乱语
数码杂烩
页面
统计信息
友情链接
壁纸
搜索到
56
篇与
的结果
2025-04-23
ALMA Linux 8飞速搭建zabbix6LTS、微信邮箱短信报警、windows、linux、交换机、vCenter监控、grafana面板、modbus动环采集、ZbxTable分析系统、Mysql、MSsql数据库监控、分组报警、对接oceanbase数据库
一、环境 zabbix所在服务器系统为alma8,zabbix6要求的mariadb版本为10.5-10.6,同时zabbix提供了zabbix-selinux-policy来配置selinux,所以安装中也不再要求关闭selinux。二、安装zabbix 官方安装帮助页面,安装方法随版本更新,官方更新更快https://www.zabbix.com/cn/download1、配置zabbix 软件源rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-4.el8.noarch.rpm dnf clean all2、安装zabbix-server和zabbix-agent2dnf install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent23、安装数据库配置mariabd源 /etc/yum.repos.d/MariaDB.repo# MariaDB 10.6 CentOS repository list - created 2023-02-02 03:14 UTC # https://mariadb.org/download/ [mariadb] name = MariaDB baseurl = https://mirrors.aliyun.com/mariadb/yum/10.6/centos8-amd64 module_hotfixes=1 gpgkey=https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck=1安装数据库、启动、并设置开机启动dnf clean all dnf install mariadb-server systemctl enable --now mariadb4、进行MariaDB数据库初始化mariadb-secure-installation首先是设置密码,会提示先输入密码 Enter current password for root (enter for none):<–初次运行直接回车 Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车 New password: <– 设置root用户的密码 Re-enter new password: <– 再输入一次你设置的密码 Remove anonymous users? [Y/n] <– 是否删除匿名用户 Disallow root login remotely? [Y/n] <–是否禁止root远程登录 Remove test database and access to it? [Y/n] <– 是否删除test数据库 Reload privilege tables now? [Y/n] <– 是否重新加载权限表5、初始化并导入zabbix数据库 mysql -uroot -p登录mariadb> create database zabbix character set utf8mb4 collate utf8mb4_bin; mariadb> create user zabbix@localhost identified by 'password123'; mariadb> grant all privileges on zabbix.* to zabbix@localhost; mariadb> set global log_bin_trust_function_creators = 1; mariadb> quit;导入初始架构和数据,系统将提示您输入新创建的密码zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix导入数据库架构后禁用log_bin_trust_function_creators选项mysql -uroot -p mariadb> set global log_bin_trust_function_creators = 0; mariadb> quit;6、配置数据库密码编辑配置文件 /etc/zabbix/zabbix_server.confDBPassword=password1237、配置PHP时区编辑配置文件 /etc/php-fpm.d/zabbix.confphp_value[date.timezone] = Asia/Shanghai8、启动并设置开机启动systemctl enable --now zabbix-server zabbix-agent2 httpd php-fpm9、查看是否有错误信息 cat /var/log/zabbix/zabbix_server.log10、防火墙开放端口firewall-cmd --add-port=80/tcp --permanent firewall-cmd --permanent --add-port=10050-10051/tcp firewall-cmd --reload firewall-cmd --list-ports firewall-cmd --list-services11、替换zabbix自带字体,解决中文乱码百度下载Noto Sans S Chinese字体替换掉默认使用的DejaVuSanscp NotoSansSC-Regular.otf /usr/share/fonts/dejavu/DejaVuSans.ttf12、调整zabbix缓存/etc/zabbix/zabbix_server.confCacheSize=1G13、调整ping进程数/etc/zabbix/zabbix_server.confStartPingers=16三、服务端配置 1、连接到新安装的Zabbix前端: http://server_ip/zabbix注意,mariadb也属于mysql数据库类型2、登录zabbix账号Admin 密码zabbix前端配置完成请务必修改密码四、企业微信消息推送 注意:为了企业的数据安全,从2022年6月20号20点之后,新开启的通讯录同步助手与新创建的自建应用必须在管理端配置可信IP,仅配置的可信IP能调用接口。当前时间2023年6月,企业微信应用验证必须与企业名相同,请考虑使用企业微信机器人推送。1、在企业微信 - 我的企业 - 企业信息 - 企业ID 2、创建zabbix机器人应用企业微信后台 - 应用管理 - 应用 - 创建应用 先进行网页授权及JS-SDK可信域名下的网页可使用网页授权及JS-SDK可信IP位于自行创建的应用-开发接口-企业可信IP 可信IP即服务器所在网络的外网IP,可打开https://ifconfig.me/快速查看,如果企业机房接入多条外网宽带,把外网宽带的IP全都写上3、查看Agentld和Secret 4、准备zabbix机器人脚本环境dnf -y install epel-release dnf -y install python2-pip pip2 install requests查询脚本存放位置cat /etc/zabbix/zabbix_server.conf | grep AlertScript可以看到脚本存放在/usr/lib/zabbix/alertscripts目录中编写脚本 weixin.py并放入上面的目录 ,填入上面获得的三个值#!/usr/bin/env python2 #-*- coding: utf-8 -*- import requests import sys import os import json import logging logging . basicConfig ( level = logging . DEBUG , format = ' %(asctime)s , %(filename)s , %(levelname)s , %(message)s ' , datefmt = ' %a , %d %b %Y %H:%M:%S' , filename = os . path . join ( '/tmp' , 'weixin.log' ), filemode = 'a' ) corpid = 'ww36e' appsecret = '5yFNqeTjrr3I' agentid = 1000002 token_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret req = requests . get ( token_url ) accesstoken = req . json ()[ 'access_token' ] msgsend_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken touser = sys . argv [ 1 ] subject = sys . argv [ 2 ] #toparty='3|4|5|6' message = sys . argv [ 2 ] + " \n\n " + sys . argv [ 3 ] params ={ "touser" : touser , # "toparty": toparty, "msgtype" : "text" , "agentid" : agentid , "text" : { "content" : message }, "safe" : 0 } req = requests . post ( msgsend_url , data = json . dumps ( params )) logging . info ( 'sendto:' + touser + ';;subject:' + subject + ';;message:' + message )赋予执行权限chmod +x /usr/lib/zabbix/alertscripts/weixin.py创建日志文件touch /tmp/weixin.log chown zabbix:zabbix /tmp/weixin.log测试脚本,用户名为企业微信通讯录中的用户名,一般为拼音全拼,严格区分大小写!/usr/lib/zabbix/alertscripts/weixin.py 用户名 '标题' '测试成功'此时企业微信可以收到zaabix应用发来的信息。5、添加报警媒介zabbix后台 - 管理 - 报警媒介类型名称 weixin类型 脚本脚本名称 weixin.py脚本参数:{ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE} 6、配置Trigger actions触发动作,启用消息推送管理员,填写要发送的信息配置 - 动作 Trigger actions - 创建动作 在 动作 中填写名称在 操作 中编辑操作和恢复操作操作发送消息zabbix管理员组仅发送到微信custom message主题:服务器报警消息:告警主机:{HOST.NAME} 告警地址:{HOST.IP} 监控项目:{ITEM.NAME} 监控取值:{ITEM.LASTVALUE} 告警等级:{TRIGGER.SEVERITY} 当前状态:{TRIGGER.STATUS} 告警信息:{TRIGGER.NAME} 告警时间:{EVENT.DATE} {EVENT.TIME} 事件ID:{EVENT.ID}恢复操作通知所有参与者custom message主题:服务器已恢复消息:告警主机:{HOST.NAME} 告警地址:{HOST.IP} 监控项目:{ITEM.NAME} 监控取值:{ITEM.LASTVALUE} 告警等级:{TRIGGER.SEVERITY} 当前状态:{TRIGGER.STATUS} 告警信息:{TRIGGER.NAME} 告警时间:{EVENT.DATE} {EVENT.TIME} 事件ID:{EVENT.ID} 7、配置Autoregistration actions自动注册,填写要发送的信息在Autoregistration actions自动注册中注意:自动注册的其他内容在下方linux、windows部分发送消息zabbix管理员组仅送到weixinCustom message主题:Linux主机自动注册到zabbix服务器消息:主机名:{HOST.HOST} 主机IP:{HOST.IP} Agent端口:{HOST.PORT} 8、接收微信推送人员管理-用户-报警媒介邮箱推送、微信推送 可以理解为仅配置脚本不同,其他配置参数基本一致邮箱 1、安装mailxyum install mailx -y2、修改mailx配置vim /etc/mail.rc最后添加 set from=xx@qq.com set smtp=smtp.qq.com set smtp-auth-user=xx@qq.com set smtp-auth-password=邮箱密码 set smtp-auth=login3、测试邮箱echo “hello world” | mail -s “testmail” xx@qq.com4、编写邮箱脚本cd /usr/lib/zabbix/alertscripts/vim mailx.sh#!/bin/bash #send mail messages=`echo $3 | tr '\r\n' '\n'` subject=`echo $2 | tr '\r\n' '\n'` echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&15、创建日志,添加权限touch /tmp/mailx.logchown -R zabbix.zabbix /tmp/mailx.logchmod +x /usr/lib/zabbix/alertscripts/mailx.shchown -R zabbix.zabbix /usr/lib/zabbix/6、添加使用其他添加过程与微信相同微信推送 1、查看短信平台文档编写短信脚本,注意不通用我用的短信平台采用http get通讯cd /usr/lib/zabbix/alertscripts/cat sendSMS.sh#!/bin/bash #手机号码 MOBILE_NUMBER=$1 #短信主题 MESSAGE_SUBJECT=$2 #短信内容 MESSAGE_UTF8=$3 #调用短信接口 /usr/bin/curl -s -G --data-urlencode userid=用户ID --data-urlencode account=用户名 --data-urlencode password=用户密码 --data-urlencode mobile=${MOBILE_NUMBER} --data-urlencode content="${MESSAGE_SUBJECT}-${MESSAGE_UTF8}" http://www.短信平台接口.com/xx?action=send >> /tmp/sendSMS.log2、添加使用其他添加过程与微信相同五、自动注册windows主机 平台 - 配置 - 动作 - Autoregistration actions自动注册 创建动作元数据中的 Linux 为下方脚本里的 HostMetadata=windows 严格区分大小写操作添加主机添加主机群组关联模板下载安装agent2客户端https://www.zabbix.com/cn/download_agents最新版本为 Zabbix agent 2 v6.0.5修改配置 HostMetadata=windowsC:\Program Files\Zabbix Agent 2\zabbix_agent2.conf重启服务收到自动注册提示六、自动注册linux主机 zabbix平台自动注册linux与windows方法基本相同,元数据修改为linux在linux客户端上可以使用自动化脚本安装zabbix agent2客户端我这里仅放一个centos7/8的安装脚本,内容为卸载agent1安装agent2#/bin/bash echo "关闭selinux" sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config setenforce 0 echo "下载zabbix-agent2,卸载agent1" OSVERSION=`cat /etc/redhat-release |awk -F "release " '{print $2}'|awk -F "." '{print $1}'` rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/$OSVERSION/x86_64/zabbix-release-6.0-1.el$OSVERSION.noarch.rpm yum clean all yum remove zabbix-agent -y yum install zabbix-agent2 -y echo "修改zabbix-agent2配置文件" ipaddr=$(ip a show |grep ens|grep inet |awk '{print $2}'|awk -F '/' '{print $1}') zabbix_server='192.168.1.110' hostname=$(hostname) sed -i "s/^Server=127.0.0.1/Server=${zabbix_server}/g" /etc/zabbix/zabbix_agent2.conf sed -i "s/^ServerActive=127.0.0.1/ServerActive=${zabbix_server}/g" /etc/zabbix/zabbix_agent2.conf sed -i "s/Hostname=Zabbix server/Hostname=${hostname}/g" /etc/zabbix/zabbix_agent2.conf sed -i "s/# HostMetadata=/HostMetadata=linux/g" /etc/zabbix/zabbix_agent2.conf echo "防火墙放行zabbix-agent端口" firewall-cmd --permanent --add-port=10050-10051/tcp firewall-cmd --reload echo "启动zabbix-agent服务" systemctl enable --now zabbix-agent2 zabbixagentpid=`ps -ef |grep zabbix_agent2|grep -w 'zabbix_agent2'|grep -v 'grep'|awk '{print $2}'` if [ "$zabbixagentpid" ];then echo "zabbix agent2 正在运行 " else echo "zabbix agent2 安装失败!!!" fi七、通过SNMP监控交换机 1、为zabbix添加SNMPv2模板SNMPv2模板下载https://share.zabbix.com/templates/network-devices-fortigate-template-fortinet-all-discovery/#body2、交换机配置snmpv2snmp-agent sys-info version v2c snmp-agent community read public snmp-agent community write private snmp-agent trap enable snmp-agent target-host trap address udp-domain 192.168.1.110 params securityname public v2c snmp-agent3、查找MIBH3C常用MIBhttps://www.h3c.com/cn/Service/Document_Software/TechnicalInfo/PorductMaintanInfo/Switches/DailyMainten/MIBList/4、安装snmp调试工具并进行测试dnf -y install net-snmp-utilssnmpwalk为模糊测试snmpwalk -v 2c -c public 192.168.237.50 .1.3.6.1.4.1.2021.10.1.3snmpget是zabbix的精准获取方式snmpget -v 2c -c public 192.168.237.50 .1.3.6.1.4.1.2021.10.1.35、举例如S5130 CPU使用率,查询H3C手册为 1.3.6.1.4.1.25506.8.35.18.1.3使用snmpwalk -v 2c -c public 192.168.237.50 1.3.6.1.4.1.25506.8.35.18.1.3后返回SNMPv2-SMI::enterprises.25506.8.35.18.1.3.0 = INTEGER: 16得知最后多一位.0使用snmpget -v 2c -c public 192.168.237.50 1.3.6.1.4.1.25506.8.35.18.1.3.0得到结果相同,则此项为s5130型号的CPU使用率在zabbix新建监控项,即可实现CPU使用率记录新建触发器,即可实现CPU使用率报警前5次报警值均超过80时进行CPU使用率过高报警最终效果其他参数:CPU使用率 1.3.6.1.4.1.25506.8.35.18.4.3.1.4.0.1 内存使用率 1.3.6.1.4.1.25506.8.35.18.1.16.0 固件版本 1.3.6.1.2.1.1.1.0 开机时间 1.3.6.1.2.1.1.3.0 SN 1.3.6.1.4.1.25506.2.6.1.2.1.1.2.2 温度 1.3.6.1.4.1.25506.2.6.1.1.1.1.12.212八、添加vsphere vCenter监控 1、开启VMware支持并重启zabbix-server服务/etc/zabbix/zabbix_server.conf ### Option: StartVMwareCollectors StartVMwareCollectors=52、检查vCenter sdk接口返回500代码代表接口在工作curl -i -k --data "" https://172.16.0.1/sdk HTTP/2 500 cache-control: no-cache content-type: text/xml; charset=utf-8 date: Tue, 28 Jun 2022 01:36:00 GMT x-envoy-upstream-service-time: 0 server: envoy3、登录每台ESXi主机开启MOB服务系统高级设置,搜索Config.HostAgent.plugins.solo.enableMob,确定值改为true4、zabbix创建主机注意是修改继承的宏 https://172.16.0.1/sdk5、查看数据一段时间后,zabbix可以获取到所有的vCenter、ESXi和虚拟机的信息九、grafana面板 1、安装当前最新版本grafana-10.0.1sudo yum install -y https://dl.grafana.com/oss/release/grafana-10.0.1-1.x86_64.rpm注意配置开机启动并配置防火墙,默认使用3000端口2、安装grafana zabbix插件grafana-cli plugins list-remote grafana-cli plugins install alexanderzobnin-zabbix-app systemctl restart grafana-server3、登录grafana接入zabbix源http://IP:3000/ 打开grafana界面,打开后输入admin/admin登录,登陆后按提示更改admin密码。启用zabbix插件配置数据源http://ip/zabbix/api_jsonrpc.php保存并测试成功新建面板即可十、首页图表监控 首页添加构件十一、modbus动环采集 https://90apt.com/3387十二、ZbxTable分析系统 十三、数据库监控 (一)微软MSSQL数据库监控安装完SQLServer数据库,开启数据库远程访问配置对IP的监听配置防火墙端口开放测试端口RHEL8系统安装ODBC驱动https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver16&tabs=redhat18-install%2Calpine17-install%2Cdebian8-install%2Credhat7-13-install%2Crhel7-offlinesudo su #Download appropriate package for the OS version #Choose only ONE of the following, corresponding to your OS version #RHEL 7 and Oracle Linux 7 curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo #RHEL 8 and Oracle Linux 8 curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-release.repo #RHEL 9 curl https://packages.microsoft.com/config/rhel/9.0/prod.repo > /etc/yum.repos.d/mssql-release.repo exit sudo yum remove unixODBC-utf16 unixODBC-utf16-devel #to avoid conflicts sudo ACCEPT_EULA=Y yum install -y msodbcsql18 # optional: for bcp and sqlcmd sudo ACCEPT_EULA=Y yum install -y mssql-tools18 echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc source ~/.bashrc # optional: for unixODBC development headers sudo yum install -y unixODBC-devel配置/etc/odbc.inihttps://learn.microsoft.com/zh-cn/sql/connect/odbc/linux-mac/connection-string-keywords-and-data-source-names-dsns?view=sql-server-ver16[TEST] Driver = ODBC Driver 18 for SQL Server # Server = [protocol:]server[,port] Server = tcp:172.16.10.102,1433 TrustServerCertificate=YES # # Note: # Port isn't a valid keyword in the odbc.ini file # for the Microsoft ODBC driver on Linux or macOS 测试,连接成功isql -v TEST user passwd +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | echo [string] | | quit | | | +---------------------------------------+ SQL> 配置zabbix模板,为目标主机配置一个MSSQL by ODBC在继承以及主机 宏中修改值{$MSSQL.DSN}即上方odbc.ini中定义的[TEST]{$MSSQL.USER}和{$MSSQL.PASSWORD}是自定义的账号密码注意右侧可以选择密文模式保存(二)MYSQL数据库监控为目标主机关联MySQL by Zabbix agent 2模板为MYSQL创建监控专用用户并配置宏mysql -uroot -p use mysql; CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY '<password>'; GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%';{$MYSQL.USER}和{$MYSQL.PASSWORD}是自定义的账号密码注意右侧可以选择密文模式保存十三、分组报警 1、将不同主机的告警发送给不同用户创建主机群组,并将主机添加至主机组,如动环告警 2、为主机添加群组3、创建用户群组动环报警组4、创建用户加入群组创建用户donghuanyonghu,加入动环报警组5、为用户创建报警媒介我这里用企业微信报警6、触发器操作发送报告的触发器7、操作发送群组配置完成十四、总结 对接oceanbase数据库见oceanbase文章十五、总结 功能强大、简单方便、干净卫生
2025年04月23日
2,322 阅读
0 评论
25 点赞
2025-03-05
VeeamBackup&Replication11 + SAPHANA COCKPIT备份恢复综合实验
Veeam卫盟是什么?Veeam在 Gartner 2021年“企业备份与恢复软件解决方案”魔力象限,同时也是Veeam 第五次入选领导者象限,实力和地位毋庸置疑。Veeam的官网为 https://www.veeam.com/cn/Veeam与其他备份软件的对比 https://www.veeam.com/cn/backup-software-comparison-for-small-business.htmlVeeam软件下载 https://www.veeam.com/cn/products/downloads/latest-version.html?ad=downloads&tab=current勒索软件猖獗,备份非常重要SAP HANA是什么?SAP HANA(高性能分析工具)是一款将数据存储在内存而不是硬盘的多模型数据库。这款列式内存数据库支持企业在同一系统中执行快速的事务处理和先进的分析处理。为什么 SAP HANA 如此重要?因为该产品支持企业近乎零延迟地处理海量数据,即时查询数据,并真正实现由数据驱动。SAP HANA 拥有独特的优势。该平台将数据存储在主内存的列存储表中,并且集联机分析处理 (OLAP) 和联机事务处理 (OLTP) 于一体,处理速度比目前市场上的其他数据库管理系统 (DBMS) 快很多。实验目标1、windows平台+linux存储库架构部署2、虚拟机备份还原3、物理机完全崩溃还原4、应用感知、数据库备份还原5、SAP数据库安装配置SAP备份插件6、接入SAP COCKPIT7、SAP HANA数据库备份还原8、故障处理9、升级veeam10、升级veeam hana插件实验环境windows2022+Alma8搭建备份系统vSphere7下进行windows2016虚拟机备份还原Centos7系统进行rm -rf /*,模拟系统完全崩溃,物理机恢复windows2016系统安装sqlserver2014进行数据库感知、备份、还原运行HANA数据库的SLES系统一套正常运行的SAP COCKPIT系统一、windows2022+Alma8搭建备份系统从官网下载Veeam Backup & Replication 11 其中免费社区版提供10个工作负载,而企业版购买后授权50个起步,本次实验使用社区免费版搭建https://www.veeam.com/cn/downloads.htmlwindows2022配置为 8cpu 16Gram 200G硬盘Alma8配置为 8cpu 16Gram 200G系统盘+1T存储盘1、安装windows平台软件,Veeam安全包包含所需的全部组件,按提示下一步直至安装完成2、部署Alma8存储库查看当前磁盘信息,1T的硬盘是我们的目标[root@alma8 ~]# fdisk -l Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: A2B91132-AE20-4646-8C52-9DACFD8A31AF Device Start End Sectors Size Type /dev/sda1 2048 1230847 1228800 600M EFI System /dev/sda2 1230848 3327999 2097152 1G Linux filesystem /dev/sda3 3328000 419428351 416100352 198.4G Linux LVM Disk /dev/sdb: 1 TiB, 1099511627776 bytes, 2147483648 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes创建分区[root@alma8 ~]# fdisk /dev/sdb Welcome to fdisk (util-linux 2.32.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0xf70aaad4. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (1-4, default 1): First sector (2048-2147483647, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-2147483647, default 2147483647): Created a new partition 1 of type 'Linux' and of size 1024 GiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.查看创建后的分区[root@alma8 ~]# fdisk -l /dev/sdb Disk /dev/sdb: 1 TiB, 1099511627776 bytes, 2147483648 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xf70aaad4 Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 2147483647 2147481600 1024G 83 Linux创建文件系统[root@alma8 ~]# mkfs.xfs -b size=4096 -m reflink=1,crc=1 /dev/sdb1 meta-data=/dev/sdb1 isize=512 agcount=4, agsize=67108800 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=268435200, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=131071, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 Discarding blocks...Done.创建挂载目录,挂载,设置开机启动挂载,重启确认挂载是否正常[root@alma8 ~]# mkdir /mnt/veeamRepo [root@alma8 ~]# mount /dev/sdb1 /mnt/veeamRepo/ [root@alma8 ~]# df -hT /dev/sdb1 Filesystem Type Size Used Avail Use% Mounted on /dev/sdb1 xfs 1.0T 7.2G 1017G 1% /mnt/veeamRepo [root@alma8 ~]# blkid /dev/sdb1 /dev/sdb1: UUID="b805dd02-9105-4ddc-ad64-1004e01d10cb" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="f70aaad4-01" [root@alma8 ~]# vi /etc/fstab UUID=b805dd02-9105-4ddc-ad64-1004e01d10cb /mnt/veeamRepo xfs defaults 0 0添加Veeam专属用户,为目标目录配置权限[root@alma8 ~]# useradd -d /home/VeeamRepo -m VeeamRepo [root@alma8 ~]# passwd VeeamRepo Changing password for user VeeamRepo. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@alma8 ~]# chown VeeamRepo:VeeamRepo /mnt/veeamRepo/ [root@alma8 ~]# chmod 700 /mnt/veeamRepo/ [root@alma8 ~]# ls -l /mnt/ total 0 drwx------. 2 VeeamRepo VeeamRepo 6 Jun 24 19:44 veeamRepo为VeeamRepo用户配置sudo权限,此权限是为了安装veeam存储库软件,后面安装完会取消[root@alma8 ~]# visudo ## Allow root to run any commands anywhere root ALL=(ALL) ALL VeeamRepo ALL=(ALL) ALL3、在veeam平台添加Backup Repository存储库存储库系统类型linux存储库命名添加服务器目标IP目标用户名密码保存ssh指纹点击Populate可查看分区情况选择保存位置、开启XFS fast cloning、开启7天内防删除添加完成4、关闭linux sudo用户[root@alma8 ~]# visudo ## Allow root to run any commands anywhere root ALL=(ALL) ALL #VeeamRepo ALL=(ALL) ALL查看linux上veeam进程信息[root@alma8 ~]# ps aux | grep veeam VeeamRe+ 8874 0.0 0.1 1348496 19640 ? Ssl 20:01 0:00 /opt/veeam/transport/veeamtransport --run-service root 8878 0.0 0.0 100212 7168 ? Sl 20:01 0:00 /opt/veeam/transport/veeamtransport --run-environmentsvc 7:6 root 8880 0.1 0.0 167304 4600 ? Sl 20:01 0:00 /opt/veeam/transport/veeamimmureposvc --subprocess --log /var/log/VeeamBackup --stdio 9:7 root 9657 0.0 0.0 221928 1152 pts/0 S+ 20:10 0:00 grep --color=auto veeam添加linux存储库后,可将windows上默认的存储库删除二、vSphere7下进行windows2016虚拟机备份还原1、接入vCenter,按提示下一步即可添加完成2、创建备份计划配置定时执行策略我这里仅执行一次备份中备份完成可查看备份报告3、快速恢复veeam快速恢复功能,可以在通过挂载备份库的方式直接拉起虚拟机,快速恢复业务可以选择要恢复的时间点,默认为最后一次备份覆盖原虚拟机还是新建虚拟机如果原虚拟机还在线,那么快速恢复的虚拟机不要同时连接网络,防止IP冲突虚拟机已经快速上线注意:此方法同样可以用于物理机到虚拟机(P2V)的停机转换此时我们可以在veeam选择将所有文件迁移到虚拟化,或者关闭这个虚拟机三、物理机Centos7系统进行rm -rf /*模拟系统完全崩溃备份还原对物理机centos7系统进行完全备份,此时需要添加物理机备份组和策略对系统执行破坏操作,重启后无法进入系统rm -rf /*恢复方案一:将备份挂载到虚拟化快速恢复业务挂载到虚拟机后需要重新配置网络恢复方案二:通过恢复镜像对物理机进行完全恢复物理机制作 veeam-recovery-media-5.0.2.4567_x86_64.iso 启动盘并启动同意协议设置网络选择卷还原,链接到veeam平台选择还原点还原中还原完成,移除启动盘,此时业务已经完全恢复四、windows2016系统安装sqlserver2014进行数据库感知备份还原添加2016系统,并开启应用感知,接入虚拟化和物理机都可以如果系统管理员也是数据库管理员,那么只需要配置系统管理员账号密码;如果系统管理员不是数据库管理员,那么还需要单独配置sa用户立即进行备份模拟黑客攻击,删除3个数据库通过veeam进行sql数据库单独恢复,需要开放数据库1433端口快速挂载成功五、centos7安装配置SAP备份插件进行SAP备份时需要将存储库的访问设置为管理员访问登录hdbstudio查看当前数据库状态1、上传、安装、配置SAP插件exp-hana:~ # ls .ICEauthority .cache .hdb .viminfo Downloads Public Videos .Xauthority .config .local Desktop Music Templates bin .bash_history .gnupg .ssh Documents Pictures VeeamPluginforSAPHANA-11.0.1.1261-1.x86_64.rpm inst-sys 安装插件 exp-hana:~ # rpm -ivh VeeamPluginforSAPHANA-11.0.1.1261-1.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:VeeamPluginforSAPHANA-11.0.1.1261################################# [100%] Run "SapBackintConfigTool --wizard" to configure the Veeam Plug-in for SAP HANA 配置插件 exp-hana:~ # SapBackintConfigTool --wizard Enter backup server name or IP address: 172.16.21.118 Enter backup server port number [10006]: Enter username: administrator Enter password for administrator: Available backup repositories: 1. Backup Repository linux Enter repository number: 1 Configuration result: SID EDB has been configured 查看插件配置 exp-hana:~ # SapBackintConfigTool --show-config Backup server name: 172.16.21.118 Port: 10006 User name: administrator Domain: Repository: 1. Backup Repository linux Delete orphaned backups after (days): Disabled Restore from copy: Disabled Source server: Disabled Source repository: Disabled2、进行HANA数据库接入Veeam登录hdbstudio控制台,打开备份管理终端backup console确认接口对接正常,配置日志记录方式为backint启动全局控制管理台open administration启用catalog和log的备份接口双击修改为true修改完成在备份还原中可以查看当前所有租户库当前数据库有一个系统数据库和两个租户数据库3、查看Veeam控制台,会生成HANA backint任务,log和catalog同步存储到Veeam中六、接入SAP COCKPIT登录SAP COCKPIT管理控制台,我们要接入的目标数据库为172.16.10.240,接入三个数据库EDBsystemdb、E4T、EDB1、登录Cockpit Manager管理控制台,将上面三个数据库注册到Cockpit中2、注册系统数据库填写相关信息创建备份专用用户注册成功3、分别注册两个租户数据库七、SAP HANA数据库备份还原登录Cockpit Manager操作控制台1、这次添加的三个为正式数据库点击查看数据库状态,首次添加需验证保存凭证,点击Credentials和SAP Control Credentials分别验证SAP Control Credentials为数据库管理员edbadm,Credentials为SYSTEM用户保存凭证后,点击数据库可查看详细信息并配置备份计划和备份选项2、配置备份选项Backup Configuration开启备份计划启用保留策略启用启动删除备份,保留60天,最低保存2个备份,删除时同时删除本地和backint文件,备份选项配置完成3、配置备份计划Backup Schedules创建备份计划每天11:08完全备份到backint创建完成4、登录Veeam观察备份状态备份中cockpit观察备份状态备份完成5、还原测试登录hdbstudio,还原租户库E4T停止数据库选择备份Veeam显示为恢复任务恢复完成八、故障处理故障一当有一天你的veeam使用中报错无法打开,出现如下错误,不必惊慌此故障是因为veeam默认安装的数据库版本是sqlserver2016 Express,此版本的数据库有体积限制,上面的报错触发上限了,升级为开发版或企业版后无限制,即可解决问题故障二当有一天你升级veeam时,升级包提示错误,不必惊慌一般情况下是因为授权文件导致的C:\Program Files\Common Files\Veeam\VeeamLicense.dll根据以往的经验,“VeeamLicense.dll 把这文件重名名,升级成功之后再 重名名回去就好了升级完成故障三进行备份时提示LvmDriver: Failed to create LVM instance.按官方说明在 /etc/lvm/lvm.conf中添加units="h"故障四进行SAP备份时,周期性出现"Backint process was canceled due to a connection timeout"错误,出现时间与SAP备份任务相同,具有关联性联系veeam亚洲技术支持得知,Backup Repositories默认有并限制,取消并发限制后正常https://helpcenter.veeam.com/archive/backup/110/vsphere/limiting_tasks.htmlLimit maximum concurrent tasks to:4九、Veeam11升级Veeam121、下载12安装包注册下载Veeam Backup & Replication 12.2版 : 12.2.0.334大小 : 12.3 GBhttps://www.veeam.com/cn/products/downloads/latest-version.html?ad=downloads&tab=currentMD5:70d4688a70d92287ff9bbf0e6bce9b19SHA1:0edeb141af8ddd368a9e6dac1fdbae15e0e55c55下载完一定要核对MD52、升级安装无特殊注意事项,升级后默认是社区版,再加载11的授权文件即可3、升级后按提示进行组件的升级即可十、Veeam12.2升级Veeam12.3升级方式相同,无特别注意事项 SAP HANA插件升级 从安装包找到插件 rpm -Uvh VeeamPluginforSAPHANA-12.3.0.310-1.x86_64.rpm SapBackintConfigTool --wizard Enter backup server name or IP address [x.x.x.x]: Enter backup server port number [10006]: Enter username [administrator]: Enter password for administrator [(do not change the existing password)]: Available backup repositories: 1. Backup Repository linux Enter repository number [1]: 1 Configuration result: SID XXX has been configured SID XXX has been configured 完成完毕一键三连
2025年03月05日
1,248 阅读
0 评论
3 点赞
2025-02-05
个人电脑 服务器 快速部署深度求索DeepSeek-R1本地大模型
一、项目链接 ollamahttps://ollama.com/1Panelhttps://1panel.cn/深度求索DeepSeek-R1https://www.deepseek.com/DeepSeek-R1蒸馏模型https://ollama.com/library/deepseek-r1Anolis OS 8https://openanolis.cn/anolisos二、windows个人电脑本地使用DeepSeek-R1本地大模型 下载ollama windows客户端 https://ollama.com/downloadhttps://github.com/ollama/ollama/releases 安装运行DeepSeek-R1-蒸馏-Qwen-1.5Bollama run deepseek-r1:1.5b我的GTX4060显卡,可以运行DeepSeek-R1-Distill-Llama-8B蒸馏模型,为了演示快速我使用1.5b模型,大小仅为1.1G完整量化模型为ollama run deepseek-r1:671b 404G,跟openai-o1掰手腕的正是他,量化模型与显存几乎1:1,如果运行671b 404G,那么显存也要在671G以上,我的GTX4060仅有8G,所以能使用8b 4.9G模型进行对话终端输入ollama run deepseek-r1:1.5b直接进行对话正确安装显卡驱动的情况下,默认调用显卡退出>>> /? Available Commands: /set Set session variables /show Show model information /load <model> Load a session or model /save <model> Save your current session /clear Clear session context /bye Exit /?, /help Help for a command /? shortcuts Help for keyboard shortcuts Use """ to begin a multi-line message. >>> /bye默认ollama开机启动,可以通过任务管理器关闭三、服务器使用1panel面板快速部署DeepSeek-R1本地大模型 使用龙蜥anolis8系统,部署dockeryum install -y yum-utils #阿里云加速源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce docker-ce-cli containerd.io systemctl enable --now docker部署1panel面板curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sh quick_start.shdocker镜像 2月5日可用,配置到1panel面板中https://docker.xuanyuan.me安装MaxKB和Ollama应用端口默认不允许外部访问,注意勾选 允许端口外部访问会放开防火墙端口查看Ollama接口密钥,容器日志配置MaxKB登录默认账户密码username:admin password:MaxKB@123..配置deepseek-r1:1.5b添加ollama模型添加自动下载,等待下载完成即可配置使用体验大模型进行对话MaxKB更多功能可查看MaxKB文档自行体验四、windows ollama给外部用为当前windows系统添加环境变量:电脑-属性-高级系统设置-环境变量变量:OLLAMA_HOST,值:0.0.0.0:11434同时加载5个模型变量: OLLAMA_NUM_PARALLEL,值:5变量: OLLAMA_MAX_LOADED_MODELS,值:5模型位置OLLAMA_MODELS,值:E:\ollamaimagers模型在内存中驻留24小时OLLAMA_KEEP_ALIVE,值:24h重启电脑防火墙根据情况开放访问地址为 http://IP:11434五、N卡安装CUDA ollama显卡支持列表 https://ollama.readthedocs.io/gpu/ 不在列表中的ollama无法调用GPU命令行输入nvidia-smi 根据显示的CUDA Version安装对应的CUDA Toolkit Archive https://developer.nvidia.com/cuda-toolkit-archive 如CUDA Version12.8则下载CUDA Toolkit 12.8.0 (January 2025)
2025年02月05日
814 阅读
0 评论
1 点赞
2024-11-22
快速部署Citus Postgres集群 6节点,SysBench对比测试mysql8.4、OceanBase 集群、Postgres17、mariaDB11
前文快速部署OceanBase 集群 1ZONE 6节点,使用SysBench对比测试mysql8.4单节点https://90apt.com/5039一、环境准备 1、安装规划仍在同一套超融合中部署测试,保证硬件性能相同。本次部署的对象为:Postgres17单机 32C64GmariaDB11单机 32C64GCitus Postgres单机6容器集群 2副本5工作节点哈希分布 32C64GCitus Postgres集群 2副本5工作节点32分片哈希分布 48C96GCitus Postgres集群 2副本5工作节点5分片哈希分布 48C96G关闭防火墙,避免影响实验 systemctl stop firewalld && systemctl disable firewalld2、安装部署Postgres17单机、mariaDB11单机使用anolis8系统 1panel面板一键部署Citus Postgres单机6容器集群 2副本5工作节点哈希分布 使用anolis8系统Citus Postgres集群 使用alma9系统二、1panel一键部署Postgres17单机、mariaDB11单机 1、使用1P面板一键部署即可Postgres17单机、mariaDB11单机2、性能测试2.1、MYSQL单机OLTP读写混合场景清除数据sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=IP地址 --mysql-port=端口 --mysql-db=数据库名 --mysql-user=用户名 --mysql-password=密码 --table_size=1000000 --tables=350 --threads=80 --report-interval=10 --rand-type=uniform --time=60 cleanup初始化测试数据sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=IP地址 --mysql-port=端口 --mysql-db=数据库名 --mysql-user=用户名 --mysql-password=密码 --table_size=1000000 --tables=350 --threads=80 --report-interval=10 --rand-type=uniform --time=60 prepare执行测试sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=IP地址 --mysql-port=端口 --mysql-db=数据库名 --mysql-user=用户名 --mysql-password=密码 --table_size=1000000 --tables=350 --threads=80 --report-interval=10 --time=60 --rand-type=uniform --db-ps-mode=disable run2.2、MYSQL单机OLTP只读场景压测准备数据sysbench --db-driver=mysql --mysql-host=IP地址 --mysql-port=端口 --mysql-user=用户名 --mysql-password=密码 --mysql-db=数据库名 --table_size=1000000 --tables=350 --events=0 --time=300 --threads=80 oltp_read_only prepare运行压测sysbench --db-driver=mysql --mysql-host=IP地址 --mysql-port=端口 --mysql-user=用户名 --mysql-password=密码 --mysql-db=数据库名 --table_size=1000000 --tables=350 --events=0 --time=300 --threads=80 --percentile=95 --report-interval=1 oltp_read_only run清理数据sysbench --db-driver=mysql --mysql-host=IP地址 --mysql-port=端口 --mysql-user=用户名 --mysql-password=密码 --mysql-db=数据库名 --table_size=1000000 --tables=350 --events=0 --time=300 --threads=80 --percentile=95 oltp_read_only cleanup2.3、PG单机OLTP读写混合场景清除数据sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=pgsql --pgsql-host=IP地址 --pgsql-port=端口 --pgsql-db=数据库名 --pgsql-user=用户名 --pgsql-password=密码 --table_size=1000000 --tables=350 --threads=80 --report-interval=10 --rand-type=uniform cleanup初始化测试数据sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=pgsql --pgsql-host=IP地址 --pgsql-port=端口 --pgsql-db=数据库名 --pgsql-user=用户名 --pgsql-password=密码 --table_size=1000000 --tables=350 --threads=80 --report-interval=10 --rand-type=uniform prepare执行测试sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=pgsql --pgsql-host=IP地址 --pgsql-port=端口 --pgsql-db=数据库名 --pgsql-user=用户名 --pgsql-password=密码 --table_size=1000000 --tables=350 --threads=80 --report-interval=10 --time=60 --rand-type=uniform --db-ps-mode=disable run 2.4、PG单机OLTP只读场景压测准备数据sysbench --db-driver=pgsql --pgsql-host=IP地址 --pgsql-port=端口 --pgsql-db=数据库名 --pgsql-user=用户名 --pgsql-password=密码 --table_size=1000000 --tables=350 --events=0 --time=300 --threads=80 oltp_read_only prepare运行压测sysbench --db-driver=pgsql --pgsql-host=IP地址 --pgsql-port=端口 --pgsql-db=数据库名 --pgsql-user=用户名 --pgsql-password=密码 --table_size=1000000 --tables=350 --events=0 --time=300 --threads=80 --percentile=95 --report-interval=1 oltp_read_only run清理数据sysbench --db-driver=pgsql --pgsql-host=IP地址 --pgsql-port=端口 --pgsql-db=数据库名 --pgsql-user=用户名 --pgsql-password=密码 --table_size=1000000 --tables=350 --events=0 --time=300 --threads=80 --percentile=95 oltp_read_only cleanup最后放测试结果三、搭建Citus Postgres单机容器集群 1、Citus相关概念分布表分布在所有节点create_distributed_table参考表全部内容集中在一个分片中,每个数据节点复制该内容,保证数据一致性create_reference_table本地表协调节点不切分就是普通本地数据库,默认并行查询跨多个节点查询允许同时运行更多查询,协调节点需增强性能数据分布方式按哈希分布 默认 扩容节点需要迁移数据重新分布按数据范围分布按数据量分布2、下载docker镜像docker pull citusdata/citus3、创建docker网络bridge网桥模式docker network create --subnet=192.168.88.0/24 citus-network查看创建的网络docker network ls NETWORK ID NAME DRIVER SCOPE 3ba81d539b5d 1panel-network bridge local c24c0167d92e bridge bridge local de9fd59a6f8a citus-network bridge local a253a0857538 host host local 4aae934ed291 none null local4、启动citus服务创建协调节点 coordinate服务节点 docker run -dit --name citus-cod -p 5433:5432 -v /citus/citus-cod:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 --net=citus-network citusdata/citus -c listen_addresses="*" -c shared_preload_libraries='citus'创建工作节点docker run -dit --name citus-worker10 -v /citus/worker10:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -e POSTGRES_HOST_AUTH_METHOD='trust' --net=citus-network citusdata/citus -c listen_addresses="*" -c shared_preload_libraries='citus' docker run -dit --name citus-worker11 -v /citus/worker11:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -e POSTGRES_HOST_AUTH_METHOD='trust' --net=citus-network citusdata/citus -c listen_addresses="*" -c shared_preload_libraries='citus' docker run -dit --name citus-worker12 -v /citus/worker12:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -e POSTGRES_HOST_AUTH_METHOD='trust' --net=citus-network citusdata/citus -c listen_addresses="*" -c shared_preload_libraries='citus' docker run -dit --name citus-worker13 -v /citus/worker13:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -e POSTGRES_HOST_AUTH_METHOD='trust' --net=citus-network citusdata/citus -c listen_addresses="*" -c shared_preload_libraries='citus' docker run -dit --name citus-worker14 -v /citus/worker14:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -e POSTGRES_HOST_AUTH_METHOD='trust' --net=citus-network citusdata/citus -c listen_addresses="*" -c shared_preload_libraries='citus' docker run -dit --name citus-worker15 -v /citus/worker15:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -e POSTGRES_HOST_AUTH_METHOD='trust' --net=citus-network citusdata/citus -c listen_addresses="*" -c shared_preload_libraries='citus'5、往集群添加节点进入postgresql协调节点docker exec -it citus-cod psql -U postgres添加工作节点 select * from master_add_node('citus-worker10',5432); select * from master_add_node('citus-worker11',5432); select * from master_add_node('citus-worker12',5432); select * from master_add_node('citus-worker13',5432); select * from master_add_node('citus-worker14',5432); select * from master_add_node('citus-worker15',5432);查看工作节点select * from master_get_active_worker_nodes(); node_name | node_port ----------------+----------- citus-worker10 | 5432 citus-worker11 | 5432 ........6、管理节点删除工作节点 DELETE FROM pg_dist_placement WHERE groupid = (SELECT groupid FROM pg_dist_node WHERE nodename ='citus-worker11' AND nodeport = '5432' LIMIT 1);移除节点SELECT master_remove_node('citus-worker11', '5432');重新平衡分片SELECT rebalance_table_shards();7、数据库文件转入转出使用docker cp转入docker cp 主机文件 容器名:/容器文件使用docker cp转出docker cp 容器名:/容器文件 主机文件导入数据库备份pg_restore -U postgres -d postgres < 数据库备份.backup导出数据库备份pg_dump -U postgres postgres > 数据库备份.sql8、设置分布表分片、副本分片数为5set citus.shard_count = 5;副本数为2SET citus.shard_replication_factor = 2;分布表SELECT create_distributed_table('表名','主键'); SELECT create_distributed_table('sbtest1','id');查看分片数show citus.shard_count; citus.shard_count ------------------- 32 (1 row)查看分片详情select * from pg_dist_shard; 默认为hash分片 select * from pg_dist_shard_placement; 查看分片与节点的关系更改分片数SELECT alter_distributed_table('表名',shard_count:=2,cascade_to_colocated:=true); SELECT alter_distributed_table('sbtest1',shard_count:=2,cascade_to_colocated:=true);查看数据存放位置select get_shard_id_for_distribution_column('sbtest1',1);9、故障修复9.1、模拟协调节点故障 docker stop citus-cod工作节点仍然可以查询进入工作节点10docker exec -it citus-worker10 psql -U postgres查看数据select * from sbtest1;9.2、工作节点故障工作节点故障后,可以进行查询,不能进行写入;若要继续写入,需要先禁用故障节点citus_disable_node 恢复节点后在重新复制分片 replicate_table_shards10、性能测试命令与单机相同,但准备数据库,要先进行表分片,分片后测试性能SELECT create_distributed_table('sbtest1','id'); SELECT create_distributed_table('sbtest2','id'); ...... SELECT create_distributed_table('sbtest350','id');最后放测试结果四、搭建Citus Postgres集群 有上面的搭建经验,其实多主机集群就很简单了安装教程参考官网 https://docs.citusdata.com/en/stable/installation/multi_node_rhel.html#post-enterprise-rhel1、添加仓库curl https://install.citusdata.com/community/rpm.sh | sudo bash2、安装 PostgreSQL + Citus 并初始化数据库# 安装PG数据库和Citus扩展 sudo yum install -y citus121_16 # 初始化PG数据库 sudo /usr/pgsql-16/bin/postgresql-16-setup initdb # 加载Citus扩展 echo "shared_preload_libraries = 'citus'" | sudo tee -a /var/lib/pgsql/16/data/postgresql.conf3、配置连接和身份验证在启动数据库之前,让我们更改其访问权限。默认情况下,数据库服务器仅侦听 localhost 上的 Client 端。作为此步骤的一部分,我们指示它侦听所有 IP 接口,然后配置客户端身份验证文件以允许来自本地网络的所有传入连接。sudo vi /var/lib/pgsql/16/data/postgresql.conf # Uncomment listen_addresses for the changes to take effect listen_addresses = '*' sudo vi /var/lib/pgsql/16/data/pg_hba.conf # Allow unrestricted access to nodes in the local network. The following ranges # correspond to 24, 20, and 16-bit blocks in Private IPv4 address spaces. host all all 10.0.0.0/8 trust # Also allow the host unrestricted access to connect to itself host all all 127.0.0.1/32 trust host all all ::1/128 trust启动数据库服务器,创建 Citus 扩展# 启动数据库 sudo systemctl restart postgresql-16 # 配置开机启动 sudo systemctl enable postgresql-16 您必须将 Citus 扩展添加到要在集群中使用的每个数据库。以下示例将扩展添加到名为 postgres 的默认数据库。 sudo -i -u postgres psql -c "CREATE EXTENSION citus;"5、要在 coordinator 节点上执行的步骤在执行上述步骤后,只能在协调器节点上执行下面列出的步骤。5.1、添加 worker 节点信息我们需要通知 coordinator 有关其 worker 的信息。要添加此信息,请执行以下操作: 我们调用 UDF,它将节点信息添加到 pg_dist_node catalog 表,协调器使用该表来获取 worker 节点。对于我们的示例,我们假设有两个 worker(名为 worker-101、worker-102)。添加工作人员的 DNS 名称(或 IP 地址) 和服务器端口添加到表中。# Register the hostname that future workers will use to connect # to the coordinator node. # # You'll need to change the example, 'coord.example.com', # to match the actual hostname sudo -i -u postgres psql -c \ "SELECT citus_set_coordinator_host('coord.example.com', 5432);" # Add the worker nodes. # # Similarly, you'll need to change 'worker-101' and 'worker-102' to the # actual hostnames5.2、验证安装是否成功为了验证安装是否成功,我们检查协调器节点是否具有 选取所需的 worker 配置。此命令在 psql 中的 shell 应该输出我们添加到上面 pg_dist_node 表中的工作节点。sudo -i -u postgres psql -c "SELECT * FROM citus_get_active_worker_nodes();"6、性能测试与容器集群相同五、测试结果MYSQL单机OLTP读写混合场景[ 10s ] thds: 80 tps: 279.82 qps: 5649.14 (r/w/o: 3961.11/1120.39/567.64) lat (ms,95%): 467.30 err/s: 0.00 reconn/s: 0.00[ 20s ] thds: 80 tps: 336.51 qps: 6786.91 (r/w/o: 4759.38/1354.52/673.01) lat (ms,95%): 390.30 err/s: 0.00 reconn/s: 0.00[ 30s ] thds: 80 tps: 246.00 qps: 4918.91 (r/w/o: 3441.11/985.80/492.00) lat (ms,95%): 520.62 err/s: 0.00 reconn/s: 0.00[ 40s ] thds: 80 tps: 306.70 qps: 6129.61 (r/w/o: 4290.91/1225.30/613.40) lat (ms,95%): 434.83 err/s: 0.00 reconn/s: 0.00[ 50s ] thds: 80 tps: 354.50 qps: 7104.99 (r/w/o: 4974.69/1421.30/709.00) lat (ms,95%): 369.77 err/s: 0.00 reconn/s: 0.00[ 60s ] thds: 80 tps: 339.50 qps: 6785.12 (r/w/o: 4741.72/1364.40/679.00) lat (ms,95%): 376.49 err/s: 0.00 reconn/s: 0.00MYSQL单机OLTP只读场景压测[ 1s ] thds: 80 tps: 2322.83 qps: 37870.75 (r/w/o: 33145.27/0.00/4725.49) lat (ms,95%): 51.02 err/s: 0.00 reconn/s: 0.00[ 2s ] thds: 80 tps: 2927.99 qps: 46815.91 (r/w/o: 40960.92/0.00/5854.99) lat (ms,95%): 35.59 err/s: 0.00 reconn/s: 0.00[ 3s ] thds: 80 tps: 3440.21 qps: 55064.31 (r/w/o: 48183.89/0.00/6880.41) lat (ms,95%): 31.94 err/s: 0.00 reconn/s: 0.00[ 4s ] thds: 80 tps: 3973.17 qps: 63529.73 (r/w/o: 55585.39/0.00/7944.34) lat (ms,95%): 27.17 err/s: 0.00 reconn/s: 0.00[ 5s ] thds: 80 tps: 4175.91 qps: 66879.59 (r/w/o: 58526.76/0.00/8352.82) lat (ms,95%): 26.20 err/s: 0.00 reconn/s: 0.00[ 76s ] thds: 80 tps: 4714.21 qps: 75534.39 (r/w/o: 66105.97/0.00/9428.42) lat (ms,95%): 22.69 err/s: 0.00 reconn/s: 0.00[ 77s ] thds: 80 tps: 4679.42 qps: 74748.76 (r/w/o: 65388.92/0.00/9359.85) lat (ms,95%): 23.10 err/s: 0.00 reconn/s: 0.00[ 78s ] thds: 80 tps: 4737.18 qps: 75766.94 (r/w/o: 66295.57/0.00/9471.37) lat (ms,95%): 22.28 err/s: 0.00 reconn/s: 0.00[ 79s ] thds: 80 tps: 4650.49 qps: 74527.85 (r/w/o: 65222.87/0.00/9304.98) lat (ms,95%): 23.10 err/s: 0.00 reconn/s: 0.00[ 80s ] thds: 80 tps: 4664.70 qps: 74592.18 (r/w/o: 65266.78/0.00/9325.40) lat (ms,95%): 22.69 err/s: 0.00 reconn/s: 0.00OB集群 1zone6主机OLTP读写混合场景[ 10s ] thds: 80 tps: 194.03 qps: 3980.77 (r/w/o: 2799.12/785.60/396.05) lat (ms,95%): 960.30 err/s: 0.00 reconn/s: 0.00[ 20s ] thds: 80 tps: 585.61 qps: 11728.84 (r/w/o: 8211.80/2345.83/1171.21) lat (ms,95%): 267.41 err/s: 0.00 reconn/s: 0.00[ 30s ] thds: 80 tps: 1159.31 qps: 23173.24 (r/w/o: 16218.30/4636.33/2318.61) lat (ms,95%): 104.84 err/s: 0.00 reconn/s: 0.00[ 40s ] thds: 80 tps: 1573.49 qps: 31474.50 (r/w/o: 22032.76/6294.86/3146.88) lat (ms,95%): 70.55 err/s: 0.00 reconn/s: 0.00[ 50s ] thds: 80 tps: 1568.68 qps: 31364.68 (r/w/o: 21954.30/6272.92/3137.46) lat (ms,95%): 89.16 err/s: 0.00 reconn/s: 0.00[ 60s ] thds: 80 tps: 1876.77 qps: 37543.14 (r/w/o: 26280.21/7509.89/3753.04) lat (ms,95%): 55.82 err/s: 0.00 reconn/s: 0.00OB集群 1zone6主机OLTP只读场景压测[ 1s ] thds: 80 tps: 258.36 qps: 4791.07 (r/w/o: 4194.56/0.00/596.51) lat (ms,95%): 646.19 err/s: 0.00 reconn/s: 0.00[ 2s ] thds: 80 tps: 523.06 qps: 8405.99 (r/w/o: 7359.87/0.00/1046.12) lat (ms,95%): 601.29 err/s: 0.00 reconn/s: 0.00[ 3s ] thds: 80 tps: 678.97 qps: 10798.50 (r/w/o: 9440.56/0.00/1357.94) lat (ms,95%): 376.49 err/s: 0.00 reconn/s: 0.00[ 4s ] thds: 80 tps: 974.06 qps: 15628.02 (r/w/o: 13679.90/0.00/1948.13) lat (ms,95%): 277.21 err/s: 0.00 reconn/s: 0.00[ 5s ] thds: 80 tps: 1244.00 qps: 19876.04 (r/w/o: 17388.04/0.00/2488.01) lat (ms,95%): 207.82 err/s: 0.00 [ 76s ] thds: 80 tps: 5320.92 qps: 85129.68 (r/w/o: 74486.85/0.00/10642.83) lat (ms,95%): 19.29 err/s: 0.00 reconn/s: 0.00[ 77s ] thds: 80 tps: 5331.83 qps: 85282.34 (r/w/o: 74620.67/0.00/10661.67) lat (ms,95%): 18.95 err/s: 0.00 reconn/s: 0.00[ 78s ] thds: 80 tps: 5279.20 qps: 84432.24 (r/w/o: 73874.84/0.00/10557.41) lat (ms,95%): 19.29 err/s: 0.00 reconn/s: 0.00[ 79s ] thds: 80 tps: 5431.77 qps: 86835.31 (r/w/o: 75971.77/0.00/10863.54) lat (ms,95%): 18.61 err/s: 0.00 reconn/s: 0.00[ 80s ] thds: 80 tps: 5411.58 qps: 86724.27 (r/w/o: 75901.11/0.00/10823.16) lat (ms,95%): 18.61 err/s: 0.00 reconn/s: 0.00PG单机OLTP读写混合场景[ 10s ] thds: 80 tps: 150.17 qps: 3145.15 (r/w/o: 2213.04/623.77/308.34) lat (ms,95%): 1050.76 err/s: 0.00 reconn/s: 0.00[ 20s ] thds: 80 tps: 189.60 qps: 3731.26 (r/w/o: 2612.54/739.51/379.21) lat (ms,95%): 1327.91 err/s: 0.00 reconn/s: 0.00[ 30s ] thds: 80 tps: 299.30 qps: 5992.23 (r/w/o: 4196.32/1197.31/598.60) lat (ms,95%): 530.08 err/s: 0.00 reconn/s: 0.00[ 40s ] thds: 80 tps: 340.40 qps: 6804.74 (r/w/o: 4763.56/1360.39/680.79) lat (ms,95%): 484.44 err/s: 0.00 reconn/s: 0.00[ 50s ] thds: 80 tps: 425.30 qps: 8512.85 (r/w/o: 5959.04/1703.21/850.61) lat (ms,95%): 376.49 err/s: 0.00 reconn/s: 0.00[ 60s ] thds: 80 tps: 592.39 qps: 11850.79 (r/w/o: 8294.72/2371.28/1184.79) lat (ms,95%): 257.95 err/s: 0.00 reconn/s: 0.00PG单机OLTP只读场景压测[ 1s ] thds: 80 tps: 358.25 qps: 6397.54 (r/w/o: 5602.21/0.00/795.33) lat (ms,95%): 467.30 err/s: 0.00 reconn/s: 0.00[ 2s ] thds: 80 tps: 675.16 qps: 10843.59 (r/w/o: 9492.27/0.00/1351.32) lat (ms,95%): 282.25 err/s: 0.00 reconn/s: 0.00[ 3s ] thds: 80 tps: 773.98 qps: 12380.60 (r/w/o: 10833.65/0.00/1546.95) lat (ms,95%): 235.74 err/s: 0.00 reconn/s: 0.00[ 4s ] thds: 80 tps: 583.02 qps: 9271.26 (r/w/o: 8104.23/0.00/1167.03) lat (ms,95%): 419.45 err/s: 0.00 reconn/s: 0.00[ 5s ] thds: 80 tps: 900.02 qps: 14466.28 (r/w/o: 12666.24/0.00/1800.03) lat (ms,95%): 272.27 err/s: 0.00 reconn/s: 0.00[ 75s ] thds: 80 tps: 7219.92 qps: 115510.73 (r/w/o: 101073.88/0.00/14436.84) lat (ms,95%): 16.12 err/s: 0.00 reconn/s: 0.00[ 76s ] thds: 80 tps: 7312.11 qps: 117077.83 (r/w/o: 102446.60/0.00/14631.23) lat (ms,95%): 15.55 err/s: 0.00 reconn/s: 0.00[ 77s ] thds: 80 tps: 7336.09 qps: 117346.48 (r/w/o: 102677.30/0.00/14669.19) lat (ms,95%): 15.27 err/s: 0.00 reconn/s: 0.00[ 78s ] thds: 80 tps: 6918.94 qps: 110807.00 (r/w/o: 96968.13/0.00/13838.88) lat (ms,95%): 18.61 err/s: 0.00 reconn/s: 0.00[ 79s ] thds: 80 tps: 6900.01 qps: 110262.12 (r/w/o: 96464.11/0.00/13798.02) lat (ms,95%): 20.00 err/s: 0.00 reconn/s: 0.00[ 80s ] thds: 80 tps: 7222.03 qps: 115629.55 (r/w/o: 101186.49/0.00/14443.07) lat (ms,95%): 15.00 err/s: 0.00 reconn/s: 0.00PG单机6容器集群OLTP读写混合场景[ 10s ] thds: 80 tps: 68.18 qps: 1453.28 (r/w/o: 1031.17/277.74/144.37) lat (ms,95%): 2362.72 err/s: 0.00 reconn/s: 0.00[ 20s ] thds: 80 tps: 111.10 qps: 2229.06 (r/w/o: 1564.75/442.21/222.11) lat (ms,95%): 893.56 err/s: 0.00 reconn/s: 0.00[ 30s ] thds: 80 tps: 128.00 qps: 2567.82 (r/w/o: 1796.71/515.00/256.10) lat (ms,95%): 773.68 err/s: 0.00 reconn/s: 0.00[ 40s ] thds: 80 tps: 136.10 qps: 2713.78 (r/w/o: 1898.08/543.60/272.10) lat (ms,95%): 719.92 err/s: 0.00 reconn/s: 0.00[ 50s ] thds: 80 tps: 138.90 qps: 2773.51 (r/w/o: 1940.90/554.70/277.90) lat (ms,95%): 707.07 err/s: 0.00 reconn/s: 0.00[ 60s ] thds: 80 tps: 137.50 qps: 2750.50 (r/w/o: 1927.00/548.50/275.00) lat (ms,95%): 719.92 err/s: 0.00 reconn/s: 0.00PG单机6容器集群OLTP只读场景压测[ 1s ] thds: 80 tps: 0.00 qps: 820.05 (r/w/o: 740.24/0.00/79.81) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00[ 2s ] thds: 80 tps: 11.00 qps: 256.10 (r/w/o: 234.09/0.00/22.01) lat (ms,95%): 1973.38 err/s: 0.00 reconn/s: 0.00[ 3s ] thds: 80 tps: 71.01 qps: 1037.15 (r/w/o: 895.13/0.00/142.02) lat (ms,95%): 2778.39 err/s: 0.00 reconn/s: 0.00[ 4s ] thds: 80 tps: 67.00 qps: 1121.96 (r/w/o: 987.97/0.00/134.00) lat (ms,95%): 1678.14 err/s: 0.00 reconn/s: 0.00[ 5s ] thds: 80 tps: 84.00 qps: 1388.04 (r/w/o: 1220.03/0.00/168.00) lat (ms,95%): 2009.23 err/s: 0.00 reconn/s: 0.00[ 75s ] thds: 80 tps: 221.98 qps: 3532.71 (r/w/o: 3088.75/0.00/443.96) lat (ms,95%): 467.30 err/s: 0.00 reconn/s: 0.00[ 76s ] thds: 80 tps: 224.99 qps: 3537.87 (r/w/o: 3087.89/0.00/449.98) lat (ms,95%): 493.24 err/s: 0.00 reconn/s: 0.00[ 77s ] thds: 80 tps: 223.02 qps: 3609.26 (r/w/o: 3163.23/0.00/446.03) lat (ms,95%): 502.20 err/s: 0.00 reconn/s: 0.00[ 78s ] thds: 80 tps: 222.00 qps: 3577.02 (r/w/o: 3133.02/0.00/444.00) lat (ms,95%): 502.20 err/s: 0.00 reconn/s: 0.00[ 79s ] thds: 80 tps: 232.99 qps: 3643.80 (r/w/o: 3177.82/0.00/465.97) lat (ms,95%): 502.20 err/s: 0.00 reconn/s: 0.00[ 80s ] thds: 80 tps: 215.02 qps: 3571.29 (r/w/o: 3141.26/0.00/430.03) lat (ms,95%): 458.96 err/s: 0.00 reconn/s: 0.00PG6主机集群 2副本5工作节点32分片哈希分布OLTP读写混合场景[ 10s ] thds: 80 tps: 6.20 qps: 217.91 (r/w/o: 172.23/25.29/20.39) lat (ms,95%): 9624.59 err/s: 0.00 reconn/s: 0.00[ 20s ] thds: 80 tps: 17.80 qps: 351.61 (r/w/o: 244.91/71.10/35.60) lat (ms,95%): 11523.48 err/s: 0.00 reconn/s: 0.00[ 30s ] thds: 80 tps: 18.90 qps: 374.59 (r/w/o: 261.60/75.20/37.80) lat (ms,95%): 6476.48 err/s: 0.00 reconn/s: 0.00[ 40s ] thds: 80 tps: 14.60 qps: 294.10 (r/w/o: 206.50/58.40/29.20) lat (ms,95%): 7895.16 err/s: 0.00 reconn/s: 0.00[ 50s ] thds: 80 tps: 17.60 qps: 351.69 (r/w/o: 246.09/70.40/35.20) lat (ms,95%): 7615.89 err/s: 0.00 reconn/s: 0.00[ 60s ] thds: 80 tps: 20.70 qps: 414.81 (r/w/o: 290.50/82.90/41.40) lat (ms,95%): 6026.41 err/s: 0.00 reconn/s: 0.00PG6主机集群 2副本5工作节点32分片哈希分布OLTP只读场景压测[ 1s ] thds: 80 tps: 0.00 qps: 253.20 (r/w/o: 173.45/0.00/79.75) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00[ 2s ] thds: 80 tps: 0.00 qps: 315.14 (r/w/o: 315.14/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00[ 3s ] thds: 80 tps: 0.00 qps: 310.98 (r/w/o: 310.98/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00[ 4s ] thds: 80 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00[ 5s ] thds: 80 tps: 0.00 qps: 0.00 (r/w/o: 0.00/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00[ 75s ] thds: 80 tps: 17.00 qps: 272.01 (r/w/o: 238.01/0.00/34.00) lat (ms,95%): 4280.32 err/s: 0.00 reconn/s: 0.00[ 76s ] thds: 80 tps: 22.00 qps: 351.98 (r/w/o: 307.98/0.00/44.00) lat (ms,95%): 4203.93 err/s: 0.00 reconn/s: 0.00[ 77s ] thds: 80 tps: 27.00 qps: 432.02 (r/w/o: 378.02/0.00/54.00) lat (ms,95%): 4855.31 err/s: 0.00 reconn/s: 0.00[ 78s ] thds: 80 tps: 20.00 qps: 320.00 (r/w/o: 280.00/0.00/40.00) lat (ms,95%): 4358.09 err/s: 0.00 reconn/s: 0.00[ 79s ] thds: 80 tps: 21.00 qps: 318.97 (r/w/o: 276.97/0.00/42.00) lat (ms,95%): 4280.32 err/s: 0.00 reconn/s: 0.00[ 80s ] thds: 80 tps: 26.00 qps: 435.97 (r/w/o: 383.98/0.00/52.00) lat (ms,95%): 4280.32 err/s: 0.00 reconn/s: 0.00PG6主机集群 2副本5工作节点5分片哈希分布OLTP读写混合场景[ 10s ] thds: 80 tps: 18.70 qps: 480.68 (r/w/o: 354.91/80.38/45.39) lat (ms,95%): 6247.39 err/s: 0.00 reconn/s: 0.00[ 20s ] thds: 80 tps: 49.90 qps: 992.92 (r/w/o: 693.82/199.30/99.80) lat (ms,95%): 2828.87 err/s: 0.00 reconn/s: 0.00[ 30s ] thds: 80 tps: 68.90 qps: 1369.50 (r/w/o: 958.00/273.70/137.80) lat (ms,95%): 2082.91 err/s: 0.00 reconn/s: 0.00[ 40s ] thds: 80 tps: 51.40 qps: 1051.00 (r/w/o: 736.00/212.20/102.80) lat (ms,95%): 2880.27 err/s: 0.00 reconn/s: 0.00[ 50s ] thds: 80 tps: 58.80 qps: 1164.10 (r/w/o: 815.90/230.60/117.60) lat (ms,95%): 2198.52 err/s: 0.00 reconn/s: 0.00[ 60s ] thds: 80 tps: 62.90 qps: 1242.19 (r/w/o: 867.69/248.70/125.80) lat (ms,95%): 1973.38 err/s: 0.00 reconn/s: 0.00PG6主机集群 2副本5工作节点5分片哈希分布OLTP读写混合场景[ 1s ] thds: 80 tps: 0.00 qps: 195.52 (r/w/o: 115.72/0.00/79.80) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00[ 2s ] thds: 80 tps: 1.00 qps: 578.18 (r/w/o: 576.18/0.00/2.00) lat (ms,95%): 1973.38 err/s: 0.00 reconn/s: 0.00[ 3s ] thds: 80 tps: 67.00 qps: 989.03 (r/w/o: 855.03/0.00/134.00) lat (ms,95%): 2985.89 err/s: 0.00 reconn/s: 0.00[ 4s ] thds: 80 tps: 136.99 qps: 2305.88 (r/w/o: 2031.89/0.00/273.99) lat (ms,95%): 3095.38 err/s: 0.00 reconn/s: 0.00[ 5s ] thds: 80 tps: 200.98 qps: 3237.63 (r/w/o: 2835.67/0.00/401.95) lat (ms,95%): 787.74 err/s: 0.00 reconn/s: 0.00[ 75s ] thds: 80 tps: 795.93 qps: 12744.86 (r/w/o: 11154.01/0.00/1590.86) lat (ms,95%): 458.96 err/s: 0.00 reconn/s: 0.00[ 76s ] thds: 80 tps: 749.04 qps: 11941.61 (r/w/o: 10442.53/0.00/1499.08) lat (ms,95%): 475.79 err/s: 0.00 reconn/s: 0.00[ 77s ] thds: 80 tps: 729.03 qps: 11708.42 (r/w/o: 10250.37/0.00/1458.05) lat (ms,95%): 484.44 err/s: 0.00 reconn/s: 0.00[ 78s ] thds: 80 tps: 744.98 qps: 11892.74 (r/w/o: 10402.77/0.00/1489.97) lat (ms,95%): 442.73 err/s: 0.00 reconn/s: 0.00[ 79s ] thds: 80 tps: 739.02 qps: 11824.28 (r/w/o: 10346.25/0.00/1478.04) lat (ms,95%): 434.83 err/s: 0.00 reconn/s: 0.00[ 80s ] thds: 80 tps: 761.99 qps: 12226.87 (r/w/o: 10702.88/0.00/1523.98) lat (ms,95%): 419.45 err/s: 0.00 reconn/s: 0.00mariaDB单机OLTP读写混合场景[ 10s ] thds: 80 tps: 100.18 qps: 2130.57 (r/w/o: 1507.19/415.02/208.36) lat (ms,95%): 1280.93 err/s: 0.00 reconn/s: 0.00[ 20s ] thds: 80 tps: 125.20 qps: 2464.65 (r/w/o: 1721.73/492.51/250.40) lat (ms,95%): 909.80 err/s: 0.00 reconn/s: 0.00[ 30s ] thds: 80 tps: 135.70 qps: 2726.24 (r/w/o: 1908.86/545.99/271.39) lat (ms,95%): 816.63 err/s: 0.00 reconn/s: 0.00[ 40s ] thds: 80 tps: 156.80 qps: 3113.73 (r/w/o: 2178.95/621.19/313.59) lat (ms,95%): 719.92 err/s: 0.00 reconn/s: 0.00[ 50s ] thds: 80 tps: 133.71 qps: 2690.01 (r/w/o: 1886.48/536.12/267.41) lat (ms,95%): 802.05 err/s: 0.00 reconn/s: 0.00[ 60s ] thds: 80 tps: 132.90 qps: 2663.70 (r/w/o: 1862.30/535.60/265.80) lat (ms,95%): 1032.01 err/s: 0.00 reconn/s: 0.00mariaDB单机OLTP只读场景压测[ 1s ] thds: 80 tps: 1053.26 qps: 17530.32 (r/w/o: 15344.01/0.00/2186.30) lat (ms,95%): 458.96 err/s: 0.00 reconn/s: 0.00[ 2s ] thds: 80 tps: 3058.47 qps: 48963.52 (r/w/o: 42846.58/0.00/6116.94) lat (ms,95%): 39.65 err/s: 0.00 reconn/s: 0.00[ 3s ] thds: 80 tps: 3993.09 qps: 63878.37 (r/w/o: 55892.20/0.00/7986.17) lat (ms,95%): 29.19 err/s: 0.00 reconn/s: 0.00[ 4s ] thds: 80 tps: 3401.95 qps: 54410.25 (r/w/o: 47606.34/0.00/6803.91) lat (ms,95%): 38.25 err/s: 0.00 reconn/s: 0.00[ 5s ] thds: 80 tps: 3410.99 qps: 54540.82 (r/w/o: 47718.84/0.00/6821.98) lat (ms,95%): 38.25 err/s: 0.00 reconn/s: 0.00[ 75s ] thds: 80 tps: 3695.36 qps: 59142.79 (r/w/o: 51753.07/0.00/7389.72) lat (ms,95%): 34.33 err/s: 0.00 reconn/s: 0.00[ 76s ] thds: 80 tps: 3858.59 qps: 61812.42 (r/w/o: 54095.24/0.00/7717.18) lat (ms,95%): 31.94 err/s: 0.00 reconn/s: 0.00[ 77s ] thds: 80 tps: 3674.11 qps: 58735.75 (r/w/o: 51387.54/0.00/7348.22) lat (ms,95%): 36.24 err/s: 0.00 reconn/s: 0.00[ 78s ] thds: 80 tps: 3974.16 qps: 63621.59 (r/w/o: 55672.26/0.00/7949.32) lat (ms,95%): 33.12 err/s: 0.00 reconn/s: 0.00[ 79s ] thds: 80 tps: 5416.04 qps: 86639.63 (r/w/o: 75808.55/0.00/10831.08) lat (ms,95%): 21.11 err/s: 0.00 reconn/s: 0.00[ 80s ] thds: 80 tps: 5403.05 qps: 86473.78 (r/w/o: 75667.68/0.00/10806.10) lat (ms,95%): 21.50 err/s: 0.00 reconn/s: 0.00六、小结 table_size=1000000 tables=350 threads=80 mysql单机数据量大约140GMYSQL8.4.3单机 32C64G默认设置PGSQL17单机 32C64G默认设置OB集群 1zone6主机 租户48C96G默认设置PG单机6容器集群 2副本5工作节点哈希分布PG6主机集群 2副本5工作节点32分片哈希分布 48C96GPG6主机集群 2副本5工作节点5分片哈希分布 48C96GmariaDB11.5.2 32C64G默认设置读写混合场景下OB集群遥遥领先>PG单机>MYSQL单机>Maria DB单机>PG单机容器集群>PG6主机集群几乎无法使用 只读场景下PG单机>OB集群>MYSQL单机≈mariaDB单机>PG单机容器集群>PG6主机集群几乎无法使用
2024年11月22日
807 阅读
0 评论
0 点赞
2024-11-19
采用开源Zabbix+500块硬件平替5万块动环检测系统,实现UPS、温湿度、烟雾等数据采集、存储、告警、大屏展示、RS485 Modbus采集、RS232采集
架构展示: 大屏展示: 所需软件: ZabbixGrafana安装Zabbix-agent2的采集服务器MThings串口调试软件厂家自带UPS监控软件USR-VCOM有人虚拟串口软件所需硬件: 有人串口服务器(USR-N510)有人串口服务器 USR-TCP232-306自制RS485连接线万图思睿 SD123-ST01 RS485温湿度变送器万图思睿 SD123-SA01-R4 RS485烟感报警器所需资料: 科士达YDC3330 modbus开发文档YDC3330说明书一、安装、配置串口服务器 1、硬件安装制作UPS所需要的RS485通讯线,我使用了1、2、8,分别是485+、485-、GND地线,而12V是不需要连接的,因为我们连接的对象是UPS,它并不需要我们通过12V为其供电。如果我们连接的是温湿度计,则需要通过12V为其供电。YDC3330自带两个RS485接口,其支持菊花链连接,所以我使用RS485线一根接一根串起来,这样外观美观。注意,UPS接线非常危险,注意安全!串口服务器只需要将串口模式拨到RS485,并且连接电源、网线、串口线即可2、网络更改按串口服务器背面IP地址,登录,修改IP地址和串口参数、协议参数。右上角更改语言,左侧更改IP地址、按UPS说明书要求调整串口内容,我这里使用的9600:8n1,下方我这里需要使用厂家的UPS软件测试,所以使用的TcpServer None,后面使用Zabbix modbus-get的时候,就需要改成ModbusTCP了二、解析文档 1、使用厂家软件测试安装USR-VCOM有人虚拟串口软件,这个软件的作用可以理解为通过网络将串口无限延长。串口 - 有人串口服务器 - 虚拟串口此时我们使用厂家的UPS软件,软件正常运行通过菊花链串联的方式,4台UPS都上线了,可以搜索到站号分别为1、5、6、7,这个后面要用到2、解析参数如何获取我们需要的参数呢假设,我们要获取A相输入电压,查看说明书采用的modbus-RTU报文格式如图功能码对照表A相输入电压地址,大小2Byte按modbus-RTU组合参数,此时的报文为 01 04 75 30 00 01 XX XX01为站号1 04为功能码,我们要取的30001在功能码中为04H读 75 30为30000的十六进制 00 01为读取一个寄存器地址,即30001的数据,同理我们要读取ABC三相输入,此处就为00 03三个寄存器地址 XX XX为校验码,modbus调试软件可以自动生成使用MThings调试,确认我们要获取的数据没问题此处发现厂家说明书印刷错误,印刷运行状态为30070,实际测试为30080三、配置Zabbix 1、修改串口服务器为modbus-tcp模式2、通过zabbix-agent2获取数据安装一台主机,并安装zabbix-agent2,接入zabbix在zabbix服务器上通过命令请求数据,可以看到数据返回正常zabbix_get -s 172.16.1.5 -k modbus.get[tcp://172.16.1.201:9000,1,4,30000,81] zabbix_get -s 172.16.11.5 指定请求的客户端 -k modbus.get 以modbus.get方式请求 tcp://172.16.1.201:9000,1,4,30000,81 串口服务器IP端口,站号1,功能码4,从30000开始请求,请求81个寄存器数据3、制作zabbix监控项我们采用的方式是一次请求,分段解析添加监控项制作modbus-get监控项,按图片填写即可键值:modbus.get[tcp://172.16.1.201:9000,1,4,30000,81] 信息类型:文本添加监控项制作数据分类监控项,从modbus-get监控项获取数据注意类型为:相关项目 主要项是modbus-get监控项还没完,点击到进程中,此处是配置获取第几位的数值,有没有倍率关系,倍率关系看说明书JSONPath = $[17] 自定义倍数 = 0.14、制作zabbix报警项添加触发器last(/donghuan/ups1yunxingzhuangtai)=5当ups1yunxingzhuangtai值为5时报警,5的值在说明书中为市电中断拉闸测试,5s内收到微信告警添加监控数据获取失败报警表达式: nodata(/donghuan/modbus.get[tcp://172.16.1.201:9000,7,4,30000,81],30)=1 30秒后无数据进行报警四、配置大屏 Grafana正常接入Zabbix添加一项,一看就懂按自己的喜好风格制作大屏即可五、温湿度、烟雾传感器协议解析 新增内容:温湿度采集修改设备地址烟雾采集手动触发烟雾告警读取烟雾信号万图思睿的产品修改设备地址方式相同六、施耐德APC Smart-UPS RS232采集 1、连接信息默认波特率为24002、查询字符Y 让设备进入查询模式 j 续航时间 L 输入电压 O 输出电压 C 当前温度 Q 电池状态 f 电容容量 \ 当前负载3、发送数据编写python程序形成UPSdata数据,格式建议为[x,y,z],便于zabbix解析服务器安装有人vcom软件,将串口连接到服务器zabbix_sender.exe -c zabbix_agent2.conf -k 键值 -o "发送的数据"4、zabbix接收创建 zabbix采集器 键值与zabbix_sender发送的键值对应BUG处理,如遇到字符串错误1. Failed: cannot extract value from json by path "$[3]": invalid JSON object value starting character at: '.00]'添加一个javascript预处理修复字符串try { JSON.parse(value); return value; } catch (e) { var fixed = value; fixed = fixed.replace(/([\[:,]\s*)\.(\d+)/g, '$10.$2'); fixed = fixed.replace(/([\[:,]\s*)0+(\.\d+)/g, '$10$2'); fixed = fixed.replace(/([\[:,]\s*)0+(\d+)/g, '$1$2'); return fixed; }5、查看接收的数据6、python采集程序示例import serial,time,os def main(): # 配置串口参数 ser = serial.Serial( port='COM11', # 根据实际情况修改串口号,例如 Windows 上可能是 'COM3' baudrate=2400, # 设置波特率,根据实际情况修改 timeout=1 # 设置读取超时时间 ) if ser.is_open: print(f"串口 {ser.port} 已打开,查询 施耐德UPS 信息") else: print(f"无法打开串口 {ser.port}") return try: # 发送字符 'Y' ser.write(b'Y') # 等待一段时间让设备响应 time.sleep(0.1) # 读取返回的数据 response = ser.read(ser.in_waiting ) # 读取所有等待数据或至少1字节 if response: UPS1_list = response.decode('utf-8', errors='ignore').splitlines() if UPS1_list[0] == "SM": try: ser.write(b'jLOCQf\\Y') # 等待一段时间让设备响应 time.sleep(0.1) # 读取返回的数据 response = ser.read(ser.in_waiting or 100) # 读取所有等待数据或至少1字节 if response: UPS2_list = response.decode('utf-8', errors='ignore').splitlines() if UPS2_list[7] == "SM": print("续航时间"+UPS2_list[0].lstrip('0').replace(':','')+"分钟 输入电压"+UPS2_list[1]+"V 输出电压"+UPS2_list[2]+"V 当前温度"+UPS2_list[3].lstrip('0')+"摄氏度 电池容量"+UPS2_list[5]+"% 当前负载"+UPS2_list[6].lstrip('0')+"%") UPS3_list = str("["+UPS2_list[0].lstrip('0').replace(':','')+","+UPS2_list[1]+","+UPS2_list[2]+","+UPS2_list[3].lstrip('0')+","+UPS2_list[5]+","+UPS2_list[6].lstrip('0')+"]") command_array = ['zabbix_sender.exe','-c','zabbix_agent2.conf','-k','upsrs232','-o',UPSdata] command_str = ' '.join(command_array) print(command_array) print(command_str) result = os.popen(command_str) print(result.read()) else: print("没有接收到返回数据,连接错误") except Exception as e: print(f"通信过程中发生错误: {e}") else: print("UPS连接错误") else: print("没有接收到返回数据,连接错误") except Exception as e: print(f"通信过程中发生错误: {e}") finally: # 关闭串口 ser.close() print(f"串口 {ser.port} 已关闭") if __name__ == "__main__": main() 七、小结 文章很流畅,但现实并不会如此顺利。第一次,使用的串口线有问题,导致无法连接UPS第二次,厂家给我发错了文档,连续一星期无法测试成功第三次,厂家发对了文档,但是文档的内容错误,导致获取的数据不正确半个月时间分析协议,最后接入Zabbix制作大屏仅用了半天而已最后,Zabbix无比强大,值得深入学习!时隔两年,增加了RS232采集Zabbix真的太强大了
2024年11月19日
1,685 阅读
0 评论
17 点赞
2024-08-16
小型企业网络思路规划配置分享,H3C HCL模拟器
整体规划 采用三层网络结构,核心、汇聚三层互联,堆叠采用40G网络,汇聚10G,接入1G,网关下放到汇聚,交换机采用独立管理VLAN。功能实现 1、核心堆叠,汇聚堆叠,动态端口聚合2、配置DHCP服务器,配置DHCP中继,为多个VLAN提供服务3、静态路由与OSPF,配合ACL实现不同网络的访问控制4、外网NAT,专线静态路由5、接入交换机Telnet、管理IP实现6、SNMP网管服务部署7、DHCP仿冒防御8、端口隔离,防范网络风暴和ARP攻击项目文件分享 模拟器为H3C官方HCL模拟器,安装并导入即可{anote icon="" href="https://90apt.com/usr/uploads/2021/06/H3C%E7%BD%91%E7%BB%9C%E6%A8%A1%E6%8B%9F.zip" type="secondary" content="下载"/} 配置详情 1、设置固定IP,配置主机名如图片所示2、核心堆叠,采用40G口堆叠核心1<hexin1>sys System View: return to User View with Ctrl+Z. [hexin1]int range FortyGigE 1/0/53 to FortyGigE 1/0/54 [hexin1-if-range]shu [hexin1-if-range]quit [hexin1]irf member 1 priority 32 [hexin1]irf-port 1/1 [hexin1-irf-port1/1]port group interface FortyGigE 1/0/53 [hexin1-irf-port1/1]port group interface FortyGigE 1/0/54 [hexin1-irf-port1/1]quit [hexin1]irf-port-configuration active [hexin1]int range FortyGigE 1/0/53 to FortyGigE 1/0/54 [hexin1-if-range]un sh [hexin1-if-range]save核心2[hexin2]sys [hexin2]irf member 1 renumber 2 Renumbering the member ID may result in configuration change or loss. Continue?[Y/N]:y [hexin2]quit <hexin2>reboot <hexin2>sys System View: return to User View with Ctrl+Z. [hexin2]interface range FortyGigE 2/0/53 to FortyGigE 2/0/54 [hexin2-if-range]shu [hexin2-if-range]quit [hexin2]irf member 2 priority 1 [hexin2]irf-port 2/2 [hexin2-irf-port2/2]port group interface FortyGigE 2/0/53 [hexin2-irf-port2/2]port group interface FortyGigE 2/0/54 [hexin2-irf-port2/2]qui [hexin2]irf-port-configuration active [hexin2]interface range FortyGigE 2/0/53 to FortyGigE 2/0/54 [hexin2-if-range]un sh [hexin2-if-range]quit [hexin2]save连接堆叠线后,机器自动重启,此时两台交换机终端都会显示为 hexin1 3、车间汇聚堆叠,采用40G口步骤与核心相同,堆叠后两台终端都会显示为 chejianhuiju1 4、按图片为交换机配置IP和VLAN,三层采用路由模式,汇聚下联trunk,接入上联trunk,下联对应vlan车间汇聚做端口聚合[chejianhuiju1]vlan 1004 [chejianhuiju1-vlan1004]int vlan 1004 [chejianhuiju1-Vlan-interface1004]ip add 10.0.4.254 24 [chejianhuiju1-Vlan-interface1004]quit [chejianhuiju1]int Bridge-Aggregation 1 [chejianhuiju1-Bridge-Aggregation1]link-aggregation mode dynamic [chejianhuiju1-Bridge-Aggregation1]quit [chejianhuiju1]int g1/0/1 [chejianhuiju1-GigabitEthernet1/0/1]port link-aggregation group 1 [chejianhuiju1-GigabitEthernet1/0/1]int g2/0/1 [chejianhuiju1-GigabitEthernet2/0/1]port link-aggregation group 1 [chejianhuiju1-GigabitEthernet2/0/1]dis link-aggregation verbose GE1/0/1 0 32768 0 0x8000, 0000-0000-0000 {EF} GE2/0/1 0 32768 0 0x8000, 0000-0000-0000 {EF} [chejianhuiju1-GigabitEthernet2/0/1]vlan 1004 [chejianhuiju1-vlan1004]port Bridge-Aggregation 1 [chejianhuiju1]int Bridge-Aggregation 1 [chejianhuiju1-Bridge-Aggregation1]port link-type trunk [chejianhuiju1-Bridge-Aggregation1]port trunk permit vlan all [chejianhuiju1-Bridge-Aggregation1]save验证生产设备,ping 10.0.20.4 10.0.50.5 10.0.4.254 都通5、配置OSPF,实现车间、办公、生产服务器、基础服务器互通配置核心<hexin1>sys System View: return to User View with Ctrl+Z. [hexin1]ospf [hexin1-ospf-1]area 0 [hexin1-ospf-1-area-0.0.0.0]netwo [hexin1-ospf-1-area-0.0.0.0]network 10.0.70.0 0.0.0.255 [hexin1-ospf-1-area-0.0.0.0]network 10.0.40.0 0.0.0.255 [hexin1-ospf-1-area-0.0.0.0]network 10.0.60.0 0.0.0.255 [hexin1-ospf-1-area-0.0.0.0]network 10.0.30.0 0.0.0.255 [hexin1-ospf-1-area-0.0.0.0]network 10.0.50.0 0.0.0.255 [hexin1-ospf-1-area-0.0.0.0]quit配置车间汇聚<chejianhuiju1>sys System View: return to User View with Ctrl+Z. [chejianhuiju1]ospf [chejianhuiju1-ospf-1]area 0 [chejianhuiju1-ospf-1-area-0.0.0.0]network 10.0.4.0 0.0.0.255 [chejianhuiju1-ospf-1-area-0.0.0.0]network 10.0.20.0 0.0.0.255 [chejianhuiju1-ospf-1-area-0.0.0.0]network 10.0.50.0 0.0.0.255 [chejianhuiju1-ospf-1-area-0.0.0.0]quit生产设备ping核心通,其他配置类似。6、配置DHCP服务器使用三层交换机搭建DHCP服务器,ping测试[H3C]hostname dhcp [dhcp]int g1/0/1 [dhcp-GigabitEthernet1/0/1]port link-mode route [dhcp-GigabitEthernet1/0/1]ip add 10.0.0.1 24 [dhcp-GigabitEthernet1/0/1]save [dhcp-GigabitEthernet1/0/1]quit [dhcp]ip route-static 0.0.0.0 0 10.0.0.254 [dhcp]ping 10.0.0.254 Ping 10.0.0.254 (10.0.0.254): 56 data bytes, press CTRL_C to break 56 bytes from 10.0.0.254: icmp_seq=0 ttl=255 time=0.000 ms创建DHCP池[dhcp]dhcp enable dhcp server ip-pool bangong gateway-list 10.0.3.254 network 10.0.3.0 mask 255.255.255.0 address range 10.0.3.100 10.0.3.200 dns-list 8.8.8.8 expired day 3 # dhcp server ip-pool wuxian gateway-list 10.0.2.254 network 10.0.2.0 mask 255.255.255.0 address range 10.0.2.150 10.0.2.200 dns-list 114.114.114.114 expired day 3 #沿途汇聚、核心都要开启DHCP中继,二层只要有对应VLAN并trunk即可。[jichuhuiju]dhcp enable # interface Vlan-interface1002 dhcp select relay dhcp relay server-address 10.0.0.1 # interface Vlan-interface1003 dhcp select relay dhcp relay server-address 10.0.0.1 # 查看客户端IP,成功获取IP[dhcp]display dhcp server ip-in-use IP address Client identifier/ Lease expiration Type Hardware address 10.0.2.150 0038-6163-312e-3334- Jun 26 20:35:43 2021 Auto(C) 3266-2e31-3730-362d- 4745-302f-302f-31 10.0.3.100 0038-6137-362e-3466- Jun 28 20:35:31 2021 Auto(C) 3864-2e31-3230-362d- 4745-302f-302f-31 7、配置专线,仅办公和无线可以访问办公汇聚、无线汇聚、核心、专线静态路由[wuxianhuiju] ip route-static 10.1.0.0 24 10.0.60.10 [hexin1]ip route-static 10.1.0.0 24 10.0.90.18 [zhuanxianwangguan]ip route-static 10.0.2.0 24 10.0.90.15测试办公和无线都可以访问专线IP10.1.0.28、配置办公和无线能访问外网,但外网无法直接访问内网办公汇聚、无线汇聚、核心默认路由,外网网关静态路由[bangonghuiju]ip route-static 0.0.0.0 0 10.0.30.6 [wuxianhuiju]ip route-static 0.0.0.0 0 10.0.60.10 [hexin1]ip route-static 0.0.0.0 0 10.0.10.1 [waibuwangguan]ip route-static 10.0.3.0 24 10.0.10.2 [waibuwangguan]ip route-static 10.0.2.0 24 10.0.10.2配置最简单NAT访问方式Easy IP[waibuwangguan]acl basic 200 [waibuwangguan-acl-ipv4-basic-2000]rule 0 permit source 10.0.2.0 0.0.0.255 [waibuwangguan-acl-ipv4-basic-2000]acl basic 2001 [waibuwangguan-acl-ipv4-basic-2001]rule 0 permit source 10.0.3.0 0.0.0.255 [waibuwangguan-acl-ipv4-basic-2001]quit [waibuwangguan]int g0/0 [waibuwangguan-GigabitEthernet0/0]nat outbound 2001 [waibuwangguan-GigabitEthernet0/0]nat outbound 2000办公和无线ping外网1.1.1.2通,外网ping内网不通9、POE供电受模拟器限制无法实现,实际在无线接入执行 poe enable 即可10、办公人员通过telnet远程管理车间接入交换机车间汇聚创建管理vlan2000[chejianhuiju1]vlan 2000 [chejianhuiju1-vlan2000]int vlan 2000 [chejianhuiju1-Vlan-interface2000]ip add 192.168.1.254 24车间接入创建管理vlan,开启telnet服务,设置默认路由<chejianjieru>sys System View: return to User View with Ctrl+Z. [chejianjieru]vlan 2000 [chejianjieru-vlan2000]int vlan 2000 [chejianjieru-Vlan-interface2000]ip add 192.168.1.2 24 [chejianjieru-Vlan-interface2000]quit [chejianjieru]user-interface vty 0 4 [chejianjieru-line-vty0-4]authentication-mode scheme [chejianjieru-line-vty0-4]quit [chejianjieru]local-user admin New local user added. [chejianjieru-luser-manage-admin]password simple 123456 [chejianjieru-luser-manage-admin]authorization-attribute user-role level-15 [chejianjieru-luser-manage-admin]service-type telnet [chejianjieru-luser-manage-admin]quit [chejianjieru]telnet server enable [chejianjieru]save [chejianjieru]ip route-static 0.0.0.0 0 192.168.1.254核心添加静态路由[hexin1]ip route-static 192.168.1.0 24 10.0.20.4办公人员远程telnet<bangonghuiju>telnet 192.168.1.2 Trying 192.168.1.2 ... Press CTRL+K to abort Connected to 192.168.1.2 ... ****************************************************************************** * Copyright (c) 2004-2017 New H3C Technologies Co., Ltd. All rights reserved.* * Without the owner's prior written consent, * * no decompiling or reverse-engineering shall be allowed. * ****************************************************************************** login: admin Password: <chejianjieru>11、配置snmp网络管理协议配置向10.0.0.1发送设备信息snmp-agent snmp-agent community write private snmp-agent community read public snmp-agent sys-info version all snmp-agent target-host trap address udp-domain 10.0.0.1 params securityname public v2c12、配置监控网络,办公和无线可以访问监控服务器,不可访问摄像头,摄像头仅与监控服务器互相访问核心设置静态路由,监控汇聚设置默认路由[hexin1]ip route-static 10.0.5.0 24 10.0.80.17 [jiankonghuiju]ip route-static 0.0.0.0 0 10.0.80.16在监控汇聚上联接口配置ACL规则,只允许访问10.0.5.1发出,其他禁止,从而达到只允许监控服务器被访问的目的[jiankonghuiju]acl basic 2000 [jiankonghuiju-acl-ipv4-basic-2000]rule 0 permit source 10.0.5.1 0 [jiankonghuiju-acl-ipv4-basic-2000]rule 1 deny [jiankonghuiju-acl-ipv4-basic-2000]quit [jiankonghuiju]int Ten-GigabitEthernet1/0/49 [jiankonghuiju-Ten-GigabitEthernet1/0/49]packet-filter 2000 outbound测试办公可以ping通10.0.5.1,不能ping通10.0.5.213、配置DHCP snooping,防止仿冒攻击全局开启dhcp snooping,上联端口启用dhcp信任[bangongjieru]dhcp snooping enable [bangongjieru]interface GigabitEthernet1/0/2 [bangongjieru]dhcp snooping trust14、配置端口隔离,减少接入傻瓜交换机造成的网络风暴,防御ARP攻击[H3C]port-isolate group 2 [H3C]int g1/0/1 [H3C-GigabitEthernet1/0/1]port-isolate enable group 2 [H3C-GigabitEthernet1/0/1]int g1/0/2 [H3C-GigabitEthernet1/0/2]port-isolate enable group 2 [H3C-GigabitEthernet1/0/2]quit [H3C]dis port-isolate group 2 Port isolation group information: Group ID: 2 Group members: GigabitEthernet1/0/1 GigabitEthernet1/0/2总结 爽
2024年08月16日
1,415 阅读
0 评论
7 点赞
2024-06-20
acme.sh自动解析并申请泛域名通配符证书 腾讯云 阿里云
一、部署 acme.shcurl https://get.acme.sh | sh -s email=admin@90apt.com安装后,acmesh会生成计划任务acme.sh --version https://github.com/acmesh-official/acme.sh v3.0.8 crontab -l 37 12 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null配置默认ca服务器为letsencryptacme.sh --set-default-ca --server letsencrypt二、腾讯云申请泛域名通配符证书1、获取腾讯云 SecretId 和 SecretKeyhttps://console.cloud.tencent.com/cam/capi2、导入环境变量export Tencent_SecretId="AKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" export Tencent_SecretKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"3、申请证书acme.sh --issue --dns dns_tencent -d 90apt.com -d *.90apt.com --debug申请完成-----END CERTIFICATE----- [Thu Jun 20 14:13:23 CST 2024] Your cert is in: /root/.acme.sh/90apt.com_ecc/90apt.com.cer [Thu Jun 20 14:13:23 CST 2024] Your cert key is in: /root/.acme.sh/90apt.com_ecc/90apt.com.key [Thu Jun 20 14:13:23 CST 2024] The intermediate CA cert is in: /root/.acme.sh/90apt.com_ecc/ca.cer [Thu Jun 20 14:13:23 CST 2024] And the full chain certs is there: /root/.acme.sh/90apt.com_ecc/fullchain.cer [Thu Jun 20 14:13:23 CST 2024] _on_issue_success [Thu Jun 20 14:13:23 CST 2024] '' does not contain 'dns'4、查看证书ll /root/.acme.sh/90apt.com_ecc/ total 32 -rw-r--r-- 1 root root 1452 Jun 20 14:13 90apt.com.cer -rw-r--r-- 1 root root 567 Jun 20 14:13 90apt.com.conf -rw-r--r-- 1 root root 473 Jun 20 14:12 90apt.com.csr -rw-r--r-- 1 root root 198 Jun 20 14:12 90apt.com.csr.conf -rw------- 1 root root 227 Jun 20 14:12 90apt.com.key -rw-r--r-- 1 root root 2668 Jun 20 14:13 ca.cer -rw-r--r-- 1 root root 4120 Jun 20 14:13 fullchain.cer三、腾讯云申请泛域名通配符证书1、进入RAM访问控制2、创建用户组3、给用户组增加DNS完整控制权限 AliyunDNSFullAccess4、创建用户5、给用户分配用户组,使其获得DNS完整控制权6、创建AccessKey7、导入环境变量export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"8、申请证书acme.sh --issue --dns dns_ali -d 90apt.com -d *.90apt.com --debug申请完成[Thu Jun 20 14:41:41 CST 2024] Your cert is in: /root/.acme.sh/90apt.com_ecc/90apt.com.cer [Thu Jun 20 14:41:41 CST 2024] Your cert key is in: /root/.acme.sh/90apt.com_ecc/90apt.com.key [Thu Jun 20 14:41:41 CST 2024] The intermediate CA cert is in: /root/.acme.sh/90apt.com_ecc/ca.cer [Thu Jun 20 14:41:41 CST 2024] And the full chain certs is there: /root/.acme.sh/90apt.com_ecc/fullchain.cer [Thu Jun 20 14:41:41 CST 2024] _on_issue_success [Thu Jun 20 14:41:41 CST 2024] '' does not contain 'dns'9、查看证书ll /root/.acme.sh/90apt.com_ecc/ total 32 -rw-r--r-- 1 root root 2668 Jun 20 14:41 ca.cer -rw-r--r-- 1 root root 1460 Jun 20 14:41 90apt.com.cer -rw-r--r-- 1 root root 569 Jun 20 14:41 90apt.com.conf -rw-r--r-- 1 root root 481 Jun 20 14:40 90apt.com.csr -rw-r--r-- 1 root root 204 Jun 20 14:40 90apt.com.csr.conf -rw------- 1 root root 227 Jun 20 14:40 90apt.com.key -rw-r--r-- 1 root root 4128 Jun 20 14:41 fullchain.cer四、acme.sh程序自动升级:acme.sh --upgrade --auto-upgrade关闭自动升级acme.sh --upgrade --auto-upgrade 0五、debugacme.sh --issue ..... --debug
2024年06月20日
408 阅读
0 评论
0 点赞
2024-01-11
ESP32-wifi MPython dth11 activeMQ MQTT温湿度采集 嵌入式开发 物联网 边缘计算
一、介绍 本项目采用ESP32开发板,每X秒采集一次DTH11温湿度传感器数据,通过ESP32自带WIFI,经MQTT协议传送给ActiveMQ中间件,便于后续开发和使用。二、材料介绍 ESP32 CP2102 带WIFI 22元DTH11 4元透明防水塑料壳 8元MicroUSB电源线 5元三、ActiveMQ服务器配置 我这里使用docker一键部署ActiveMQ,并将MQTT端口映射到1883端口四、硬件安装 将DTH11的正负连接ESP32的3.3V和GND针脚,数据连接至D13针脚五、代码开发 1、ESP32刷写为MPython开发环境2、新建main.py,此脚本ESP32上电即会自动运行main.py 主程序import random from machine import Pin, SPI import time,machine import dht11,network,mrequests from umqtt.simple import MQTTClient import ujson MQTT_CLIENT_ID = f'python-mqtt-{random.randint(0, 1000)}' MQTT_BROKER = "10.0.10.129" MQTT_USER = "" MQTT_PASSWORD = "" MQTT_TOPIC = "mqtt001" wlan = network.WLAN(network.STA_IF) wlan.active(True) dht = dht11.DHT11(Pin(13)) print("Connecting to MQTT server... ", end="") client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD) print("Connected!") while True: if wlan.isconnected() == False: print("connect WiFi") try: wlan.connect('WiFissid','wifipassword') except: print("wifi false") #pass else: dht.measure() try: client.connect() message = ujson.dumps({ "temp": dht.temperature(), "humidity": dht.humidity(), }) #print("Reporting to MQTT topic {}: {}".format(MQTT_TOPIC, message)) client.publish(MQTT_TOPIC, message) print("mqtt push ok") client.disconnect() except: print("mqtt push not ok") #pass time.sleep(3)dth11.py DTH11传感器支持库 # DHT11/DHT22 driver for MicroPython on ESP8266 # MIT license; Copyright (c) 2016 Damien P. George try: from esp import dht_readinto except: from pyb import dht_readinto class DHTBase: def __init__(self, pin): self.pin = pin self.buf = bytearray(5) def measure(self): buf = self.buf dht_readinto(self.pin, buf) if (buf[0] + buf[1] + buf[2] + buf[3]) & 0xff != buf[4]: raise Exception("checksum error") class DHT11(DHTBase): def humidity(self): return self.buf[0] def temperature(self): return self.buf[2] class DHT22(DHTBase): def humidity(self): return (self.buf[0] << 8 | self.buf[1]) * 0.1 def temperature(self): t = ((self.buf[2] & 0x7f) << 8 | self.buf[3]) * 0.1 if self.buf[2] & 0x80: t = -t return t mrequests.py 一个比自带的requests更好用的网络库"""A HTTP client module for MicroPython with an API similar to requests.""" import sys try: import socket except ImportError: import usocket as socket MICROPY = sys.implementation.name == "micropython" MAX_READ_SIZE = 4 * 1024 def encode_basic_auth(user, password): from ubinascii import b2a_base64 auth_encoded = b2a_base64(b"%s:%s" % (user, password)).rstrip(b"\n") return {b"Authorization": b"Basic %s" % auth_encoded} def head(url, **kw): return request("HEAD", url, **kw) def get(url, **kw): return request("GET", url, **kw) def post(url, **kw): return request("POST", url, **kw) def put(url, **kw): return request("PUT", url, **kw) def patch(url, **kw): return request("PATCH", url, **kw) def delete(url, **kw): return request("DELETE", url, **kw) def parse_url(url): port = None host = None # str.partition() would be handy here, # but it's not supported on the esp8266 port delim = url.find("//") if delim >= 0: scheme, loc = url[:delim].rstrip(':'), url[delim+2:] else: loc = url scheme = "" psep = loc.find("/") if psep == -1: if scheme: host = loc path = "/" else: path = loc elif psep == 0: path = loc else: path = loc[psep:] host = loc[:psep] if host: hsep = host.rfind(":") if hsep > 0: port = int(host[hsep + 1 :]) host = host[:hsep] return scheme or None, host, port, path class RequestContext: def __init__(self, url, method=None): self.redirect = False self.method = method or "GET" self.scheme, self.host, self._port, self.path = parse_url(url) if not self.scheme or not self.host: raise ValueError("An absolute URL is required.") @property def port(self): return self._port if self._port is not None else 443 if self.scheme == "https" else 80 @property def url(self): return "%s://%s%s" % ( self.scheme, self.host if self._port is None else ("%s:%s" % (self.host, self.port)), self.path, ) def set_location(self, status, location): if status in (301, 302, 307, 308): self.redirect = True elif status == 303 and self.method != "GET": self.redirect = True if self.redirect: scheme, host, port, path = parse_url(location) if scheme and self.scheme == "https" and scheme != "https": self.redirect = False return if status not in (307, 308) and self.method != "HEAD": self.method = "GET" if scheme: self.scheme = scheme if host: self.host = host self._port = port if path.startswith("/"): self.path = path else: self.path = self.path.rsplit("/", 1)[0] + "/" + path class Response: def __init__(self, sock, sockfile, save_headers=False): self.sock = sock self.sf = sockfile self.encoding = "utf-8" self._cached = None self._chunk_size = 0 self._content_size = 0 self.chunked = False self.status_code = None self.reason = "" self.headers = [] if save_headers else None def read(self, size=MAX_READ_SIZE): if self.chunked: if self._chunk_size == 0: l = self.sf.readline() # print("Chunk line:", l) # ignore chunk extensions l = l.split(b";", 1)[0] self._chunk_size = int(l, 16) # print("Chunk size:", self._chunk_size) if self._chunk_size == 0: # End of message sep = sf.read(2) if sep != b"\r\n": raise ValueError("Expected final chunk separator, read %r instead." % sep) return b"" data = self.sf.read(min(size, self._chunk_size)) self._chunk_size -= len(data) if self._chunk_size == 0: sep = self.sf.read(2) if sep != b"\r\n": raise ValueError("Expected chunk separator, read %r instead." % sep) return data else: if size: return self.sf.read(size) else: return self.sf.read(self._content_size) def save(self, fn, chunk_size=1024): read = 0 with open(fn, "wb") as fp: while True: remain = self._content_size - read if remain <= 0: break chunk = self.read(min(chunk_size, remain)) read += len(chunk) if not chunk: break fp.write(chunk) self.close() def _parse_header(self, data): if data[:18].lower() == b"transfer-encoding:" and b"chunked" in data[18:]: self.chunked = True # print("Chunked response detected.") elif data[:15].lower() == b"content-length:": self._content_size = int(data.split(b":", 1)[1]) # print("Content length: %i" % self._content_size) # overwrite this method, if you want to process/store headers differently def add_header(self, data): self._parse_header(data) if self.headers is not None: self.headers.append(data) def close(self): if not MICROPY: self.sf.close() self.sf = None if self.sock: self.sock.close() self.sock = None self._cached = None @property def content(self): if self._cached is None: try: self._cached = self.read(size=None) finally: self.sock.close() self.sock = None return self._cached @property def text(self): return str(self.content, self.encoding) def json(self): import ujson return ujson.loads(self.content) def request( method, url, data=None, json=None, headers={}, auth=None, encoding=None, response_class=Response, save_headers=False, max_redirects=1, timeout=None, ): if auth: headers.update(auth if callable(auth) else encode_basic_auth(auth[0], auth[1])) if json is not None: assert data is None import ujson data = ujson.dumps(json) ctx = RequestContext(url, method) while True: if ctx.scheme not in ("http", "https"): raise ValueError("Protocol scheme %s not supported." % ctx.scheme) ctx.redirect = False # print("Resolving host address...") ai = socket.getaddrinfo(ctx.host, ctx.port, 0, socket.SOCK_STREAM) ai = ai[0] # print("Creating socket...") sock = socket.socket(ai[0], ai[1], ai[2]) sock.settimeout(timeout) try: # print("Connecting to %s:%i..." % (ctx.host, ctx.port)) sock.connect(ai[-1]) if ctx.scheme == "https": try: import ssl except ImportError: import ussl as ssl # print("Wrapping socket with SSL") create_ctx = getattr(ssl, 'create_default_context', None) if create_ctx: sock = create_ctx().wrap_socket(sock, server_hostname=ctx.host) else: sock = ssl.wrap_socket(sock, server_hostname=ctx.host) sf = sock if MICROPY else sock.makefile("rwb") sf.write(b"%s %s HTTP/1.1\r\n" % (ctx.method.encode("ascii"), ctx.path.encode("ascii"))) if not b"Host" in headers: sf.write(b"Host: %s\r\n" % ctx.host.encode()) for k, val in headers.items(): sf.write(k if isinstance(k, bytes) else k.encode('ascii')) sf.write(b": ") sf.write(val if isinstance(val, bytes) else val.encode('ascii')) sf.write(b"\r\n") if data and ctx.method not in ("GET", "HEAD"): if json is not None: sf.write(b"Content-Type: application/json") if encoding: sf.write(b"; charset=%s" % encoding.encode()) sf.write(b"\r\n") sf.write(b"Content-Length: %d\r\n" % len(data)) sf.write(b"Connection: close\r\n\r\n") if data and ctx.method not in ("GET", "HEAD"): sf.write(data if isinstance(data, bytes) else data.encode(encoding or "utf-8")) if not MICROPY: sf.flush() resp = response_class(sock, sf, save_headers=save_headers) l = b"" i = 0 while True: l += sf.read(1) i += 1 if l.endswith(b"\r\n") or i > MAX_READ_SIZE: break # print("Response: %s" % l.decode("ascii")) l = l.split(None, 2) resp.status_code = int(l[1]) if len(l) > 2: resp.reason = l[2].rstrip() while True: l = sf.readline() if not l or l == b"\r\n": break if l.startswith(b"Location:"): ctx.set_location(resp.status_code, l[9:].strip().decode("ascii")) # print("Header: %r" % l) resp.add_header(l) except OSError: sock.close() raise if ctx.redirect: # print("Redirect to: %s" % ctx.url) sock.close() max_redirects -= 1 if max_redirects < 0: raise ValueError("Maximum redirection count exceeded.") else: break return resp 六、运行程序 上电直接运行,注意,代码可以去掉终端输出的print,防止ESP32内存溢出七、监测程序 登录ActiveMQ查看mqttserver.py 在任意电脑上订阅数据# python3.6 import random import time from paho.mqtt import client as mqtt_client broker = '10.0.10.129' port = 1883 topic = "mqtt001" # generate client ID with pub prefix randomly client_id = f'python-mqtt-{random.randint(0, 100)}' def connect_mqtt() -> mqtt_client: def on_connect(client, userdata, flags, rc): if rc == 0: print("Connected to MQTT Broker!") else: print("Failed to connect, return code %d\n", rc) client = mqtt_client.Client(client_id) client.on_connect = on_connect client.connect(broker, port) return client def subscribe(client: mqtt_client): def on_message(client, userdata, msg): print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic "+time.asctime()) client.subscribe(topic) client.on_message = on_message def run(): client = connect_mqtt() subscribe(client) client.loop_forever() if __name__ == '__main__': run()八、小结 ESP32 MPython太强大了!
2024年01月11日
591 阅读
0 评论
0 点赞
2023-12-05
流影 Flow Shadow 轻量级网络安全感知与网络行为可视化综合分析平台
官网https://abyssalfish-os.github.io/项目安装,我这里使用一键包,系统要求Centos7.9https://abyssalfish-os.github.io/downloads/当前版本为ly-install-package-v1.1.0解压tar xvzf ly-install-package-1.1.0.tar.gz ll -rw-r--r-- 1 root root 242239180 Dec 4 15:19 ly-install-package-1.1.0.tar.gz drwxr-xr-x 2 root root 4096 Nov 29 15:24 ly-install-package-v1.1.0 进入目录,解压依赖包到root目录cd ly-install-package-v1.1.0/ ls agent_deploy_release.sh db.server.v1.1.231123.tar.gz protobuf-3.8.0-1.el7.x86_64.tar.gz Agent.v1.1.0.231124.tar.gz INSTALL.md server_deploy_release.sh all_env.sh localyumsource.tar.gz Server.v1.1.0.231124.tar.gz cgicc-lib-3.2.16-1.el7.x86_64.tar.gz lyprobe-release-v1.0.1.tar.gz tensorflow-2.0.4-1.el7.x86_64.tar.gz cppdb-lib-0.3.1-1.el7.x86_64.tar.gz pf_ring-lib-7.4.0-957.el7.x86_64.E5v2.tar.gz webui.v1.1.0.tar.gz tar zxf localyumsource.tar.gz -C /root安装依赖./all_env.sh安装探针和分析引擎/bin/bash ./agent_deploy_release.sh安装管理和交互页面,过程中会安装mariadb数据库,并提示你配置数据库密码/bin/bash ./server_deploy_release.sh修改默认监听网卡 `安装完毕后,安装部署程序已自动将探针与接收程序的启动命令写入 /etc/rc.local 文件中。 lyprobe为探针,通过-i参数指定所监听的网卡,默认写ens224,根据网卡信息自主更改此参数。`查看当前网卡ip add 2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000修改启动脚本中的网卡 /etc/rc.local modprobe pf_ring lyprobe -T "%IPV4_SRC_ADDR %IPV4_DST_ADDR %IN_PKTS %IN_BYTES %FIRST_SWITCHED %LAST_SWITCHED %L4_SRC_PORT %L4_DST_PORT %TCP_FLAGS %PROTOCOL %SRC_TOS %DNS_REQ_DOMAIN %DNS_REQ_TYPE %HTTP_URL %HTTP_REQ_METHOD %HTTP_HOST %HTTP_MIME %HTTP_RET_CODE %SRV_TYPE %SRV_NAME %SRV_VERS %DEV_TYPE %DEV_NAME %DEV_VEND %DEV_VERS %OS_TYPE %OS_NAME %OS_VERS %MID_TYPE %MID_NAME %MID_VERS %THREAT_TYPE %THREAT_NAME %THREAT_VERS %ICMP_DATA %ICMP_SEQ_NUM %ICMP_PAYLOAD_LEN %SRV_TIME %DEV_TIME %OS_TIME %MID_TIME %THREAT_TIME" -i ens192 -n 127.0.0.1:9995 -G -e 0 -w 32768 -k 1 -K /data/cap/3 /Agent/bin/nfcapd -w -D -l /data/flow/3 -p 9995 如果使用vSphere平台,虚拟交换机和虚拟机网卡开启混杂模式空间清理/Agent/bin/cleanup.sh清理异常可将脚本中str_home目录改为/运行/bin/bash /etc/rc.local登录控制台访问地址:http://ip:18080/ui管理员账号:admin,密码LoginLY@2016安装完成,具体使用参考官网文档
2023年12月05日
1,720 阅读
0 评论
3 点赞
2023-11-22
华为FusionCube超融合一体机改造VMware vSphere vSAN超融合虚拟化集群
前言 FusionCube是华为出品的,一套使用华为FusionSphere虚拟化技术打包出售的超融合一体机,我这里使用的三台超融合,包含华为 2288H V5服务器、FusionSphere虚拟化授权、软件服务支持和硬件维保。随着时间推进,华为超融合的软件服务支持已经过期,并且出现了无法关机的情况,由于华为超融合生态与现有的虚拟化生态不兼容,随即决定将华为超融合改造为VMware vSphere vSAN超融合集群。原华为数据会全部丢失。整体思路 为服务器安装ESXi系统,服务器两个网络接口为一组,ESXi控制网络采用千兆网口,vSAN和业务网络采用trunk网络,配置独立VLAN隔离。注意:本次改造为全过程记录,请全部看完后再进行操作;运维最重要的是思路和耐心! {lamp/}外观正面照 背面照由于原标签已经老旧脱落,因此进行标签的重新标记2块NVME 800G 固态2块SAS 600G 机械 RAID1 做系统盘14块SAS 2.4T 机械 进入BIOS/UEFI 重启F11进入 启动管理器进入启动管理器时,会提示输入BIOS密码,默认为Admin@9000安装ESXi7 进入启动盘,我使用的是Ventoy进入ESXi7踩坑1 进入后发现看不到NVME固态硬盘我的想法是,安装完ESXi7后再安装驱动系统安装完成查看网卡对应关系从左往后,2光口2网口2光口,对应ESXi系统中网卡从上到下顺序LOM1-4 SLOT4配置IP地址配置DNS和主机名登录ESXi开启SSH服务使用SSH登录,上传从官网下载的ESXi6.7.ZIP中抽取的NVME VIB驱动使ESXi进入CommunitySupported等级esxcli software acceptance set --level=CommunitySupported安装驱动esxcli software vib install -v 完整路径.vib此时出现了大坑,安装nvme驱动会替换掉网卡驱动,导致开机无法联网。踩坑2 莫慌,重来!第二次安装测试,使用ESXi6.7启动,发现可以看到NVMe固态硬盘这是因为ESXi7为了缩小体积,精简了大量的老旧设备驱动,我们可以通过修改镜像文件,将老的驱动放置在ESXi7中使用。因此,第二次安装测试,我们采用封装ISO的方式进行,从6.7的ISO中解压出NVME.V00文件,替换到ESXi7的NVME_PCI.V00文件,保持名字一致替换镜像另存为导出也不再前往现场,而是采用BMC远程挂载ISO文件的方式安装还是正常安装,测试可以看到NVME固态了安装完成后,再次进入ESXi,也可以看到硬盘这里我不在超融合中安装vCenter了,直接使用其他VC新建集群出于习惯,进行补丁更新此时出现了第二个大坑,更新补丁后,驱动覆盖了,NVME硬盘看不到了。啊?!!!踩坑3 再次重装,本次安装后进行备注,不再进行系统补丁更新按集群向导配置集群,配置分布式交换机下一步时出现黑块遮挡,啊?更换firefox浏览器后可以正常操作,分布式交换机配置完成配置完集群后发现 "缺少功能MWAIT",重启进入BIOS进行开启进入BIOS位于 BIOS - Advanced - Socket Configuration - Processor Configuration - MONITOR/MWAIT然后发现集群没启用VSAN功能,需要新建一个集群,啊?配置vSAN 新建一个vSAN集群,将主机拖入vSAN集群,按向导配置集群声明缓存层和容量层注意,集群的告警一个是我关闭了数据上传,另一个是替换了NVME驱动,所以告警了使用默认vSAN策略默认为RAID1镜像模式,即一个虚拟机存储两份分布在整个集群中,三台物理主机允许一台宕机分布式交换机 工作正常验证 部署1台服务器,容量占用为两倍在线迁移测试正常BUG处理 由于非原生支持vSphere,所以有些主板硬件告警会误报,需要屏蔽掉;同时对于服务器硬件的监控,需要自行配置SNMP或邮箱进行告警通知。总结 历时2天,克服困难,遥遥领先!遥遥领先!遥遥领先!
2023年11月22日
884 阅读
0 评论
10 点赞
2023-11-08
Alma Linux 8安装mysql8
安装软件 配置软件源:/etc/yum.repos.d/mysql-community.repo[mysql-connectors-community] name=MySQL Connectors Community baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-connectors-community-el7-$basearch/ enabled=1 gpgcheck=0 gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql [mysql-tools-community] name=MySQL Tools Community baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-tools-community-el7-$basearch/ enabled=1 gpgcheck=0 gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql [mysql-8.0-community] name=MySQL 8.0 Community Server baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-8.0-community-el7-$basearch/ enabled=1 gpgcheck=0 gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql禁用系统自带mysql模块yum module disable mysql安装mysql服务端yum install mysql-community-server配置 mysql8不区分大小写 必须在数据库启动前配置lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的 lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写 lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的 unix,linux下lower_case_table_names默认值为 0 .Windows下默认值是 1 .Mac OS X下默认值是 2修改/etc/my.cnf,在最后一行添加lower_case_table_names=1启动mysqlsystemctl enable --now mysqld查看默认root密码 cat /var/log/mysqld.log[root@hr-test ~]# cat /var/log/mysqld.log 2023-08-03T05:19:39.377361Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.34) initializing of server in progress as process 2066 2023-08-03T05:19:39.383196Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2023-08-03T05:19:39.615099Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. 2023-08-03T05:19:40.221227Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: i8ybtu&k&GoK 使用默认密码初始化mysqlmysql_secure_installation修改默认root密码、删除匿名用户、禁止root远程登陆、删除test数据库查看lower_case_table_namesmysql -uroot -p mysql> show variables like 'lower_case_table_names'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_table_names | 1 | +------------------------+-------+ 1 row in set (0.00 sec) mysql> quit 允许创建函数 解决Mysql报错:This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its delog_bin_trust_function_creators=1关闭严格模式 STRICT_TRANS_TABLES : 严格模式NO_ENGINE_SUBSTITUTION : 无引擎提交PAD_CHAR_TO_FULL_LENGTH : 填补字符到全长度编辑MySQL配置文件/etc/my.cnf[mysqld] sql_mode=NO_ENGINE_SUBSTITUTION保存、重启mysql事务隔离级别 read uncommitted(读未提交)read committed(读提交)repeatable read(重复读)Serializable(序列化) 编辑MySQL配置文件/etc/my.cnf[mysqld] transaction_isolation = READ-COMMITTED保存、重启mysql日志时区不对 编辑MySQL配置文件/etc/my.cnflog_timestamps=system日志存在大量反查信息和错误信息 编辑MySQL配置文件/etc/my.cnfskip-name-resolve完成
2023年11月08日
707 阅读
0 评论
0 点赞
2023-09-05
python3 multiprocessing windows环境下 pyinstaller打包exe运行无限创建进程问题
https://blog.csdn.net/fly_leopard/article/details/121610641multiprocessing提供了freeze_support来实现main module的安全导入,在运行multiprocessing创建进程前调用该方法:.... if __name__ == '__main__': import multiprocessing # 该方法作用是阻止子进程运行其后面的代码 multiprocessing.freeze_support() pool = Pool(3) try: log.info("Start Program.") pool.apply_async(start_queue_manager, error_callback=error_callback) pool.apply_async(start_server, error_callback=error_callback).ready() pool.apply_async(start_browser, error_callback=error_callback) except: log.error(traceback.format_exc()) finally: pool.close() pool.join()
2023年09月05日
411 阅读
0 评论
0 点赞
1
2
3
...
5