Hey @saedrna! Welcome to the forums 
A vertex buffer only supports a single struct, but you can use multiple vertex buffers, each with their own channels that you specify with the VertexBuffer.VertexDeclaration property. You can bind them with GraphicsDevice.SetVertexBuffers. Note that you need to wrap your vertex buffers in a VertexBufferBinding before you pass them in. Then you can render with GraphicsDevice.DrawPrimitives or GraphicsDevice.DrawIndexedPrimitives. The OpenGL backend uses glVertexAttribPointer to bind the channels. If you’re interested in how it’s implemented, you can check out the source code.
VertexBufferBinding has an InstanceFrequency property that you can set for instanced rendering. To use it you need to call GraphicsDevice.DrawInstancedPrimitives.
Hope that helps 