Tell your son now. The longer you wait, the harder it will be, and the greater the chance that he will hear about it from someone else in the family.......like a cousin who learns from his/her parent, whom you told in confidence.
Keep it simple and truthful, in an age-appropriate way. For instance:
"A long time ago, before I met mom, I had a girlfriend. Her name was S. We made a baby together, but S kept it a secret from me. Now that baby is a grown up. I just met her. Her name is P. I'd like you to meet her sometime, too." Pause. "Do you have a question or two?"
The most likely question will be, "Is she my sister?"
"She's your half-sister. Because your mom isn't her mom."
Another question may be about mom: "Does mom know her?" However he words it, what he's really asking is, "Is this a secret?" It will be a relief for him to hear the truth, for example, "Mom hasn't met her yet. She wants to meet her when you do." -
The other question that may or may not get verbalized is, "What about me? Do you still love me? Am I still your son?" This question needs to get answered even if it's not asked. "Of course, I still love you. You're still my son, you will always be my son and I will always love you."
At this age, he probably won't ask any of the complicated questions about where she's been all these years, but if he does, be honest and brief: "She lives with her mom. They live in X." But do be prepared for new questions as he moves into new levels of development and maturity. All you need to do now is establish that there's someone new in the family, and you want him to meet her. Don't push that, though, if he says he doesn't want to. Give him the time he needs to get used to the idea.