sshanky:
today it was spinning too slowly, and I was only getting 2.3v to the MOSFET and 8v to the fan (using a 21v power supply).
Then you have either miswired the MOSFET or its damaged, or you are using
analogWrite() and the multimeter is averaging the PWM waveform.
A MOSFET gates take only a tiny current at DC and will be right at 5V if driven HIGH.
Note that when driving a MOSFET with PWM or other AC source it may take a large
current (the gate behaves as a capacitor), so you are advised to add a 150 ohm
resistor in series with the gate to limit transient currents. You should also add a 10k
or 100k resistor between gate and source - this protects against the device switching
on before the Arduino pin is switched to be an output - it discharges the gate capacitance
when the power is removed.
For use direct from an Arduino you must use a logic level MOSFET, if you have
a non logic level MOSFET you need a level shifting circuit or gate-driver chip and
a 12V supply.