防止混淆可以根據功能修改主機名
配置客戶端
vi /etc/sysconfig/network-scripts/ifcfg-eth0
NAME=th0 DEVICE=eth0 ONBOOT=yes NETBOOT=yes BOOTPROTO=none IPADDR=172.16.12.6 TYPE=Ethernet GATEWAY=172.16.12.7 DNS1=192.168.12.8 PREFIX=16
路由器配置
1、ip配置
橋接:172.16.12.7 NAT:192.168.12.7
2、開啓ip_forward轉發
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p #生效配置
配置PowerDNS
官網 https://www.powerdns.com
1、IP配置
192.168.12.8 gw:192.168.12.7
2、安裝軟件包,基於epel
yum install -y pdns pdns-backend-mysql -y
3、安裝mariadb,直接裝在本機了,不創建在主從上面了
yum install mariadb-server -y systemctl start mariadb
4、準備PowerDNS使用的數據庫
CREATE DATABASE powerdns; GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY '123456'; USE powerdns
創建powerdns數據庫中的表,參看下面文檔實現,直接複製粘貼到mariadb中
https://doc.powerdns.com/md/authoritative/backend-generic-mysql/
5、配置PowerDNS使用mariadb作爲後臺數據存儲
vim /etc/pdns/pdns.conf
launch=gmysql 在原有基礎上修改,下面的是新添加的 gmysql-host=localhost gmysql-port=3306 gmysql-dbname=powerdns gmysql-user=powerdns gmysql-password=123456
6、啓動服務
systemctl start pdns systemctl enable pdns
7、安裝httpd和php相關包
yum -y install httpd php php-devel php-gd php-mcrypt php-imap \ php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring \ php-mcrypt mcrypt php-mhash gettext
systemctl start httpd systemctl enable httpd
8、安裝PowerDNS的web界面
cd /var/www/html wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz tar xf poweradmin-2.1.7.tgz mv poweradmin-2.1.7 poweradmin setfacl -Rm u:apache:rwx poweradmin
在本地瀏覽器輸入http://192.168.12.8/poweradmin/
第二步
第三步
第四步
第五步
按照提示在數據庫中授權
第六步
vi /var/www/html/poweradmin/inc/config.inc.php 將自己頁面中的內容粘貼過來
第七步
安裝後刪除
rm -rf /var/www/html/poweradmin/install/
登錄http://192.168.12.8/poweradmin/index.php
9、添加主域
10、添加解析記錄,結果如下
配置半同步複製
1、配置ip
192.168.12.15 192.168.12.16 192.168.12.17
2、安裝數據庫
yum install mariadb-server
主服務器: 192.168.12.15
(1) vi /etc/my.cnf 添加2行
[mysqld] server-id=15 log-bin
systemctl start mariadb 啓動服務
(2)創建賬號用於複製
MariaDB [(none)]> grant replication slave on *.* to repluser@'%' identified by '123456';
從服務器1 :192.168.12.16
(1)vi /etc/my.cnf
server-id=16 read-only #必須加,要根據此項判斷服務器屬於讀組還是寫組的
systemctl start mariadb 啓動服務
(2)連接到主服務器
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.12.15', MASTER_USER='repluser', MASTER_PASSWORD='123456', MASTER_PORT=3306, MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=245;
(3)啓動slave,並查看狀態
MariaDB [(none)]> start slave;
從服務器2 :192.168.12.17
(1) vi /etc/my.cnf 添加2行
[mysqld] server-id=15 log-bin
(2)(3)和上面一樣
測試下主從工作是否正常,在主服務器創建數據庫
安裝半同步插件
主服務器: 192.168.12.15
MariaDB [(none)]>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; #安裝主節點的插件 MariaDB [(none)]>SET GLOBAL rpl_semi_sync_master_enabled=1; #啓用 MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_timeout = 10000; #10000ms不同步,主服務器直接回應客戶端,默認10000 MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%semi%'; #查看主節點狀態
從服務器 :配置一樣
MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; #安裝從節點插件 MariaDB [(none)]> SET GLOBAL rpl_semi_sync_slave_enabled=1; #啓用 MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%semi%'; MariaDB [(none)]> stop slave; #從節點配置過需要重啓線程才生效 MariaDB [(none)]> start slave; #啓動後在主服務器狀態變量中可以看到一個從節點
MariaDB [(none)]> SHOW GLOBAL STATUS LIKE '%semi%'; #查看狀態變量
實現讀寫分離
IP 192.168.12.14
1、安裝ProxySQL
yum install https://github.com/sysown/proxysql/releases/download/v1.4.15/proxysql-1.4.15-1-centos7.x86_64.rpm
2、安裝mariadb客戶端用來登錄ProxySQL
yum install mariadb
3、啓動proxysql
啓動後會監聽兩個默認端口
6032:ProxySQL的管理端口
6033:ProxySQL對外提供服務的端口
service proxysql start
4、使用mysql客戶端連接到ProxySQL的管理接口6032,默認管理員用戶和密碼都是admin:
mysql -uadmin -padmin -P6032 -h127.0.0.1
5、查看錶結構
MySQL [(none)]> show tables; MySQL [(none)]> select * from sqlite_master where name='mysql_servers'\G
6、添加主從節點到分組
MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.12.15',3306); MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.12.16',3306); MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.12.17',3306); MySQL [(none)]> load mysql variables to runtime; #加載到RUNTIME, MySQL [(none)]> save mysql variables to disk; #保存到disk 10組爲默認爲寫組,全部添加到寫組,monitor賬號會通過read-only自動判斷
7、在master(192.168.12.15)上創建賬號,讓proxysql能夠監控
MariaDB [(none)]> grant replication client on *.* to monitor@'192.168.12.%' identified by '123456';
8、在ProxySQL上配置監控賬號
MySQL [(none)]> set mysql-monitor_username='monitor'; MySQL [(none)]> set mysql-monitor_password='123456'; MySQL [(none)]> load mysql variables to runtime; MySQL [(none)]> save mysql variables to disk; MySQL [(none)]> select * from mysql_server_connect_log; #查看是否連接成功
9、需要修改的是main庫中的mysql_replication_hostgroups表,該表有3個字段:writer_hostgroup寫組,reader_hostgroup讀組,comment備註, 指定寫組的id爲10,讀組的id爲20
MySQL> insert into mysql_replication_hostgroups values(10,20,"test"); MySQL> load mysql servers to runtime; MySQL> save mysql servers to disk;
Monitor模塊監控後端的read_only值,按照read_only的值將節點自動移動到讀/寫組
MySQL> select hostgroup_id,hostname,port,status,weight from mysql_servers; MySQL [(none)]> select hostgroup_id,hostname,port,status,weight from mysql_servers;
10、在master節點上創建訪問用戶
MySQL> grant all on *.* to sqluser@'192.168.12.%' identified by '123456'; MariaDB [(none)]> create database wordpress; 創建wordpress數據庫 MariaDB [(none)]> grant all on wordpress.* to wpuser@'%' identified by '123456';
11、在ProxySQL配置,將用戶sqluser添加到mysql_users表中, default_hostgroup默認組設
置爲寫組10,當讀寫分離的路由規則不符合時,會訪問默認組的數據庫
MySQL> insert into mysql_users(username,password,default_hostgroup) values('sqluser','123456',10); MySQL> insert into mysql_users(username,password,default_hostgroup) values('wpuser','123456',10); MySQL> load mysql users to runtime; MySQL> save mysql users to disk;
12、沒有添加讀寫路由規則測試下
使用sqluser用戶測試是否能路由到默認的10寫組 實現讀、寫數據,由於沒有添加路由規則讀寫都發往10組,也就是server-id是15的
mysql -usqluser -p123456 -P6033 -h127.0.0.1 -e 'select @@server_id'
mysql -usqluser -p123456 -P6033 -h127.0.0.1 -e 'create database testdb' mysql -usqluser -p123456 testdb -P6033 -h127.0.0.1 -e 'create table t(id int)'
13、在proxysql上配置路由規則,將select語句分離到20的讀組,select語句中有一個特殊語句SELECT...FOR UPDATE它會申請寫鎖,應路由到10的寫組
MySQL [(none)]> insert into mysql_query_rules (rule_id,active,match_digest,destination_hostgroup,apply)VALUES (1,1,'^SELECT.*FORUPDATE$',10,1),(2,1,'^SELECT',20,1); MySQL> load mysql query rules to runtime; MySQL> save mysql query rules to disk;
注意:因ProxySQL根據rule_id順序進行規則匹配,select ... for update規則的
14、測試是否實現讀寫分離,添加過路由查詢語句發往2個從節點
mysql -usqluser -p123456 -P6033 -h127.0.0.1 -e 'select @@server_id'
配置NFS
IP: 192.168.12.13
1、安裝軟件包
yum install nfs-utils
2、配置
mkdir -p /data/wordpress vi /etc/exports /data/wordpress *(rw,all_squash,anonuid=48,anongid=48) exportfs -r 生效配置 systemctl start nfs-server #啓動服務
3、創建賬號
useradd -r -u 48 -s /sbin/nologin apache
4、上傳到wordpress程序到/data目錄下解壓
chown -R apache.apache /data/wordpress
配置WEB服務
IP:192.168.12.11
IPADDR=192.168.12.12 DNS1=192.168.12.8
IP:192.168.12.12
IPADDR=192.168.12.12 DNS1=192.168.12.8
1、安裝php+apache
yum -y install php httpd php-mysql php-mbstring
2、修改配置文件
vi /etc/httpd/conf.d/test.conf
<virtualhost *:80> documentroot /data/wordpress servername www.heng.com <directory /data/wordpress> require all granted </directory> </virtualhost>
3、掛載nfs到本機
yum install nfs-utils -y 安裝nfs軟件 mkdir /data/wordpress -p echo '192.168.12.13:/data/wordpress /data/wordpress nfs defaults 0 0' >> /etc/fstab mount -a
另一臺web服務器的配置一樣,按照1、2、3步驟
4、安裝wordpress,注意數據庫地址
在瀏覽器輸入192.168.12.11開始安裝
5、測試在一臺web服務器安裝之後,無論在哪一臺web服務器上都可以訪問
配置單主KEEPALIVED+LVS
ka1:192.168.12.9
gw:192.168.12.7
ka2:192.168.12.10
gw:192.168.12.7
1、安裝keepalived
yum install keepalived
2、修改配置文件
vi /etc/keepalived/keepalived.conf
192.168.12.9
global_defs { notification_email { admin@localhost } notification_email_from keepalived@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id ka1 #vrrp_mcast_group4 224.100.100.100 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 66 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.12.100/24 dev eth0 label eth0:1 } } virtual_server 192.168.12.100 80 { delay_loop 6 lb_algo rr lb_kind DR protocol TCP sorry_server 127.0.0.1 80 real_server 192.168.12.11 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.12.12 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
192.168.12.10
vi /etc/keepalived/keepalived.conf
global_defs { notification_email { root@localhost } notification_email_from keepalived@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id ka2 #vrrp_mcast_group4 224.100.100.100 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 66 priority 88 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.12.100/24 dev eth0 label eth0:1 } notify_master "/etc/keepalived/notify.sh master" notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" } virtual_server 192.168.12.100 80 { delay_loop 6 lb_algo rr lb_kind DR protocol TCP sorry_server 127.0.0.1 80 real_server 192.168.12.11 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.12.12 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
3、兩臺web服務器都要執行
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce ip a a 192.168.12.100 dev lo:1
4、啓動keepalived
systemctl start keepalived
修改本地hosts文件,開始測試