First, identify the failed disk. You can run zpool list to identify the failed drive.
zpool status
If you were clever, you named your disks with meaningful labels. If not, it might be trial and error. If it's ada0, you know it's in the first SATA port, for instance.
Remove the old disk. Confirm the disk is gone in the BIOS after booting the system.
Now put in the new disk.
It's recommended you boot into single-user mode. (see the option on the midnightbsd boot menu)
Now verify the OS detected the new drive.
camcontrol devlist
You should see the new drive. If you placed it in the same sata port, it is likely the same name. For our example, ada0
gpart create -s gpt ada0
gpart show
gpart add -a 4k -t mnbsd-zfs -l mydisklabel ada0
gpart show
Now if you run zpool status again you should see one drive marked as offline with a long number identifier rather than a label or device name (ada0)
zpool replace mypoolname longnumberfromzpoolstatus gpt/mydisklabel
If you didn't use the label flag above, replace that last part with ada0
This will start the resilvering process, which can take several hours. You can run zpool status to check the status of this process.
While you can boot the system at this point, and it will work, it will run slowly. If possible, let it resilver in single-user mode. It will go a lot faster.
Note there is a better guide on this here:?https://dan.langille.org/2015/08/03/replacing-a-failed-drive-in-zfs-on-freebsd/?The big difference is the partition type above (mnbsd-zfs vs freebsd-zfs)