I've read through the documentation I think you're talking about. It's kind of hard to determine where to start since the docs are spread out between multiple VE, Parsoid and RESTBase pages. Installing RESTBase is, as you say, straightforward (git clone, npm install, basically). Configuring is not clear to me, and without clear docs it's the kind of thing that takes hours of trial and error. Also some parts mention I need Cassandra but it's not clear if that's a hard requirement.
If I want a highly available setup with multiple app servers and multiple Parsoid servers, would I install RESTBase alongside each Parsoid? How does communication between the multiple app and RB/Parsoid servers get configured? I feel like I'll be back in the same load balancing situation.
--James
On Jun 8, 2017 7:43 AM, "C. Scott Ananian" cananian@wikimedia.org wrote:
RESTBase actually adds a lot of immediate performance, since it lets VE load the editable representation directly from cache, instead of requiring the editor to wait for Parsoid to parse the page before it can be edited. I documented the RESTBase install; it shouldn't actually be any more difficult than Parsoid. They both use the same service runner framework now.
At any rate: in your configurations you have URL and HTTPProxy set to the exact same string. This is almost certainly not right. I believe if you just omit the proxy lines entirely from the configuration you'll find things work as you expect. --scott
On Wed, Jun 7, 2017 at 11:30 PM, James Montalvo jamesmontalvo3@gmail.com wrote:
Setting up RESTBase is very involved. I'd really prefer not to add that complexity at this time. Also I'm not sure at my scale RESTBase would provide much performance benefit (though I don't know much about it so that's just a hunch). The parsoid and VE configs have fields for proxy (as shown in my snippets), so it seems like running them this way is intended. Am I wrong?
Thanks, James
On Jun 7, 2017 8:12 PM, "C. Scott Ananian" cananian@wikimedia.org wrote:
I think in general the first thing you should do for performance is set
up
restbase in front of parsoid? Caching the parsoid results will be faster than running multiple parsoids in parallel. That would also match the
wmf
configuration more closely, which would probably help us help you. I
wrote
up instructions for configuring restbase on the VE and Parsoid wiki
pages.
As it turns out I updated these today to use VRS configuration. Let me
know
if you run into trouble, perhaps some further minor updates are
necessary.
--scott
On Jun 7, 2017 6:26 PM, "James Montalvo" jamesmontalvo3@gmail.com
wrote:
I'm trying to setup two Parsoid servers to play nicely with two
MediaWiki
application servers and am having some issues. I have no problem
getting
things working with Parsoid on a single app server, or multiple
Parsoid
servers being used by a single app server, but ran into issues when I increased to multiple app servers. To try to get this working I
starting
making the app and Parsoid servers communicate through my load
balancer.
So
an overview of my config is:
Load balancer = 192.168.56.63
App1 = 192.168.56.80 App2 = 192.168.56.60
Parsoid1 = 192.168.56.80 Parsoid2 = 192.168.56.60
Note, App1 and Parsoid1 are the same server, and App2 and Parsoid2 are
the
same server. I can only spin up so many VMs on my laptop.
The load balancer (HAProxy) is configured as follows:
- 80 forwards to 443
- 443 forwards to App1 and App2 port 8080
- 8081 forwards to App1 and App2 port 8080 (this will be a private
network
connection later)
- 8001 forwards to Parsoid1 and Parsoid2 port 8000 (also will be
private)
On App1/Parsoid1 I can run `curl 192.168.56.63:8001` and get the appropriate response from Parsoid. I can run `curl 192.168.56.63:8081`
and
get the appropriate response from MediaWiki. The same is true for both
on
App2/Parsoid2. So the servers can get the info they need from the
services.
Currently I'm getting a the error "Error loading data from server:
500:
docserver-http: HTTP 500. Would you like to retry?" when attempting to
use
Visual Editor. I've tried various different settings and have not
always
gotten that specific error, but am getting it with the settings I
currently
have in localsettings.js and LocalSettings.php (shown below in this
email).
Removing the proxy config lines from these settings gave slightly
better
results. I did not get the 500 error, but instead it sometimes after a
very
long time it would work. It also may have been throwing errors in the parsoid log (with debug on). I have those logs saved if they help. I'm hoping someone can just point out some misconfiguration, though.
Here are snippets of my config files:
On App1/Parsoid1, relevant localsettings.js:
parsoidConfig.setMwApi({
uri: 'http://192.168.56.80:8081/demo/api.php', proxy: { uri: 'http://192.168.56.80:8081/' }, domain: 'demo', prefix: 'demo' } );
parsoidConfig.serverInterface = '192.168.56.80';
On App2/Parsoid2, relevant localsettings.js:
parsoidConfig.setMwApi({
uri: 'http://192.168.56.80:8081/demo/api.php', proxy: { uri: 'http://192.168.56.80:8081/' },
domain: 'demo', prefix: 'demo'
} );
parsoidConfig.serverInterface = '192.168.56.60';
On App1/Parsoid1, relevant LocalSettings.php:
$wgVirtualRestConfig['modules']['parsoid'] = array( 'url' => '192.168.56.80:8001',
'HTTPProxy' => 'http://192.168.56.80:8001',
'domain' => $wikiId, 'prefix' => $wikiId );
On App2/Parsoid2, relevant LocalSettings.php:
$wgVirtualRestConfig['modules']['parsoid'] = array( 'url' => '192.168.56.80:8001',
'HTTPProxy' => 'http://192.168.56.80:8001',
'domain' => $wikiId, 'prefix' => $wikiId );
Thanks!
--James _______________________________________________ Wikitech-l mailing list Wikitech-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/wikitech-l
Wikitech-l mailing list Wikitech-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/wikitech-l
Wikitech-l mailing list Wikitech-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/wikitech-l
-- (http://cscott.net) _______________________________________________ Wikitech-l mailing list Wikitech-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/wikitech-l
https://www.mediawiki.org/wiki/Parsoid/Setup/RESTBase
Cassandra is optional, for a small deployment the sqlite backend is probably sufficient. Cassandra is the "distributed DB" part, so if you used cassandra you could set up multiple restbase clients.
RESTBase is for performance, not availability. It moved the parse time to "after the page is saved" instead of "when the user hits edit", which makes the editing interface feel much more snappy.
None of mediawiki, Parsoid, or RESTBase store any state other than in their DBs (MySQL for mediawiki or Cassandra/sqlite for RESTBase). We use LVS for load balancing (https://wikitech.wikimedia.org/wiki/LVS). All the mediawikis point at LVS, which chooses an appropriate RESTBase. All the RESTBase point at LVS, which chooses an appropriate Parsoid. All the Parsoids point to LVS, which will give them an arbitary mediawiki for fetching wikitext, etc. --scott
On Thu, Jun 8, 2017 at 10:10 AM, James Montalvo jamesmontalvo3@gmail.com wrote:
I've read through the documentation I think you're talking about. It's kind of hard to determine where to start since the docs are spread out between multiple VE, Parsoid and RESTBase pages. Installing RESTBase is, as you say, straightforward (git clone, npm install, basically). Configuring is not clear to me, and without clear docs it's the kind of thing that takes hours of trial and error. Also some parts mention I need Cassandra but it's not clear if that's a hard requirement.
If I want a highly available setup with multiple app servers and multiple Parsoid servers, would I install RESTBase alongside each Parsoid? How does communication between the multiple app and RB/Parsoid servers get configured? I feel like I'll be back in the same load balancing situation.
--James
On Jun 8, 2017 7:43 AM, "C. Scott Ananian" cananian@wikimedia.org wrote:
RESTBase actually adds a lot of immediate performance, since it lets VE load the editable representation directly from cache, instead of requiring the editor to wait for Parsoid to parse the page before it can be edited. I documented the RESTBase install; it shouldn't actually be any more difficult than Parsoid. They both use the same service runner framework now.
At any rate: in your configurations you have URL and HTTPProxy set to the exact same string. This is almost certainly not right. I believe if you just omit the proxy lines entirely from the configuration you'll find things work as you expect. --scott
On Wed, Jun 7, 2017 at 11:30 PM, James Montalvo jamesmontalvo3@gmail.com wrote:
Setting up RESTBase is very involved. I'd really prefer not to add that complexity at this time. Also I'm not sure at my scale RESTBase would provide much performance benefit (though I don't know much about it so that's just a hunch). The parsoid and VE configs have fields for proxy
(as
shown in my snippets), so it seems like running them this way is
intended.
Am I wrong?
Thanks, James
On Jun 7, 2017 8:12 PM, "C. Scott Ananian" cananian@wikimedia.org
wrote:
I think in general the first thing you should do for performance is set
up
restbase in front of parsoid? Caching the parsoid results will be
faster
than running multiple parsoids in parallel. That would also match the
wmf
configuration more closely, which would probably help us help you. I
wrote
up instructions for configuring restbase on the VE and Parsoid wiki
pages.
As it turns out I updated these today to use VRS configuration. Let me
know
if you run into trouble, perhaps some further minor updates are
necessary.
--scott
On Jun 7, 2017 6:26 PM, "James Montalvo" jamesmontalvo3@gmail.com
wrote:
I'm trying to setup two Parsoid servers to play nicely with two
MediaWiki
application servers and am having some issues. I have no problem
getting
things working with Parsoid on a single app server, or multiple
Parsoid
servers being used by a single app server, but ran into issues when I increased to multiple app servers. To try to get this working I
starting
making the app and Parsoid servers communicate through my load
balancer.
So
an overview of my config is:
Load balancer = 192.168.56.63
App1 = 192.168.56.80 App2 = 192.168.56.60
Parsoid1 = 192.168.56.80 Parsoid2 = 192.168.56.60
Note, App1 and Parsoid1 are the same server, and App2 and Parsoid2
are
the
same server. I can only spin up so many VMs on my laptop.
The load balancer (HAProxy) is configured as follows:
- 80 forwards to 443
- 443 forwards to App1 and App2 port 8080
- 8081 forwards to App1 and App2 port 8080 (this will be a private
network
connection later)
- 8001 forwards to Parsoid1 and Parsoid2 port 8000 (also will be
private)
On App1/Parsoid1 I can run `curl 192.168.56.63:8001` and get the appropriate response from Parsoid. I can run `curl 192.168.56.63:8081
`
and
get the appropriate response from MediaWiki. The same is true for
both
on
App2/Parsoid2. So the servers can get the info they need from the
services.
Currently I'm getting a the error "Error loading data from server:
500:
docserver-http: HTTP 500. Would you like to retry?" when attempting
to
use
Visual Editor. I've tried various different settings and have not
always
gotten that specific error, but am getting it with the settings I
currently
have in localsettings.js and LocalSettings.php (shown below in this
email).
Removing the proxy config lines from these settings gave slightly
better
results. I did not get the 500 error, but instead it sometimes after
a
very
long time it would work. It also may have been throwing errors in the parsoid log (with debug on). I have those logs saved if they help.
I'm
hoping someone can just point out some misconfiguration, though.
Here are snippets of my config files:
On App1/Parsoid1, relevant localsettings.js:
parsoidConfig.setMwApi({
uri: 'http://192.168.56.80:8081/demo/api.php', proxy: { uri: 'http://192.168.56.80:8081/' }, domain: 'demo', prefix: 'demo' } );
parsoidConfig.serverInterface = '192.168.56.80';
On App2/Parsoid2, relevant localsettings.js:
parsoidConfig.setMwApi({
uri: 'http://192.168.56.80:8081/demo/api.php', proxy: { uri: 'http://192.168.56.80:8081/' },
domain: 'demo', prefix: 'demo'
} );
parsoidConfig.serverInterface = '192.168.56.60';
On App1/Parsoid1, relevant LocalSettings.php:
$wgVirtualRestConfig['modules']['parsoid'] = array( 'url' => '192.168.56.80:8001',
'HTTPProxy' => 'http://192.168.56.80:8001',
'domain' => $wikiId, 'prefix' => $wikiId );
On App2/Parsoid2, relevant LocalSettings.php:
$wgVirtualRestConfig['modules']['parsoid'] = array( 'url' => '192.168.56.80:8001',
'HTTPProxy' => 'http://192.168.56.80:8001',
'domain' => $wikiId, 'prefix' => $wikiId );
Thanks!
--James _______________________________________________ Wikitech-l mailing list Wikitech-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/wikitech-l
Wikitech-l mailing list Wikitech-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/wikitech-l
Wikitech-l mailing list Wikitech-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/wikitech-l
-- (http://cscott.net) _______________________________________________ Wikitech-l mailing list Wikitech-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/wikitech-l _______________________________________________ Wikitech-l mailing list Wikitech-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/wikitech-l
wikitech-l@lists.wikimedia.org