emqx初始化认证本地数据库篇
背景上次emqx使用mysql认证后(参见这个文章),结果发现在部分情况下会导致emqx无法连接到mysql认证,需要开关一下认证才恢复,怀疑和emqx mysql的启动顺序有关,为了稳妥起见,决定切换到使用emqx内置的数据库进行认证,原先使用的5.7.1版本做这个事情很麻烦,只能通过emqx的api接口进行,而且放在k8s中的话,也无法通过init容器进行,因为这会emqx没起来。。。
一通搜索之后发现,5.7.2版本中引入了一个新功能,通过bootstrap file可以进行用户初始化,这就很完美了,只需要挂载配置进去,emqx重启就会自动初始化用户进去,实现还是之前的套路,改造一下helm包。
获取helm文件12helm repo add emqx-operator https://repos.emqx.io/chartshelm pull emqx-operator/emqx --version 5.7.2
修改文件增加配置文件模板template目录中新增emqx_config.yaml,相比原生配置增加了authentication这一段内容,重点在于增加boots ...
k8s无指标排查
kubectl top pod发现,同一个命名空间中,部分pod能查出来资源使用情况而部分没有,更仔细观察会发现没有资源的pod都是在同一个节点上,之前经常通过重启kubelet来解决,终于决定仔细检查下原因。
由于kubelet的日志挺多,一下子没找到具体报错的日志,想到kubelet获取监控指标是通过cadvisor来获取的,因此在k8s中单独部署了一套cadvisor,一下子就找到了关键的报错日志如下。
1234E1209 02:38:37.265120 1 watcher.go:152] Failed to watch directory "/sys/fs/cgroup/cpu,cpuacct/kubepods/burstable/pod4e1cd4a0-4af9-4e7c-afe5-c0ab3fc3764a": inotify_add_watch /sys/fs/cgroup/cpu,cpuacct/kubepods/burstable/pod4e1cd4a0-4af9-4e7c-afe5-c0ab3fc3764a/0795e696035df9 ...
MegaCli添加硬盘
服务器在线运行过程中,增加硬盘并组建raid,DELL服务器可以通过idrac,其他服务器往往也有类似的图形界面可以操作raid卡,然而往往很多服务器没有正确配置idrac或者连接网线导致无法连接,那么也可以通过MegaCli来直接操作raid卡。
安装rpm -qa | egrep ‘Lib_Utils|MegaCli’ //检查是否安装下载链接:https://raw.githubusercontent.com/crazy-zhangcong/tools/master/MegaCli8.07.10.tar.gzftp://download2.boulder.ibm.com/ecc/sar/CMA/XSA/ibm_utl_sraidmr_megacli-8.00.48_linux_32-64.ziphttps://hy-ob-image.oss-cn-hangzhou.aliyuncs.com/file/MegaCli8.07.10.tar.gz
123456789101112131415[root@localhost MegaCli8.07.10]# tree├ ...
k8s临时手动设置pod的limits
一、背景当生产环境中因为内存分配不合理、或者使用不合理,导致容器OOM后需要提升内存限制
但是提升内存限制需要重启pod才能生效,对于多数生产环境中是不可接受的,需要考虑运行中动态修改的方案。
二、思路k8s是通过cgroup设置pod资源限制的,cgroup是linux中一个独立组件,早于k8s就已经存在。
也就是说k8s和cgroup之间只是调用的关系,观察发现k8s只有在pod创建时才会设置cgroup,之后就不管了,所以可以通过后期手动设置cgroup来达到目的。
cgroup有v1和v2两个版本,我们目前用的是v1,接下来会基于v1版本展开。
cgroup比较友好的接口就是procfs,通过cat读取配置,通过io重定向写入配置,所以完全可以通过命令行来解决。
三、实现1、在docker中找到容器的id:
123[root@master10 ~]# docker ps|grep redis99bf05e5697d 53aa81e8adfa "redis-server --maxm…" ...
k8s oom时查找哪个pod
dmesg -T中可以看到oom日志,这里会打印进程名,但是往往无法通过名称马上判断是哪个pod或者docker,比较精确的信息是pod45f5facf-212a-42be-9ed1-2c3b4f4f0f94,这是pod的cgroup名称。
12[二 7月 1 23:14:57 2025] oom-kill:constraint=CONSTRAINT_MEMCG,nodemask=(null),cpuset=be6bd05b65e1cc5ceddfddbe2e28f64f815c9ac3c2322258f8cbe7f8cb1e031b,mems_allowed=0-1,oom_memcg=/kubepods/burstable/pod45f5facf-212a-42be-9ed1-2c3b4f4f0f94,task_memcg=/kubepods/burstable/pod45f5facf-212a-42be-9ed1-2c3b4f4f0f94/be6bd05b65e1cc5ceddfddbe2e28f64f815c9ac3c2322258f8cbe7f8cb1e031b,task= ...
cilium切换到flannel
背景由于cilium的兼容性不足、内核要求版本过高等问题,有些环境变更后条件受限,需要切换到flannel
在老环境中因为涉及pod过多,比新环境情况复杂很多
步骤1、系统停机停止业务
2、获取当前cluster CIDR123kubectl -n kube-system get cm/cilium-config -o yaml cluster-pool-ipv4-cidr: 10.0.0.0/8 cluster-pool-ipv4-mask-size: "24"
3、卸载cilium1helm -n kube-system uninstall cilium
4、清理残留一般在cilium-agent退出时会自动清理,如不存在则忽略
123rm -f /etc/cni/net.d/05-cilium.confip link delete cilium_netip link delete cilium_host
5、设置flannel CIDRvalues.yaml
1podCidr: "10.0.0.0/8"
6、安装flannel通 ...
虚拟机磁盘扩容fdisk方式
虚拟机直接增加磁盘容量后,服务器内并不能直接使用增加的空间,这个方案是通过修改分区表的方式实现扩容,更安全的方式建议参考这篇文章
查看磁盘情况检查分区重要!建议将查询结果保存到其他地方,万一连接异常中断或者别的什么情况,至少有记录分区起始点,后面可以手动重建分区进行恢复。
12345678910111213141516171819202122232425[root@node192 ~]# fdisk -l磁盘 /dev/vda:1979.1 GB, 1979120091136 字节,3865468928 个扇区Units = 扇区 of 1 * 512 = 512 bytes扇区大小(逻辑/物理):512 字节 / 512 字节I/O 大小(最小/最佳):512 字节 / 512 字节磁盘标签类型:dos磁盘标识符:0x000b0f21 设备 Boot Start End Blocks Id System/dev/vda1 2048 6143 2048 83 Linux/dev/vda ...
emqx初始化认证
我想要通过helm安装一个不落盘的emqx,但是又有需求进行客户端认证配置,通过测试发现,通过环境变量注入例如EMQX_AUTHENTICATION__BACKEND等,容器内会提示无法识别该变量,也许是社区版不支持,但是修改emqx.conf是可以完成初始化配置的。我的最终解决方案是通过修改helm文件,新增一个configmap,用来替换容器内默认的emqx.conf文件。
获取helm文件12helm repo add emqx-operator https://repos.emqx.io/chartshelm pull emqx-operator/emqx --version 5.7.1
修改文件增加配置文件模板template目录中新增emqx_config.yaml,相比原生配置增加了authentication这一段内容,如果需要进行修改可参考官方文档
12345678910111213141516171819202122232425262728293031323334353637383940414243{{- if .Values.authen ...
emqx生成ssl证书
emqx开启ssl前需要一些准给工作,其他需要自签名证书也可参考。
生成ca证书123456789openssl req \ -new \ -newkey rsa:2048 \ -days 36500 \ -nodes \ -x509 \ -subj "/C=CN/O=EMQ Technologies Co., Ltd/CN=EMQ CA" \ -keyout ca.key \ -out ca.pem
生成服务端证书12# 生成server.keyopenssl genrsa -out emqx.key 2048
123456789101112131415161718192021222324# 手动创建openssl.cnf配置文件,目的是设置ip和域名# 参考默认路径/etc/pki/tls/openssl.cnf[req]default_bits = 2048distinguished_name = req_distinguished_namereq_extensions = req_extx509_exte ...
mysql clone plugin修复从库
mysql 8.0.17引入clone plugin,允许从本地或者远程的MySQL中克隆数据克隆的数据包括schema、表、表空间、元数据等等,克隆的数据是一个完整的数据目录,插件可以使用克隆的目录配置和恢复一个MySQL Server,克隆分为本地克隆和远程克隆。
远程克隆:涉及到启动克隆操作的本地MySQL称为recipient(数据接收方),远端的源数据MySQL称为donor(捐赠者)。通过网络传输的方式将donor数据克隆到recipient的指定目录。如果不指定则会将接收方数据目录中的所有数据替换为克隆的数据。
1 主库需要开启GTID2 安装clone plugin插件
Master、Slave动态插件安装(重启后丢失)
1mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';
Master、Slave 静态配置
12345[mysqld]plugin-load-add=mysql_clone.soclone=FORCE_PLUS_PERMANENT
检查插件是否加载成功
123 ...
