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日 · 3 分钟 · 629 字 · 八戒

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日 · 1 分钟 · 117 字 · 八戒

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日 · 1 分钟 · 155 字 · 八戒

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

在k8s没有出来之前,我们用的就是LXC,古早版本了。 那时候是1:60的虚拟,一台物理机上跑60个LXC,居然这样运行了8年无异常,现在要升级一下了。 那时候的LXC,存储空间无法单独设定(缺省10G),cpu和mem的limit也有这样那样的问题。 进化到新版本的Docker后,存储部分也需要修改,我们采用overlay2: docker info ... Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: true Native Overlay Diff: true ... 缺省的就是overlay2和xfs 一、修改boot内核启动参数 vi /etc/default/grub #加上rootflags=uquota,pquota GRUB_CMDLINE_LINUX="console=tty0 crashkernel=auto net.ifnames=0 console=ttyS0 rootflags=uquota,pquota" #更新 grub2-mkconfig -o /boot/grub2/grub.cfg #重启 reboot 二、检验并启动容器 cat /proc/mounts |grep vda /dev/vda1 / xfs rw,relatime,attr2,inode64,usrquota,prjquota 0 0 有prjquota即可 按需启动容器,指定空间大小,size=2G docker run --rm -dit --name=t36 --storage-opt size=2G --net macvlan0 --ip=172.18.31.36 alpine:latest ash docker exec -it t36 ash df -h ...

2023年12月14日 · 1 分钟 · 70 字 · 八戒

KVM的嵌套虚拟化

kvm生产的虚机内仍然可以再产虚拟机,这就是嵌套虚拟化 我们的目的是要再kvm虚机中安装一套proxmox的系统 首先在实体机上检查当前的Linux是否支持嵌套 Intel的CPU cat /sys/module/kvm_intel/parameters/nested AMD的CPU cat /sys/module/kvm_amd/parameters/nested ​ 修改支持,以intel为例: vi /etc/modprobe.d/kvm.conf options kvm_intel nested=1 reboot就好 不重启的话,可以先卸载模块,然后重新加载 modprobe -r kvm_intel modprobe kvm_intel 然后检查一下 cat /sys/module/kvm_intel/parameters/nested proxmox安装的时候,指定cpu=host: #!/bin/sh qemu-img create -f qcow2 /export/kvm/proxmox-168-86-103/proxmox-168-86-103.qcow2 200G virt-install \ --name=proxmox-168-86-103 \ --cpu=host \ --ram=8192 \ --disk path=/export/kvm/proxmox-168-86-103/proxmox-168-86-103.qcow2,format=qcow2,size=200 \ --cdrom=/export/kvm/iso/proxmox-ve_7.0-2.iso \ --os-type=Linux \ --network bridge=br0 \ --vnc --vnclisten=0.0.0.0 --vncport=5903

2023年12月14日 · 1 分钟 · 55 字 · 八戒

KVM网络如何设置DHCP

缺省情况下kvm会保留一个nat的网络,ip a命令查看,会看到virbr0和virbr0-nic 8: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether 52:54:00:6c:22:2c brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 9: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 500 link/ether 52:54:00:6c:22:2c brd ff:ff:ff:ff:ff:ff 这个如果虚机都是静态IP,且不做NAT的话,则无必要保留,可以彻底删掉。 kvm删除掉缺省网络 virsh net-destroy default virsh net-undefine default 那么如果非用不可,还需要给特定虚机用dhcp指定固定IP 方法如下: 查看缺省网络 $ virsh net-list Name State Autostart Persistent ---------------------------------------------------------- default active yes yes 找出虚机的mac地址 $ virsh dumpxml vis-16-10-33 | grep -i '<mac' <mac address='f0:00:ac:10:0a:21'/> 编辑网络 $ virsh net-edit default <network> <name>default</name> <uuid>58e86841-ef4b-4d63-bf4f-7888515b8474</uuid> <forward mode='nat'/> <bridge name='virbr0' stp='on' delay='0' /> <mac address='52:54:00:6C:22:2C'/> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254' /> </dhcp> </ip> </network> 在range下面来一列 ...

2023年12月14日 · 1 分钟 · 120 字 · 八戒

Shell中变量、字符串、数组、参数的技巧

变量子串 ${var} 返回变量var的内容,单独使用时有没有{}一样,混合多个变量和常量时,用{}界定变量名 ${#var} 返回变量var内容的长度 ${var:offset} 从变量var中的偏移量offset开始截取到字符串结尾的子字符串,offset从0开始 ${var:offset:length} 从变量var中的偏移量offset开始截取长度为length的子字符串 ${var#*.} 从变量var中删除第一个匹配的点(.)及其左边的所有字符 ${var##*.} 从变量var中删除最后一个匹配的点(.)及其左边的所有字符 ${var%.*} 从变量var中删除最后一个匹配的点(.)及其右边的所有字符 ${var%%.*} 从变量var中删除第一个匹配的点(.)及其右边的所有字符 示例: var=file.txt.tar.gz ${var#*.} #内容为"txt.tar.gz" ${var##*.} #内容为"gz" ${var%.*} #内容为"file.txt.tar" ${var%%.*} #内容为"file" 也可以使用其它Pattern和表达式,示例: var=/home/xxx/aaa/file.txt #假设xxx为当前用户 # 从路径中获取文件名 ${var##*/} #内容为"file.txt" # 将绝对路径转为相对路径 # whoami是获取当前用户名,使用$()执行子shell,$(whoami)将得到xxx ~${var#*$(whoami)} #内容为"~/aaa/file.txt" ${var/pattern/string} 使用string代替第一个匹配的pattern ${var//pattern/string} 使用string代替所有匹配的pattern ${var,} 首字母转小写 ${var,,} 全部转小写 ${var^} 首字母转大写 ${var^^} 全部转大写 特殊扩展变量 ${var-word} 如果变量var未赋值,则返回字符串word ${var:-word} 如果变量var未赋值或者值为空,则返回字符串word ${var+word} 如果变量var有值(包括空串""),则返回字符串word var1=foo var2= ${var1-word} # 内容为"foo" echo ${var2-word} # 内容为"" echo ${var2:-word} # 内容为"word" ${var:+word} 如果变量var有值且不为空,则返回字符串word ${var=word} 如果变量var未赋值,则返回字符串word,并为var赋值为字符串word ${var:=word} 如果变量var未赋值或者值为空串,则返回字符串word,并为var赋值为字符串word ${var?word} 如果变量var未赋值,将字符串word作为标准错误输出,否则返回变量var的值 ...

2023年12月13日 · 1 分钟 · 205 字 · 八戒

Librenms使用ldap认证用户

我们openldap中用户和组的设置 用户: ou=People,dc=ddky,dc=com #uid;#givenName;#sn;#uidNumber;#gidNumber 组: ou=group,dc=ddky,dc=com #cn;#gidNumber;#memberUID;#description 到librenms中, 172.18.31.10 cd /opt/librenms vi config.php $config['auth_mechanism'] = 'ldap'; $config['auth_ldap_server'] = '172.18.31.27'; $config['auth_ldap_port'] = 389; $config['auth_ldap_starttls'] = False; // Disable TLS on port 389 $config['auth_ldap_binddn'] = 'cn=admin,dc=ddky,dc=com'; // overrides binduser $config['auth_ldap_bindpassword'] = 'nishiwode'; $config['auth_ldap_prefix'] = 'cn='; $config['auth_ldap_suffix'] = ',ou=People,dc=ddky,dc=com'; // appended to usernames $config['auth_ldap_groupbase'] = 'ou=group,dc=ddky,dc=com'; // all groups must be inside this $config['auth_ldap_groups']['admins']['level'] = 10; // set admins group to admin level $config['auth_ldap_groups']['pfy']['level'] = 5; // set pfy group to global read only level $config['auth_ldap_groups']['support']['level'] = 1; // set support group as a normal user $config['auth_ldap_debug'] = false; // enable for verbose debug messages 说明: 我们的openldap因为是内部使用,所以无法设置证书,TLS是被禁止的。 openldap是禁止anonymous用户查询的,所以需要设置binddn和bindpassword 实际用户是cn=zhangranrui,ou=People,dc=ddky,dc=com,所以要设prefix librenms缺省用户有三个级别,10 5 1,对应的用户组是admins pfy support ...

2023年12月13日 · 1 分钟 · 112 字 · 八戒

Librenms集成进prometheus

librenms是个非常强悍的工具,对网络不清楚的可以透过这个工具,对网络环境有清晰的了解。 如何通过prometheus对librenms进行集成呢? 一、装pushgateway wget https://github.com/prometheus/pushgateway/releases/download/v1.2.0/pushgateway-1.2.0.linux-amd64.tar.gz 把pushgateway放到/usr/local/bin cat << EOF >>/etc/systemd/system/pushgateway.service [Unit] Description=Codis Exporter Wants=network-online.target After=network-online.target [Service] Type=simple ExecStart=/usr/local/bin/pushgateway --web.listen-address=:50004 [Install] WantedBy=multi-user.target EOF systemctl daemon-relaod systemctl enable --now pushgateway.service 二、配置librenms cd /opt/librenms vi config.php $config['prometheus']['enable'] = true; $config['prometheus']['url'] = 'http://127.0.0.1:50004'; $config['prometheus']['job'] = 'librenms'; # Optional 三、配置prometheus - job_name: 'librenms' scrape_interval: 300s honor_labels: true static_configs: - targets: ['172.18.31.10:50004'] labels: sms_to: '18618197196' 首先访问prometheus,http://172.18.31.8:9090/targets 这样弄好后,再访问 http://172.18.31.10:50004/metrics 里面的东西是十分癫狂的,从交换机端口到F5,应有尽有 东西收进prometheus后,可以通过grafana对各种指标进行画图和报警

2023年12月13日 · 1 分钟 · 64 字 · 八戒

Librenms强制修改密码

librenms对密码的强度有要求,必须使用非常复杂的密码策略才能满足要求. 这就鬼畜了,想改成至少能记得住的密码。 如何强制修改呢? 首先弄一段php程序来生成加密串: <?php echo password_hash("xxxxxxxx", PASSWORD_DEFAULT); ?> 运行后得到加密的字符串: $2y$10$EUvwg5kVGXQUPBw4obdPJ.AKCSVgu8ximyyoFKW7hXed0s.sh/ud6 或者直接到下面的网站来生成: https://phppasswordhash.com/ 然后登录librenms的机器, 172.18.31.10 mysql -uroot -p use librenms; select * from users; update users set password='$2y$10$EUvwg5kVGXQUPBw4obdPJ.AKCSVgu8ximyyoFKW7hXed0s.sh/ud6' where user_id=1; 这样就强制把密码修改成自己习惯的了。

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