绘声绘彩的生活志

彩动力、彩信之星的诞生地

公告

感谢您使用我写的软件!

彩动力 – 免费发彩信软件(彩信之星、彩信猫王、MMSMK)

彩动力

提供多种短信/彩信类型的发送

一、彩信

  1. 支持制作并发送容量为100K以下的普通(mixed)彩信和增强(related)彩信。
  2. 支持下列附件类型
    • 文字:中/英文
    • 图像:JPG/GIF/BMP/PNG
    • 音乐:MID/WAV/AMR/WMA/MMF
    • 其它:JAR/SIS/UMD
  3. 最大支持20个多媒体附件的同时添加

兼容性:软件可以提供制作100K以上大小彩信,但是由于手机终端对于彩信的支持不一,3个多媒体附件以内、容量30K以下的彩信才会被目前绝大多数彩信手机所支持。

推荐彩信制作格式:

  1. 小于等于3个多媒体附件
  2. 彩信大小不大于30K字节
  3. 尽量不采用中英文文字、JPG、GIF、BMP、MID之外的媒体类型

二、普通文字短信

支持单条中英文短信的发送和长文字短信的自动多条分拆发送

兼容性:普通单条短信被所有手机品牌支持

长文字短信的支持较为复杂,长度少于67*3汉字的长汉字短信(少于154*3字母长英文短信)可以被大多数国际品牌手机支持,但部分国内品牌手机出现短信首字乱码现象。

[Read the rest of this entry…]

k8s 中节点连通测试方法

我们自己制作的 docker 镜像中,一般不包含常用的 ping、telnet、nslookup 等指令,测试 node 中容器的网络连通性,可以采用以下的方法

方法一:集群中不特定 node 上创建临时 pod

# 创建一个临时 pod 用于测试
kubectl run dns-test –image=busybox:1.35 –restart=Never –command — sleep 3600

# 进入 pod 执行测试
kubectl exec -it dns-test — ping -c 3 192.168.0.105

# 测试 DNS 解析
kubectl exec -it dns-test — nslookup kubernetes.default

# 测试完成后删除
kubectl delete pod dns-test

方法二:k8s 集群中指定节点测试
kubectl debug node/k8s-node2 -it –image=busybox:1.35 –target=test-network

 

如果在非主节点上执行 kubctl 遇到无法连接本机 8080 端口,或者其它集群权限问题,可以将主节点kublet 配置文件复制到当前用的.kube 目录中

首先:

mkdir ~/.kube/

(1)复制k8s 的集群管理权限
scp root@k8s-master:/etc/kubernetes/admin.conf ~/.kube/config
(2)或者仅仅复制节点的普通权限
cp /etc/kubernetes/kubelet.conf ~/.kube/config

最后:
chown $(id -u):$(id -g) ~/.kube/config

k8s集群旧节点升级重新加入到集群

一、在数据节点运行如下脚本

#0、停止kubelet服务
systemctl stop kubelet
#1、在用户目录生成k8s客户段配置保存目录,非必要
mkdir ~/.kube/
#2、将主节点的集群配置复制到该目录,非必要
scp root@192.168.80.200:/etc/kubernetes/admin.conf ~/.kube/config
#3、将集群配置复制到默认的k8s的kubelet配置目录,可以省略1,直接使用2的scp替代cp
cp ~/.kube/config  /etc/kubernetes/kubelet.conf
chown $(id -u):$(id -g) $HOME/.kube/config
二、在主节点运行如下脚本

#从客户端同步key相关内容
scp 192.168.80.xxx:/var/lib/kubelet/pki/* ./
#删除多余的文件
rm -rf kubelet-client-2024*
#重新生成客户端key
openssl req -new -key kubelet.key -out kubelet.csr -subj "/CN=kubelet"
#使用主节点证书生成客户端请求证书
openssl x509 -req -in kubelet.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out kubelet.crt -days 3650
#将客户端证书和key生成一个pem文件
cat kubelet.crt kubelet.key > kubelet-client-current.pem
#将生成的pem下发到客户段节点
scp ./* 192.168.80.xxx:/var/lib/kubelet/pki/
#将依据ca下发到客户端节点
scp /etc/kubernetes/pki/ca.crt 192.168.80.xxx:/etc/kubernetes/pki/ca.crt
三、在数据节点执行如下脚本

#4、重启kubelet
systemctl restart kubelet
四、恢复etcd和集群时候的语句

ETCDCTL_API=3 etcdctl snapshot restore /var/backups/kube_etcd/etcd-2023-05-16-09-30-01/snapshot.db --data-dir=/var/lib/etcd --initial-cluster-token k8s_etcd --initial-cluster default=http://192.168.80.200:2380 --initial-advertise-peer-urls=http://192.168.80.200:2380

./kk create cluster -f ./dev.yaml --with-kubernetes v1.21.5 --with-kubesphere v3.2.1
五、零散节点可看不可用修复

scp 192.168.80.205:/etc/kubernetes/manifests/haproxy.yaml  /etc/kubernetes/manifests/haproxy.yaml
mkdir /etc/kubekey/
scp -r 192.168.80.205:/etc/kubekey/haproxy /etc/kubekey/
kubectl apply -f  /etc/kubernetes/manifests/haproxy.yaml
六、节点提示 forbidden sysctl: “net.core.somaxconn” not whitelisted

$ vim /var/lib/kubelet/config.yaml
allowedUnsafeSysctls:
- kernel.shm*
- kernel.msg*
- kernel.sem
- fs.mqueue.*
- net.*
七、手工清除节点地址变化带来的无法连接

conntrack -D
八、pod显示forbidden sysctl: “net.core.somaxconn” not whitelisted

#1、在问题node上,修改kubelet服务启动参数
vim /etc/systemd/system/kubelet.service
#2、允许运行不安全的sysctls
ExecStart=/usr/local/bin/kubelet --allowed-unsafe-sysctls=net.*
#3、修改kubelet配置参数
vim /var/lib/kubelet/config.yaml
#4、允许不安全的参数,添加到文件末尾即可
allowedUnsafeSysctls:
- kernel.shm*
- kernel.msg*
- kernel.sem
- fs.mqueue.*
- net.*
#5、重启kubelet服务
systemctl daemon-reload && systemctl restart kubelet
#6、可能需要驱逐node上现有的无效pod,在主节点上运行,注意所属namespace(项目)
kubectl get pods -n project -o wide | grep SysctlForbidden | awk 'NR>1{print "kubectl delete pod -n project  " $1}' | bash

 

虚函数和虚析构函数在调用处理上的不同

虚函数和虚析构函数在调用的处理上是不同的,虚析构函数是子调用父,层层调用,对于普通的虚函数,则是重载的方式,需要注意。下面的代码执行结果是:

derivedA say: hello virtual function!.
~finalA
~derivedA
~baseA

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
 
class baseA{
public:
	virtual ~baseA()
		{
			printf("~baseA\r\n");
		};
	virtual void sayHello(const char *str){
		printf("baseA say: %s.\r\n", str);
	};
};
 
class derivedA : public baseA {
public:
	virtual ~derivedA()
		{
			printf("~derivedA\r\n");
		};
	virtual void sayHello(const char *str){
		printf("derivedA say: %s.\r\n", str);
	};
};
 
class finalA : public derivedA {
public:
	~finalA()
		{
			printf("~finalA\r\n");
		};
	void sayHello(const char *str){
		printf("derivedA say: %s.\r\n", str);
	};
};
 
int main()
{
	finalA *a = new finalA();
	a->sayHello("hello virtual function!");
	delete a;
    return 0;
}

为什么Win7下本地访问SQL Server2005这么慢

在Win7和Winxp这样的非windows server系统上安装SQL Server 2005以后的开发版本,已经变得越来越不容易,但是好在有很多的热心大牛做了各样的安装盘。但是在实际使用中,我就遇到了一个奇怪的问题:在Win7系统上安装SQL Server2005的开发版本,实际测试时,本机程序直接使用ADO连接该数据库,第一次的语句反馈时间超过了2秒,造成业务逻辑判断失败。经过若干次失败的尝试,发现只需要一个简单的SQL Server2005配置改动,就可以解决这个问题。
1)SQL安装好之后有个配置工具菜单组,其中有个工具叫做SQL server配置管理
2)SQL Server 2005网络配置中的MSSSQLSERVER的协议,默认是 Shared Memory 已启用;TCP/IP 已禁用。修改成把Shared Memory 禁用掉,把TCP/IP启用。
3)然后重启SQL Server服务
关于Shared Memory和TCP/IP以及VIA的区别,网上可以搜到,我就不多说了。

This website stores cookies on your computer. These cookies are used to provide a more personalized experience and to track your whereabouts around our website in compliance with the European General Data Protection Regulation. If you decide to to opt-out of any future tracking, a cookie will be setup in your browser to remember this choice for one year.

Accept or Deny