The Perfect Load-Balanced & High-Availability Web Cluster With 2 Servers Running Xen On Ubuntu 8.04 Hardy Heron - Page 4
10. MySQL replication (web1, web2)10.1 Mysql Installing MySQL 5.0apt-get install mysql-server-5.0 mysql-client-5.0 To make sure that the replication can work, we must make MySQL listen on all interfaces, therefore we comment out the line bind-address = 127.0.0.1 in /etc/mysql/my.cnf : vi /etc/mysql/my.cnf [...] # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. #bind-address = 127.0.0.1 [...] Restart MySQL afterwards : /etc/init.d/mysql restart On web1 Now we set up a replication user slave2_user that can be used by web2.example.com to access the MySQL database : mysql -u root -p On the MySQL shell, run the following commands :
GRANT REPLICATION SLAVE ON *.* TO 'slave2_user'@'%' IDENTIFIED BY 'slave2_password'; On web2 Now we do the last two steps again on web2.example.com : mysql -u root -p
GRANT REPLICATION SLAVE ON *.* TO 'slave1_user'@'%' IDENTIFIED BY 'slave1_password'; On web1 AND web2 We will now create a database that will be used later for the mail server : mysqladmin -u root -p create mail Next, we go to the MySQL shell: mysql -u root -p On the MySQL shell, we create the user mail_admin with the passwort mail_admin_password (replace it with your own password) who has SELECT,INSERT,UPDATE,DELETE privileges on the mail database. This user will be used by Postfix and Courier to connect to the mail database:
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';
10.2 Setting Up ReplicationNow we set up master-master replication in /etc/mysql/my.cnf. The crucial configuration options for master-master replication are auto_increment_increment and auto_increment_offset:
Let's assume we have N MySQL nodes (N=2 in this example), then auto_increment_increment has the value N on all nodes, and each node must have a different value for auto_increment_offset (1, 2, ..., N). Now let's configure our two MySQL nodes: On web1 vi /etc/mysql/my.cnf add the following lines right below "[mysqld]": server-id = 1 replicate-same-server-id = 0 auto-increment-increment = 2 auto-increment-offset = 1 #use 192.168.1.105 if you didnt install a crossover cable on eth1 master-host = 192.168.0.105 master-user = slave1_user master-password = slave1_password master-connect-retry = 60 replicate-do-db = mail log-bin = /var/log/mysql/mysql-bin.log binlog-do-db = mail relay-log = /var/lib/mysql/slave-relay.log relay-log-index = /var/lib/mysql/slave-relay-log.index and modify the line "max_binlog_size" : [...] max_binlog_size = 500M [...] /etc/init.d/mysql restart On web2 vi /etc/mysql/my.cnf server-id = 2 replicate-same-server-id = 0 auto-increment-increment = 2 auto-increment-offset = 2 #use 192.168.1.104 if you didnt install a crossover cable on eth1 master-host = 192.168.0.104 master-user = slave2_user master-password = slave2_password master-connect-retry = 60 replicate-do-db = mail log-bin = /var/log/mysql/mysql-bin.log binlog-do-db = mail relay-log = /var/lib/mysql/slave-relay.log relay-log-index = /var/lib/mysql/slave-relay-log.index and modify the line "max_binlog_size" : [...] max_binlog_size = 500M [...] /etc/init.d/mysql restart On web1 AND web2 Now we will start replication : mysql -u root -p On the MySQL shell, run the following commands:
reset master; Now run the following : On web1 CHANGE MASTER TO MASTER_HOST='192.168.0.105', MASTER_USER='slave1_user', MASTER_PASSWORD='slave1_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98;
start slave; On web2 CHANGE MASTER TO MASTER_HOST='192.168.0.104', MASTER_USER='slave2_user', MASTER_PASSWORD='slave2_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98;
start slave; Now replication should work.
10.3 Testing replicationOn web1 AND web2 mysql -u root -p On the MySQL shell, run the following commands: show slave status \G; There are 3 important lines in the output that should look like this : [...] Slave_IO_State: Waiting for master to send event [...] Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: mail [...] Now you can quit mysql : quit; On web1 We will insert some data on web1.example.com for testing and that will serve in the next chapter for mail : mysql -u root -p On the MySQL shell, run the following commands: use mail; We will create the following tables :
CREATE TABLE domains (
CREATE TABLE forwardings (
CREATE TABLE users (
CREATE TABLE transport ( quit; These freshly create tables should appear on web2 mail database as well, thanks to replication. On web2 Now we will verify that : mysql -u root -p On the MySQL shell, run the following commands:
use mail; The output should be : +----------------+ | Tables_in_mail | +----------------+ | domains | | forwardings | | transport | | users | +----------------+ 4 rows in set (0.00 sec) quit; If you see that replication is working.
10.4 Creating user for ldirectordWe will now create the user that will connect to the database in the ldirectord.php file. On web1 AND web2 mysql -u root -p On the MySQL shell, run the following commands:
GRANT USAGE ON * . * TO 'ldirectord'@'localhost' IDENTIFIED BY 'LDIRECTORD_PASSWORD'; Now when you go with your browser at addresses : http://192.168.1.104/ldirectord.php and http://192.168.1.105/ldirectord.php You should see : Connected to MySQL displayed on the screen.
|



Recent comments
4 hours 52 min ago
14 hours 20 min ago
15 hours 10 min ago
18 hours 43 min ago
23 hours 7 min ago
23 hours 29 min ago
1 day 1 hour ago
1 day 11 hours ago
1 day 16 hours ago
1 day 18 hours ago