MyCat-MySQL讀寫分離安裝配置(單例實驗篇)

MyCat-MySQL讀寫分離安裝配置(單例實驗篇)

前言

編寫日期:2020-06

操作系統信息:建議CenterOS 7.x(6.x很容易出現問題,而且自啓可能無法成功)

1.MyCat安裝

1.1 解壓安裝包

安裝包:Mycat-server-1.6.7.5-release-20200422133810-linux.tar.gz

安裝包下載路徑:https://github.com/MyCATApache/Mycat-Server/releases/tag/Mycat-server-1675-release

存放目錄:/root/Downloads

解壓到/usr/local目錄下(解壓後得到/usr/local/mycat):

# tar -zxvf Mycat-server-1.6.7.5-release-20200422133810-linux.tar.gz -C /usr/local/

檢查一下是否解壓成功

# cd /usr/local/mycat

1.2 添加用戶組

僅開發或實驗可跳過該步驟

# useradd mycat
# chown -R mycat.mycat /usr/local/mycat

改密碼

# passwd mycat

1.3 配置環境變量

修改配置文件

# vi /etc/profile

底部加入以下內容:

export MYCAT_HOME=/usr/local/mycat

刷新環境變量:

# source /etc/profile

1.4 配置主機名

# vi /etc/hosts

在清單中加入當前主機名,比如:hello

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 hello
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 hello
172.168.2.138 hello  # 上面是本地,再加一個真實內網的ip

1.5 配置軟連接

# ln -s /usr/local/mycat/bin/mycat /etc/init.d/mycat

1.6 設置開機自啓

1.6.1 驗證服務命令是否正常

# service mycat start

1.6.2 設置開機自啓

# chkconfig --add mycat

1.6.3 驗證是否自啓(該步驟最好等到mycat和mysql連通後再進行)

# 先重啓
# reboot
# 重連後查看進程狀態
# service mycat status
# Mycat-server is running 表示自啓配置成功。

1.7 防火牆設置

修改iptables文件

# vi /etc/sysconfig/iptables

添加以下內容(mycat默認端口是8066)

iptables -t filter -I INPUT 5 -m state --state NEW -m tcp -p tcp --dport 8066 -j ACCEPT

讓配置生效

# service iptables save
如果沒有iptables就安裝一下,一般CenterOs7是用firewall,個人習慣iptables
# 停止firewall 
# systemctl stop firewalld.service 
# 禁止firewall開機啓動 
# systemctl disable firewalld.service 
# 安裝iptables 
# yum install iptables-services 
# 開機啓動 
# systemctl enable iptables.service

2. MyCat配置

僅供參考,詳細配置解析見官網。

2.1 schema.xml

2.1.1 定義邏輯庫

<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
    <!-- 本手冊僅作讀寫分離,不含其他複雜邏輯,包括主鍵也沒有使用數據庫自增 -->
</schema>

2.1.2 定義數據節點

<dataNode name="dn1" dataHost="web" database="physicial_database_name" />
  • name與中的dataNode對應。
  • dataHost與下面的數據源名稱對應。
  • database一般設置與物理數據庫名稱一致即可。

2.1.3 定義數據源

<dataHost name="web" maxCon="1050" minCon="100" balance="2"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="120">
	<heartbeat>select 1</heartbeat>
	<!-- can have multi write hosts -->
	<writeHost host="hostM1" url="172.168.2.190:3306" user="root" password="123456">
	<!-- can have multi read hosts -->
	<readHost host="hostS2" url="172.168.2.191:3306" user="root" password="123456"/>
	</writeHost>
</dataHost>
  • name與數據節點的dataHost對應。
  • maxCon表示最大連接數。
  • minCon表示最小活躍連接數,初始化連接池的大小。
  • balance表示read請求的負載均衡方式:
    • “0” 不開啓讀寫分離,所有請求發送到可用的主節點上;
    • “1” 全部read節點與接收請求的主節點都參與select負載均衡(雙主雙從);
    • “2” 所有讀請求隨機分發到所有節點上;
    • “3” 所有讀請求隨機分發到write節點的read節點上,writer不負擔read壓力。
  • dbType指定後端連接的數據庫類型:mysql、mongodb、oracle、spark等。
  • writeType寫操作負載均衡,只能寫"0",第一個主節點掛了自動切換到第二個,重啓後以最新的爲準。
  • dbDriver數據庫驅動,有JDBCnative兩種。
  • switchType主從切換方式:
    • “-1” 不自動切換;
    • “1” 默認值,自動切換;
    • “2” 基於mysql主從狀態決定是否切換,心跳語句爲 show slave status;
    • “3” 基於於 MySQL galary cluster 的切換機制(適合集羣),心跳語句爲 show status like ‘wsrep%’。
  • <heartbeat>利用sql語句進行心跳檢查;
  • <writeHost>主節點信息,從節點是在主節點下的;
    • 一個writeHost下可以定義多個readHost,但是如果writeHost宕機了,那麼writeHost和readHost都將不能使用,通過自動檢測,可以切換到備機上。
  • <readHost>從節點,只讀。
    • 這裏補充一個weight屬性,僅配置在read節點,作爲讀節點的權重。
2.2 server.xml

2.2.1 系統參數配置

該配置文件裏已經有很多設好的屬性了,以下主要點出幾個比較重要的屬性,其他的不在此贅述。

  • fakeMySQLVersion設置模擬的MySQL版本號,一般設置爲實驗用的MySQL版本;
  • useZKSwitch關閉zookeeper的協調切換(不作集羣沒必要用),值false。

2.2.2 定義訪問賬戶

<!-- 該標籤在</mycat:server>前,默認是在配置文件的最底部,多餘的user標籤刪掉 -->	
	<user name="user">
		<property name="password">password</property>
		<property name="schemas">TESTDB</property>
	</user>
  • 應用程序連接Mycat的配置:
    • 用戶名爲<user>標籤中的name屬性值;
    • 密碼爲name="password"屬性標籤的內的值;
    • 數據庫名爲name="schemas"屬性標籤內的值;該標籤對應的是schema.xml中<schema>標籤所定義的name屬性值。

3. 問題記錄與解決

3.1. 問題一
  • 出現場景:CenterOS6.5

  • 異常描述:啓動mycat後,無法連通,到日誌中查看,看到如下內容

java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException:主機名
  • 問題解決:

    該問題是操作系統的問題導致,在CenterOS 6.x下,需要將/etc/sysconfig/network裏面的內容刪掉(暫不知有什麼影響)

# vi /etc/sysconfig/network

​ 正常裏面是有以下兩行內容:

​ NETWORKING=YES

​ HOSTNAME=主機名

  • 如果刪除上述兩行內容並重啓mycat還是不能解決,就重啓服務器再試一下。(還是不行就沒轍了,百度吧)
3.2. 問題二
  • 出現場景:CenterOS6.5
  • 異常描述:按照本文描述配置,並遍歷博客,開機自啓始終失敗。
  • 有成功的夥伴可以給我留言,謝謝。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章