Instalação
Instalar OS: CentOS 7 Minimal
- Language: English (United States)
- Keyboard: Portugue (Brazil)
- Software Selection: Minimal Install
- Installation Destination:
- /boot - 1G - ext2
- swap - 8G
- / - Restante do disco - ext4
- Root password
- Don't use a weak password
- Don't use a weak password
- Create user:
- login: whitebox
- password: fibre42
- Make this user administrator
- Require a password to use this account
- Rede:
- IP: 10.ID.0.10
- Subnet: 255.255.0.0
- GW: 10.ID.0.30
- DNS: 8.8.8.8
Configuração
Atualizações Automáticas de Segurança:
Instalar o dnf-automatic
sudo yum install -y dnf-automatic
Edite o arquivo /etc/dnf/automatic.conf e altere o parâmetro upgrade_type
upgrade_type = security
Inicializar o dnf-automatic
sudo systemctl enable dnf-automatic-install.timer && sudo systemctl start dnf-automatic-install.timer
Tuning
for IF in `ls /proc/sys/net/ipv6/conf` do echo 0 > /proc/sys/net/ipv6/conf/$IF/autoconf done
Irqbalance
dnf -y install irqbalance echo "IRQBALANCE_BANNED_CPUS=FC" >> /etc/sysconfig/irqbalance systemctl enable irqbalance && systemctl start irqbalance
Tuned
dnf -y install tuned mkdir /etc/tuned/whitebox
cat << EOF > /etc/tuned/whitebox/tuned.conf [main] include=network-latency [bootloader] cmdline = selinux=0 isolcpus=2-7 nosoftlockup mce=ignore_ce idle=poll nohz_full=2-7 hugepages=2048 iommu=pt intel_iommu=on [sysctl] kernel.nmi_watchdog=0 vm.stat_interval=10 vm.nr_hugepages=2048 [sysfs] /sys/bus/workqueue/devices/writeback/cpumask = FC /sys/devices/virtual/workqueue/cpumask = FC EOF
sudo tuned-adm profile whitebox sudo systemctl enable tuned && systemctl start tuned
É necessário reiniciar para que as configurações tenham efeito.
DPDK e driverctl
Atualize e reinicie para utilizar o último kernel.
dnf -y install dpdk driverctl modprobe uio-pci-generic driverctl set-override 0000:08:00.0 uio_pci_generic driverctl set-override 0000:0b:00.0 uio_pci_generic driverctl set-override 0000:0b:00.1 uio_pci_generic driverctl set-override 0000:0b:00.2 uio_pci_generic driverctl set-override 0000:0b:00.3 uio_pci_generic
Installing OVS
Instalando dependências
dnf -y install dnf-plugins-core dpdk-devel libpcap-devel numactl-devel rpm-build libmnl-devel libibverbs
Download do fonte do OVS
OVS_VER=2.12.0 mkdir -p ~/rpmbuild/SOURCES/ curl -o ~/rpmbuild/SOURCES/openvswitch-$OVS_VER.tar.gz -L http://openvswitch.org/releases/openvswitch-$OVS_VER.tar.gz
Criar o arquivo SPEC
mkdir -p ~/rpmbuild/SPECS/
tar xOfz ~/rpmbuild/SOURCES/openvswitch-$OVS_VER.tar.gz openvswitch-$OVS_VER/rhel/openvswitch-fedora.spec.in --strip=2 | sed -e "s/@VERSION@/$OVS_VER/" > ~/rpmbuild/SPECS/openvswitch.spec
Instalar as dependências do OVS
dnf -y builddep ~/rpmbuild/SPECS/openvswitch.spec
Build do pacote do OVS com suporte a DPDK
rpmbuild -bb ~/rpmbuild/SPECS/openvswitch.spec --with dpdk --without check --define='optflags -Ofast -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic -march=native -fomit-frame-pointer -mssse3 -msse4.2'
Instalar o pacote OVS
dnf -y install ~/rpmbuild/RPMS/x86_64/openvswitch-$OVS_VER-1.el7.x86_64.rpm
Forçar OVS para rodar com root (para suportar as interfaces uio-pci-generic dpdk)
sed -i 's/^OVS_USER_ID=/#OVS_USER_ID=/' /etc/sysconfig/openvswitch systemctl start openvswitch && systemctl enable openvswitch ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem="4096,0" ovs-vsctl --no-wait set Open_vSwitch . other_config:pmd-cpu-mask=FC systemctl restart openvswitch
Configurando o openvswitch para inserir controladores, bridge, filas e interface:
Segue abaixo dois modelos de configuração. Um para criar 01 switch virtual de 6 portas e outro para criar 02 switches virtuais com 4 portas (3 portas físicas e 1 lógica)
Switch Virtual de 6 portas
Bridge
sudo ovs-vsctl add-br br-dpdk0 -- set bridge br-dpdk0 datapath_type=netdev protocols=OpenFlow10 fail-mode=secure
Portas
sudo ovs-vsctl add-port br-dpdk0 dpdk0 -- set Interface dpdk0 type=dpdk mtu_request=9600 ofport_request=1 options:dpdk-devargs=0000:00:14.0 sudo ovs-vsctl add-port br-dpdk0 dpdk1 -- set Interface dpdk1 type=dpdk mtu_request=9600 ofport_request=2 options:dpdk-devargs=0000:00:14.1 sudo ovs-vsctl add-port br-dpdk0 dpdk2 -- set Interface dpdk2 type=dpdk mtu_request=9600 ofport_request=3 options:dpdk-devargs=0000:00:14.2 sudo ovs-vsctl add-port br-dpdk0 dpdk3 -- set Interface dpdk3 type=dpdk mtu_request=9600 ofport_request=4 options:dpdk-devargs=0000:00:14.3 sudo ovs-vsctl add-port br-dpdk0 dpdk4 -- set Interface dpdk4 type=dpdk mtu_request=9600 ofport_request=5 options:dpdk-devargs=0000:05:00.0 sudo ovs-vsctl add-port br-dpdk0 dpdk5 -- set Interface dpdk5 type=dpdk mtu_request=9600 ofport_request=6 options:dpdk-devargs=0000:05:00.1
Configuração do Controlador
sudo ovs-vsctl set-controller br-dpdk0 tcp:<ip controller>:6633
Reboot o whitebox:
sudo reboot
Após reinicialização verificar se o openvswitch iniciou corretamente:
sudo systemctl status openvswitch.service sudo ovs-ofctl show br-dpdk0
Dois Switches Virtuais de 4 portas
Bridge
sudo ovs-vsctl add-br br-dpdk0 -- set bridge br-dpdk0 datapath_type=netdev protocols=OpenFlow10 fail-mode=secure sudo ovs-vsctl add-br br-dpdk1 -- set bridge br-dpdk1 datapath_type=netdev protocols=OpenFlow10 fail-mode=secure
Portas da Bridge br-dpdk0:
sudo ovs-vsctl add-port br-dpdk0 dpdk0 -- set Interface dpdk0 type=dpdk mtu_request=9600 ofport_request=1 options:dpdk-devargs=0000:00:14.0 sudo ovs-vsctl add-port br-dpdk0 dpdk2 -- set Interface dpdk2 type=dpdk mtu_request=9600 ofport_request=2 options:dpdk-devargs=0000:00:14.2 sudo ovs-vsctl add-port br-dpdk0 dpdk4 -- set Interface dpdk4 type=dpdk mtu_request=9600 ofport_request=3 options:dpdk-devargs=0000:05:00.0 sudo ovs-vsctl add-port br-dpdk0 patch0 -- set Interface patch0 type=patch options:peer=patch1 mtu_request=9600 ofport_request=4
Portas da Bridge br-dpdk1:
sudo ovs-vsctl add-port br-dpdk1 dpdk1 -- set Interface dpdk1 type=dpdk mtu_request=9600 ofport_request=1 options:dpdk-devargs=0000:00:14.1 sudo ovs-vsctl add-port br-dpdk1 dpdk3 -- set Interface dpdk3 type=dpdk mtu_request=9600 ofport_request=2 options:dpdk-devargs=0000:00:14.3 sudo ovs-vsctl add-port br-dpdk1 dpdk5 -- set Interface dpdk5 type=dpdk mtu_request=9600 ofport_request=3 options:dpdk-devargs=0000:05:00.1 sudo ovs-vsctl add-port br-dpdk1 patch1 -- set Interface patch1 type=patch options:peer=patch0 mtu_request=9600 ofport_request=4
Configuração do Controlador
sudo ovs-vsctl set-controller br-dpdk0 tcp:<ip controller>:6633 sudo ovs-vsctl set-controller br-dpdk1 tcp:<ip controller>:6633
Reboot o whitebox:
sudo reboot
Após reinicialização verificar se o openvswitch iniciou corretamente:
sudo systemctl status openvswitch.service sudo ovs-ofctl show br-dpdk0