vm.sh创建虚机失败

在172.18.30.1和172.16.60.10上 使用vm.sh创建虚机时,会报错 - Resizing the disk to 80G ... ERR: Could not resize disk. 去 /export/kvm/虚机目录下查看log Could not open '/var/tmp/.guestfs-101448/appliance.d/root': No such file or directory 解决方法很简单,清除掉Cache即可: rm -rf /var/tmp/.guestfs-0/ 附上CentOS7安装 kvm 的命令: yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install

2023年12月21日

Xfs文件系统下增加inode

终于遇到了inode不够了,细碎文件爆棚了,导致inode不够了。 XFS 文件系统本质上是没有 inode 的限制的 只有一个缺省的限制,使用现有文件系统的 25% 来存储 inode 信息。 这个缺省的配置在大多数情况下都是够用的。 某些情况下不够用,可以删除一些文件来缓解。 终极办法是增大这个 25% 的阈值来解决: root@zombie:~# xfs_info /srv/backup/ metadane=/dev/mapper/slow-backup isize=256 agcount=17, agsize=2621440 blks = sectsz=512 attr=2 data = bsize=4096 blocks=44564480, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 log =internal bsize=4096 blocks=20480, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime=brak extsz=4096 blocks=0, rtextents=0 上面,我们看到 imaxpct=25 ,就是这个配置了。 增大的方法: xfs_growfs -m 30 这样就增大到 30% 了

2023年12月21日

查看SWAP交换空间被哪个进程给用掉了

在机器上执行命令free -g 和 free -k 看看有多少空闲 8G的Swap交换空间都被用光了!!! 再用kb的单位看看,一共8388604,基本用光掉了 查看是哪些进程使用了交换空间: find /proc -maxdepth 2 -path "/proc/[0-9]*/status" -readable -exec awk -v FS=":" '{process[$1]=$2;sub(/^[ \t]+/,"",process[$1]);} END {if(process["VmSwap"] && process["VmSwap"] != "0 kB") printf "%10s %-30s %20s\n",process["Pid"],process["Name"],process["VmSwap"]}' '{}' \; | awk '{print $(NF-1),$0}' | sort -h | cut -d " " -f2- 6504的qemu-kvm用掉了4.8G,看起来不太直观。 find /proc -maxdepth 2 -path "/proc/[0-9]*/status" -readable -exec awk -v FS=":" -v TOTSWP="$(cat /proc/swaps | sed 1d | awk 'BEGIN{sum=0} {sum=sum+$(NF-2)} END{print sum}')" '{process[$1]=$2;sub(/^[ \t]+/,"",process[$1]);} END {if(process["VmSwap"] && process["VmSwap"] != "0 kB") {used_swap=process["VmSwap"];sub(/[ a-zA-Z]+/,"",used_swap);percent=(used_swap/TOTSWP*100); printf "%10s %-30s %20s %6.2f%\n",process["Pid"],process["Name"],process["VmSwap"],percent} }' '{}' \; | awk '{print $(NF-2),$0}' | sort -hr | head | cut -d " " -f2- ...

2023年12月15日

Linux支持断点续传、多线程下载的软件

Linux下多线程下载工具,且支持断点续传,机房传文件必备: axel -s 9000000 -a -n 5 -o ord_his.dmp http://172.16.24.2:8080/ord_his.dmp -s 限速,9000000是70M带宽,不加s就是100M榨干 -n 线程,缺省是4 -o 目的文件 -a 进度条压缩展示,必须加,否则会进度满天飞 注意:axel 是可以自动断点续传的

2023年12月15日

suricata加上elk分析机房入口全流量

suricata 是跟snort差不多的一个入侵检测工具,加上elk的图形界面,非常的好看。 原理是suricata的log发到elk里,这样就能通过kibana进行分析了 环境: 1、物理机需要开16G内存,16CPU,都不太够 2、物理机172.18.30.2的br3是交换机的Mirror口,进入的全部流量都被镜像了一份 3、suricata-18-31-31是虚机,需要将30.2的br3挂进来 virsh attach-interface --domain suricata-18-31-31 --type bridge --source br3 --model e1000 --config --live 同时在31.31里,ifconfig up eth1把网卡起起来 tcpdump -i eth1有数据即可 4、首先安装java rpm -ivh jdk-8u201-linux-x64.rpm 安装: 一、编译安装suricata yum -y install epel-release yum -y install jq cargo openssl-devel PyYAML lz4-devel gcc libpcap-devel pcre-devel libyaml-devel file-devel zlib-devel jansson-devel nss-devel libcap-ng-devel libnet-devel tar make libnetfilter_queue-devel lua-devel GeoIP-devel wget https://www.openinfosecfoundation.org/download/suricata-4.1.8.tar.gz tar zxvf suricata-4.1.8.tar.gz cd suricata ./configure --libdir=/usr/lib64 --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-nfqueue --enable-lua --enable-geoip --enable-profiling make make install-full 验证一下 suricata -V This is Suricata version 4.1.8 RELEASE 查看build参数 suricata --build-info suricata就装好了,还需要配一下suricata-update,规则才是最主要的,装好后最好每天更新一下规则 ...

2023年12月15日

ipxe使用sanboot远程启动iscsi硬盘

如果一台宿主机上面cpu和memory都有富裕,但是磁盘不富裕,那就会面临资源浪费 所以干脆用ipxe的sanboot来启动远程的iscsi磁盘来启动虚机好了 首先用《iscsi卷的远程挂载》这篇文章中所说的方法,在172.18.30.18的20T的loopback vg group上,划出一块80G的硬盘 #划个lvc,用的是vg-targetd的20T中的80G lvcreate -L 80G -n pvc-vis-18-31-48 vg-targetd #建立block块设备 targetcli /backstores/block create vg-targetd:pvc-vis-18-31-48 /dev/vg-targetd/pvc-vis-18-31-48 #建立30.18上的iscsi服务端,似乎用renhe-18-30-18比较好,但是不好区分多个卷,还是用下面的精准 targetcli /iscsi create iqn.2020-10.com.ddky:vis-18-31-48 #建立luns,会自动建立portal targetcli /iscsi/iqn.2020-10.com.ddky:vis-18-31-48/tpg1/luns create /backstores/block/vg-targetd:pvc-vis-18-31-48 #建立客户端的iscsi,不加任何认证 targetcli /iscsi/iqn.2020-10.com.ddky:vis-18-31-48/tpg1/acls create iqn.2020-10.com.ddky:vis-18-31-48 记下来这个: iqn.2020-10.com.ddky:vis-18-31-48 然后修改pxe,位于172.18.31.2 /export/html/pxeboot/boot2.php,本质是发送ipxe的命令 sanhook是加载远程硬盘,并设置为/dev/sda function sansetup() { global $hostname; echo ":sansetup\n"; echo "set initiator-iqn iqn.2020-10.com.ddky:vis-18-31-48\n"; echo "set keep-san 1\n"; echo "sanhook iscsi:172.18.30.18::::iqn.2020-10.com.ddky:vis-18-31-48\n"; echo "kernel $hostname/repos/centos/7/os/x86_64/images/pxeboot/vmlinuz\n"; echo "initrd $hostname/repos/centos/7/os/x86_64/images/pxeboot/initrd.img\n"; echo "imgargs vmlinuz load_ramdisk=1 ks=$hostname/pxeboot/install/centos/centos7_last.php ksdevice=eth0 net.ifnames=0 biosdevname=0\n"; echo "boot\n"; } 发动一个无盘的虚机从pxe启动(172.18.30.3 /export/kvm/48.sh): ...

2023年12月15日

Prometheus集成进mysql_exporter

mysql_exporter 其实是一个mysql客户端,定时收集本机mysql的数据,并暴露出一个web端口展现数据。 例如:http://172.18.20.9:50001/metrics ,这里我们暴露的端口是50001。 prometheus 每隔5分钟会访问这个web页面,把上面的数据抓下来入库。(时间间隔可以调整) 我们点进Prometheus的页面: 注意右下角的时间戳是不对的,差8小时,我们点右上角的React UI 这个UI时间是对的,跟当地时间一致: 想看 mysql 的指标,就需要编辑公式,输入mysql会显示所有mysql的公式: 注意:我们 mysql_exporter 的端口是50001 , 写 promsql 选择instance的时候是这样的instance=“172.18.20.9:50001” 给一些报警例子: rate(mysql_global_status_threads_connected[5m]) > 200 mysql_global_variables_max_connections - mysql_global_status_threads_connected < 500 mysql_global_status_innodb_num_open_files > (mysql_global_variables_open_files_limit) * 0.75

2023年12月15日

CentOS7安装ZFS

zfs用来顶替Raid控制卡,有相当强悍的性能,TrueNAS用的就是这玩意。 官方安装文档: https://openzfs.github.io/openzfs-docs/Getting%20Started/RHEL%20and%20CentOS.html CentOS7安装 yum install -y epel-release yum install -y https://zfsonlinux.org/epel/zfs-release.el7_9.noarch.rpm yum install -y kernel-devel zfs 加载模块 [root@localhost ~]# lsmod|grep zfs [root@localhost ~]# modprobe zfs [root@localhost ~]# lsmod|grep zfs zfs 3986850 0 zunicode 331170 1 zfs zlua 151525 1 zfs zcommon 89551 1 zfs znvpair 94388 2 zfs,zcommon zavl 15167 1 zfs icp 301854 1 zfs spl 104299 5 icp,zfs,zavl,zcommon,znvpair 看看文件系统 [root@localhost ~]# zfs list no datasets available 192.168.85.100的本地磁盘从sdb 一直到 sdg,首先zpool建立池子,类似raid卡的功能 然后再zfs建立文件系统 [root@localhost ~]# zpool create -f zfspool sdb sdc sdd sde sdf sdg [root@localhost ~]# zpool status pool: zfspool state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM zfspool ONLINE 0 0 0 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 sdd ONLINE 0 0 0 sde ONLINE 0 0 0 sdf ONLINE 0 0 0 sdg ONLINE 0 0 0 errors: No known data errors [root@localhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 63G 0 63G 0% /dev tmpfs 63G 0 63G 0% /dev/shm tmpfs 63G 9.9M 63G 1% /run tmpfs 63G 0 63G 0% /sys/fs/cgroup /dev/mapper/centos-root 50G 1.7G 49G 4% / /dev/sda1 1014M 189M 826M 19% /boot /dev/mapper/centos-home 392G 33M 392G 1% /home tmpfs 13G 0 13G 0% /run/user/0 zfspool 53T 128K 53T 1% /zfspool 上面对生产无意义,没有任何冗余的配置在生产是行不通的 ...

2023年12月15日

Ucarp和nginx提供内网vip

ucarp我们来实战一下完成ucarp+nginx做内网vip,模拟F5的vip的方法 ucarp的安装参考之前的文章,环境如下: ucarp1:192.168.19.1 ucarp2:192.168.19.2 vip:172.18.19.10 在172.18.19.1和172.18.19.2上编译Nginx 1.16.1 ./configure --prefix=/export/servers/nginx1161 --with-stream --with-stream_ssl_module make make install 重点是/export/servers/nginx1161/conf/nginx.conf cat /export/servers/nginx1161/conf/nginx.conf user nobody; worker_processes auto; events { use epoll; worker_connections 65535; } stream { log_format proxy '$remote_addr [$time_local] ' '$protocol $status $bytes_sent $bytes_received ' '$session_time "$upstream_addr" ' '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"'; } access_log logs/tcp-access.log proxy ; open_log_file_cache off; upstream stream_backend01 { hash $remote_addr consistent; #server 172.18.31.2:80 weight=5; server 172.18.31.2:80 max_fails=2 fail_timeout=30s; #server 172.18.31.2:80 max_conns=3; } server { listen 172.18.19.10:80; proxy_timeout 20s; proxy_pass stream_backend01; } } 注意: 1、打出了tcp-access.log 2、根据源IP做hash,强制分配到后面的同一台服务器上,保证一致性 3、后端的server可以有权重,最大连接,以及失效检测(30s内无法连通2次,就摘掉这个服务器) ...

2023年12月14日

LXC更新到Docker之后的IP部分修改

在k8s没有出来之前,我们用的就是LXC,古早版本了。 跑的LXC,基于docker进行管理,网络部分独立。 进化到新版本的Docker后,网络部分需要修改,我们决定采用macvlan方式扁平直接接入本地网络: Docker装好以后,系统中会出现一个Docker0的网络,用来NAT,我们不用这个 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:14:ee:63 brd ff:ff:ff:ff:ff:ff inet 172.18.31.33/24 brd 172.18.31.255 scope global eth0 valid_lft forever preferred_lft forever 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:ef:af:de:98 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever 我们要做的是对eth0做macvlan,不做任何iptable,直接接入本地网络 宿主机ip: 172.18.31.33 Docker1: 172.18.31.35 一、建macvlan docker network create -d macvlan \ --subnet=172.18.31.0/24 --gateway=172.18.31.254 \ -o parent=eth0 \ macvlan0 docker network ls docker inspect macvlan0 会看到 ...

2023年12月14日