asp.net web api 2 for mvc developers pdf : C# merge pdf files into one control application platform web page html asp.net web browser mongodb_%20the%20definitive%20guide%20-%20kristina%20chodorow_140123-part1768

CHAPTER 12
Administration
This chapter covers replica set administration, including:
• Techniques for performing maintenance on individual members
• Configuring sets under a variety of circumstances
• Getting information about and resizing your oplog
• Doing some more exotic set configurations
• Converting from master-slave to a replica set
Starting Members in Standalone Mode
A lot of maintenance tasks cannot be performed on secondaries (because they involve
writes) and shouldn’t be performed on primaries. Thus, the following sections fre‐
quently mention starting up a server in standalone mode. This means restarting the
member so that it is a standalone server, not a member of a replica set (temporarily).
To start up a member in standalone mode, first look at the command line argument.
Suppose it looks something like this:
> db.serverCmdLineOpts()
{
"argv" : [ "mongod", "-f""/var/lib/mongod.conf" ],
"parsed" : {
"replSet": "mySet",
"port": "27017",
"dbpath": "/var/lib/db"
},
"ok" : 1
}
209
C# merge pdf files into one - Merge, append PDF files in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Provide C# Demo Codes for Merging and Appending PDF Document
c# merge pdf pages; apple merge pdf
C# merge pdf files into one - VB.NET PDF File Merge Library: Merge, append PDF files in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET Guide and Sample Codes to Merge PDF Documents in .NET Project
acrobat merge pdf; pdf merge files
To perform maintenance on this server we can restart it without the replSet option.
This will allow us to read and write to it as a normal standalone mongod. We don’t want
the other servers in the set to be able to contact it, so we’ll make it listen on a different
port (so that the other members won’t be able to find it). Finally, we want to keep the
dbpath the same, as we are presumably starting it up this way to manipulate the server’s
data somehow. Thus, we start up this server with the following arguments:
$ mongod --port 30000 --dbpath /var/lib/db
It will now be a running as a standalone server, listening on port 30000 for connections.
The other members of the set will attempt to connect to it on port 27017 and assume
that it is down.
When we have finished performing maintenance on the server, we can shut it down and
restart it with its original options. It will automatically sync up with the rest of the set,
replicating any operations that it missed while it was “away.”
Replica Set Configuration
Replica set configuration is always kept in a document in the local.system.replset col‐
lection. This document is the same on all members of the set. Never update this docu‐
ment using update. Always use an rs helper or the replSetReconfig command.
Creating a Replica Set
You create a replica set by starting up the mongods that you want to be members and
then passing one of them a configuration through rs.initiate:
> var config = {
... "_id" : setName,
... "members" : [
...     {"_id" : 0"host" : host1},
...     {"_id" : 1"host" : host2},
...     {"_id" : 2"host" : host3}
... ]}
> rs.initiate(config)
You should always pass a config object to rs.initiate. If you do not, MongoDB will
attempt to automatically generate a config for a one-member replica set. It may not use
the hostname that you want or correctly configure the set.
You only call rs.initiate on one member of the set. The member that receives the
initiate will pass the configuration on to the other members.
210 | Chapter 12: Administration
Online Merge PDF files. Best free online merge PDF tool.
We try to make it as easy as possible to merge your PDF files. RasterEdge C#.NET PDF document merging toolkit (XDoc.PDF) is designed to help .NET
reader create pdf multiple files; pdf merge comments
C# Word - Merge Word Documents in C#.NET
Combine and Merge Multiple Word Files into One Using C#. This part illustrates how to combine three Word files into a new file in C# application.
merge pdf files; acrobat split pdf into multiple files
Changing Set Members
When you add a new set member, it should either have nothing in its data directory (in
which case it will initial sync) or have a copy of the data from another member. See
Chapter 22 for more information about backing up and restoring replica set members.
Connect to the primary and add the new member:
> rs.add("spock:27017")
Alternatively, you can specify a more complex member config as a document:
> rs.add({"_id" : 5"host" : "spock:27017""priority" : 0"hidden" : true})
You can also remove members by their "host" field:
> rs.remove("spock:27017")
You can change a member’s settings by reconfiguring. There are a few restrictions in
changing a member’s settings:
• You cannot change a member’s "_id".
• You cannot make the member you’re sending the reconfig to (generally the primary)
priority 0.
• You cannot turn an arbiter into a nonarbiter and visa versa.
• You cannot change a member with "buildIndexes" : false to "buildIndexes" :
true.
Notably, you can change a member’s "host" field. Thus, if you incorrectly specify a host
(say, use a public IP instead of a private one) you can later go back and simply change
the config to use the correct IP.
To change a hostname, you could do something like this:
> var config = rs.config()
> config.members[0].host = "spock:27017"
spock:27017
> rs.reconfig(config)
This same strategy applies to change any other option: fetch the config with rs.con
fig(), modify any parts of it that you wish, and reconfigure the set by passing rs.re
config() the new configuration.
Creating Larger Sets
Replica sets are limited to 12 members and only 7 voting members. This is to reduce
the amount of network traffic required for everyone to heartbeat everyone else and to
limit the amount of time elections take. However, it can be too restrictive: see “Master-
Slave” on page 225 if you require more that 11 secondaries.
Replica Set Configuration | 211
C# PowerPoint - Merge PowerPoint Documents in C#.NET
Combine and Merge Multiple PowerPoint Files into One Using C#. This part illustrates how to combine three PowerPoint files into a new file in C# application.
attach pdf to mail merge in word; attach pdf to mail merge
C# Create PDF from images Library to convert Jpeg, png images to
Example: Convert More than Two Type Images to PDF in C#.NET Application. This example shows how to build a PDF document with three image files (BMP, JPEG
pdf merge documents; add pdf files together online
If you are creating a replica set that has more than 7 members, every additional member
must be given 0 votes. You can do this by specifying it in the member’s config:
> rs.add({"_id" : 7"host" : "server-7:27017""votes" : 0})
This prevents these members from casting positive votes in elections, although they can
still veto.
Please do not alter votes if you can possibly avoid it. Votes have weird, non-intuitive
implications for elections and consistency guarantees. Only use votes if you are creating
a set with more than seven members or you want to prevent automatic failover, as
described in “Mimicking Master-Slave Behavior with Replica Sets” on page 226. Often,
developers mistakenly think that a member having more votes will make it more likely
to be primary (which it won’t). If you wish a member to be preferentially chosen as
primary, use priorities (see “Priority” on page 183).
Forcing Reconfiguration
When you permanently lose a majority of the set, you may want to reconfigure the set
while it doesn’t have a primary. This is a little tricky: usually you’d send the reconfig to
the primary. In this case, you can force reconfigure the set by sending a reconfig com‐
mand to a secondary. Connect to a secondary in the shell and pass it a reconfig with the
"force" option:
> rs.reconfig(config, {"force" : true})
Forced reconfigurations follow the same rules as a normal reconfiguration: you must
send a valid, well-formed configuration with the correct options. The "force" option
doesn’t allow invalid configs; it just allows a secondary to accept a reconfig.
Forced reconfigurations bump the replica set "version" number by a large amount.
You may see it jump by thousands. This is normal: it is to prevent version number
collisions (just in case there’s a reconfig on either side of a network partition).
When the secondary receives the reconfig, it will update its configuration and pass the
new config along to the other members. The other members of the set will only pick up
on a change of config if they recognize the sending server as a member of their current
config. Thus, if some of your members have changed hostnames, you should force
reconfig from a member that kept its old hostname. If everyone has a new hostname,
you should shut down each member of the set, start it up in standalone mode, change
its local.system.replset document manually, and then restart the member.
212 | Chapter 12: Administration
C# PDF: C# Code to Process PDF Document Page Using C#.NET PDF
C# PDF Page Processing: Merge PDF Files - C#.NET PDF document merger APIs for combining two different PDF documents into one large PDF file.
add pdf files together; batch merge pdf
C# Create PDF from CSV to convert csv files to PDF in C#.net, ASP.
document, it's unnecessary to convert CSV files to .xls This C# sample code illustrates how to convert CSV to Description: Convert to PDF/TIFF and save it into
reader combine pdf; add pdf pages together
Manipulating Member State
There are several ways to manually change member state for maintenance or in response
to load. Note that there is no way to force a member to become primary other than
configuring the set appropriately.
Turning Primaries into Secondaries
You can demote a primary to a secondary using the stepDown function:
> rs.stepDown()
This makes the primary step down into secondary state for 60 seconds. If no other
primary has been elected in that time period, it will be able to attempt a reelection. If
you would like it to remain a secondary for a longer or shorter amount of time, you can
specify your own number of seconds for it to stay in SECONDARY state:
> rs.stepDown(600// 10 minutes
Preventing Elections
If you need to do some maintenance on the primary but don’t want any of the other
eligible members to become primary in the interim, you can force them to stay secon‐
daries by running freeze on each of them:
> rs.freeze(10000)
Again, this takes a number of seconds to remain secondary.
When you have finished whatever maintenance you are doing and want to “unfreeze”
the other members you can run the command again, giving a timeout of 0 seconds:
> rs.freeze(0)
This will allow the member to hold an election, if it chooses.
You can also unfreeze primaries that have been stepped down by running rs.freeze(0).
Using Maintenance Mode
Maintenance mode occurs when you perform a long-running op on a replica set mem‐
ber: it forces the member into RECOVERING state. Sometimes, a member will go into
maintenance mode automatically, for example, if you run a compact on it. When the
compact begins, the member will go into RECOVERING state so that reads will no
longer go to that member. Clients will stop using it for reads (if they were) and it should
no longer be used as a replication source.
You can force a member to go into maintenance mode by running the replSetMainte‐
nanceMode command on it. You might want to do this if a member begins to fall behind
Manipulating Member State | 213
C# PDF: C#.NET PDF Document Merging & Splitting Control SDK
C#. VB.NET. Home > .NET Imaging SDK > C# > Merge and Split C# PDF Merging & Splitting Application. This C#.NET PDF to one PDF file and split source PDF file into
batch pdf merger online; pdf merge
VB.NET TWAIN: Scanning Multiple Pages into PDF & TIFF File Using
most cases, those scanned individual image files need to New PDFDocument(imgSouce) doc1.Save("outputPDF.pdf") End Sub Written in managed C# code, this VB.NET
break pdf into multiple files; break pdf file into multiple files
and you don’t want any read load on it. For example, you could have a script like this,
which detects if a member is behind and then puts it in maintenance mode:
function maybeMaintenanceMode() {
var local = db.getSisterDB("local");
// Return if this member isn't a secondary (it might be a primary
// or already in recovering)
if (!local.isMaster().secondary) {
return;
}
// Find the last optime written on this member
var last = local.oplog.rs.find().sort({"$natural" : -1}).next();
var lastTime = last['ts']['t'];
// If more than 30 seconds behind
if (lastTime < (new Date()).getTime()-30) {
db.adminCommand({"replSetMaintenanceMode" : true});
}
};
To get out of maintenance mode, pass the command false:
> db.adminCommand({"replSetMaintenanceMode" : false});
Monitoring Replication
It is important to be able to monitor the status of a set: not only that everyone is up, but
what states they are in and how up-to-date the replication is. There are several com‐
mands you can use to see replica set information. MMS (see Chapter 21) also keeps
some useful stats on replication.
Often issues with replication are transient: a server could not reach another server but
now it can. The easiest way to see issues like this is to look at the logs. Make sure you
know where the logs are being stored (and that they are being stored) and that you can
access them.
Getting the Status
One of the most useful commands you can run is replSetGetStatus, which gets the cur‐
rent information about every member of the set (from the of view of the member you’re
running it on). There is a helper for this command in the shell:
> rs.status()
{
"set" : "spock",
"date" : ISODate("2012-10-17T18:17:52Z"),
"myState" : 2,
"syncingTo" : "server-1:27017",
214 | Chapter 12: Administration
"members" : [
{
"_id" : 0,
"name" : "server-1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 74824,
"optime" : { "t" : 1350496621000"i" : 1 },
"optimeDate" : ISODate("2012-10-17T17:57:01Z"),
"lastHeartbeat" : ISODate("2012-10-17T17:57:00Z"),
"pingMs" : 3,
},
{
"_id" : 1,
"name" : "server-2:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 161989,
"optime" : { "t" : 1350377549000"i" : 500 },
"optimeDate" : ISODate("2012-10-17T17:57:00Z"),
"self" : true
},
{
"_id" : 2,
"name" : "server-3:27017",
"health" : 1,
"state" : 3,
"stateStr" : "RECOVERING",
"uptime" : 24300,
"optime" : { "t" : 1350411407000"i" : 739 },
"optimeDate" : ISODate("2012-10-16T18:16:47Z"),
"lastHeartbeat" : ISODate("2012-10-17T17:57:01Z"),
"pingMs" : 12,
"errmsg" : "still syncing, not yet to minValid optime 507e9a30:851"
}
],
"ok" : 1
}
These are some of the most useful fields:
self
This field is only present in the member rs.status() was run on, in this case,
server-2.
stateStr
A string describing the state of the server. See “Member States” on page 191 to see
descriptions of the various states.
Monitoring Replication | 215
uptime
The number of seconds a member has been reachable (or the time since this server
was started for the "self" member). Thus, server-2 has been up for 161989 seconds,
or about 45 hours. server-1 has been available for the last 21 hours and server-3 has
been available for the last 7 hours.
optimeDate
The last optime in each member’s oplog (where that member is synced to). Note
that this is the state of each member as reported by the heartbeat, so the optime
reported here may be off by a couple of seconds.
lastHeartbeat
The time this server last received a heartbeat from the member. If there have been
network issues or the server has been busy, this may be longer than two seconds
ago.
pingMs
The running average of how long heartbeats to this server have taken. This is used
in determining which member to sync from.
errmsg
Any status message that the member chose to return in the heartbeat request. These
are often merely informational, not error messages. For example, the "errmsg" field
in server-3 indicates that this server is in the process of initial syncing. The hexa‐
decimal number 507e9a30:851 is the timestamp of the operation this member needs
to get to to complete the initial sync.
There are a several fields that give overlapping information: "state" is the same as
"stateStr", it’s simply the internal id for the state. "health" merely reflects whether a
given server is reachable (1) or unreachable (0), which is also shown by "state" and
"stateStr" (they’ll be UNKNOWN or DOWN if the server is unreachable). Similarly,
"optime" and "optimeDate" are the same value represented in two ways: one represents
milliseconds since the epoch ("t" : 135...) and the other is a more human-readable
date.
Note that this is report is from the point of view of whichever member of the set you
run it on: it may be incorrect or out of date due to network issues.
Visualizing the Replication Graph
If you run rs.status() on a secondary, there will be a top-level field called "syncing
To". This gives the host that this member is replicating from. By running the replSet‐
GetStatus command on each member of the set, you can figure out the replication graph.
For example, assuming server1 was a connection to server1server2 was a connection
to server2, and so on, you might have something like:
216 | Chapter 12: Administration
> server1.adminCommand({replSetGetStatus: 1})['syncingTo']
server0:27017
> server2.adminCommand({replSetGetStatus: 1})['syncingTo']
server1:27017
> server3.adminCommand({replSetGetStatus: 1})['syncingTo']
server1:27017
> server4.adminCommand({replSetGetStatus: 1})['syncingTo']
server2:27017
Thus, server0 is the source for server1, server1 is the replication source for server2 and
server3, and server2 is the replication source for server4.
MongoDB determines who to sync to based on ping time. When one member heartbeats
another, it times how long that request took. MongoDB keeps a running average of these
times. When it has to choose a member to sync from, it looks for the member that is
closest to it and ahead of it in replication (thus, you cannot end up with a replication
cycle: members will only replicate from the primary or secondaries that are strictly
further ahead).
Thus, if you bring up a new member in a secondary data center, it is more likely to sync
from the other members in that data center than a member in your primary data center
(thus minimizing WAN traffic), as show in Figure 12-1.
Figure 12-1. New secondaries will generally choose to sync from a member in the same
data center
However, there are some downsides to automatic replication chaining: more replication
hops mean that it takes a bit longer to replicate writes to all servers. For example, let’s
say that everything is in one data center but, due to the vagaries of network speeds when
you added members, MongoDB ends up replicating in a line, as shown in Figure 12-2.
Monitoring Replication | 217
Figure 12-2. As replication chains get longer, it takes longer for all members to get a
copy of the data
This is highly unlikely, but not impossible. It is, however, probably undesirable: each
secondary in the chain will have to be a bit further behind than the secondary “in front”
of it. You can fix this by modifying the replication source for a member using the
replSetSyncFrom command (or the rs.syncFrom() helper).
Connect to the secondary whose replication source you want to change and run this
command, passing it the server you’d prefer this member to sync from:
> secondary.adminCommand({"replSetSyncFrom" : "server0:27017"})
It may take a few seconds to switch sync sources, but if you run rs.status() on that
member again, you should see that the "syncingTo" field now says "server0:27017".
At this point, server4 will continue replicating from server0 until server0 becomes un‐
available or, if it happened to be a secondary, falls significantly behind the other
members.
Replication Loops
A replication loop is when members end up replicating from one another, for example,
A is syncing from B who is syncing from C who is syncing from A. As none of the
members in a replication loop can be a primary, the members will not receive any new
operations to replicate and fall behind. On the plus side, replication loops should be
impossible when members choose who to sync from automatically.
However, you can force replication loops using the replSetSyncFrom command. Inspect
the rs.status() output careful before manually changing sync targets and be careful
not to create loops. The replSetSyncFrom command will warn you if you do not choose
to sync from a member who is strictly ahead, but it will allow it.
Disabling Chaining
Chaining is when a secondary syncs from another secondary (instead of the primary).
As mentioned earlier, members may decide to sync from other members automatically.
218 | Chapter 12: Administration
Documents you may be interested
Documents you may be interested